summaryrefslogtreecommitdiffstats
path: root/src/render
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2015-11-24 10:04:00 +0100
committerAndy Nichols <andy.nichols@theqtcompany.com>2015-11-24 16:53:43 +0000
commit42cf6518c8af321a4d67c77aa72f960c330376c2 (patch)
tree6c1c9157bd5a732757b2b1071fefb2a940e23ee4 /src/render
parent2283cf838010d1c5264ab27553d30ce000fb01e6 (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.cpp3
-rw-r--r--src/render/backend/renderview_p.h4
-rw-r--r--src/render/jobs/renderviewjobutils.cpp5
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";