Add configurable dof framebuffer downscale factor
This commit is contained in:
parent
1ea4b4faab
commit
c3c678c5b0
3 changed files with 20 additions and 18 deletions
|
@ -6,6 +6,8 @@ class Renderer;
|
|||
struct RenderTarget;
|
||||
class Camera;
|
||||
|
||||
const int dofFramebufferDownscaleFactor = 4;
|
||||
|
||||
class DoFPass {
|
||||
public:
|
||||
DoFPass(Renderer& renderer);
|
||||
|
|
|
@ -30,15 +30,15 @@ DoFPass::~DoFPass() {
|
|||
|
||||
void DoFPass::render(VkCommandBuffer commandBuffer, Camera& camera, RenderTarget* target) {
|
||||
VkViewport viewport = {};
|
||||
viewport.width = target->extent.width / 2;
|
||||
viewport.height = target->extent.height / 2;
|
||||
viewport.width = target->extent.width / dofFramebufferDownscaleFactor;
|
||||
viewport.height = target->extent.height / dofFramebufferDownscaleFactor;
|
||||
viewport.maxDepth = 1.0f;
|
||||
|
||||
vkCmdSetViewport(commandBuffer, 0, 1, &viewport);
|
||||
|
||||
VkRect2D scissor = {};
|
||||
scissor.extent.width = target->extent.width / 2;
|
||||
scissor.extent.height = target->extent.height / 2;
|
||||
scissor.extent.width = target->extent.width / dofFramebufferDownscaleFactor;
|
||||
scissor.extent.height = target->extent.height / dofFramebufferDownscaleFactor;
|
||||
|
||||
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->currentImage];
|
||||
renderPassBeginInfo.renderPass = renderPass_;
|
||||
renderPassBeginInfo.renderArea.extent.width = target->extent.width / 2;
|
||||
renderPassBeginInfo.renderArea.extent.height = target->extent.height / 2;
|
||||
renderPassBeginInfo.renderArea.extent.width = target->extent.width / dofFramebufferDownscaleFactor;
|
||||
renderPassBeginInfo.renderArea.extent.height = target->extent.height / dofFramebufferDownscaleFactor;
|
||||
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 / 2;
|
||||
dpack[3] = target->extent.height / 2;
|
||||
dpack[2] = target->extent.width / dofFramebufferDownscaleFactor;
|
||||
dpack[3] = target->extent.height / dofFramebufferDownscaleFactor;
|
||||
|
||||
vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline_);
|
||||
vkCmdBindDescriptorSets(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipelineLayout_, 0, 1, &target->dofSets[target->currentImage], 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 / 2) * (target->extent.height / 2), 0, 0);
|
||||
vkCmdDraw(commandBuffer, 3, (target->extent.width / dofFramebufferDownscaleFactor) * (target->extent.height / dofFramebufferDownscaleFactor), 0, 0);
|
||||
|
||||
vkCmdEndRenderPass(commandBuffer);
|
||||
|
||||
|
|
|
@ -352,8 +352,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 / 2;
|
||||
imageCreateInfo.extent.height = target->extent.height / 2;
|
||||
imageCreateInfo.extent.width = target->extent.width / dofFramebufferDownscaleFactor;
|
||||
imageCreateInfo.extent.height = target->extent.height / dofFramebufferDownscaleFactor;
|
||||
imageCreateInfo.extent.depth = 1;
|
||||
imageCreateInfo.mipLevels = 1;
|
||||
imageCreateInfo.arrayLayers = 1;
|
||||
|
@ -396,8 +396,8 @@ RenderTarget* Renderer::createSurfaceRenderTarget(VkSurfaceKHR surface, RenderTa
|
|||
framebufferInfo.renderPass = dofPass_->getRenderPass();
|
||||
framebufferInfo.attachmentCount = 1;
|
||||
framebufferInfo.pAttachments = &target->nearFieldImageViews[i];
|
||||
framebufferInfo.width = target->extent.width / 2;
|
||||
framebufferInfo.height = target->extent.height / 2;
|
||||
framebufferInfo.width = target->extent.width / dofFramebufferDownscaleFactor;
|
||||
framebufferInfo.height = target->extent.height / dofFramebufferDownscaleFactor;
|
||||
framebufferInfo.layers = 1;
|
||||
|
||||
vkCreateFramebuffer(device_, &framebufferInfo, nullptr, &target->nearFieldFramebuffers[i]);
|
||||
|
@ -409,8 +409,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 / 2;
|
||||
imageCreateInfo.extent.height = target->extent.height / 2;
|
||||
imageCreateInfo.extent.width = target->extent.width / dofFramebufferDownscaleFactor;
|
||||
imageCreateInfo.extent.height = target->extent.height / dofFramebufferDownscaleFactor;
|
||||
imageCreateInfo.extent.depth = 1;
|
||||
imageCreateInfo.mipLevels = 1;
|
||||
imageCreateInfo.arrayLayers = 1;
|
||||
|
@ -453,8 +453,8 @@ RenderTarget* Renderer::createSurfaceRenderTarget(VkSurfaceKHR surface, RenderTa
|
|||
framebufferInfo.renderPass = dofPass_->getRenderPass();
|
||||
framebufferInfo.attachmentCount = 1;
|
||||
framebufferInfo.pAttachments = &target->farFieldImageViews[i];
|
||||
framebufferInfo.width = target->extent.width / 2;
|
||||
framebufferInfo.height = target->extent.height / 2;
|
||||
framebufferInfo.width = target->extent.width / dofFramebufferDownscaleFactor;
|
||||
framebufferInfo.height = target->extent.height / dofFramebufferDownscaleFactor;
|
||||
framebufferInfo.layers = 1;
|
||||
|
||||
vkCreateFramebuffer(device_, &framebufferInfo, nullptr, &target->farFieldFramebuffers[i]);
|
||||
|
|
Reference in a new issue