diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2019-05-09 08:42:06 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2019-05-09 09:09:28 +0000 |
commit | c5ff1f7f159b4dfa0fc2803df9866eab18339eaa (patch) | |
tree | 414037b99d63dbcc405db046594e900076ef4c2e /src/render/framegraph | |
parent | 5679b23c5338ae41d12755cf4e26a95bc391d0a9 (diff) | |
parent | e9642824244fa9fe55dca2cef8e002192a4f1b17 (diff) |
Merge remote-tracking branch 'origin/5.13' into dev
Conflicts:
src/render/backend/abstractrenderer_p.h
src/render/renderers/opengl/renderer/renderer.cpp
tests/auto/render/renderer/tst_renderer.cpp
Change-Id: Ib6da858f10bec57bdb1002bd8fa4172304d118f2
Diffstat (limited to 'src/render/framegraph')
-rw-r--r-- | src/render/framegraph/framegraphnode.cpp | 52 | ||||
-rw-r--r-- | src/render/framegraph/framegraphnode_p.h | 4 | ||||
-rw-r--r-- | src/render/framegraph/qframegraphnode.cpp | 16 | ||||
-rw-r--r-- | src/render/framegraph/qframegraphnode.h | 3 |
4 files changed, 32 insertions, 43 deletions
diff --git a/src/render/framegraph/framegraphnode.cpp b/src/render/framegraph/framegraphnode.cpp index 562548e46..41a94f0e3 100644 --- a/src/render/framegraph/framegraphnode.cpp +++ b/src/render/framegraph/framegraphnode.cpp @@ -40,9 +40,8 @@ #include "framegraphnode_p.h" #include <Qt3DRender/private/renderer_p.h> #include <Qt3DRender/private/nodemanagers_p.h> -#include <Qt3DCore/qpropertynoderemovedchange.h> -#include <Qt3DCore/qpropertynodeaddedchange.h> #include <Qt3DRender/qframegraphnodecreatedchange.h> +#include <Qt3DCore/qpropertyupdatedchange.h> QT_BEGIN_NAMESPACE @@ -101,28 +100,6 @@ void FrameGraphNode::setParentId(Qt3DCore::QNodeId parentId) } } -void FrameGraphNode::appendChildId(Qt3DCore::QNodeId childId) -{ - if (!m_childrenIds.contains(childId)) { - FrameGraphNode *child = m_manager->lookupNode(childId); - if (child != nullptr) { - m_childrenIds.append(childId); - child->m_parentId = peerId(); - } - } -} - -void FrameGraphNode::removeChildId(Qt3DCore::QNodeId childId) -{ - if (m_childrenIds.contains(childId)) { - FrameGraphNode *child = m_manager->lookupNode(childId); - if (child != nullptr) { - child->m_parentId = Qt3DCore::QNodeId(); - } - m_childrenIds.removeAll(childId); - } -} - Qt3DCore::QNodeId FrameGraphNode::parentId() const { return m_parentId; @@ -155,28 +132,15 @@ void FrameGraphNode::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) { switch (e->type()) { - case Qt3DCore::PropertyValueAdded: { - Qt3DCore::QPropertyNodeAddedChangePtr change = qSharedPointerCast<Qt3DCore::QPropertyNodeAddedChange>(e); - if (change->metaObject()->inherits(&QFrameGraphNode::staticMetaObject)) { - appendChildId(change->addedNodeId()); - markDirty(AbstractRenderer::FrameGraphDirty); - } - break; - } - - case Qt3DCore::PropertyValueRemoved: { - Qt3DCore::QPropertyNodeRemovedChangePtr change = qSharedPointerCast<Qt3DCore::QPropertyNodeRemovedChange>(e); - if (change->metaObject()->inherits(&QFrameGraphNode::staticMetaObject)) { - removeChildId(change->removedNodeId()); - markDirty(AbstractRenderer::FrameGraphDirty); - } - break; - } case Qt3DCore::PropertyUpdated: { Qt3DCore::QPropertyUpdatedChangePtr propertyChange = qSharedPointerCast<Qt3DCore::QPropertyUpdatedChange>(e); if (propertyChange->propertyName() == QByteArrayLiteral("enabled")) { d_func()->m_enabled = propertyChange->value().toBool(); markDirty(AbstractRenderer::FrameGraphDirty); + } else if (propertyChange->propertyName() == QByteArrayLiteral("parentFrameGraphUpdated")) { + auto newParent = propertyChange->value().value<Qt3DCore::QNodeId>(); + setParentId(newParent); + markDirty(AbstractRenderer::AllDirty); } break; } @@ -185,6 +149,12 @@ void FrameGraphNode::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) } } +void FrameGraphNode::cleanup() +{ + setParentId({}); +} + + } // namespace Render } // namespace Qt3DRender diff --git a/src/render/framegraph/framegraphnode_p.h b/src/render/framegraph/framegraphnode_p.h index 5bd9b1b12..420abce56 100644 --- a/src/render/framegraph/framegraphnode_p.h +++ b/src/render/framegraph/framegraphnode_p.h @@ -112,8 +112,6 @@ public: FrameGraphManager *manager() const; void setParentId(Qt3DCore::QNodeId parentId); - void appendChildId(Qt3DCore::QNodeId childHandle); - void removeChildId(Qt3DCore::QNodeId childHandle); Qt3DCore::QNodeId parentId() const; QVector<Qt3DCore::QNodeId> childrenIds() const; @@ -121,6 +119,8 @@ public: FrameGraphNode *parent() const; QVector<FrameGraphNode *> children() const; + void cleanup(); + void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) override; protected: diff --git a/src/render/framegraph/qframegraphnode.cpp b/src/render/framegraph/qframegraphnode.cpp index 9acfd1209..d52b728a8 100644 --- a/src/render/framegraph/qframegraphnode.cpp +++ b/src/render/framegraph/qframegraphnode.cpp @@ -40,6 +40,7 @@ #include "qframegraphnode.h" #include "qframegraphnode_p.h" #include <Qt3DRender/qframegraphnodecreatedchange.h> +#include <Qt3DCore/qpropertyupdatedchange.h> #include <Qt3DCore/QNode> @@ -248,9 +249,24 @@ QFrameGraphNode::QFrameGraphNode(QFrameGraphNodePrivate &dd, QNode *parent) Qt3DCore::QNodeCreatedChangeBasePtr QFrameGraphNode::createNodeCreationChange() const { + // connect to the parentChanged signal here rather than constructor because + // until now there's no backend node to notify when parent changes + connect(this, &QNode::parentChanged, this, &QFrameGraphNode::onParentChanged); + return QFrameGraphNodeCreatedChangeBasePtr::create(this); } +void QFrameGraphNode::onParentChanged(QObject *) +{ + const auto parentID = parentFrameGraphNode() ? parentFrameGraphNode()->id() : Qt3DCore::QNodeId(); + auto parentChange = Qt3DCore::QPropertyUpdatedChangePtr::create(id()); + parentChange->setPropertyName("parentFrameGraphUpdated"); + parentChange->setValue(QVariant::fromValue(parentID)); + const bool blocked = blockNotifications(false); + notifyObservers(parentChange); + blockNotifications(blocked); +} + } // namespace Qt3DRender QT_END_NAMESPACE diff --git a/src/render/framegraph/qframegraphnode.h b/src/render/framegraph/qframegraphnode.h index 9b08c98d3..826f01a1e 100644 --- a/src/render/framegraph/qframegraphnode.h +++ b/src/render/framegraph/qframegraphnode.h @@ -63,6 +63,9 @@ protected: explicit QFrameGraphNode(QFrameGraphNodePrivate &dd, Qt3DCore::QNode *parent = nullptr); Qt3DCore::QNodeCreatedChangeBasePtr createNodeCreationChange() const override; +private Q_SLOTS: + void onParentChanged(QObject *); + private: Q_DECLARE_PRIVATE(QFrameGraphNode) }; |