Skip to content

Commit e14043f

Browse files
committed
improve Clusters clearing logic
- clear clusters on ClusterConfig::None or missing render target - don't clear cluster.lights otherwise so it can be reused
1 parent 96d8abc commit e14043f

File tree

1 file changed

+11
-3
lines changed

1 file changed

+11
-3
lines changed

crates/bevy_pbr/src/light.rs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -389,6 +389,13 @@ impl Clusters {
389389
// NOTE: Maximum 4096 clusters due to uniform buffer size constraints
390390
debug_assert!(self.dimensions.x * self.dimensions.y * self.dimensions.z <= 4096);
391391
}
392+
fn clear(&mut self) {
393+
self.tile_size = UVec2::ONE;
394+
self.dimensions = UVec3::ONE;
395+
self.near = 0.0;
396+
self.far = 0.0;
397+
self.lights.clear();
398+
}
392399
}
393400

394401
fn clip_to_view(inverse_projection: Mat4, clip: Vec4) -> Vec4 {
@@ -717,21 +724,22 @@ pub(crate) fn assign_lights_to_clusters(
717724
for (view_entity, camera_transform, camera, frustum, config, clusters, mut visible_lights) in
718725
views.iter_mut()
719726
{
727+
let clusters = clusters.into_inner();
728+
720729
if matches!(config, ClusterConfig::None) && visible_lights.is_some() {
721730
commands.entity(view_entity).remove::<VisiblePointLights>();
731+
clusters.clear();
722732
continue;
723733
}
724734

725-
let clusters = clusters.into_inner();
726735
let screen_size =
727736
if let Some(screen_size) = camera.target.get_physical_size(&windows, &images) {
728737
screen_size
729738
} else {
739+
clusters.clear();
730740
continue;
731741
};
732742

733-
clusters.lights.clear();
734-
735743
let mut requested_cluster_dimensions = config.dimensions_for_screen_size(screen_size);
736744

737745
let view_transform = camera_transform.compute_matrix();

0 commit comments

Comments
 (0)