diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2019-08-30 11:41:18 +0200 |
---|---|---|
committer | Mike Krus <mike.krus@kdab.com> | 2019-09-16 10:39:23 +0200 |
commit | 6a9609f8956ccc528da8b7acee2d7a3d195b2b2d (patch) | |
tree | d12aef2a869a8572fb48163bc7db0def2c52abc5 /src/core/aspects/qaspectengine.cpp | |
parent | c89997143cd6e51916924b71c8b0bf8705480a67 (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.cpp | 22 |
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 |