summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2020-12-01 16:59:02 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2020-12-02 05:48:24 +0000
commit07a216f327bea9a4f7880fe44eda7e27c2bbe820 (patch)
treecfee36d379480027127b4b4ea2e1532daff39d08
parentfa26369dedf9ae96dc1971dc8b6dbbcd8cdd7351 (diff)
Force command filtering based on frustum culling result
Change-Id: I9def719816548d45e1235cb4f65bf0c0d6d0f405 Reviewed-by: Mike Krus <mike.krus@kdab.com> (cherry picked from commit f56bc203388866614d8c9f3653c5c835a58ff8d7) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/render/jobs/rendersyncjobs_p.h7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/render/jobs/rendersyncjobs_p.h b/src/render/jobs/rendersyncjobs_p.h
index c2ad714a3..856126e24 100644
--- a/src/render/jobs/rendersyncjobs_p.h
+++ b/src/render/jobs/rendersyncjobs_p.h
@@ -299,7 +299,7 @@ public:
const bool lightsCacheRebuild = m_rebuildFlags.testFlag(RebuildFlag::LightCacheRebuild);
const bool cameraDirty = cacheForLeaf.viewProjectionMatrix != rv->viewProjectionMatrix();
const bool hasProximityFilter = !rv->proximityFilterIds().empty();
- const bool commandFilteringRequired =
+ bool commandFilteringRequired =
fullRebuild ||
layerFilteringRebuild ||
lightsCacheRebuild ||
@@ -375,9 +375,12 @@ public:
// We need to check this regardless of whether the camera has moved since
// entities in the scene themselves could have moved
if (isDraw && rv->frustumCulling()) {
- cacheForLeaf.filteredAndCulledRenderables = entitiesInSubset(
+ const std::vector<Entity *> &subset = entitiesInSubset(
cacheForLeaf.layeredFilteredRenderables,
m_frustumCullingJob->visibleEntities());
+ // Force command filtering if what we contain in cache and what we filtered differ
+ commandFilteringRequired |= (subset != cacheForLeaf.filteredAndCulledRenderables);
+ cacheForLeaf.filteredAndCulledRenderables = subset;
}
rv->setMaterialParameterTable(cacheForLeaf.materialParameterGatherer);