diff options
author | Mike Krus <mike.krus@kdab.com> | 2019-09-17 15:47:59 +0100 |
---|---|---|
committer | Mike Krus <mike.krus@kdab.com> | 2019-10-04 07:10:20 +0100 |
commit | 53efe4ea5a26e67b5a37a7a79744872af1ec34bb (patch) | |
tree | d513b42dfabcb87cbb40e9f9a3397a2555ecfda2 /src/core/nodes | |
parent | 703f7964f88df116d0dd3fdd0a8005b9abef8737 (diff) |
Remove use of node/components added/removed messages
Introduce mechanism to notify backend nodes of changes in relationship
between nodes. If a component is added or removed from an entity,
or if a node is added or removed from a property of another node, then
just rely on the node being marked as dirty when syncing takes place.
For nodes that do not support syncing, messages are delivered as before
but allocated on the stack rather than the heap.
Change-Id: I06affac77e42a9998d9c7f44e231c7724c52b320
Reviewed-by: Mike Krus <mike.krus@kdab.com>
Diffstat (limited to 'src/core/nodes')
-rw-r--r-- | src/core/nodes/qbackendnode.cpp | 20 | ||||
-rw-r--r-- | src/core/nodes/qbackendnode_p.h | 7 | ||||
-rw-r--r-- | src/core/nodes/qcomponent.cpp | 6 | ||||
-rw-r--r-- | src/core/nodes/qentity.cpp | 19 | ||||
-rw-r--r-- | src/core/nodes/qnode.cpp | 8 | ||||
-rw-r--r-- | src/core/nodes/qnode_p.h | 1 |
6 files changed, 39 insertions, 22 deletions
diff --git a/src/core/nodes/qbackendnode.cpp b/src/core/nodes/qbackendnode.cpp index 3eb1cd9f7..e5f93e96f 100644 --- a/src/core/nodes/qbackendnode.cpp +++ b/src/core/nodes/qbackendnode.cpp @@ -95,6 +95,26 @@ QBackendNodePrivate *QBackendNodePrivate::get(QBackendNode *n) return n->d_func(); } +void QBackendNodePrivate::addedToEntity(QNode *frontend) +{ + Q_UNUSED(frontend) +} + +void QBackendNodePrivate::removedFromEntity(QNode *frontend) +{ + Q_UNUSED(frontend) +} + +void QBackendNodePrivate::componentAdded(QNode *frontend) +{ + Q_UNUSED(frontend) +} + +void QBackendNodePrivate::componentRemoved(QNode *frontend) +{ + Q_UNUSED(frontend) +} + /*! * \class Qt3DCore::QBackendNodeMapper * \inheaderfile Qt3DCore/QBackendNodeMapper diff --git a/src/core/nodes/qbackendnode_p.h b/src/core/nodes/qbackendnode_p.h index dde86fa48..260eef087 100644 --- a/src/core/nodes/qbackendnode_p.h +++ b/src/core/nodes/qbackendnode_p.h @@ -63,6 +63,8 @@ QT_BEGIN_NAMESPACE namespace Qt3DCore { +class QNode; + class Q_3DCORE_PRIVATE_EXPORT QBackendNodePrivate : public QObserverInterface , public QObservableInterface @@ -85,6 +87,11 @@ public: QNodeId m_peerId; bool m_enabled; + virtual void addedToEntity(QNode *frontend); + virtual void removedFromEntity(QNode *frontend); + virtual void componentAdded(QNode *frontend); + virtual void componentRemoved(QNode *frontend); + private: Q_DISABLE_COPY(QBackendNodePrivate) }; diff --git a/src/core/nodes/qcomponent.cpp b/src/core/nodes/qcomponent.cpp index 773d2df88..79bba229d 100644 --- a/src/core/nodes/qcomponent.cpp +++ b/src/core/nodes/qcomponent.cpp @@ -40,8 +40,6 @@ #include "qcomponent.h" #include "qcomponent_p.h" -#include <Qt3DCore/qcomponentaddedchange.h> -#include <Qt3DCore/qcomponentremovedchange.h> #include <Qt3DCore/qentity.h> #include <Qt3DCore/private/qentity_p.h> @@ -72,8 +70,6 @@ void QComponentPrivate::addEntity(QEntity *entity) m_scene->addEntityForComponent(m_id, entity->id()); } - const auto componentAddedChange = QComponentAddedChangePtr::create(q, entity); // TODOSYNC notify backend directly - notifyObservers(componentAddedChange); Q_EMIT q->addedToEntity(entity); } @@ -85,8 +81,6 @@ void QComponentPrivate::removeEntity(QEntity *entity) m_entities.removeAll(entity); - const auto componentRemovedChange = QComponentRemovedChangePtr::create(q, entity); // TODOSYNC notify backend directly - notifyObservers(componentRemovedChange); Q_EMIT q->removedFromEntity(entity); } diff --git a/src/core/nodes/qentity.cpp b/src/core/nodes/qentity.cpp index 58b5ef33e..024991387 100644 --- a/src/core/nodes/qentity.cpp +++ b/src/core/nodes/qentity.cpp @@ -41,8 +41,6 @@ #include "qentity_p.h" #include <Qt3DCore/qcomponent.h> -#include <Qt3DCore/qcomponentaddedchange.h> -#include <Qt3DCore/qcomponentremovedchange.h> #include <Qt3DCore/qnodecreatedchange.h> #include <QtCore/QMetaObject> #include <QtCore/QMetaProperty> @@ -101,13 +99,8 @@ void QEntityPrivate::removeDestroyedComponent(QComponent *comp) Q_CHECK_PTR(comp); qCDebug(Nodes) << Q_FUNC_INFO << comp; - Q_Q(QEntity); - - if (m_changeArbiter) { - const auto componentRemovedChange = QComponentRemovedChangePtr::create(q, comp); // TODOSYNC notify backend directly - notifyObservers(componentRemovedChange); - } + updateNode(comp, nullptr, ComponentRemoved); m_components.removeOne(comp); // Remove bookkeeping connection @@ -186,10 +179,7 @@ void QEntity::addComponent(QComponent *comp) // Ensures proper bookkeeping d->registerPrivateDestructionHelper(comp, &QEntityPrivate::removeDestroyedComponent); - if (d->m_changeArbiter) { - const auto componentAddedChange = QComponentAddedChangePtr::create(this, comp); // TODOSYNC notify backend directly - d->notifyObservers(componentAddedChange); - } + d->updateNode(comp, nullptr, ComponentAdded); static_cast<QComponentPrivate *>(QComponentPrivate::get(comp))->addEntity(this); } @@ -204,10 +194,7 @@ void QEntity::removeComponent(QComponent *comp) static_cast<QComponentPrivate *>(QComponentPrivate::get(comp))->removeEntity(this); - if (d->m_changeArbiter) { - const auto componentRemovedChange = QComponentRemovedChangePtr::create(this, comp); - d->notifyObservers(componentRemovedChange); - } + d->updateNode(comp, nullptr, ComponentRemoved); d->m_components.removeOne(comp); diff --git a/src/core/nodes/qnode.cpp b/src/core/nodes/qnode.cpp index 4dda92ec6..cfe83f4db 100644 --- a/src/core/nodes/qnode.cpp +++ b/src/core/nodes/qnode.cpp @@ -680,6 +680,14 @@ void QNodePrivate::update() } } +void QNodePrivate::updateNode(QNode *node, const char *property, ChangeFlag change) +{ + if (m_changeArbiter) { + Q_Q(QNode); + m_changeArbiter->addDirtyFrontEndNode(q, node, property, change); + } +} + /*! \internal */ diff --git a/src/core/nodes/qnode_p.h b/src/core/nodes/qnode_p.h index 839751a5e..a7a300a5e 100644 --- a/src/core/nodes/qnode_p.h +++ b/src/core/nodes/qnode_p.h @@ -90,6 +90,7 @@ public: void updatePropertyTrackMode(); void update(); + void updateNode(QNode *node, const char* property, ChangeFlag change); Q_DECLARE_PUBLIC(QNode) |