summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/render/io/scene.cpp10
-rw-r--r--src/render/io/scene_p.h2
-rw-r--r--tests/auto/render/sceneloader/tst_sceneloader.cpp22
3 files changed, 34 insertions, 0 deletions
diff --git a/src/render/io/scene.cpp b/src/render/io/scene.cpp
index bfb5e4571..cf1ca4736 100644
--- a/src/render/io/scene.cpp
+++ b/src/render/io/scene.cpp
@@ -65,6 +65,16 @@ void Scene::cleanup()
m_source.clear();
}
+void Scene::setStatus(QSceneLoader::Status status)
+{
+ // Send the new subtree to the frontend or notify failure
+ auto e = Qt3DCore::QPropertyUpdatedChangePtr::create(peerId());
+ e->setDeliveryFlags(Qt3DCore::QSceneChange::DeliverToAll);
+ e->setPropertyName("status");
+ e->setValue(QVariant::fromValue(status));
+ notifyObservers(e);
+}
+
void Scene::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change)
{
const auto typedChange = qSharedPointerCast<Qt3DCore::QNodeCreatedChange<QSceneLoaderData>>(change);
diff --git a/src/render/io/scene_p.h b/src/render/io/scene_p.h
index fc3494489..42e3121c9 100644
--- a/src/render/io/scene_p.h
+++ b/src/render/io/scene_p.h
@@ -52,6 +52,7 @@
//
#include <Qt3DRender/private/backendnode_p.h>
+#include <Qt3DRender/qsceneloader.h>
#include <QtGlobal>
#include <QUrl>
@@ -77,6 +78,7 @@ public:
void setSceneManager(SceneManager *manager);
void cleanup();
+ void setStatus(QSceneLoader::Status status);
private:
void initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) Q_DECL_FINAL;
diff --git a/tests/auto/render/sceneloader/tst_sceneloader.cpp b/tests/auto/render/sceneloader/tst_sceneloader.cpp
index 7d31590d9..05f4f08b6 100644
--- a/tests/auto/render/sceneloader/tst_sceneloader.cpp
+++ b/tests/auto/render/sceneloader/tst_sceneloader.cpp
@@ -149,6 +149,28 @@ private Q_SLOTS:
arbiter.events.clear();
}
+
+ void checkStatusTransmission()
+ {
+ // GIVEN
+ TestRenderer renderer;
+ TestArbiter arbiter;
+ Qt3DRender::Render::Scene sceneLoader;
+
+ Qt3DCore::QBackendNodePrivate::get(&sceneLoader)->setArbiter(&arbiter);
+ sceneLoader.setRenderer(&renderer);
+
+ // WHEN
+ sceneLoader.setStatus(Qt3DRender::QSceneLoader::Ready);
+
+ // THEN
+ Qt3DCore::QPropertyUpdatedChangePtr change = arbiter.events.first().staticCast<Qt3DCore::QPropertyUpdatedChange>();
+ QCOMPARE(arbiter.events.count(), 1);
+ QCOMPARE(change->propertyName(), "status");
+ QCOMPARE(change->value().value<Qt3DRender::QSceneLoader::Status>(), Qt3DRender::QSceneLoader::Ready);
+
+ arbiter.events.clear();
+ }
};
// Note: setSceneSubtree needs a QCoreApplication