diff options
author | Mike Krus <mike.krus@kdab.com> | 2019-08-06 15:30:01 +0100 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2019-08-28 06:30:29 +0200 |
commit | f3268fcb2a4e73d99dbd66aa5e262a118b5a5480 (patch) | |
tree | 374bd9ace2fccaa33534f338950185368ab5598b /src/core/aspects/qaspectengine.cpp | |
parent | 91dc1e1a61651a82a0ee5ce6ad3b24e82f526be6 (diff) |
Do direct notification of backend nodeswip/refactor
Since aspect manager is now on main thread, we can directly update
backend nodes safely. Track nodes which have changed properties and
notify the backend nodes as part of the frame loop.
This avoid allocating and delivering many change messages.
To follow:
- implement on all nodes
- look at backend to frontend syncing
- figure out what to do with non property messages (components
added/removed, commands, ...)
Change-Id: Ia0c442b0528e728c4324d168200bae021bc29266
Reviewed-by: Mike Krus <mike.krus@kdab.com>
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/core/aspects/qaspectengine.cpp')
-rw-r--r-- | src/core/aspects/qaspectengine.cpp | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/src/core/aspects/qaspectengine.cpp b/src/core/aspects/qaspectengine.cpp index 9c98e9613..c5e4b2b26 100644 --- a/src/core/aspects/qaspectengine.cpp +++ b/src/core/aspects/qaspectengine.cpp @@ -120,12 +120,6 @@ void QAspectEnginePrivate::initEntity(QEntity *entity) } } -void QAspectEnginePrivate::generateCreationChanges(QNode *root) -{ - const QNodeCreatedChangeGenerator generator(root); - m_creationChanges = generator.creationChanges(); -} - /*! * \class Qt3DCore::QAspectEngine * \inheaderfile Qt3DCore/QAspectEngine @@ -444,7 +438,8 @@ void QAspectEngine::setRootEntity(QEntityPtr root) d->initNodeTree(root.data()); // Traverse tree to generate a vector of creation changes - d->generateCreationChanges(root.data()); + const QNodeCreatedChangeGenerator generator(root.data()); + auto creationChanges = generator.creationChanges(); // Specify if the AspectManager should be driving the simulation loop or not d->m_aspectManager->setRunMode(d->m_runMode); @@ -456,7 +451,7 @@ void QAspectEngine::setRootEntity(QEntityPtr root) // TODO: Pass the creation changes via the arbiter rather than relying upon // an invokeMethod call. qCDebug(Aspects) << "Begin setting scene root on aspect manager"; - d->m_aspectManager->setRootEntity(root.data(), d->m_creationChanges); + d->m_aspectManager->setRootEntity(root.data(), creationChanges); qCDebug(Aspects) << "Done setting scene root on aspect manager"; d->m_aspectManager->enterSimulationLoop(); } |