From b3269d7b97def7491dc27af05efdd1950ce73bb6 Mon Sep 17 00:00:00 2001 From: Kearwood Gilbert Date: Sun, 21 Jan 2024 15:14:10 -0800 Subject: [PATCH] WIP KRRenderGraph interface --- kraken/KRRenderGraph.cpp | 25 +++++++++++++++++++++++++ kraken/KRRenderGraph.h | 19 +++++++++++++++++++ kraken/KRSurface.cpp | 12 ++++++++++-- kraken/KRSurface.h | 3 +++ 4 files changed, 57 insertions(+), 2 deletions(-) diff --git a/kraken/KRRenderGraph.cpp b/kraken/KRRenderGraph.cpp index bc72ac7..db6187f 100644 --- a/kraken/KRRenderGraph.cpp +++ b/kraken/KRRenderGraph.cpp @@ -30,4 +30,29 @@ // #include "KRRenderGraph.h" +#include "KRRenderPass.h" +#include "KRSurface.h" +KRRenderGraph::KRRenderGraph(KRContext& context) + : KRContextObject(context) +{ + +} + +KRRenderGraph::~KRRenderGraph() +{ +} + +void KRRenderGraph::addRenderPass(KRRenderPass *pass) +{ + m_renderPasses.push_back(pass); +} + + +void KRRenderGraph::render(VkCommandBuffer &commandBuffer, KRSurface& surface) +{ + for(KRRenderPass* pass : m_renderPasses) { + pass->begin(commandBuffer, surface); + pass->end(commandBuffer); + } +} diff --git a/kraken/KRRenderGraph.h b/kraken/KRRenderGraph.h index c7e0998..13a37b9 100644 --- a/kraken/KRRenderGraph.h +++ b/kraken/KRRenderGraph.h @@ -33,3 +33,22 @@ #include "KREngine-common.h" +#include "KRContextObject.h" + +class KRRenderPass; +class KRSurface; + +class KRRenderGraph : public KRContextObject +{ +public: + KRRenderGraph(KRContext& context); + ~KRRenderGraph(); + + void addRenderPass(KRRenderPass* pass); + void render(VkCommandBuffer &commandBuffer, KRSurface& surface); + +private: + + std::vector m_renderPasses; + +}; diff --git a/kraken/KRSurface.cpp b/kraken/KRSurface.cpp index b996414..e8dd694 100644 --- a/kraken/KRSurface.cpp +++ b/kraken/KRSurface.cpp @@ -45,6 +45,8 @@ KRSurface::KRSurface(KRContext& context, KrSurfaceHandle handle, void* platformH , m_renderFinishedSemaphores{VK_NULL_HANDLE} , m_inFlightFences{VK_NULL_HANDLE} , m_frameIndex(0) + , m_renderGraph(context) + , m_blackFrameRenderGraph(context) { m_forwardOpaquePass = std::make_unique(context); m_deferredGBufferPass = std::make_unique(context); @@ -212,6 +214,7 @@ KrResult KRSurface::createSwapChain() info.clearStencilValue = 0; info.finalPass = false; m_forwardOpaquePass->create(*device, selectedSurfaceFormat.format, depthImageFormat, info); + m_renderGraph.addRenderPass(m_forwardOpaquePass.get()); info.clearColor = true; info.keepColor = true; @@ -219,6 +222,7 @@ KrResult KRSurface::createSwapChain() info.keepDepth = true; info.finalPass = false; m_deferredGBufferPass->create(*device, selectedSurfaceFormat.format, depthImageFormat, info); + m_renderGraph.addRenderPass(m_deferredGBufferPass.get()); info.clearColor = false; info.keepColor = true; @@ -226,6 +230,7 @@ KrResult KRSurface::createSwapChain() info.keepDepth = true; info.finalPass = false; m_deferredOpaquePass->create(*device, selectedSurfaceFormat.format, depthImageFormat, info); + m_renderGraph.addRenderPass(m_deferredOpaquePass.get()); info.clearColor = false; info.keepColor = true; @@ -233,6 +238,7 @@ KrResult KRSurface::createSwapChain() info.keepDepth = true; info.finalPass = false; m_debugPass->create(*device, selectedSurfaceFormat.format, depthImageFormat, info); + m_renderGraph.addRenderPass(m_debugPass.get()); info.clearColor = false; info.keepColor = true; @@ -240,6 +246,7 @@ KrResult KRSurface::createSwapChain() info.keepDepth = false; info.finalPass = true; m_postCompositePass->create(*device, selectedSurfaceFormat.format, depthImageFormat, info); + m_renderGraph.addRenderPass(m_postCompositePass.get()); info.clearColor = true; info.keepColor = true; @@ -247,6 +254,8 @@ KrResult KRSurface::createSwapChain() info.keepDepth = false; info.finalPass = true; m_blackFramePass->create(*device, selectedSurfaceFormat.format, depthImageFormat, info); + + m_blackFrameRenderGraph.addRenderPass(m_blackFramePass.get()); m_swapChain->create(*device, m_surface, selectedSurfaceFormat, depthImageFormat, swapExtent, imageCount, *m_forwardOpaquePass); @@ -339,6 +348,5 @@ void KRSurface::endFrame() void KRSurface::renderBlackFrame(VkCommandBuffer &commandBuffer) { - m_blackFramePass->begin(commandBuffer, *this); - m_blackFramePass->end(commandBuffer); + m_blackFrameRenderGraph.render(commandBuffer, *this); } diff --git a/kraken/KRSurface.h b/kraken/KRSurface.h index 5989015..c94807c 100644 --- a/kraken/KRSurface.h +++ b/kraken/KRSurface.h @@ -33,6 +33,7 @@ #include "KREngine-common.h" #include "KRContext.h" +#include "KRRenderGraph.h" class KRDevice; class KRRenderPass; @@ -90,4 +91,6 @@ public: private: void destroySwapChain(); KrResult createSwapChain(); + KRRenderGraph m_renderGraph; + KRRenderGraph m_blackFrameRenderGraph; };