From f16e8b2aaba96c85e46d1559df7aae5266f2646f Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Thu, 8 Nov 2018 13:01:54 -0500 Subject: [PATCH] Configure dof downscale in graphics presets --- data/graphics_presets.cfg | 3 +++ include/dofpass.h | 18 ++++++++---------- include/renderer.h | 2 +- src/dofpass.cpp | 18 +++++++++--------- src/main.cpp | 1 + src/renderer.cpp | 16 ++++++++-------- 6 files changed, 30 insertions(+), 28 deletions(-) diff --git a/data/graphics_presets.cfg b/data/graphics_presets.cfg index 9d70aac..8a9d870 100644 --- a/data/graphics_presets.cfg +++ b/data/graphics_presets.cfg @@ -1,8 +1,11 @@ [Low] shadowResolution=128 +dofDownscale=8 [Medium] shadowResolution=256 +dofDownscale=4 [High] shadowResolution=512 +dofDownscale=2 diff --git a/include/dofpass.h b/include/dofpass.h index 7d1d326..84051e4 100644 --- a/include/dofpass.h +++ b/include/dofpass.h @@ -6,39 +6,37 @@ class Renderer; struct RenderTarget; class Camera; -const int dofFramebufferDownscaleFactor = 4; - class DoFPass { public: DoFPass(Renderer& renderer); ~DoFPass(); - + void render(VkCommandBuffer commandBuffer, Camera& camera, RenderTarget* target); void createDescriptorSet(RenderTarget* target); - + VkRenderPass getRenderPass() const { return renderPass_; } - + private: void createRenderPass(); void createDescriptorSetLayout(); void createPipeline(); void createBokehImage(); void createDescriptorSet(); - + VkRenderPass renderPass_ = nullptr; - + VkDescriptorSetLayout setLayout_ = nullptr; - + VkPipelineLayout pipelineLayout_ = nullptr; VkPipeline pipeline_ = nullptr; - + VkImage bokehImage_ = nullptr; VkDeviceMemory bokehMemory_ = nullptr; VkImageView bokehImageView_ = nullptr; VkSampler bokehSampler_ = nullptr; - + Renderer& renderer_; }; diff --git a/include/renderer.h b/include/renderer.h index c089b3d..8af8919 100644 --- a/include/renderer.h +++ b/include/renderer.h @@ -69,7 +69,7 @@ struct RenderTarget { }; struct GraphicsConfig { - int shadowResolution; + int shadowResolution, dofDownscale; }; class World; diff --git a/src/dofpass.cpp b/src/dofpass.cpp index 089fd7a..6016a1f 100644 --- a/src/dofpass.cpp +++ b/src/dofpass.cpp @@ -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); diff --git a/src/main.cpp b/src/main.cpp index 4938ff5..fa035b8 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -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() { diff --git a/src/renderer.cpp b/src/renderer.cpp index e2311b9..316e174 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -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]);