From 2c147f2be69ada6aa896e7fb753c3c05fbf46730 Mon Sep 17 00:00:00 2001 From: Kevin Ottens Date: Thu, 13 Oct 2016 11:20:51 +0200 Subject: 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 --- src/quick3d/imports/render/qt3dquick3drenderplugin.cpp | 2 +- src/render/framegraph/qframegraphnode.cpp | 12 ++++++++---- src/render/frontend/qrenderaspect.cpp | 1 + src/render/jobs/renderviewjobutils.cpp | 3 +++ 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("QViewport", "Qt3D.Render/Viewport", uri, 2, 0, "Viewport"); Qt3DRender::Quick::registerExtendedType("QRenderTargetSelector", "Qt3D.Render/RenderTargetSelector", uri, 2, 0, "RenderTargetSelector"); qmlRegisterType(uri, 2, 0, "ClearBuffers"); - qmlRegisterUncreatableType(uri, 2, 0, "FrameGraphNode", QStringLiteral("FrameGraphNode is a base class")); + qmlRegisterType(uri, 2, 0, "FrameGraphNode"); Qt3DRender::Quick::registerExtendedType("QRenderStateSet", "Qt3D.Render/RenderStateSet", uri, 2, 0, "RenderStateSet"); qmlRegisterType(uri, 2, 0, "NoDraw"); qmlRegisterType(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(QSharedPointer >::create(m_renderer, m_nodeManagers->techniqueManager())); // Framegraph + q->registerBackendType(QSharedPointer >::create(m_renderer, m_nodeManagers->frameGraphManager())); q->registerBackendType(QSharedPointer >::create(m_renderer, m_nodeManagers->frameGraphManager())); q->registerBackendType(QSharedPointer >::create(m_renderer, m_nodeManagers->frameGraphManager())); q->registerBackendType(QSharedPointer >::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()) { -- cgit v1.2.3