Skip to content

Commit 5de55f3

Browse files
committed
clear clusters.lights/.aabb as needed
1 parent fe4e608 commit 5de55f3

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

crates/bevy_pbr/src/light.rs

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

395403
fn clip_to_view(inverse_projection: Mat4, clip: Vec4) -> Vec4 {
@@ -787,22 +795,22 @@ pub(crate) fn assign_lights_to_clusters(
787795
for (view_entity, camera_transform, camera, frustum, config, clusters, mut visible_lights) in
788796
views.iter_mut()
789797
{
798+
let clusters = clusters.into_inner();
799+
790800
if matches!(config, ClusterConfig::None) && visible_lights.is_some() {
791801
commands.entity(view_entity).remove::<VisiblePointLights>();
802+
clusters.clear();
792803
continue;
793804
}
794805

795-
let clusters = clusters.into_inner();
796806
let screen_size =
797807
if let Some(screen_size) = camera.target.get_physical_size(&windows, &images) {
798808
screen_size
799809
} else {
810+
clusters.clear();
800811
continue;
801812
};
802813

803-
clusters.aabbs.clear();
804-
clusters.lights.clear();
805-
806814
let mut requested_cluster_dimensions = config.dimensions_for_screen_size(screen_size);
807815

808816
let view_transform = camera_transform.compute_matrix();
@@ -931,6 +939,7 @@ pub(crate) fn assign_lights_to_clusters(
931939
// so that we can calculate the cluster index in the fragment shader!
932940
// I (Rob Swain) choose to scan along rows of tiles in x,y, and for each tile then scan
933941
// along z
942+
clusters.aabbs.clear();
934943
for y in 0..clusters.dimensions.y {
935944
for x in 0..clusters.dimensions.x {
936945
for z in 0..clusters.dimensions.z {

0 commit comments

Comments
 (0)