summaryrefslogtreecommitdiffstats
path: root/src/render
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2020-12-01 16:59:02 +0100
committerPaul Lemire <paul.lemire@kdab.com>2020-12-01 17:08:13 +0100
commitf56bc203388866614d8c9f3653c5c835a58ff8d7 (patch)
treefde189ea4ae1ded123525c0be45b51764240d4f4 /src/render
parent9ef97eaee6a1e795f0e5c2af7df29148914fb1b3 (diff)
Force command filtering based on frustum culling result
Change-Id: I9def719816548d45e1235cb4f65bf0c0d6d0f405 Pick-to: 6.0 6.0.0 Reviewed-by: Mike Krus <mike.krus@kdab.com>
Diffstat (limited to 'src/render')
-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);