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