summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2017-11-16 11:15:57 +0100
committerPaul Lemire <paul.lemire@kdab.com>2017-11-16 11:40:01 +0000
commitd732f9822959d60a8d1e85bbf20edf95da2a8cf4 (patch)
treec6be477650a0b1a6776d6c420fb13a6799a2b5d9
parentf2557d36835dcdcd669c68563c4892abd85fb053 (diff)
Fix: run filterlayerjob when enabled changes on Entities
Force caches to be rebuilt when layers have changes or enabled flag on Entities Change-Id: I23e9312ffcf8875ba18d4c8cd22aef706f5de24d Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
-rw-r--r--src/render/backend/renderer.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/render/backend/renderer.cpp b/src/render/backend/renderer.cpp
index e6d9c9d4b..7830faaa9 100644
--- a/src/render/backend/renderer.cpp
+++ b/src/render/backend/renderer.cpp
@@ -1487,7 +1487,8 @@ QVector<Qt3DCore::QAspectJobPtr> Renderer::renderBinJobs()
BackendNodeDirtySet changesToUnset = dirtyBits();
// Add jobs
- if (changesToUnset & AbstractRenderer::EntityEnabledDirty) {
+ const bool entitiesEnabledDirty = changesToUnset & AbstractRenderer::EntityEnabledDirty;
+ if (entitiesEnabledDirty) {
renderBinJobs.push_back(m_updateTreeEnabledJob);
m_calculateBoundingVolumeJob->addDependency(m_updateTreeEnabledJob);
}
@@ -1531,7 +1532,11 @@ QVector<Qt3DCore::QAspectJobPtr> Renderer::renderBinJobs()
renderBinJobs.push_back(m_textureGathererJob);
}
- const bool layersCacheNeedsToBeRebuilt = changesToUnset & AbstractRenderer::LayersDirty;
+
+ // Layer cache is dependent on layers, layer filters and the enabled flag
+ // on entities
+ const bool layersDirty = changesToUnset & AbstractRenderer::LayersDirty;
+ const bool layersCacheNeedsToBeRebuilt = layersDirty || entitiesEnabledDirty;
bool layersCacheRebuilt = false;
QMutexLocker lock(m_renderQueue->mutex());
@@ -1557,7 +1562,6 @@ QVector<Qt3DCore::QAspectJobPtr> Renderer::renderBinJobs()
builder.setLayerCacheNeedsToBeRebuilt(layersCacheNeedsToBeRebuilt);
builder.prepareJobs();
renderBinJobs.append(builder.buildJobHierachy());
-
}
layersCacheRebuilt = true;
@@ -1566,8 +1570,10 @@ QVector<Qt3DCore::QAspectJobPtr> Renderer::renderBinJobs()
}
// Only reset LayersDirty flag once we have really rebuilt the caches
- if (layersCacheNeedsToBeRebuilt && !layersCacheRebuilt)
+ if (layersDirty && !layersCacheRebuilt)
changesToUnset.setFlag(AbstractRenderer::LayersDirty, false);
+ if (entitiesEnabledDirty && !layersCacheRebuilt)
+ changesToUnset.setFlag(AbstractRenderer::EntityEnabledDirty, false);
// Clear dirty bits
// TO DO: When secondary GL thread is integrated, the following line can be removed