diff --git a/Nuake/Source/Nuake/Rendering/Vulkan/Pipeline/RenderPipeline.cpp b/Nuake/Source/Nuake/Rendering/Vulkan/Pipeline/RenderPipeline.cpp index d4bc4ee2..a704d9c0 100644 --- a/Nuake/Source/Nuake/Rendering/Vulkan/Pipeline/RenderPipeline.cpp +++ b/Nuake/Source/Nuake/Rendering/Vulkan/Pipeline/RenderPipeline.cpp @@ -38,21 +38,25 @@ void RenderPass::Execute(PassRenderContext& ctx, PassAttachments& inputs) void RenderPass::ClearAttachments(PassRenderContext& ctx, PassAttachments& inputs) { // Clear all color attachments - for (int i = 0; i < std::size(Attachments); i++) + int attachmentIndex = 0; + for (int i = 0; i < std::size(inputs); i++) { - auto& texture = inputs[i]; - auto& spec = Attachments[i]; - - if (spec.ClearOnLoad) + Ref input = inputs[i]; + if (input->GetUsage() == ImageUsage::Depth) { - if (texture->GetUsage() != ImageUsage::Depth) + if (DepthAttachment.ClearOnLoad) { - ctx.commandBuffer.ClearColorImage(texture, this->ClearColor); + ctx.commandBuffer.ClearDepthImage(input); } - else + } + else if(input->GetUsage() != ImageUsage::Depth) + { + if (Attachments[attachmentIndex].ClearOnLoad) { - ctx.commandBuffer.ClearDepthImage(texture); + ctx.commandBuffer.ClearColorImage(input, this->ClearColor); } + + attachmentIndex++; } } } diff --git a/Nuake/Source/Nuake/Rendering/Vulkan/SceneRenderPipeline.cpp b/Nuake/Source/Nuake/Rendering/Vulkan/SceneRenderPipeline.cpp index afb3fcbe..0b98ab5a 100644 --- a/Nuake/Source/Nuake/Rendering/Vulkan/SceneRenderPipeline.cpp +++ b/Nuake/Source/Nuake/Rendering/Vulkan/SceneRenderPipeline.cpp @@ -22,7 +22,7 @@ ShadowRenderPipeline::ShadowRenderPipeline() ShadowPipeline = RenderPipeline(); auto& shadowPass = ShadowPipeline.AddPass("Shadow"); - shadowPass.AddAttachment("Depth", ImageFormat::D32F, ImageUsage::Depth); + shadowPass.AddAttachment("Depth", ImageFormat::D32F, ImageUsage::Depth, true); shadowPass.SetShaders(shaderMgr.GetShader("shadow_vert"), shaderMgr.GetShader("shadow_frag")); shadowPass.SetPushConstant(gbufferConstant); shadowPass.SetPreRender([&](PassRenderContext& ctx) { diff --git a/Nuake/Source/Nuake/Rendering/Vulkan/VulkanImage/VulkanImage.cpp b/Nuake/Source/Nuake/Rendering/Vulkan/VulkanImage/VulkanImage.cpp index 4d5a75d4..17cf3c67 100644 --- a/Nuake/Source/Nuake/Rendering/Vulkan/VulkanImage/VulkanImage.cpp +++ b/Nuake/Source/Nuake/Rendering/Vulkan/VulkanImage/VulkanImage.cpp @@ -119,6 +119,7 @@ VulkanImage::VulkanImage(ImageFormat inFormat, Vector2 inSize, ImageUsage usage) drawImageUsages |= VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT; drawImageUsages |= VK_IMAGE_USAGE_SAMPLED_BIT; drawImageUsages |= VK_IMAGE_USAGE_TRANSFER_SRC_BIT; + drawImageUsages |= VK_IMAGE_USAGE_TRANSFER_DST_BIT; } VkImageCreateInfo imgCreateInfo = VulkanInit::ImageCreateInfo(static_cast(inFormat), drawImageUsages, vkExtent);