Fix render pass not clearing

This commit is contained in:
antopilo
2025-01-13 01:45:11 -05:00
parent 21150ba091
commit d5e987a89d
5 changed files with 30 additions and 32 deletions

View File

@@ -337,13 +337,7 @@ void RenderPipeline::Execute(PassRenderContext& ctx, PipelineAttachments& inputs
int passIndex = 0;
for (auto& pass : RenderPasses)
{
for (auto& input : pass.GetInputAttachments())
{
//input.Image->TransitionLayout(ctx.commandBuffer, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
}
auto& passInputs = inputs[passIndex];
pass.Render(ctx, inputs[passIndex]);
pass.Execute(ctx, inputs[passIndex]);
passIndex++;
}

View File

@@ -73,10 +73,10 @@ namespace Nuake
RenderPass(const std::string& name);
~RenderPass() = default;
void Render(PassRenderContext& ctx, PassAttachments& inputs);
void Execute(PassRenderContext& ctx, PassAttachments& inputs);
private:
void Execute(PassRenderContext& ctx, PassAttachments& inputs);
void Render(PassRenderContext& ctx, PassAttachments& inputs);
void ClearAttachments(PassRenderContext& ctx, PassAttachments& inputs);
void TransitionAttachments(PassRenderContext& ctx, PassAttachments& inputs);
void UntransitionAttachments(PassRenderContext& ctx, PassAttachments& inputs);

View File

@@ -14,7 +14,7 @@
using namespace Nuake;
RenderPipeline SceneRenderPipeline::GBufferPipeline;
RenderPipeline SceneRenderPipeline::ShadowPipeline;
SceneRenderPipeline::SceneRenderPipeline()
{
// Initialize render targets

View File

@@ -25,18 +25,22 @@ using namespace Nuake;
Ref<VkMesh> VkSceneRenderer::QuadMesh;
void VkSceneRenderer::Init()
{
LoadShaders();
SetGBufferSize({ 1280, 720 });
sceneRenderPipeline = CreateRef<SceneRenderPipeline>();
const std::vector<Vertex> quadVertices
{
{ Vector3(-1.0f, 1.0f, 1.0f), 0.0f, Vector3(0, 0, 1), 1.0f, Vector4(1, 0, 0, 0), Vector4(0, 1, 0, 0) },
{ Vector3(1.0f, 1.0f, 1.0f), 1.0f, Vector3(0, 0, 1), 1.0f, Vector4(1, 0, 0, 0), Vector4(0, 1, 0, 0) },
{ Vector3( 1.0f, 1.0f, 1.0f), 1.0f, Vector3(0, 0, 1), 1.0f, Vector4(1, 0, 0, 0), Vector4(0, 1, 0, 0) },
{ Vector3(-1.0f, -1.0f, 1.0f), 0.0f, Vector3(0, 0, 1), 0.0f, Vector4(1, 0, 0, 0), Vector4(0, 1, 0, 0) },
{ Vector3(1.0f, -1.0f, 1.0f), 1.0f, Vector3(0, 0, 1), 0.0f, Vector4(1, 0, 0, 0), Vector4(0, 1, 0, 0) },
{ Vector3( 1.0f, -1.0f, 1.0f), 1.0f, Vector3(0, 0, 1), 0.0f, Vector4(1, 0, 0, 0), Vector4(0, 1, 0, 0) },
{ Vector3(-1.0f, -1.0f, 1.0f), 0.0f, Vector3(0, 0, 1), 0.0f, Vector4(1, 0, 0, 0), Vector4(0, 1, 0, 0) },
{ Vector3(1.0f, 1.0f, 1.0f), 1.0f, Vector3(0, 0, 1), 1.0f, Vector4(1, 0, 0, 0), Vector4(0, 1, 0, 0) }
{ Vector3( 1.0f, 1.0f, 1.0f), 1.0f, Vector3(0, 0, 1), 1.0f, Vector4(1, 0, 0, 0), Vector4(0, 1, 0, 0) }
};
const std::vector<uint32_t> quadIndices
@@ -47,6 +51,19 @@ void VkSceneRenderer::Init()
QuadMesh = CreateRef<VkMesh>(quadVertices, quadIndices);
}
void VkSceneRenderer::LoadShaders()
{
// TODO: load embedded shaders in the future
VkShaderManager& shaderMgr = VkShaderManager::Get();
ShaderCompiler& shaderCompiler = ShaderCompiler::Get();
shaderMgr.AddShader("basic_frag", shaderCompiler.CompileShader("../Resources/Shaders/Vulkan/triangle.frag"));
shaderMgr.AddShader("basic_vert", shaderCompiler.CompileShader("../Resources/Shaders/Vulkan/triangle.vert"));
shaderMgr.AddShader("shading_frag", shaderCompiler.CompileShader("../Resources/Shaders/Vulkan/shading.frag"));
shaderMgr.AddShader("shading_vert", shaderCompiler.CompileShader("../Resources/Shaders/Vulkan/shading.vert"));
shaderMgr.AddShader("shadow_frag", shaderCompiler.CompileShader("../Resources/Shaders/Vulkan/shadow.frag"));
shaderMgr.AddShader("shadow_vert", shaderCompiler.CompileShader("../Resources/Shaders/Vulkan/shadow.vert"));
}
void VkSceneRenderer::SetGBufferSize(const Vector2& size)
{
Context.Size = size;
@@ -59,6 +76,9 @@ void VkSceneRenderer::BeginScene(RenderContext inContext)
Context.CurrentScene = inContext.CurrentScene;
Context.CameraID = inContext.CameraID;
// TODO: We shouldnt recopy everything if nothing has changed.
auto& scene = Context.CurrentScene;
auto& gpu = GPUResources::Get();
@@ -235,12 +255,6 @@ void VkSceneRenderer::BeginScene(RenderContext inContext)
}
// Copy CSM split depths
for (int i = 0; i < CSM_AMOUNT; i++)
{
//shadingPushConstant.CascadeSplits[i] = LightComponent::mCascadeSplitDepth[i];
}
// Update transforms, materials and lights.
// We need to push lights first to have bindless mapping for CSM
gpu.UpdateBuffers();
@@ -295,6 +309,8 @@ void VkSceneRenderer::BeginScene(RenderContext inContext)
//GBufferPipeline.Execute(passCtx);
// Set back the camera ID to the actual desired camera.
passCtx.cameraID = GPUResources::Get().GetBindlessCameraID(inContext.CameraID);
sceneRenderPipeline->Render(passCtx);
@@ -313,16 +329,3 @@ void VkSceneRenderer::EndScene()
cmd.TransitionImageLayout(drawImage, VK_IMAGE_LAYOUT_GENERAL);
cmd.TransitionImageLayout(output, VK_IMAGE_LAYOUT_GENERAL);
}
void VkSceneRenderer::LoadShaders()
{
// TODO: load embedded shaders in the future
VkShaderManager& shaderMgr = VkShaderManager::Get();
ShaderCompiler& shaderCompiler = ShaderCompiler::Get();
shaderMgr.AddShader("basic_frag", shaderCompiler.CompileShader("../Resources/Shaders/Vulkan/triangle.frag"));
shaderMgr.AddShader("basic_vert", shaderCompiler.CompileShader("../Resources/Shaders/Vulkan/triangle.vert"));
shaderMgr.AddShader("shading_frag", shaderCompiler.CompileShader("../Resources/Shaders/Vulkan/shading.frag"));
shaderMgr.AddShader("shading_vert", shaderCompiler.CompileShader("../Resources/Shaders/Vulkan/shading.vert"));
shaderMgr.AddShader("shadow_frag", shaderCompiler.CompileShader("../Resources/Shaders/Vulkan/shadow.frag"));
shaderMgr.AddShader("shadow_vert", shaderCompiler.CompileShader("../Resources/Shaders/Vulkan/shadow.vert"));
}

View File

@@ -16,6 +16,7 @@
namespace Nuake
{
class SceneRenderPipeline;
class VkMesh;
class VkSceneRenderer