summaryrefslogtreecommitdiffstats
path: root/src/render/jobs/loadscenejob.cpp
diff options
context:
space:
mode:
authorSean Harmer <sean.harmer@kdab.com>2016-04-19 14:25:43 +0100
committerSean Harmer <sean.harmer@kdab.com>2016-04-19 20:38:00 +0000
commitb3eea6ae2d91d9f5460d7e80c329d6cf40915732 (patch)
tree14b4a08ef4bda923d4002456c49ea0f07d0dbb23 /src/render/jobs/loadscenejob.cpp
parenta14240555084a99bb55a981a922a0efe7133f2f8 (diff)
QSceneLoader now avoids cloning
This should be the final client of the cloning system. So we should be OK to strip cloning out of Qt 3D now at last. Change-Id: Ifb62554f757752652e9ecfa39196cad56090fd8b Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/render/jobs/loadscenejob.cpp')
-rw-r--r--src/render/jobs/loadscenejob.cpp25
1 files changed, 14 insertions, 11 deletions
diff --git a/src/render/jobs/loadscenejob.cpp b/src/render/jobs/loadscenejob.cpp
index 354a233e4..4353c2218 100644
--- a/src/render/jobs/loadscenejob.cpp
+++ b/src/render/jobs/loadscenejob.cpp
@@ -61,19 +61,22 @@ LoadSceneJob::LoadSceneJob(const QUrl &source, Qt3DCore::QNodeId m_sceneComponen
void LoadSceneJob::run()
{
- Qt3DCore::QEntity *sceneTree = m_managers->sceneManager()->sceneTreeFromSource(m_source);
- if (sceneTree == Q_NULLPTR) {
- Q_FOREACH (QSceneIOHandler *sceneIOHandler, m_sceneIOHandlers) {
- if (sceneIOHandler->isFileTypeSupported(m_source)) {
- sceneIOHandler->setSource(m_source);
- sceneTree = sceneIOHandler->scene();
- m_managers->sceneManager()->addLoadedSceneTree(m_source, sceneTree);
- }
- }
+ // Iterate scene IO handlers until we find one that can handle this file type
+ Qt3DCore::QEntity *sceneSubTree = nullptr;
+ for (QSceneIOHandler *sceneIOHandler : qAsConst(m_sceneIOHandlers)) {
+ if (!sceneIOHandler->isFileTypeSupported(m_source))
+ continue;
+
+ // File type is supported
+ sceneIOHandler->setSource(m_source);
+ sceneSubTree = sceneIOHandler->scene();
+ break;
}
- // set clone of sceneTree in sceneComponent
+
+ // Set clone of sceneTree in sceneComponent. This will move the sceneSubTree
+ // to the QCoreApplication thread which is where the frontend object tree lives.
Scene *scene = m_managers->sceneManager()->lookupResource(m_sceneComponent);
- scene->setSceneSubtree(sceneTree);
+ scene->setSceneSubtree(sceneSubTree);
}
} // namespace Render