summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2021-05-03 14:39:18 +0200
committerPaul Lemire <paul.lemire@kdab.com>2021-07-30 10:12:00 +0200
commit922053967356e637c3090ee59f090df34a986c6b (patch)
treea28212bf43d333bde299962aba2c3df15d94c9c6
parent3e7af0520337bc950de37a3ef194bc07be4c69e1 (diff)
Rerun bounding volume update jobs when entity enabled property changes
Otherwise, this results in the bounding volume being out of sync with entities (an entity initially disabled that gets enabled would have an empty bounding volume) until some other events in the scene triggers a rebuild. Task-number: QTBUG-93035 Change-Id: Ia21eec0eb5601169e1789321080803a5aed12e82 Reviewed-by: Mike Krus <mike.krus@kdab.com> (cherry picked from commit d29f3b277d0f949f2fa0b0e0214e38ec3e790c40) Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
-rw-r--r--src/render/frontend/qrenderaspect.cpp9
-rw-r--r--tests/auto/render/aspect/tst_aspect.cpp4
2 files changed, 10 insertions, 3 deletions
diff --git a/src/render/frontend/qrenderaspect.cpp b/src/render/frontend/qrenderaspect.cpp
index 15322ef8e..58178b718 100644
--- a/src/render/frontend/qrenderaspect.cpp
+++ b/src/render/frontend/qrenderaspect.cpp
@@ -717,17 +717,20 @@ QVector<Qt3DCore::QAspectJobPtr> QRenderAspect::jobsToExecute(qint64 time)
if (entitiesEnabledDirty)
jobs.push_back(d->m_updateTreeEnabledJob);
- if (dirtyBitsForFrame & AbstractRenderer::TransformDirty) {
+ if (entitiesEnabledDirty ||
+ dirtyBitsForFrame & AbstractRenderer::TransformDirty) {
jobs.push_back(d->m_worldTransformJob);
jobs.push_back(d->m_updateWorldBoundingVolumeJob);
}
- if (dirtyBitsForFrame & AbstractRenderer::GeometryDirty ||
+ if (entitiesEnabledDirty ||
+ dirtyBitsForFrame & AbstractRenderer::GeometryDirty ||
dirtyBitsForFrame & AbstractRenderer::BuffersDirty) {
jobs.push_back(d->m_calculateBoundingVolumeJob);
}
- if (dirtyBitsForFrame & AbstractRenderer::GeometryDirty ||
+ if (entitiesEnabledDirty ||
+ dirtyBitsForFrame & AbstractRenderer::GeometryDirty ||
dirtyBitsForFrame & AbstractRenderer::TransformDirty) {
jobs.push_back(d->m_expandBoundingVolumeJob);
}
diff --git a/tests/auto/render/aspect/tst_aspect.cpp b/tests/auto/render/aspect/tst_aspect.cpp
index 9bd5df698..5d0ead7ef 100644
--- a/tests/auto/render/aspect/tst_aspect.cpp
+++ b/tests/auto/render/aspect/tst_aspect.cpp
@@ -139,6 +139,10 @@ private Q_SLOTS:
// THEN -> enabled dirty
QCOMPARE(jobs.size(),
1 + // UpdateTreeEnabled
+ 1 + // UpdateTransform
+ 1 + // UpdateWorldBoundingVolume
+ 1 + // CalcBoundingVolume
+ 1 + // ExpandBoundingVolume
1 + // SyncLoadingJobs
1 + // UpdateSkinningPalette
1 + // UpdateLevelOfDetail