diff --git a/Nuake/src/Rendering/Vulkan/Pipeline/RenderPipeline.cpp b/Nuake/src/Rendering/Vulkan/Pipeline/RenderPipeline.cpp index e7665ece..b87a1d62 100644 --- a/Nuake/src/Rendering/Vulkan/Pipeline/RenderPipeline.cpp +++ b/Nuake/src/Rendering/Vulkan/Pipeline/RenderPipeline.cpp @@ -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++; } diff --git a/Nuake/src/Rendering/Vulkan/Pipeline/RenderPipeline.h b/Nuake/src/Rendering/Vulkan/Pipeline/RenderPipeline.h index c8848ae1..6b7ba342 100644 --- a/Nuake/src/Rendering/Vulkan/Pipeline/RenderPipeline.h +++ b/Nuake/src/Rendering/Vulkan/Pipeline/RenderPipeline.h @@ -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); diff --git a/Nuake/src/Rendering/Vulkan/SceneRenderPipeline.cpp b/Nuake/src/Rendering/Vulkan/SceneRenderPipeline.cpp index d177fdd1..9f910a48 100644 --- a/Nuake/src/Rendering/Vulkan/SceneRenderPipeline.cpp +++ b/Nuake/src/Rendering/Vulkan/SceneRenderPipeline.cpp @@ -14,7 +14,7 @@ using namespace Nuake; RenderPipeline SceneRenderPipeline::GBufferPipeline; - +RenderPipeline SceneRenderPipeline::ShadowPipeline; SceneRenderPipeline::SceneRenderPipeline() { // Initialize render targets diff --git a/Nuake/src/Rendering/Vulkan/VulkanSceneRenderer.cpp b/Nuake/src/Rendering/Vulkan/VulkanSceneRenderer.cpp index 0681763d..ec189e01 100644 --- a/Nuake/src/Rendering/Vulkan/VulkanSceneRenderer.cpp +++ b/Nuake/src/Rendering/Vulkan/VulkanSceneRenderer.cpp @@ -25,18 +25,22 @@ using namespace Nuake; Ref VkSceneRenderer::QuadMesh; void VkSceneRenderer::Init() + { LoadShaders(); + SetGBufferSize({ 1280, 720 }); + sceneRenderPipeline = CreateRef(); + const std::vector 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 quadIndices @@ -47,6 +51,19 @@ void VkSceneRenderer::Init() QuadMesh = CreateRef(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")); -} diff --git a/Nuake/src/Rendering/Vulkan/VulkanSceneRenderer.h b/Nuake/src/Rendering/Vulkan/VulkanSceneRenderer.h index f90280c9..903260b7 100644 --- a/Nuake/src/Rendering/Vulkan/VulkanSceneRenderer.h +++ b/Nuake/src/Rendering/Vulkan/VulkanSceneRenderer.h @@ -16,6 +16,7 @@ namespace Nuake { class SceneRenderPipeline; + class VkMesh; class VkSceneRenderer