diff --git a/Nuake/src/Rendering/Vulkan/Pipeline/RenderPipeline.cpp b/Nuake/src/Rendering/Vulkan/Pipeline/RenderPipeline.cpp index 62db62d7..f3dd0175 100644 --- a/Nuake/src/Rendering/Vulkan/Pipeline/RenderPipeline.cpp +++ b/Nuake/src/Rendering/Vulkan/Pipeline/RenderPipeline.cpp @@ -172,9 +172,25 @@ TextureAttachment& RenderPass::GetAttachment(const std::string& name) return Attachments[0]; } -void RenderPass::AddInput(const TextureAttachment& name) +std::vector RenderPass::GetAttachments() { - Inputs.push_back(name); + std::vector attachentRefs; + attachentRefs.reserve(Attachments.size()); + for (auto& attachment : Attachments) + { + attachentRefs.push_back(attachment); + } + return attachentRefs; +} + +void RenderPass::AddInput(const std::string& name) +{ + InputNames.push_back(name); +} + +void RenderPass::SetInput(const std::string& name, TextureAttachment& attachment) +{ + Inputs[name] = attachment; } void RenderPass::SetShaders(Ref vertShader, Ref fragShader) @@ -262,9 +278,21 @@ RenderPass& RenderPipeline::GetRenderPass(const std::string& name) void RenderPipeline::Build() { + std::map attachments; for (auto& pass : RenderPasses) { pass.Build(); + + + + for (auto& attachment : pass.GetAttachments()) + { + attachments[attachment.Name] = attachment; + } + } + + for (auto& pass : RenderPasses) + { } Built = true; diff --git a/Nuake/src/Rendering/Vulkan/Pipeline/RenderPipeline.h b/Nuake/src/Rendering/Vulkan/Pipeline/RenderPipeline.h index 5b0f512a..fa4d6193 100644 --- a/Nuake/src/Rendering/Vulkan/Pipeline/RenderPipeline.h +++ b/Nuake/src/Rendering/Vulkan/Pipeline/RenderPipeline.h @@ -51,7 +51,8 @@ namespace Nuake std::vector Attachments; TextureAttachment DepthAttachment; - std::vector Inputs; + std::vector InputNames; + std::map Inputs; std::any PushConstant; size_t PushConstantSize; @@ -78,8 +79,10 @@ namespace Nuake std::string GetName() const { return Name; } TextureAttachment& AddAttachment(const std::string& name, ImageFormat format, ImageUsage usage = ImageUsage::Default); TextureAttachment& GetAttachment(const std::string& name); + std::vector GetAttachments(); - void AddInput(const TextureAttachment& attachment); + void AddInput(const std::string& name); + void SetInput(const std::string& name, TextureAttachment& attachment); void SetShaders(Ref vertShader, Ref fragShader); template @@ -107,6 +110,7 @@ namespace Nuake std::vector RenderPasses; + public: RenderPipeline(); ~RenderPipeline() = default; diff --git a/Nuake/src/Rendering/Vulkan/VulkanSceneRenderer.cpp b/Nuake/src/Rendering/Vulkan/VulkanSceneRenderer.cpp index c5eac95b..19ebd964 100644 --- a/Nuake/src/Rendering/Vulkan/VulkanSceneRenderer.cpp +++ b/Nuake/src/Rendering/Vulkan/VulkanSceneRenderer.cpp @@ -73,10 +73,6 @@ void VkSceneRenderer::BeginScene(RenderContext inContext) GBufferPipeline.Execute(passCtx); } ModelPushConstant modelPushConstant{}; -void VkSceneRenderer::DrawScene() -{ - -} void VkSceneRenderer::EndScene() { @@ -324,6 +320,11 @@ void VkSceneRenderer::CreatePipelines() }); + auto& shadingPass = GBufferPipeline.AddPass("Shading"); + + shadingPass.AddAttachment("Output", ImageFormat::RGBA16F); + + GBufferPipeline.Build(); } @@ -335,7 +336,6 @@ void VkSceneRenderer::SetGBufferSize(const Vector2& size) void VkSceneRenderer::UpdateCameraData(const CameraData& data) { CameraData adjustedData = data; - adjustedData.View = Matrix4(1.0f); //data.View; adjustedData.View = data.View; adjustedData.Projection = data.Projection; diff --git a/Nuake/src/Rendering/Vulkan/VulkanSceneRenderer.h b/Nuake/src/Rendering/Vulkan/VulkanSceneRenderer.h index 2ab918d4..bd9f17f0 100644 --- a/Nuake/src/Rendering/Vulkan/VulkanSceneRenderer.h +++ b/Nuake/src/Rendering/Vulkan/VulkanSceneRenderer.h @@ -101,7 +101,6 @@ namespace Nuake void UpdateCameraData(const CameraData& data); void BeginScene(RenderContext inContext); - void DrawScene(); void EndScene(); private: