diff options
-rw-r--r-- | src/render/io/qsceneloader.cpp | 8 | ||||
-rw-r--r-- | src/render/io/qsceneloader.h | 1 | ||||
-rw-r--r-- | src/render/io/qsceneloader_p.h | 5 | ||||
-rw-r--r-- | src/render/io/scene.cpp | 10 | ||||
-rw-r--r-- | src/render/io/scene_p.h | 2 |
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; }; |