From 816e44ab6c8d23fb8239feab857438501c330e2d Mon Sep 17 00:00:00 2001 From: Paul Lemire Date: Mon, 16 Mar 2015 09:18:10 +0100 Subject: RenderView handle NoDraw case If a NoDraw was defined in the FrameGraph tree, the RenderView noDraw boolean is set to true. In the RenderViewJob, RenderCommand are build only if noDraw is false. Change-Id: I507da45835022421a75c4539cf39b1f626a9521b Reviewed-by: Sean Harmer --- src/render/backend/jobs/renderviewjob.cpp | 3 ++- src/render/backend/jobs/renderviewjobutils.cpp | 5 +++++ src/render/backend/renderview.cpp | 1 + src/render/backend/renderview_p.h | 4 ++++ 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/render/backend/jobs/renderviewjob.cpp b/src/render/backend/jobs/renderviewjob.cpp index c263a66b8..53065245e 100644 --- a/src/render/backend/jobs/renderviewjob.cpp +++ b/src/render/backend/jobs/renderviewjob.cpp @@ -68,7 +68,8 @@ void RenderViewJob::run() // Build RenderCommand should perform the culling as we have no way to determine // if a child has a mesh in the view frustrum while its parent isn't contained in it. - renderView->buildRenderCommands(m_renderer->renderSceneRoot()); + if (!renderView->noDraw()) + renderView->buildRenderCommands(m_renderer->renderSceneRoot()); // Sorts RenderCommand renderView->sort(); diff --git a/src/render/backend/jobs/renderviewjobutils.cpp b/src/render/backend/jobs/renderviewjobutils.cpp index f87d65d26..126231d05 100644 --- a/src/render/backend/jobs/renderviewjobutils.cpp +++ b/src/render/backend/jobs/renderviewjobutils.cpp @@ -172,6 +172,11 @@ void setRenderViewConfigFromFrameGraphLeafNode(RenderView *rv, const FrameGraphN break; } + case FrameGraphNode::NoDraw: { + rv->setNoDraw(true); + break; + } + default: // Should never get here qCWarning(Backend) << "Unhandled FrameGraphNode type"; diff --git a/src/render/backend/renderview.cpp b/src/render/backend/renderview.cpp index 8f2be71b0..5370275b6 100644 --- a/src/render/backend/renderview.cpp +++ b/src/render/backend/renderview.cpp @@ -251,6 +251,7 @@ RenderView::RenderView() , m_viewport(Q_NULLPTR) , m_clearBuffer(QClearBuffer::None) , m_stateSet(Q_NULLPTR) + , m_noDraw(false) { } diff --git a/src/render/backend/renderview_p.h b/src/render/backend/renderview_p.h index 8e671d1e9..029a11f62 100644 --- a/src/render/backend/renderview_p.h +++ b/src/render/backend/renderview_p.h @@ -129,6 +129,9 @@ public: inline RenderStateSet *stateSet() const { return m_stateSet; } void setStateSet(RenderStateSet *stateSet) { m_stateSet = stateSet; } + inline bool noDraw() const { return m_noDraw; } + void setNoDraw(bool noDraw) { m_noDraw = noDraw; } + // TODO: Get rid of this overly complex memory management by splitting out the // InnerData as a RenderViewConfig struct. This can be created by setRenderViewConfigFromFrameGraphLeafNode // and passed along with the RenderView to the functions that populate the renderview @@ -225,6 +228,7 @@ private: AttachmentPack m_attachmentPack; QClearBuffer::BufferType m_clearBuffer; RenderStateSet *m_stateSet; + bool m_noDraw; int m_frameIndex; // We do not use pointers to RenderNodes or Drawable's here so that the -- cgit v1.2.3