diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2015-03-16 09:18:10 +0100 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2015-04-27 06:28:43 +0000 |
commit | 816e44ab6c8d23fb8239feab857438501c330e2d (patch) | |
tree | e587255b08b243f8a9036f5f0643e497c6e7bd89 | |
parent | 9349ce658d23c713d6e19a3c1a7e1701691bcbd2 (diff) |
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 <sean.harmer@kdab.com>
-rw-r--r-- | src/render/backend/jobs/renderviewjob.cpp | 3 | ||||
-rw-r--r-- | src/render/backend/jobs/renderviewjobutils.cpp | 5 | ||||
-rw-r--r-- | src/render/backend/renderview.cpp | 1 | ||||
-rw-r--r-- | src/render/backend/renderview_p.h | 4 |
4 files changed, 12 insertions, 1 deletions
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 |