diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2014-09-17 16:38:50 +0200 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2014-09-30 10:21:54 +0200 |
commit | 143b5de7bf788c0e07e460c3c6150861a7eaaf7d (patch) | |
tree | b4c87167ae7708b2b65de8e398c919dd75629f6f /src/render/frontend/qsceneloader.cpp | |
parent | 7acc347bee7bccca53269ae85417e68102dc79a1 (diff) |
Refactored QAbstractSceneLoader and QSceneLoader
QNode, also to make deep clones and shallow clones.
Change-Id: I38362485e3f7870da3d49aba95603fe4d61876fe
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render/frontend/qsceneloader.cpp')
-rw-r--r-- | src/render/frontend/qsceneloader.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/render/frontend/qsceneloader.cpp b/src/render/frontend/qsceneloader.cpp index 62ed87ac8..2d938fdb5 100644 --- a/src/render/frontend/qsceneloader.cpp +++ b/src/render/frontend/qsceneloader.cpp @@ -40,6 +40,12 @@ ****************************************************************************/ #include "qsceneloader.h" +#include "qabstractsceneloader_p.h" +#include <Qt3DCore/qsceneinterface.h> +#include <Qt3DCore/qscenepropertychange.h> +#include <Qt3DCore/qentity.h> +#include "renderlogging.h" +#include <QThread> QT_BEGIN_NAMESPACE @@ -50,6 +56,35 @@ QSceneLoader::QSceneLoader(QNode *parent) { } +// Called in main thread +void QSceneLoader::sceneChangeEvent(const QSceneChangePtr &change) +{ + Q_D(Render::QAbstractSceneLoader); + QScenePropertyChangePtr e = qSharedPointerCast<QScenePropertyChange>(change); + if (e->type() == ComponentUpdated) { + if (e->propertyName() == QByteArrayLiteral("scene")) { + QEntity *scene = e->value().value<QEntity *>(); + if (scene != Q_NULLPTR && d->m_scene != Q_NULLPTR) { + QList<QUuid> entities = d->m_scene->entitiesForComponent(d->m_uuid); + if (entities.size() > 1) + qCWarning(Render::Frontend) << "It is strongly discouraged to share SceneLoader component between entities"; + Q_FOREACH (const QUuid &id, entities) { + QEntity *parentEntity = qobject_cast<QEntity *>(d->m_scene->lookupNode(id)); + if (parentEntity != Q_NULLPTR) { + QEntity *cloneScene = qobject_cast<QEntity *>(scene->clone(Q_NULLPTR, false)); + // TO DO : Make that work +// qDebug() << QThread::currentThread() << parentEntity->thread() << scene->thread() << cloneScene->thread(); +// parentEntity->addChild(cloneScene); + } + } + } + } + else if (e->propertyName() == QByteArrayLiteral("status")) { + QAbstractSceneLoader::setStatus(static_cast<QAbstractSceneLoader::Status>(e->value().toInt())); + } + } +} + QNode *QSceneLoader::doClone(QNode *clonedParent) const { return new QSceneLoader(clonedParent); |