Configure dof downscale in graphics presets
This commit is contained in:
parent
f0bb00b251
commit
f16e8b2aab
6 changed files with 30 additions and 28 deletions
|
@ -1,8 +1,11 @@
|
|||
[Low]
|
||||
shadowResolution=128
|
||||
dofDownscale=8
|
||||
|
||||
[Medium]
|
||||
shadowResolution=256
|
||||
dofDownscale=4
|
||||
|
||||
[High]
|
||||
shadowResolution=512
|
||||
dofDownscale=2
|
||||
|
|
|
@ -6,8 +6,6 @@ class Renderer;
|
|||
struct RenderTarget;
|
||||
class Camera;
|
||||
|
||||
const int dofFramebufferDownscaleFactor = 4;
|
||||
|
||||
class DoFPass {
|
||||
public:
|
||||
DoFPass(Renderer& renderer);
|
||||
|
|
|
@ -69,7 +69,7 @@ struct RenderTarget {
|
|||
};
|
||||
|
||||
struct GraphicsConfig {
|
||||
int shadowResolution;
|
||||
int shadowResolution, dofDownscale;
|
||||
};
|
||||
|
||||
class World;
|
||||
|
|
|
@ -30,15 +30,15 @@ DoFPass::~DoFPass() {
|
|||
|
||||
void DoFPass::render(VkCommandBuffer commandBuffer, Camera& camera, RenderTarget* target) {
|
||||
VkViewport viewport = {};
|
||||
viewport.width = target->extent.width / dofFramebufferDownscaleFactor;
|
||||
viewport.height = target->extent.height / dofFramebufferDownscaleFactor;
|
||||
viewport.width = target->extent.width / renderer_.getConfig().dofDownscale;
|
||||
viewport.height = target->extent.height / renderer_.getConfig().dofDownscale;
|
||||
viewport.maxDepth = 1.0f;
|
||||
|
||||
vkCmdSetViewport(commandBuffer, 0, 1, &viewport);
|
||||
|
||||
VkRect2D scissor = {};
|
||||
scissor.extent.width = target->extent.width / dofFramebufferDownscaleFactor;
|
||||
scissor.extent.height = target->extent.height / dofFramebufferDownscaleFactor;
|
||||
scissor.extent.width = target->extent.width / renderer_.getConfig().dofDownscale;
|
||||
scissor.extent.height = target->extent.height / renderer_.getConfig().dofDownscale;
|
||||
|
||||
vkCmdSetScissor(commandBuffer, 0, 1, &scissor);
|
||||
|
||||
|
@ -48,8 +48,8 @@ void DoFPass::render(VkCommandBuffer commandBuffer, Camera& camera, RenderTarget
|
|||
renderPassBeginInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
|
||||
renderPassBeginInfo.framebuffer = target->farFieldFramebuffers[target->currentResource];
|
||||
renderPassBeginInfo.renderPass = renderPass_;
|
||||
renderPassBeginInfo.renderArea.extent.width = target->extent.width / dofFramebufferDownscaleFactor;
|
||||
renderPassBeginInfo.renderArea.extent.height = target->extent.height / dofFramebufferDownscaleFactor;
|
||||
renderPassBeginInfo.renderArea.extent.width = target->extent.width / renderer_.getConfig().dofDownscale;
|
||||
renderPassBeginInfo.renderArea.extent.height = target->extent.height / renderer_.getConfig().dofDownscale;
|
||||
renderPassBeginInfo.clearValueCount = 1;
|
||||
renderPassBeginInfo.pClearValues = &clearColor;
|
||||
|
||||
|
@ -59,8 +59,8 @@ void DoFPass::render(VkCommandBuffer commandBuffer, Camera& camera, RenderTarget
|
|||
glm::vec4 dpack;
|
||||
dpack[0] = camera.aperture;
|
||||
dpack[1] = (camera.far - camera.focusDistance) / camera.far;
|
||||
dpack[2] = target->extent.width / dofFramebufferDownscaleFactor;
|
||||
dpack[3] = target->extent.height / dofFramebufferDownscaleFactor;
|
||||
dpack[2] = target->extent.width / renderer_.getConfig().dofDownscale;
|
||||
dpack[3] = target->extent.height / renderer_.getConfig().dofDownscale;
|
||||
|
||||
vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline_);
|
||||
vkCmdBindDescriptorSets(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipelineLayout_, 0, 1, &target->dofSets[target->currentResource], 0, nullptr);
|
||||
|
@ -68,7 +68,7 @@ void DoFPass::render(VkCommandBuffer commandBuffer, Camera& camera, RenderTarget
|
|||
vkCmdPushConstants(commandBuffer, pipelineLayout_, VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT, 0, sizeof(glm::vec4), &dpack);
|
||||
|
||||
if(camera.aperture > 0.0f)
|
||||
vkCmdDraw(commandBuffer, 3, (target->extent.width / dofFramebufferDownscaleFactor) * (target->extent.height / dofFramebufferDownscaleFactor), 0, 0);
|
||||
vkCmdDraw(commandBuffer, 3, (target->extent.width / renderer_.getConfig().dofDownscale) * (target->extent.height / renderer_.getConfig().dofDownscale), 0, 0);
|
||||
|
||||
vkCmdEndRenderPass(commandBuffer);
|
||||
|
||||
|
|
|
@ -60,6 +60,7 @@ void loadGraphicsConfig() {
|
|||
return;
|
||||
|
||||
graphicsConfig.shadowResolution = toInt(config.get(currentGraphicsPreset.c_str(), "shadowResolution"));
|
||||
graphicsConfig.dofDownscale = toInt(config.get(currentGraphicsPreset.c_str(), "dofDownscale"));
|
||||
}
|
||||
|
||||
void readConfig() {
|
||||
|
|
|
@ -382,8 +382,8 @@ RenderTarget* Renderer::createSurfaceRenderTarget(VkSurfaceKHR surface, RenderTa
|
|||
imageCreateInfo.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
|
||||
imageCreateInfo.imageType = VK_IMAGE_TYPE_2D;
|
||||
imageCreateInfo.format = VK_FORMAT_R32G32B32A32_SFLOAT;
|
||||
imageCreateInfo.extent.width = target->extent.width / dofFramebufferDownscaleFactor;
|
||||
imageCreateInfo.extent.height = target->extent.height / dofFramebufferDownscaleFactor;
|
||||
imageCreateInfo.extent.width = target->extent.width / config_.dofDownscale;
|
||||
imageCreateInfo.extent.height = target->extent.height / config_.dofDownscale;
|
||||
imageCreateInfo.extent.depth = 1;
|
||||
imageCreateInfo.mipLevels = 1;
|
||||
imageCreateInfo.arrayLayers = 1;
|
||||
|
@ -426,8 +426,8 @@ RenderTarget* Renderer::createSurfaceRenderTarget(VkSurfaceKHR surface, RenderTa
|
|||
framebufferInfo.renderPass = dofPass_->getRenderPass();
|
||||
framebufferInfo.attachmentCount = 1;
|
||||
framebufferInfo.pAttachments = &target->nearFieldImageViews[i];
|
||||
framebufferInfo.width = target->extent.width / dofFramebufferDownscaleFactor;
|
||||
framebufferInfo.height = target->extent.height / dofFramebufferDownscaleFactor;
|
||||
framebufferInfo.width = target->extent.width / config_.dofDownscale;
|
||||
framebufferInfo.height = target->extent.height / config_.dofDownscale;
|
||||
framebufferInfo.layers = 1;
|
||||
|
||||
vkCreateFramebuffer(device_, &framebufferInfo, nullptr, &target->nearFieldFramebuffers[i]);
|
||||
|
@ -439,8 +439,8 @@ RenderTarget* Renderer::createSurfaceRenderTarget(VkSurfaceKHR surface, RenderTa
|
|||
imageCreateInfo.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
|
||||
imageCreateInfo.imageType = VK_IMAGE_TYPE_2D;
|
||||
imageCreateInfo.format = VK_FORMAT_R32G32B32A32_SFLOAT;
|
||||
imageCreateInfo.extent.width = target->extent.width / dofFramebufferDownscaleFactor;
|
||||
imageCreateInfo.extent.height = target->extent.height / dofFramebufferDownscaleFactor;
|
||||
imageCreateInfo.extent.width = target->extent.width / config_.dofDownscale;
|
||||
imageCreateInfo.extent.height = target->extent.height / config_.dofDownscale;
|
||||
imageCreateInfo.extent.depth = 1;
|
||||
imageCreateInfo.mipLevels = 1;
|
||||
imageCreateInfo.arrayLayers = 1;
|
||||
|
@ -483,8 +483,8 @@ RenderTarget* Renderer::createSurfaceRenderTarget(VkSurfaceKHR surface, RenderTa
|
|||
framebufferInfo.renderPass = dofPass_->getRenderPass();
|
||||
framebufferInfo.attachmentCount = 1;
|
||||
framebufferInfo.pAttachments = &target->farFieldImageViews[i];
|
||||
framebufferInfo.width = target->extent.width / dofFramebufferDownscaleFactor;
|
||||
framebufferInfo.height = target->extent.height / dofFramebufferDownscaleFactor;
|
||||
framebufferInfo.width = target->extent.width / config_.dofDownscale;
|
||||
framebufferInfo.height = target->extent.height / config_.dofDownscale;
|
||||
framebufferInfo.layers = 1;
|
||||
|
||||
vkCreateFramebuffer(device_, &framebufferInfo, nullptr, &target->farFieldFramebuffers[i]);
|
||||
|
|
Reference in a new issue