summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Ottens <kevin.ottens@kdab.com>2016-10-13 11:20:51 +0200
committerJani Heikkinen <jani.heikkinen@qt.io>2016-10-14 10:01:18 +0000
commit2c147f2be69ada6aa896e7fb753c3c05fbf46730 (patch)
treebb66404af1d9030e6d7ec291b285c5b658e22689
parent87efd2423e11b2103c5e50528b6f704d3fc2c84a (diff)
Give access to FrameGraphNode as a grouping node
This is convenient to allow creating (Q)FrameGraphNode and have them take part in the tree traversal even though they don't change any state. Allows for easy grouping of frame graph parts, and even needed in some situations in conjunction with NodeInstantiator. Change-Id: If33d48801781113a174971398b33c27d55fa1423 Task-Id: QTBUG-55908 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
-rw-r--r--src/quick3d/imports/render/qt3dquick3drenderplugin.cpp2
-rw-r--r--src/render/framegraph/qframegraphnode.cpp12
-rw-r--r--src/render/frontend/qrenderaspect.cpp1
-rw-r--r--src/render/jobs/renderviewjobutils.cpp3
4 files changed, 13 insertions, 5 deletions
diff --git a/src/quick3d/imports/render/qt3dquick3drenderplugin.cpp b/src/quick3d/imports/render/qt3dquick3drenderplugin.cpp
index c82ad7b1d..abbce8663 100644
--- a/src/quick3d/imports/render/qt3dquick3drenderplugin.cpp
+++ b/src/quick3d/imports/render/qt3dquick3drenderplugin.cpp
@@ -217,7 +217,7 @@ void Qt3DQuick3DRenderPlugin::registerTypes(const char *uri)
Qt3DRender::Quick::registerExtendedType<Qt3DRender::QViewport, Qt3DRender::Render::Quick::Quick3DViewport>("QViewport", "Qt3D.Render/Viewport", uri, 2, 0, "Viewport");
Qt3DRender::Quick::registerExtendedType<Qt3DRender::QRenderTargetSelector, Qt3DRender::Render::Quick::Quick3DRenderTargetSelector>("QRenderTargetSelector", "Qt3D.Render/RenderTargetSelector", uri, 2, 0, "RenderTargetSelector");
qmlRegisterType<Qt3DRender::QClearBuffers>(uri, 2, 0, "ClearBuffers");
- qmlRegisterUncreatableType<Qt3DRender::QFrameGraphNode>(uri, 2, 0, "FrameGraphNode", QStringLiteral("FrameGraphNode is a base class"));
+ qmlRegisterType<Qt3DRender::QFrameGraphNode>(uri, 2, 0, "FrameGraphNode");
Qt3DRender::Quick::registerExtendedType<Qt3DRender::QRenderStateSet, Qt3DRender::Render::Quick::Quick3DStateSet>("QRenderStateSet", "Qt3D.Render/RenderStateSet", uri, 2, 0, "RenderStateSet");
qmlRegisterType<Qt3DRender::QNoDraw>(uri, 2, 0, "NoDraw");
qmlRegisterType<Qt3DRender::QFrustumCulling>(uri, 2, 0, "FrustumCulling");
diff --git a/src/render/framegraph/qframegraphnode.cpp b/src/render/framegraph/qframegraphnode.cpp
index c60c859ac..36a9f737a 100644
--- a/src/render/framegraph/qframegraphnode.cpp
+++ b/src/render/framegraph/qframegraphnode.cpp
@@ -56,8 +56,10 @@ QFrameGraphNodePrivate::QFrameGraphNodePrivate()
\brief Base class of all FrameGraph configuration nodes.
- This is an abstract class so it cannot be instanced directly
- but rather through one of its subclasses.
+ This class is rarely instanced directly since it doesn't provide
+ any frame graph specific behavior, although it can be convenient
+ to use for grouping other nodes together in dynamic frame graphs.
+ The actual behavior comes from the subclasses.
The subclasses are:
\table
@@ -112,8 +114,10 @@ QFrameGraphNodePrivate::QFrameGraphNodePrivate()
\since 5.5
\brief Base class of all FrameGraph configuration nodes.
- This is an abstract class so it cannot be instanced directly
- but rather through one of its subclasses.
+ This class is rarely instanced directly since it doesn't provide
+ any frame graph specific behavior, although it can be convenient
+ to use for grouping other nodes together in dynamic frame graphs.
+ The actual behavior comes from the subclasses.
The subclasses are:
\table
diff --git a/src/render/frontend/qrenderaspect.cpp b/src/render/frontend/qrenderaspect.cpp
index f6d26fb22..320bfa677 100644
--- a/src/render/frontend/qrenderaspect.cpp
+++ b/src/render/frontend/qrenderaspect.cpp
@@ -210,6 +210,7 @@ void QRenderAspectPrivate::registerBackendTypes()
q->registerBackendType<QTechnique>(QSharedPointer<Render::NodeFunctor<Render::Technique, Render::TechniqueManager> >::create(m_renderer, m_nodeManagers->techniqueManager()));
// Framegraph
+ q->registerBackendType<QFrameGraphNode>(QSharedPointer<Render::FrameGraphNodeFunctor<Render::FrameGraphNode, QFrameGraphNode> >::create(m_renderer, m_nodeManagers->frameGraphManager()));
q->registerBackendType<QCameraSelector>(QSharedPointer<Render::FrameGraphNodeFunctor<Render::CameraSelector, QCameraSelector> >::create(m_renderer, m_nodeManagers->frameGraphManager()));
q->registerBackendType<QClearBuffers>(QSharedPointer<Render::FrameGraphNodeFunctor<Render::ClearBuffers, QClearBuffers> >::create(m_renderer, m_nodeManagers->frameGraphManager()));
q->registerBackendType<QDispatchCompute>(QSharedPointer<Render::FrameGraphNodeFunctor<Render::DispatchCompute, QDispatchCompute> >::create(m_renderer, m_nodeManagers->frameGraphManager()));
diff --git a/src/render/jobs/renderviewjobutils.cpp b/src/render/jobs/renderviewjobutils.cpp
index 8ffd5ea10..765e5e1de 100644
--- a/src/render/jobs/renderviewjobutils.cpp
+++ b/src/render/jobs/renderviewjobutils.cpp
@@ -91,6 +91,9 @@ void setRenderViewConfigFromFrameGraphLeafNode(RenderView *rv, const FrameGraphN
FrameGraphNode::FrameGraphNodeType type = node->nodeType();
if (node->isEnabled())
switch (type) {
+ case FrameGraphNode::InvalidNodeType:
+ // A base FrameGraphNode, can be used for grouping purposes
+ break;
case FrameGraphNode::CameraSelector:
// Can be set only once and we take camera nearest to the leaf node
if (!rv->renderCameraLens()) {