summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2016-08-11 09:09:51 +0200
committerPaul Lemire <paul.lemire@kdab.com>2016-08-16 06:26:46 +0000
commit68f8d0e6e174643a1d0c529aff0fe3d377ea9ed4 (patch)
tree4b25860a55bc894450155c01a9d59e61bbc4ee73 /tests
parent783440e2b1e21b13699f0dd20bb8065f65d8e5b0 (diff)
Entity: fix -> properly clear childrenHandles vector
When cleanup is called that means an Entity needs to be recycled for reuse later on. The children handles vector wasn't cleared which resulted in it containing invalid handles when the Entity element was reused. In turn that eventually resulted in asserts in the handle manager when that Entity was released again (which explains crashes with the QSceneLoader changing sources). Change-Id: Ic2e69132e4a5186f92936593ddcf3da72a7e1446 Task-number: QTBUG-54889 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/render/entity/tst_entity.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/tests/auto/render/entity/tst_entity.cpp b/tests/auto/render/entity/tst_entity.cpp
index 627891375..0bd3a6054 100644
--- a/tests/auto/render/entity/tst_entity.cpp
+++ b/tests/auto/render/entity/tst_entity.cpp
@@ -28,9 +28,12 @@
#include <QtTest/QtTest>
#include <Qt3DRender/private/entity_p.h>
+#include <Qt3DRender/private/nodemanagers_p.h>
+#include <Qt3DRender/private/managers_p.h>
#include <Qt3DRender/QCameraLens>
#include <Qt3DCore/QPropertyUpdatedChange>
+#include <Qt3DCore/QPropertyNodeAddedChange>
#include <Qt3DCore/QComponentAddedChange>
#include <Qt3DCore/QComponentRemovedChange>
#include <Qt3DCore/QTransform>
@@ -94,9 +97,11 @@ private slots:
QFETCH(QList<QComponent*>, components);
TestRenderer renderer;
+ NodeManagers nodeManagers;
Qt3DRender::Render::Entity entity;
Qt3DCore::QEntity dummyFrontendEntity;
entity.setRenderer(&renderer);
+ entity.setNodeManagers(&nodeManagers);
// THEN
QVERIFY(entity.componentUuid<Transform>().isNull());
@@ -108,6 +113,7 @@ private slots:
QVERIFY(entity.componentsUuid<Layer>().isEmpty());
QVERIFY(entity.componentsUuid<ShaderData>().isEmpty());
QVERIFY(!entity.isBoundingVolumeDirty());
+ QVERIFY(entity.childrenHandles().isEmpty());
// WHEN
Q_FOREACH (QComponent *component, components) {
@@ -115,6 +121,15 @@ private slots:
entity.sceneChangeEvent(addChange);
}
+ Qt3DCore::QEntity dummyFrontendEntityChild;
+ // Create nodes in the backend manager
+ nodeManagers.renderNodesManager()->getOrCreateResource(dummyFrontendEntity.id());
+ nodeManagers.renderNodesManager()->getOrCreateResource(dummyFrontendEntityChild.id());
+ // Send children added event to entity
+ const auto addEntityChange = QPropertyNodeAddedChangePtr::create(dummyFrontendEntity.id(), &dummyFrontendEntityChild);
+ entity.sceneChangeEvent(addEntityChange);
+
+
// THEN
QVERIFY(!entity.componentUuid<Transform>().isNull());
QVERIFY(!entity.componentUuid<CameraLens>().isNull());
@@ -125,6 +140,7 @@ private slots:
QVERIFY(!entity.componentsUuid<Layer>().isEmpty());
QVERIFY(!entity.componentsUuid<ShaderData>().isEmpty());
QVERIFY(entity.isBoundingVolumeDirty());
+ QVERIFY(!entity.childrenHandles().isEmpty());
QVERIFY(renderer.dirtyBits() != 0);
bool containsAll = entity.containsComponentsOfType<Transform, CameraLens, Material, GeometryRenderer, ObjectPicker, ComputeCommand>();
QVERIFY(containsAll);
@@ -142,6 +158,7 @@ private slots:
QVERIFY(entity.componentsUuid<Layer>().isEmpty());
QVERIFY(entity.componentsUuid<ShaderData>().isEmpty());
QVERIFY(!entity.isBoundingVolumeDirty());
+ QVERIFY(entity.childrenHandles().isEmpty());
containsAll = entity.containsComponentsOfType<Transform, CameraLens, Material, GeometryRenderer, ObjectPicker, ComputeCommand>();
QVERIFY(!containsAll);
}