diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2017-11-16 11:15:57 +0100 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2017-11-16 11:40:01 +0000 |
commit | d732f9822959d60a8d1e85bbf20edf95da2a8cf4 (patch) | |
tree | c6be477650a0b1a6776d6c420fb13a6799a2b5d9 | |
parent | f2557d36835dcdcd669c68563c4892abd85fb053 (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.cpp | 14 |
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 |