From e60c114acf282115f94cf388b23acbeb3d158fe2 Mon Sep 17 00:00:00 2001 From: antopilo Date: Wed, 8 Jan 2025 00:19:09 -0500 Subject: [PATCH] Started input system --- .../Vulkan/Pipeline/RenderPipeline.cpp | 18 ++++++++++++++++-- .../Rendering/Vulkan/Pipeline/RenderPipeline.h | 4 +++- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/Nuake/src/Rendering/Vulkan/Pipeline/RenderPipeline.cpp b/Nuake/src/Rendering/Vulkan/Pipeline/RenderPipeline.cpp index f3dd0175..a7704e93 100644 --- a/Nuake/src/Rendering/Vulkan/Pipeline/RenderPipeline.cpp +++ b/Nuake/src/Rendering/Vulkan/Pipeline/RenderPipeline.cpp @@ -188,6 +188,11 @@ void RenderPass::AddInput(const std::string& name) InputNames.push_back(name); } +std::vector Nuake::RenderPass::GetInputs() +{ + return InputNames; +} + void RenderPass::SetInput(const std::string& name, TextureAttachment& attachment) { Inputs[name] = attachment; @@ -276,14 +281,23 @@ RenderPass& RenderPipeline::GetRenderPass(const std::string& name) return RenderPasses[0]; } -void RenderPipeline::Build() +bool RenderPipeline::Build() { std::map attachments; for (auto& pass : RenderPasses) { pass.Build(); - + for (auto& input : pass.GetInputs()) + { + if (attachments.find(input) == attachments.end()) + { + Logger::Log("Failed to build RenderPipeline. input " + input + " not found in previous passes.", "vulkan", CRITICAL); + return false; + } + + pass.SetInput(input, attachments[input]); + } for (auto& attachment : pass.GetAttachments()) { diff --git a/Nuake/src/Rendering/Vulkan/Pipeline/RenderPipeline.h b/Nuake/src/Rendering/Vulkan/Pipeline/RenderPipeline.h index fa4d6193..66a41b2e 100644 --- a/Nuake/src/Rendering/Vulkan/Pipeline/RenderPipeline.h +++ b/Nuake/src/Rendering/Vulkan/Pipeline/RenderPipeline.h @@ -82,6 +82,8 @@ namespace Nuake std::vector GetAttachments(); void AddInput(const std::string& name); + std::vector GetInputs(); + void SetInput(const std::string& name, TextureAttachment& attachment); void SetShaders(Ref vertShader, Ref fragShader); @@ -119,7 +121,7 @@ namespace Nuake RenderPass& AddPass(const std::string& name); RenderPass& GetRenderPass(const std::string& name); - void Build(); + bool Build(); void Execute(PassRenderContext& ctx); };