diff options
author | Sean Harmer <sean.harmer@kdab.com> | 2016-03-13 17:11:34 +0000 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2016-03-22 10:45:25 +0000 |
commit | 525b7bcf045c22117fb2eed49c48fdbfb445d26d (patch) | |
tree | 247c19b2db855293758e13f8765a0f36d2139548 /src/core/aspects | |
parent | 7e47ff62826b60983327adf38c22efac32862906 (diff) |
Generate a vector of QNodeCreatedChanges at startup
First step towards using these at application startup.
Task-number: QTBUG-51835
Change-Id: If0ee58c8ba859d00ace17bd95972bee285d3e1d0
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
Diffstat (limited to 'src/core/aspects')
-rw-r--r-- | src/core/aspects/qaspectengine.cpp | 16 | ||||
-rw-r--r-- | src/core/aspects/qaspectengine_p.h | 5 |
2 files changed, 21 insertions, 0 deletions
diff --git a/src/core/aspects/qaspectengine.cpp b/src/core/aspects/qaspectengine.cpp index 8b7c4a667..af6798407 100644 --- a/src/core/aspects/qaspectengine.cpp +++ b/src/core/aspects/qaspectengine.cpp @@ -98,6 +98,19 @@ void QAspectEnginePrivate::initEntity(QEntity *entity) } } +void QAspectEnginePrivate::generateCreationChanges(QNode *root) +{ + m_creationChanges.clear(); + QNodeVisitor creationVisitor; + creationVisitor.traverse(root, this, &QAspectEnginePrivate::createCreationChange); +} + +void QAspectEnginePrivate::createCreationChange(QNode *node) +{ + const auto creationChange = node->createNodeCreationChange(); + m_creationChanges.push_back(creationChange); +} + QAspectEngine::QAspectEngine(QObject *parent) : QObject(*new QAspectEnginePrivate, parent) { @@ -312,6 +325,9 @@ void QAspectEngine::setRootEntity(QEntityPtr root) // deregister the nodes from the scene d->initNodeTree(root.data()); + // Traverse tree to generate a vector of creation changes + d->generateCreationChanges(root.data()); + // Finally, tell the aspects about the new scene object tree. This is done // in a blocking manner to allow the aspects to get synchronized before the // main thread starts triggering potentially more notifications diff --git a/src/core/aspects/qaspectengine_p.h b/src/core/aspects/qaspectengine_p.h index 334df28b2..7a46d5cc2 100644 --- a/src/core/aspects/qaspectengine_p.h +++ b/src/core/aspects/qaspectengine_p.h @@ -52,6 +52,7 @@ // #include <private/qobject_p.h> +#include <Qt3DCore/qnodecreatedchange.h> #include <Qt3DCore/private/qaspectfactory_p.h> #include <QtCore/qsharedpointer.h> @@ -87,6 +88,10 @@ public: void initNodeTree(QNode *node); void initNode(QNode *node); void initEntity(QEntity *entity); + + void generateCreationChanges(QNode *rootNode); + void createCreationChange(QNode *node); // visitor function + QVector<QNodeCreatedChangeBasePtr> m_creationChanges; }; } // Qt3D |