diff options
author | Mike Krus <mike.krus@kdab.com> | 2020-02-05 10:35:45 +0000 |
---|---|---|
committer | Mike Krus <mike.krus@kdab.com> | 2020-02-05 10:35:45 +0000 |
commit | ce4824da7739dbe51abd201c78db2e8a8e31b6e9 (patch) | |
tree | 15fd7c64f4e9d98786b4b901041143efb6462a23 | |
parent | f1f387c22dac8748a7edb1f4aa1ea6dac7dfbdfd (diff) | |
parent | d33c1630b09fcdad83f69bfd2530354584b2f42b (diff) |
Merge remote-tracking branch '5.14' into 5.15
Change-Id: I76b7e29d240b89e27ef509b30cc3cd622f281fc9
-rw-r--r-- | dist/changes-5.14.1 | 20 | ||||
-rw-r--r-- | src/logic/executor.cpp | 4 | ||||
-rw-r--r-- | src/logic/qlogicaspect.cpp | 1 | ||||
-rw-r--r-- | src/render/backend/entity.cpp | 4 | ||||
-rw-r--r-- | tests/auto/render/entity/tst_entity.cpp | 42 | ||||
-rw-r--r-- | tests/auto/render/scene2d/tst_scene2d.cpp | 2 |
6 files changed, 65 insertions, 8 deletions
diff --git a/dist/changes-5.14.1 b/dist/changes-5.14.1 new file mode 100644 index 000000000..d0086381b --- /dev/null +++ b/dist/changes-5.14.1 @@ -0,0 +1,20 @@ +Qt 5.14.1 is a bug-fix release. It maintains both forward and backward +compatibility (source and binary) with Qt 5.14.0. + +For more details, refer to the online documentation included in this +distribution. The documentation is also available online: + +https://doc.qt.io/qt-5/index.html + +The Qt version 5.14 series is binary compatible with the 5.13.x series. +Applications compiled for 5.13 will continue to run with 5.14. + +Some of the changes listed in this file include issue tracking numbers +corresponding to tasks in the Qt Bug Tracker: + +https://bugreports.qt.io/ + +Each of these identifiers can be entered in the bug tracker to obtain more +information about a particular change. + + - This release contains only minor code improvements. diff --git a/src/logic/executor.cpp b/src/logic/executor.cpp index 1c428db47..41d2f2e31 100644 --- a/src/logic/executor.cpp +++ b/src/logic/executor.cpp @@ -89,7 +89,9 @@ bool Executor::event(QEvent *e) */ void Executor::processLogicFrameUpdates(float dt) { - Q_ASSERT(m_scene); + if (!m_scene || m_nodeIds.isEmpty()) + return; + const QVector<QNode *> nodes = m_scene->lookupNodes(m_nodeIds); for (QNode *node : nodes) { QFrameAction *frameAction = qobject_cast<QFrameAction *>(node); diff --git a/src/logic/qlogicaspect.cpp b/src/logic/qlogicaspect.cpp index 649a14f25..c4459a84d 100644 --- a/src/logic/qlogicaspect.cpp +++ b/src/logic/qlogicaspect.cpp @@ -84,6 +84,7 @@ void QLogicAspectPrivate::onEngineAboutToShutdown() // Throw away any pending work that may deadlock during the shutdown procedure // when the main thread waits for any queued jobs to finish. m_executor->clearQueueAndProceed(); + m_executor->setScene(nullptr); } void QLogicAspectPrivate::registerBackendTypes() diff --git a/src/render/backend/entity.cpp b/src/render/backend/entity.cpp index 682dc000e..d766baaaf 100644 --- a/src/render/backend/entity.cpp +++ b/src/render/backend/entity.cpp @@ -156,6 +156,10 @@ void Entity::cleanup() m_parentHandle = {}; m_boundingDirty = false; QBackendNode::setEnabled(false); + + // Ensure we rebuild caches when an Entity gets cleaned up + if (m_renderer) + markDirty(AbstractRenderer::AllDirty); } void Entity::setParentHandle(HEntity parentHandle) diff --git a/tests/auto/render/entity/tst_entity.cpp b/tests/auto/render/entity/tst_entity.cpp index 2629e6953..a762330dd 100644 --- a/tests/auto/render/entity/tst_entity.cpp +++ b/tests/auto/render/entity/tst_entity.cpp @@ -126,11 +126,13 @@ private slots: TestRenderer renderer; NodeManagers nodeManagers; Qt3DRender::Render::Entity entity; - Qt3DCore::QEntity dummyFrontendEntity; entity.setRenderer(&renderer); entity.setNodeManagers(&nodeManagers); // THEN + QCOMPARE(renderer.dirtyBits(), 0); + + // THEN QVERIFY(entity.componentUuid<Transform>().isNull()); QVERIFY(entity.componentUuid<CameraLens>().isNull()); QVERIFY(entity.componentUuid<Material>().isNull()); @@ -144,15 +146,16 @@ private slots: QVERIFY(!entity.isBoundingVolumeDirty()); QVERIFY(entity.childrenHandles().isEmpty()); QVERIFY(entity.layerIds().isEmpty()); + QCOMPARE(entity.renderer(), &renderer); + + QCOMPARE(renderer.dirtyBits(), 0); // WHEN for (QComponent *component : components) EntityPrivate::get(&entity)->componentAdded(component); - Qt3DCore::QEntity dummyFrontendEntityChild; - // Create nodes in the backend manager - nodeManagers.renderNodesManager()->getOrCreateResource(dummyFrontendEntity.id()); - nodeManagers.renderNodesManager()->getOrCreateResource(dummyFrontendEntityChild.id()); + QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::AllDirty); + renderer.resetDirty(); // THEN QVERIFY(!entity.componentUuid<Transform>().isNull()); @@ -168,7 +171,7 @@ private slots: QVERIFY(entity.isBoundingVolumeDirty()); QVERIFY(entity.childrenHandles().isEmpty()); QVERIFY(!entity.layerIds().isEmpty()); - QVERIFY(renderer.dirtyBits() != 0); + QCOMPARE(renderer.dirtyBits(), 0); bool containsAll = entity.containsComponentsOfType<Transform, CameraLens, Material, GeometryRenderer, ObjectPicker, ComputeCommand, Armature>(); QVERIFY(containsAll); @@ -193,6 +196,9 @@ private slots: containsAll = entity.containsComponentsOfType<Transform, CameraLens, Material, GeometryRenderer, ObjectPicker, ComputeCommand, Armature>(); QVERIFY(!containsAll); + + QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::AllDirty); + renderer.resetDirty(); } void checkEntityReparenting() @@ -215,6 +221,9 @@ private slots: QVERIFY(backendB->childrenHandles().isEmpty()); QVERIFY(backendC->childrenHandles().isEmpty()); + QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::AllDirty); + renderer.resetDirty(); + // WHEN auto sendParentChange = [&nodeManagers](const Qt3DCore::QEntity &entity) { Entity *backendEntity = nodeManagers.renderNodesManager()->getOrCreateResource(entity.id()); @@ -236,6 +245,9 @@ private slots: QCOMPARE(backendB->childrenHandles().count(), 1); QVERIFY(backendC->childrenHandles().isEmpty()); + QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::AllDirty); + renderer.resetDirty(); + // WHEN - reparent C to A frontendEntityC.setParent(&frontendEntityA); sendParentChange(frontendEntityC); @@ -249,6 +261,9 @@ private slots: QVERIFY(backendB->childrenHandles().isEmpty()); QVERIFY(backendC->childrenHandles().isEmpty()); + QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::AllDirty); + renderer.resetDirty(); + // WHEN - reparent B to null. frontendEntityB.setParent(static_cast<Qt3DCore::QNode *>(nullptr)); sendParentChange(frontendEntityB); @@ -262,6 +277,9 @@ private slots: QVERIFY(!backendA->childrenHandles().contains(backendB->handle())); QVERIFY(backendB->childrenHandles().isEmpty()); QVERIFY(backendC->childrenHandles().isEmpty()); + + QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::AllDirty); + renderer.resetDirty(); } void checkEntityCleanup() @@ -296,6 +314,9 @@ private slots: QVERIFY(backendB->childrenHandles().isEmpty()); QVERIFY(backendC->childrenHandles().isEmpty()); + QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::AllDirty); + renderer.resetDirty(); + // WHEN - cleaning up a child backendC->cleanup(); @@ -310,6 +331,9 @@ private slots: QVERIFY(backendB->childrenHandles().isEmpty()); QVERIFY(backendC->childrenHandles().isEmpty()); + QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::AllDirty); + renderer.resetDirty(); + // WHEN (cleaning up parent) backendA->cleanup(); @@ -322,6 +346,9 @@ private slots: QVERIFY(backendB->childrenHandles().isEmpty()); QVERIFY(backendC->childrenHandles().isEmpty()); + QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::AllDirty); + renderer.resetDirty(); + // WHEN backendB->cleanup(); @@ -333,6 +360,9 @@ private slots: QVERIFY(backendA->parent() == nullptr); QVERIFY(backendB->parent() == nullptr); QVERIFY(backendC->parent() == nullptr); + + QVERIFY(renderer.dirtyBits() & Qt3DRender::Render::AbstractRenderer::AllDirty); + renderer.resetDirty(); } void shouldHandleSingleComponentEvents_data() diff --git a/tests/auto/render/scene2d/tst_scene2d.cpp b/tests/auto/render/scene2d/tst_scene2d.cpp index 3d943eae7..b0a7fbeb8 100644 --- a/tests/auto/render/scene2d/tst_scene2d.cpp +++ b/tests/auto/render/scene2d/tst_scene2d.cpp @@ -209,6 +209,7 @@ private Q_SLOTS: QScopedPointer<TestWindow> testWindow(new TestWindow()); Scene2DSharedObjectPtr sharedObject(new Scene2DSharedObject(nullptr)); + TestRenderer renderer; QScopedPointer<Scene2D> scene2d(new Scene2D()); QScopedPointer<NodeManagers> nodeManagers(new NodeManagers()); Qt3DRender::QGeometry *geometry = new Qt3DRender::QGeometry(); @@ -218,7 +219,6 @@ private Q_SLOTS: Qt3DRender::QBuffer *dataBuffer =new Qt3DRender::QBuffer(); QScopedPointer<Qt3DCore::QEntity> entity(new Qt3DCore::QEntity()); entity->addComponent(geometryRenderer); - TestRenderer renderer; renderer.setNodeManagers(nodeManagers.data()); scene2d->setRenderer(&renderer); scene2d->setEnabled(true); |