summaryrefslogtreecommitdiffstats
path: root/src/core/aspects
diff options
context:
space:
mode:
authorSean Harmer <sean.harmer@kdab.com>2016-03-13 17:11:34 +0000
committerSean Harmer <sean.harmer@kdab.com>2016-03-22 10:45:25 +0000
commit525b7bcf045c22117fb2eed49c48fdbfb445d26d (patch)
tree247c19b2db855293758e13f8765a0f36d2139548 /src/core/aspects
parent7e47ff62826b60983327adf38c22efac32862906 (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.cpp16
-rw-r--r--src/core/aspects/qaspectengine_p.h5
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