summaryrefslogtreecommitdiffstats
path: root/src/core/nodes
diff options
context:
space:
mode:
authorMike Krus <mike.krus@kdab.com>2019-09-17 15:47:59 +0100
committerMike Krus <mike.krus@kdab.com>2019-10-04 07:10:20 +0100
commit53efe4ea5a26e67b5a37a7a79744872af1ec34bb (patch)
treed513b42dfabcb87cbb40e9f9a3397a2555ecfda2 /src/core/nodes
parent703f7964f88df116d0dd3fdd0a8005b9abef8737 (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.cpp20
-rw-r--r--src/core/nodes/qbackendnode_p.h7
-rw-r--r--src/core/nodes/qcomponent.cpp6
-rw-r--r--src/core/nodes/qentity.cpp19
-rw-r--r--src/core/nodes/qnode.cpp8
-rw-r--r--src/core/nodes/qnode_p.h1
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)