summaryrefslogtreecommitdiffstats
path: root/src/render/frontend/qsceneloader.cpp
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2014-09-17 16:38:50 +0200
committerSean Harmer <sean.harmer@kdab.com>2014-09-30 10:21:54 +0200
commit143b5de7bf788c0e07e460c3c6150861a7eaaf7d (patch)
treeb4c87167ae7708b2b65de8e398c919dd75629f6f /src/render/frontend/qsceneloader.cpp
parent7acc347bee7bccca53269ae85417e68102dc79a1 (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.cpp35
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);