diff --git a/examples/DeferredShading/main.cpp b/examples/DeferredShading/main.cpp index 904b73fef..86a74fcc1 100644 --- a/examples/DeferredShading/main.cpp +++ b/examples/DeferredShading/main.cpp @@ -906,6 +906,8 @@ int main() builder.SetScissor(renderArea); builder.SetViewport(renderArea); + flareSprite.UpdateScissorBox(renderArea); + builder.BindShaderBinding(0, *skyboxShaderBinding); builder.BindIndexBuffer(*cubeMeshGfx->GetIndexBuffer(0)); diff --git a/src/Nazara/VulkanRenderer/VulkanRenderPipeline.cpp b/src/Nazara/VulkanRenderer/VulkanRenderPipeline.cpp index 4cfafb814..bbf4edb36 100644 --- a/src/Nazara/VulkanRenderer/VulkanRenderPipeline.cpp +++ b/src/Nazara/VulkanRenderer/VulkanRenderPipeline.cpp @@ -122,9 +122,15 @@ namespace Nz return createInfo; } - std::vector VulkanRenderPipeline::BuildDynamicStateList(const RenderPipelineInfo& /*pipelineInfo*/) + std::vector VulkanRenderPipeline::BuildDynamicStateList(const RenderPipelineInfo& pipelineInfo) { - return { VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_SCISSOR }; + std::vector dynamicStates; + dynamicStates.push_back(VK_DYNAMIC_STATE_VIEWPORT); + + if (pipelineInfo.scissorTest) + dynamicStates.push_back(VK_DYNAMIC_STATE_SCISSOR); + + return dynamicStates; } VkPipelineInputAssemblyStateCreateInfo VulkanRenderPipeline::BuildInputAssemblyInfo(const RenderPipelineInfo& pipelineInfo) @@ -159,11 +165,14 @@ namespace Nz return createInfo; } - VkPipelineViewportStateCreateInfo VulkanRenderPipeline::BuildViewportInfo(const RenderPipelineInfo& /*pipelineInfo*/) + VkPipelineViewportStateCreateInfo VulkanRenderPipeline::BuildViewportInfo(const RenderPipelineInfo& pipelineInfo) { VkPipelineViewportStateCreateInfo createInfo = {}; createInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO; - createInfo.scissorCount = createInfo.viewportCount = 1; //< TODO + createInfo.viewportCount = 1; //< TODO: Handle multiple viewport regions + + if (pipelineInfo.scissorTest) + createInfo.scissorCount = 1; //< TODO: Handle multiple scissor regions return createInfo; } diff --git a/src/Nazara/Widgets/Widgets.cpp b/src/Nazara/Widgets/Widgets.cpp index 2a14e8ba6..61918b61d 100644 --- a/src/Nazara/Widgets/Widgets.cpp +++ b/src/Nazara/Widgets/Widgets.cpp @@ -28,6 +28,7 @@ namespace Nz m_opaqueMaterialPass = std::make_shared(BasicMaterial::GetSettings()); m_opaqueMaterialPass->EnableDepthBuffer(true); m_opaqueMaterialPass->EnableDepthWrite(false); + m_opaqueMaterialPass->EnableScissorTest(true); m_opaqueMaterial = std::make_shared(); m_opaqueMaterial->AddPass("ForwardPass", m_opaqueMaterialPass); @@ -35,6 +36,7 @@ namespace Nz m_transparentMaterialPass = std::make_shared(BasicMaterial::GetSettings()); m_transparentMaterialPass->EnableDepthBuffer(true); m_transparentMaterialPass->EnableDepthWrite(false); + m_transparentMaterialPass->EnableScissorTest(true); m_transparentMaterialPass->EnableBlending(true); m_transparentMaterialPass->SetBlendEquation(BlendEquation::Add, BlendEquation::Add); m_transparentMaterialPass->SetBlendFunc(BlendFunc::SrcAlpha, BlendFunc::InvSrcAlpha, BlendFunc::One, BlendFunc::One);