diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2020-12-01 16:59:02 +0100 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2020-12-01 17:08:13 +0100 |
commit | f56bc203388866614d8c9f3653c5c835a58ff8d7 (patch) | |
tree | fde189ea4ae1ded123525c0be45b51764240d4f4 /src/render | |
parent | 9ef97eaee6a1e795f0e5c2af7df29148914fb1b3 (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.h | 7 |
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); |