summaryrefslogtreecommitdiffstats
path: root/src/core/aspects/qaspectengine.cpp
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2019-08-30 11:41:18 +0200
committerMike Krus <mike.krus@kdab.com>2019-09-16 10:39:23 +0200
commit6a9609f8956ccc528da8b7acee2d7a3d195b2b2d (patch)
treed12aef2a869a8572fb48163bc7db0def2c52abc5 /src/core/aspects/qaspectengine.cpp
parentc89997143cd6e51916924b71c8b0bf8705480a67 (diff)
Use direct access to remove backend nodes
- Stop using messages - Remove QSceneObserverInterface - Ensure backend node creation/destruction is done at the right time Change-Id: I470825af344ab65bf05e93fc149b61d1b9eefc96 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/core/aspects/qaspectengine.cpp')
-rw-r--r--src/core/aspects/qaspectengine.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/core/aspects/qaspectengine.cpp b/src/core/aspects/qaspectengine.cpp
index 41662e2a3..6d1a8ca30 100644
--- a/src/core/aspects/qaspectengine.cpp
+++ b/src/core/aspects/qaspectengine.cpp
@@ -89,6 +89,23 @@ QVector<Qt3DCore::QNode *> getNodesForCreation(Qt3DCore::QNode *root)
return nodes;
}
+QVector<Qt3DCore::QNode *> getNodesForRemoval(Qt3DCore::QNode *root)
+{
+ using namespace Qt3DCore;
+
+ QVector<QNode *> nodes;
+ QNodeVisitor visitor;
+ visitor.traverse(root, [&nodes](QNode *node) {
+ nodes.append(node);
+
+ // Mark this node as having been handled for destruction so we don't
+ // repeat it unnecessarily in an O(n^2) manner
+ QNodePrivate::get(node)->m_hasBackendNode = false;
+ });
+
+ return nodes;
+}
+
}
namespace Qt3DCore {
@@ -152,6 +169,11 @@ void QAspectEnginePrivate::addNode(QNode *node)
m_aspectManager->addNodes(getNodesForCreation(node));
}
+void QAspectEnginePrivate::removeNode(QNode *node)
+{
+ m_aspectManager->removeNodes(getNodesForRemoval(node));
+}
+
/*!
* \class Qt3DCore::QAspectEngine
* \inheaderfile Qt3DCore/QAspectEngine