WIP KRRenderGraph interface
This commit is contained in:
@@ -30,4 +30,29 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
#include "KRRenderGraph.h"
|
#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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -33,3 +33,22 @@
|
|||||||
|
|
||||||
#include "KREngine-common.h"
|
#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<KRRenderPass*> m_renderPasses;
|
||||||
|
|
||||||
|
};
|
||||||
|
|||||||
@@ -45,6 +45,8 @@ KRSurface::KRSurface(KRContext& context, KrSurfaceHandle handle, void* platformH
|
|||||||
, m_renderFinishedSemaphores{VK_NULL_HANDLE}
|
, m_renderFinishedSemaphores{VK_NULL_HANDLE}
|
||||||
, m_inFlightFences{VK_NULL_HANDLE}
|
, m_inFlightFences{VK_NULL_HANDLE}
|
||||||
, m_frameIndex(0)
|
, m_frameIndex(0)
|
||||||
|
, m_renderGraph(context)
|
||||||
|
, m_blackFrameRenderGraph(context)
|
||||||
{
|
{
|
||||||
m_forwardOpaquePass = std::make_unique<KRRenderPass>(context);
|
m_forwardOpaquePass = std::make_unique<KRRenderPass>(context);
|
||||||
m_deferredGBufferPass = std::make_unique<KRRenderPass>(context);
|
m_deferredGBufferPass = std::make_unique<KRRenderPass>(context);
|
||||||
@@ -212,6 +214,7 @@ KrResult KRSurface::createSwapChain()
|
|||||||
info.clearStencilValue = 0;
|
info.clearStencilValue = 0;
|
||||||
info.finalPass = false;
|
info.finalPass = false;
|
||||||
m_forwardOpaquePass->create(*device, selectedSurfaceFormat.format, depthImageFormat, info);
|
m_forwardOpaquePass->create(*device, selectedSurfaceFormat.format, depthImageFormat, info);
|
||||||
|
m_renderGraph.addRenderPass(m_forwardOpaquePass.get());
|
||||||
|
|
||||||
info.clearColor = true;
|
info.clearColor = true;
|
||||||
info.keepColor = true;
|
info.keepColor = true;
|
||||||
@@ -219,6 +222,7 @@ KrResult KRSurface::createSwapChain()
|
|||||||
info.keepDepth = true;
|
info.keepDepth = true;
|
||||||
info.finalPass = false;
|
info.finalPass = false;
|
||||||
m_deferredGBufferPass->create(*device, selectedSurfaceFormat.format, depthImageFormat, info);
|
m_deferredGBufferPass->create(*device, selectedSurfaceFormat.format, depthImageFormat, info);
|
||||||
|
m_renderGraph.addRenderPass(m_deferredGBufferPass.get());
|
||||||
|
|
||||||
info.clearColor = false;
|
info.clearColor = false;
|
||||||
info.keepColor = true;
|
info.keepColor = true;
|
||||||
@@ -226,6 +230,7 @@ KrResult KRSurface::createSwapChain()
|
|||||||
info.keepDepth = true;
|
info.keepDepth = true;
|
||||||
info.finalPass = false;
|
info.finalPass = false;
|
||||||
m_deferredOpaquePass->create(*device, selectedSurfaceFormat.format, depthImageFormat, info);
|
m_deferredOpaquePass->create(*device, selectedSurfaceFormat.format, depthImageFormat, info);
|
||||||
|
m_renderGraph.addRenderPass(m_deferredOpaquePass.get());
|
||||||
|
|
||||||
info.clearColor = false;
|
info.clearColor = false;
|
||||||
info.keepColor = true;
|
info.keepColor = true;
|
||||||
@@ -233,6 +238,7 @@ KrResult KRSurface::createSwapChain()
|
|||||||
info.keepDepth = true;
|
info.keepDepth = true;
|
||||||
info.finalPass = false;
|
info.finalPass = false;
|
||||||
m_debugPass->create(*device, selectedSurfaceFormat.format, depthImageFormat, info);
|
m_debugPass->create(*device, selectedSurfaceFormat.format, depthImageFormat, info);
|
||||||
|
m_renderGraph.addRenderPass(m_debugPass.get());
|
||||||
|
|
||||||
info.clearColor = false;
|
info.clearColor = false;
|
||||||
info.keepColor = true;
|
info.keepColor = true;
|
||||||
@@ -240,6 +246,7 @@ KrResult KRSurface::createSwapChain()
|
|||||||
info.keepDepth = false;
|
info.keepDepth = false;
|
||||||
info.finalPass = true;
|
info.finalPass = true;
|
||||||
m_postCompositePass->create(*device, selectedSurfaceFormat.format, depthImageFormat, info);
|
m_postCompositePass->create(*device, selectedSurfaceFormat.format, depthImageFormat, info);
|
||||||
|
m_renderGraph.addRenderPass(m_postCompositePass.get());
|
||||||
|
|
||||||
info.clearColor = true;
|
info.clearColor = true;
|
||||||
info.keepColor = true;
|
info.keepColor = true;
|
||||||
@@ -248,6 +255,8 @@ KrResult KRSurface::createSwapChain()
|
|||||||
info.finalPass = true;
|
info.finalPass = true;
|
||||||
m_blackFramePass->create(*device, selectedSurfaceFormat.format, depthImageFormat, info);
|
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);
|
m_swapChain->create(*device, m_surface, selectedSurfaceFormat, depthImageFormat, swapExtent, imageCount, *m_forwardOpaquePass);
|
||||||
|
|
||||||
return KR_SUCCESS;
|
return KR_SUCCESS;
|
||||||
@@ -339,6 +348,5 @@ void KRSurface::endFrame()
|
|||||||
|
|
||||||
void KRSurface::renderBlackFrame(VkCommandBuffer &commandBuffer)
|
void KRSurface::renderBlackFrame(VkCommandBuffer &commandBuffer)
|
||||||
{
|
{
|
||||||
m_blackFramePass->begin(commandBuffer, *this);
|
m_blackFrameRenderGraph.render(commandBuffer, *this);
|
||||||
m_blackFramePass->end(commandBuffer);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,6 +33,7 @@
|
|||||||
|
|
||||||
#include "KREngine-common.h"
|
#include "KREngine-common.h"
|
||||||
#include "KRContext.h"
|
#include "KRContext.h"
|
||||||
|
#include "KRRenderGraph.h"
|
||||||
|
|
||||||
class KRDevice;
|
class KRDevice;
|
||||||
class KRRenderPass;
|
class KRRenderPass;
|
||||||
@@ -90,4 +91,6 @@ public:
|
|||||||
private:
|
private:
|
||||||
void destroySwapChain();
|
void destroySwapChain();
|
||||||
KrResult createSwapChain();
|
KrResult createSwapChain();
|
||||||
|
KRRenderGraph m_renderGraph;
|
||||||
|
KRRenderGraph m_blackFrameRenderGraph;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user