summaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/core/qentity/tst_qentity.cpp6
-rw-r--r--tests/auto/render/boundingsphere/tst_boundingsphere.cpp2
-rw-r--r--tests/auto/render/entity/tst_entity.cpp186
-rw-r--r--tests/auto/render/layerfiltering/tst_layerfiltering.cpp1
-rw-r--r--tests/auto/render/pickboundingvolumejob/tst_pickboundingvolumejob.cpp2
-rw-r--r--tests/auto/render/proximityfiltering/tst_proximityfiltering.cpp3
-rw-r--r--tests/auto/render/qcamera/tst_qcamera.cpp1
-rw-r--r--tests/auto/render/raycastingjob/tst_raycastingjob.cpp2
-rw-r--r--tests/auto/render/updateshaderdatatransformjob/tst_updateshaderdatatransformjob.cpp1
9 files changed, 202 insertions, 2 deletions
diff --git a/tests/auto/core/qentity/tst_qentity.cpp b/tests/auto/core/qentity/tst_qentity.cpp
index d7847342b..04f695953 100644
--- a/tests/auto/core/qentity/tst_qentity.cpp
+++ b/tests/auto/core/qentity/tst_qentity.cpp
@@ -73,7 +73,7 @@ class MyQComponent : public Qt3DCore::QComponent
{
Q_OBJECT
public:
- explicit MyQComponent(Qt3DCore::QNode *parent = 0)
+ explicit MyQComponent(Qt3DCore::QNode *parent = nullptr)
: QComponent(parent)
{}
};
@@ -90,7 +90,7 @@ public:
class MyEntity : public Qt3DCore::QEntity
{
public:
- explicit MyEntity(Qt3DCore::QNode *parent = 0)
+ explicit MyEntity(Qt3DCore::QNode *parent = nullptr)
: QEntity(parent)
{}
};
@@ -622,6 +622,8 @@ void tst_Entity::checkCloning_data()
Qt3DCore::QEntity *grandChild = new MyEntity(entityWithNestedChildren);
QVector<QNodeId> childIds = {child->id(), grandChild->id()};
QTest::newRow("entityWithNestedChildren") << entityWithNestedChildren << childIds << 4;
+
+ Q_UNUSED(dummy);
}
}
diff --git a/tests/auto/render/boundingsphere/tst_boundingsphere.cpp b/tests/auto/render/boundingsphere/tst_boundingsphere.cpp
index b35c6d31a..40d992347 100644
--- a/tests/auto/render/boundingsphere/tst_boundingsphere.cpp
+++ b/tests/auto/render/boundingsphere/tst_boundingsphere.cpp
@@ -123,6 +123,7 @@ void runRequiredJobs(Qt3DRender::TestAspect *test)
Qt3DRender::Render::UpdateWorldTransformJob updateWorldTransform;
updateWorldTransform.setRoot(test->sceneRoot());
+ updateWorldTransform.setManagers(test->nodeManagers());
updateWorldTransform.run();
// For each buffer
@@ -144,6 +145,7 @@ void runRequiredJobs(Qt3DRender::TestAspect *test)
Qt3DRender::Render::ExpandBoundingVolumeJob expandBVolume;
expandBVolume.setRoot(test->sceneRoot());
+ expandBVolume.setManagers(test->nodeManagers());
expandBVolume.run();
Qt3DRender::Render::UpdateMeshTriangleListJob updateTriangleList;
diff --git a/tests/auto/render/entity/tst_entity.cpp b/tests/auto/render/entity/tst_entity.cpp
index 0588a14e9..08d08404c 100644
--- a/tests/auto/render/entity/tst_entity.cpp
+++ b/tests/auto/render/entity/tst_entity.cpp
@@ -30,6 +30,8 @@
#include <Qt3DRender/private/entity_p.h>
#include <Qt3DRender/private/nodemanagers_p.h>
#include <Qt3DRender/private/managers_p.h>
+#include <Qt3DRender/private/entityvisitor_p.h>
+#include <Qt3DRender/private/entityaccumulator_p.h>
#include <Qt3DRender/QCameraLens>
#include <Qt3DCore/QPropertyUpdatedChange>
@@ -69,6 +71,24 @@ QVector<QNodeId> layersUuid(Entity *entity) { return entity->componentsUuid<Laye
QVector<QNodeId> shadersUuid(Entity *entity) { return entity->componentsUuid<ShaderData>(); }
QVector<QNodeId> environmentLightsUuid(Entity *entity) { return entity->componentsUuid<EnvironmentLight>(); }
+class CompleteVisitor : public EntityVisitor
+{
+public:
+ CompleteVisitor(NodeManagers *manager) : EntityVisitor(manager) { }
+
+ int count = 0;
+ Operation visit(Entity *) { count++; return Continue; }
+};
+
+class EnabledVisitor : public EntityVisitor
+{
+public:
+ EnabledVisitor(NodeManagers *manager) : EntityVisitor(manager) { }
+
+ int count = 0;
+ Operation visit(Entity *e) { count++; return e->isEnabled() ? Continue : Prune; }
+};
+
class tst_RenderEntity : public QObject
{
Q_OBJECT
@@ -419,6 +439,172 @@ private slots:
qDeleteAll(components);
}
+
+ void traversal() {
+ // GIVEN
+ TestRenderer renderer;
+ NodeManagers nodeManagers;
+ Qt3DCore::QEntity frontendEntityA, frontendEntityB, frontendEntityC;
+
+ auto entityCreator = [&nodeManagers, &renderer](const Qt3DCore::QEntity &frontEndEntity) {
+ HEntity renderNodeHandle = nodeManagers.renderNodesManager()->getOrAcquireHandle(frontEndEntity.id());
+ Entity *entity = nodeManagers.renderNodesManager()->data(renderNodeHandle);
+ entity->setNodeManagers(&nodeManagers);
+ entity->setHandle(renderNodeHandle);
+ entity->setRenderer(&renderer);
+ return entity;
+ };
+
+ auto backendA = entityCreator(frontendEntityA);
+ auto backendB = entityCreator(frontendEntityB);
+ auto backendC = entityCreator(frontendEntityC);
+
+ auto sendParentChange = [&nodeManagers](const Qt3DCore::QEntity &entity) {
+ const auto parentChange = QPropertyUpdatedChangePtr::create(entity.id());
+ parentChange->setPropertyName("parentEntityUpdated");
+ auto parent = entity.parentEntity();
+ parentChange->setValue(QVariant::fromValue(parent ? parent->id() : Qt3DCore::QNodeId()));
+
+ Entity *backendEntity = nodeManagers.renderNodesManager()->getOrCreateResource(entity.id());
+ backendEntity->sceneChangeEvent(parentChange);
+ };
+
+ // reparent B to A and C to B.
+ frontendEntityB.setParent(&frontendEntityA);
+ sendParentChange(frontendEntityB);
+ frontendEntityC.setParent(&frontendEntityB);
+ sendParentChange(frontendEntityC);
+
+ auto rebuildHierarchy = [](Entity *backend) {
+ backend->clearEntityHierarchy();
+ backend->rebuildEntityHierarchy();
+ };
+ rebuildHierarchy(backendA);
+ rebuildHierarchy(backendB);
+ rebuildHierarchy(backendC);
+
+ // WHEN
+ int visitCount = 0;
+ auto counter = [&visitCount](const Entity *) { ++visitCount; };
+ backendA->traverse(counter);
+
+ // THEN
+ QCOMPARE(visitCount, 3);
+ }
+
+ void visitor()
+ {
+ // GIVEN
+ TestRenderer renderer;
+ NodeManagers nodeManagers;
+ Qt3DCore::QEntity frontendEntityA, frontendEntityB, frontendEntityC;
+
+ auto entityCreator = [&nodeManagers, &renderer](const Qt3DCore::QEntity &frontEndEntity) {
+ HEntity renderNodeHandle = nodeManagers.renderNodesManager()->getOrAcquireHandle(frontEndEntity.id());
+ Entity *entity = nodeManagers.renderNodesManager()->data(renderNodeHandle);
+ entity->setNodeManagers(&nodeManagers);
+ entity->setHandle(renderNodeHandle);
+ entity->setRenderer(&renderer);
+ return entity;
+ };
+
+ auto backendA = entityCreator(frontendEntityA);
+ auto backendB = entityCreator(frontendEntityB);
+ auto backendC = entityCreator(frontendEntityC);
+
+ auto sendParentChange = [&nodeManagers](const Qt3DCore::QEntity &entity) {
+ const auto parentChange = QPropertyUpdatedChangePtr::create(entity.id());
+ parentChange->setPropertyName("parentEntityUpdated");
+ auto parent = entity.parentEntity();
+ parentChange->setValue(QVariant::fromValue(parent ? parent->id() : Qt3DCore::QNodeId()));
+
+ Entity *backendEntity = nodeManagers.renderNodesManager()->getOrCreateResource(entity.id());
+ backendEntity->sceneChangeEvent(parentChange);
+ };
+
+ // reparent B to A and C to B.
+ frontendEntityB.setParent(&frontendEntityA);
+ sendParentChange(frontendEntityB);
+ frontendEntityC.setParent(&frontendEntityB);
+ sendParentChange(frontendEntityC);
+
+ auto rebuildHierarchy = [](Entity *backend) {
+ backend->clearEntityHierarchy();
+ backend->rebuildEntityHierarchy();
+ };
+ rebuildHierarchy(backendA);
+ rebuildHierarchy(backendB);
+ rebuildHierarchy(backendC);
+
+ // WHEN
+ CompleteVisitor v1(&nodeManagers);
+ EnabledVisitor v2(&nodeManagers);
+ CompleteVisitor v3(&nodeManagers);
+ v3.setPruneDisabled(true);
+ v1.apply(backendA);
+ v2.apply(backendA);
+ v3.apply(backendA);
+
+ // THEN
+ QCOMPARE(v1.count, 3);
+ QCOMPARE(v2.count, 1); // nodes disabled by default but the first one is still visited before visitation finds out it's disabled
+ QCOMPARE(v3.count, 0); // nodes disabled by default
+ }
+
+ void accumulator()
+ {
+ // GIVEN
+ TestRenderer renderer;
+ NodeManagers nodeManagers;
+ Qt3DCore::QEntity frontendEntityA, frontendEntityB, frontendEntityC;
+
+ auto entityCreator = [&nodeManagers, &renderer](const Qt3DCore::QEntity &frontEndEntity) {
+ HEntity renderNodeHandle = nodeManagers.renderNodesManager()->getOrAcquireHandle(frontEndEntity.id());
+ Entity *entity = nodeManagers.renderNodesManager()->data(renderNodeHandle);
+ entity->setNodeManagers(&nodeManagers);
+ entity->setHandle(renderNodeHandle);
+ entity->setRenderer(&renderer);
+ return entity;
+ };
+
+ auto backendA = entityCreator(frontendEntityA);
+ auto backendB = entityCreator(frontendEntityB);
+ auto backendC = entityCreator(frontendEntityC);
+
+ auto sendParentChange = [&nodeManagers](const Qt3DCore::QEntity &entity) {
+ const auto parentChange = QPropertyUpdatedChangePtr::create(entity.id());
+ parentChange->setPropertyName("parentEntityUpdated");
+ auto parent = entity.parentEntity();
+ parentChange->setValue(QVariant::fromValue(parent ? parent->id() : Qt3DCore::QNodeId()));
+
+ Entity *backendEntity = nodeManagers.renderNodesManager()->getOrCreateResource(entity.id());
+ backendEntity->sceneChangeEvent(parentChange);
+ };
+
+ // reparent B to A and C to B.
+ frontendEntityB.setParent(&frontendEntityA);
+ sendParentChange(frontendEntityB);
+ frontendEntityC.setParent(&frontendEntityB);
+ sendParentChange(frontendEntityC);
+
+ auto rebuildHierarchy = [](Entity *backend) {
+ backend->clearEntityHierarchy();
+ backend->rebuildEntityHierarchy();
+ };
+ rebuildHierarchy(backendA);
+ rebuildHierarchy(backendB);
+ rebuildHierarchy(backendC);
+
+ // WHEN
+ EntityAccumulator v1(&nodeManagers);
+ EntityAccumulator v2([](Entity *e) { return e->isEnabled(); }, &nodeManagers);
+ const auto r1 = v1.apply(backendA);
+ const auto r2 = v2.apply(backendA);
+
+ // THEN
+ QCOMPARE(r1.count(), 3);
+ QCOMPARE(r2.count(), 0);
+ }
};
QTEST_APPLESS_MAIN(tst_RenderEntity)
diff --git a/tests/auto/render/layerfiltering/tst_layerfiltering.cpp b/tests/auto/render/layerfiltering/tst_layerfiltering.cpp
index 9b8636f49..8c72829e0 100644
--- a/tests/auto/render/layerfiltering/tst_layerfiltering.cpp
+++ b/tests/auto/render/layerfiltering/tst_layerfiltering.cpp
@@ -640,6 +640,7 @@ private Q_SLOTS:
Qt3DRender::Render::UpdateTreeEnabledJob updateTreeEnabledJob;
updateTreeEnabledJob.setRoot(backendRoot);
+ updateTreeEnabledJob.setManagers(aspect->nodeManagers());
updateTreeEnabledJob.run();
// WHEN
diff --git a/tests/auto/render/pickboundingvolumejob/tst_pickboundingvolumejob.cpp b/tests/auto/render/pickboundingvolumejob/tst_pickboundingvolumejob.cpp
index cd82d69d8..1d5d56cf9 100644
--- a/tests/auto/render/pickboundingvolumejob/tst_pickboundingvolumejob.cpp
+++ b/tests/auto/render/pickboundingvolumejob/tst_pickboundingvolumejob.cpp
@@ -117,6 +117,7 @@ void runRequiredJobs(Qt3DRender::TestAspect *test)
Qt3DRender::Render::UpdateWorldTransformJob updateWorldTransform;
updateWorldTransform.setRoot(test->sceneRoot());
+ updateWorldTransform.setManagers(test->nodeManagers());
updateWorldTransform.run();
// For each buffer
@@ -138,6 +139,7 @@ void runRequiredJobs(Qt3DRender::TestAspect *test)
Qt3DRender::Render::ExpandBoundingVolumeJob expandBVolume;
expandBVolume.setRoot(test->sceneRoot());
+ expandBVolume.setManagers(test->nodeManagers());
expandBVolume.run();
Qt3DRender::Render::UpdateMeshTriangleListJob updateTriangleList;
diff --git a/tests/auto/render/proximityfiltering/tst_proximityfiltering.cpp b/tests/auto/render/proximityfiltering/tst_proximityfiltering.cpp
index 7bb3c16a7..c8d862b2e 100644
--- a/tests/auto/render/proximityfiltering/tst_proximityfiltering.cpp
+++ b/tests/auto/render/proximityfiltering/tst_proximityfiltering.cpp
@@ -253,10 +253,12 @@ private Q_SLOTS:
Qt3DRender::Render::UpdateTreeEnabledJob updateTreeEnabledJob;
updateTreeEnabledJob.setRoot(backendRoot);
+ updateTreeEnabledJob.setManagers(aspect->nodeManagers());
updateTreeEnabledJob.run();
Qt3DRender::Render::UpdateWorldTransformJob updateWorldTransform;
updateWorldTransform.setRoot(backendRoot);
+ updateWorldTransform.setManagers(aspect->nodeManagers());
updateWorldTransform.run();
Qt3DRender::Render::CalculateBoundingVolumeJob calcBVolume;
@@ -270,6 +272,7 @@ private Q_SLOTS:
Qt3DRender::Render::ExpandBoundingVolumeJob expandBVolume;
expandBVolume.setRoot(backendRoot);
+ expandBVolume.setManagers(aspect->nodeManagers());
expandBVolume.run();
// WHEN
diff --git a/tests/auto/render/qcamera/tst_qcamera.cpp b/tests/auto/render/qcamera/tst_qcamera.cpp
index 7aef2af7d..fb2d3ea64 100644
--- a/tests/auto/render/qcamera/tst_qcamera.cpp
+++ b/tests/auto/render/qcamera/tst_qcamera.cpp
@@ -106,6 +106,7 @@ void runRequiredJobs(Qt3DRender::TestAspect *test)
Qt3DRender::Render::UpdateWorldTransformJob updateWorldTransform;
updateWorldTransform.setRoot(test->sceneRoot());
+ updateWorldTransform.setManagers(test->nodeManagers());
updateWorldTransform.run();
}
diff --git a/tests/auto/render/raycastingjob/tst_raycastingjob.cpp b/tests/auto/render/raycastingjob/tst_raycastingjob.cpp
index 411bb9160..9477947ac 100644
--- a/tests/auto/render/raycastingjob/tst_raycastingjob.cpp
+++ b/tests/auto/render/raycastingjob/tst_raycastingjob.cpp
@@ -113,6 +113,7 @@ void runRequiredJobs(Qt3DRender::TestAspect *test)
Qt3DRender::Render::UpdateWorldTransformJob updateWorldTransform;
updateWorldTransform.setRoot(test->sceneRoot());
+ updateWorldTransform.setManagers(test->nodeManagers());
updateWorldTransform.run();
// For each buffer
@@ -134,6 +135,7 @@ void runRequiredJobs(Qt3DRender::TestAspect *test)
Qt3DRender::Render::ExpandBoundingVolumeJob expandBVolume;
expandBVolume.setRoot(test->sceneRoot());
+ expandBVolume.setManagers(test->nodeManagers());
expandBVolume.run();
Qt3DRender::Render::UpdateMeshTriangleListJob updateTriangleList;
diff --git a/tests/auto/render/updateshaderdatatransformjob/tst_updateshaderdatatransformjob.cpp b/tests/auto/render/updateshaderdatatransformjob/tst_updateshaderdatatransformjob.cpp
index 4bab46423..e38d6ba08 100644
--- a/tests/auto/render/updateshaderdatatransformjob/tst_updateshaderdatatransformjob.cpp
+++ b/tests/auto/render/updateshaderdatatransformjob/tst_updateshaderdatatransformjob.cpp
@@ -95,6 +95,7 @@ void runRequiredJobs(Qt3DRender::TestAspect *test)
Qt3DRender::Render::UpdateWorldTransformJob updateWorldTransform;
updateWorldTransform.setRoot(test->sceneRoot());
+ updateWorldTransform.setManagers(test->nodeManagers());
updateWorldTransform.run();
}