From 0a0a26a0af0484c49baf857a9ff8dda65de74b28 Mon Sep 17 00:00:00 2001 From: andoco Date: Thu, 1 Jul 2021 20:41:40 +0000 Subject: [PATCH] Fix unsetting RenderLayers bit in without fn (#2409) # Objective Fixes how the layer bit is unset in the RenderLayers bit mask when calling the `without` method. ## Solution Unsets the layer bit using `&=` and the inverse of the layer bit mask. --- crates/bevy_render/src/camera/visible_entities.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/crates/bevy_render/src/camera/visible_entities.rs b/crates/bevy_render/src/camera/visible_entities.rs index 46b7f3b31867a..d88c681132f30 100644 --- a/crates/bevy_render/src/camera/visible_entities.rs +++ b/crates/bevy_render/src/camera/visible_entities.rs @@ -110,7 +110,7 @@ impl RenderLayers { /// Panics when called with a layer greater than `TOTAL_LAYERS - 1`. pub fn without(mut self, layer: Layer) -> Self { assert!(usize::from(layer) < Self::TOTAL_LAYERS); - self.0 |= 0 << layer; + self.0 &= !(1 << layer); self } @@ -146,6 +146,11 @@ mod rendering_mask_tests { assert_eq!(RenderLayers::layer(0).0, 1, "layer 0 is mask 1"); assert_eq!(RenderLayers::layer(1).0, 2, "layer 1 is mask 2"); assert_eq!(RenderLayers::layer(0).with(1).0, 3, "layer 0 + 1 is mask 3"); + assert_eq!( + RenderLayers::layer(0).with(1).without(0).0, + 2, + "layer 0 + 1 - 0 is mask 2" + ); assert!( RenderLayers::layer(1).intersects(&RenderLayers::layer(1)), "layers match like layers"