diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2015-11-24 10:04:00 +0100 |
---|---|---|
committer | Andy Nichols <andy.nichols@theqtcompany.com> | 2015-11-24 16:53:43 +0000 |
commit | 42cf6518c8af321a4d67c77aa72f960c330376c2 (patch) | |
tree | 6c1c9157bd5a732757b2b1071fefb2a940e23ee4 /src/render | |
parent | 2283cf838010d1c5264ab27553d30ce000fb01e6 (diff) |
RenderView: use FrameGraph to decide when frustum culling should be done
Change-Id: I366876f68040dd571524d9d7137a2f7916a5b757
Reviewed-by: Andy Nichols <andy.nichols@theqtcompany.com>
Diffstat (limited to 'src/render')
-rw-r--r-- | src/render/backend/renderview.cpp | 3 | ||||
-rw-r--r-- | src/render/backend/renderview_p.h | 4 | ||||
-rw-r--r-- | src/render/jobs/renderviewjobutils.cpp | 5 |
3 files changed, 11 insertions, 1 deletions
diff --git a/src/render/backend/renderview.cpp b/src/render/backend/renderview.cpp index 62233b267..9bc54d793 100644 --- a/src/render/backend/renderview.cpp +++ b/src/render/backend/renderview.cpp @@ -264,6 +264,7 @@ RenderView::RenderView() , m_clearBuffer(QClearBuffer::None) , m_stateSet(Q_NULLPTR) , m_noDraw(false) + , m_frustumCulling(false) { } @@ -384,7 +385,7 @@ void RenderView::buildRenderCommands(Entity *node, const Plane *planes) if (!node->isEnabled()) return; - if (isEntityFrustumCulled(node, planes)) + if (m_frustumCulling && isEntityFrustumCulled(node, planes)) return; // Build renderCommand for current node diff --git a/src/render/backend/renderview_p.h b/src/render/backend/renderview_p.h index 650d634bc..bb324baf5 100644 --- a/src/render/backend/renderview_p.h +++ b/src/render/backend/renderview_p.h @@ -161,6 +161,9 @@ public: inline bool noDraw() const { return m_noDraw; } void setNoDraw(bool noDraw) { m_noDraw = noDraw; } + inline bool frustumCulling() const { return m_frustumCulling; } + void setFrustumCulling(bool frustumCulling) { m_frustumCulling = frustumCulling; } + // 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 @@ -256,6 +259,7 @@ private: QClearBuffer::BufferType m_clearBuffer; RenderStateSet *m_stateSet; bool m_noDraw; + bool m_frustumCulling; // We do not use pointers to RenderNodes or Drawable's here so that the // render aspect is free to change the drawables on the next frame whilst diff --git a/src/render/jobs/renderviewjobutils.cpp b/src/render/jobs/renderviewjobutils.cpp index ac3213025..7ca9bc96c 100644 --- a/src/render/jobs/renderviewjobutils.cpp +++ b/src/render/jobs/renderviewjobutils.cpp @@ -202,6 +202,11 @@ void setRenderViewConfigFromFrameGraphLeafNode(RenderView *rv, const FrameGraphN break; } + case FrameGraphNode::FrustumCulling: { + rv->setFrustumCulling(true); + break; + } + default: // Should never get here qCWarning(Backend) << "Unhandled FrameGraphNode type"; |