summaryrefslogtreecommitdiffstats
path: root/src/render
diff options
context:
space:
mode:
authorSean Harmer <sean.harmer@kdab.com>2016-04-01 11:50:20 +0100
committerSean Harmer <sean.harmer@kdab.com>2016-04-05 12:17:29 +0000
commitececb69761f1b37cb09b26e4c7f096cb6a948c5f (patch)
tree4c0af0e9dd63ec42b62be3333bfebf07078ff377 /src/render
parent3c5e3a1e99452b5a7f963eecef3478ab403c03f1 (diff)
QSceneLoader/Scene creates and handles creation changes
Change-Id: Iff910e1b9c3556a40eead4d050605ac72b953f92 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/render')
-rw-r--r--src/render/io/qsceneloader.cpp8
-rw-r--r--src/render/io/qsceneloader.h1
-rw-r--r--src/render/io/qsceneloader_p.h5
-rw-r--r--src/render/io/scene.cpp10
-rw-r--r--src/render/io/scene_p.h2
5 files changed, 26 insertions, 0 deletions
diff --git a/src/render/io/qsceneloader.cpp b/src/render/io/qsceneloader.cpp
index e43a2cb1f..e1cf83735 100644
--- a/src/render/io/qsceneloader.cpp
+++ b/src/render/io/qsceneloader.cpp
@@ -139,6 +139,14 @@ void QSceneLoader::setStatus(QSceneLoader::Status status)
}
}
+Qt3DCore::QNodeCreatedChangeBasePtr QSceneLoader::createNodeCreationChange() const
+{
+ auto creationChange = Qt3DCore::QNodeCreatedChangePtr<QSceneLoaderData>::create(this);
+ auto &data = creationChange->data;
+ data.source = d_func()->m_source;
+ return creationChange;
+}
+
} // namespace Qt3DRender
QT_END_NAMESPACE
diff --git a/src/render/io/qsceneloader.h b/src/render/io/qsceneloader.h
index 451848fff..e6003ec01 100644
--- a/src/render/io/qsceneloader.h
+++ b/src/render/io/qsceneloader.h
@@ -87,6 +87,7 @@ protected:
private:
Q_DECLARE_PRIVATE(QSceneLoader)
+ Qt3DCore::QNodeCreatedChangeBasePtr createNodeCreationChange() const Q_DECL_OVERRIDE;
};
} // namespace Qt3DRender
diff --git a/src/render/io/qsceneloader_p.h b/src/render/io/qsceneloader_p.h
index f884feb75..dcc7f4c5f 100644
--- a/src/render/io/qsceneloader_p.h
+++ b/src/render/io/qsceneloader_p.h
@@ -71,6 +71,11 @@ public:
QSceneLoader::Status m_status;
};
+struct QSceneLoaderData
+{
+ QUrl source;
+};
+
} // namespace Qt3DRender
QT_END_NAMESPACE
diff --git a/src/render/io/scene.cpp b/src/render/io/scene.cpp
index e5acc919b..85c699d2c 100644
--- a/src/render/io/scene.cpp
+++ b/src/render/io/scene.cpp
@@ -44,6 +44,7 @@
#include <Qt3DCore/private/qscene_p.h>
#include <Qt3DCore/qbackendscenepropertychange.h>
#include <Qt3DRender/qsceneloader.h>
+#include <Qt3DRender/private/qsceneloader_p.h>
#include <Qt3DRender/private/scenemanager_p.h>
QT_BEGIN_NAMESPACE
@@ -67,6 +68,15 @@ void Scene::updateFromPeer(Qt3DCore::QNode *peer)
m_sceneManager->addSceneData(m_source, peerId());
}
+void Scene::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change)
+{
+ const auto typedChange = qSharedPointerCast<Qt3DCore::QNodeCreatedChange<QSceneLoaderData>>(change);
+ const auto &data = typedChange->data;
+ m_source = data.source;
+ Q_ASSERT(m_sceneManager);
+ m_sceneManager->addSceneData(m_source, peerId());
+}
+
void Scene::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e)
{
QScenePropertyChangePtr propertyChange = qSharedPointerCast<QScenePropertyChange>(e);
diff --git a/src/render/io/scene_p.h b/src/render/io/scene_p.h
index a9d8bb95b..bf7ce85e0 100644
--- a/src/render/io/scene_p.h
+++ b/src/render/io/scene_p.h
@@ -80,6 +80,8 @@ public:
void setSceneManager(SceneManager *manager);
private:
+ void initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) Q_DECL_FINAL;
+
SceneManager *m_sceneManager;
QUrl m_source;
};