diff options
author | Sean Harmer <sean.harmer@kdab.com> | 2016-04-19 14:25:43 +0100 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2016-04-19 20:38:00 +0000 |
commit | b3eea6ae2d91d9f5460d7e80c329d6cf40915732 (patch) | |
tree | 14b4a08ef4bda923d4002456c49ea0f07d0dbb23 /src/render/jobs/loadscenejob.cpp | |
parent | a14240555084a99bb55a981a922a0efe7133f2f8 (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.cpp | 25 |
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 |