From adfbf364c798d0e8e0c933edc9aa43fb98ac6e92 Mon Sep 17 00:00:00 2001 From: Nicola Papale Date: Thu, 17 Mar 2022 11:10:50 +0100 Subject: [PATCH 1/2] Rework extract_meshes Cleanup redundant code * `extract_meshes` had two for loops which are functionally identical, just copy-pasted code. This was because of the split query. We merge them and put them in a single loop. * The tuple literal for the command buffers was difficult to read, because it spanned many levels of idententations and lines of codes. they now fit in a single line. --- crates/bevy_pbr/src/render/mesh.rs | 102 ++++++++++------------------- 1 file changed, 33 insertions(+), 69 deletions(-) diff --git a/crates/bevy_pbr/src/render/mesh.rs b/crates/bevy_pbr/src/render/mesh.rs index 950d32d6fba18..db4c1ea4135d6 100644 --- a/crates/bevy_pbr/src/render/mesh.rs +++ b/crates/bevy_pbr/src/render/mesh.rs @@ -116,79 +116,43 @@ bitflags::bitflags! { pub fn extract_meshes( mut commands: Commands, - mut previous_caster_len: Local, - mut previous_not_caster_len: Local, - caster_query: Query< - ( - Entity, - &ComputedVisibility, - &GlobalTransform, - &Handle, - Option<&NotShadowReceiver>, - ), - Without, - >, - not_caster_query: Query< - ( - Entity, - &ComputedVisibility, - &GlobalTransform, - &Handle, - Option<&NotShadowReceiver>, - ), - With, - >, + mut prev_len_shadow_caster: Local, + mut prev_len_not_shadow_caster: Local, + meshes_query: Query<( + Entity, + &ComputedVisibility, + &GlobalTransform, + &Handle, + Option>, + Option>, + )>, ) { - let mut caster_values = Vec::with_capacity(*previous_caster_len); - for (entity, computed_visibility, transform, handle, not_receiver) in caster_query.iter() { - if !computed_visibility.is_visible { - continue; - } - let transform = transform.compute_matrix(); - caster_values.push(( - entity, - ( - handle.clone_weak(), - MeshUniform { - flags: if not_receiver.is_some() { - MeshFlags::empty().bits - } else { - MeshFlags::SHADOW_RECEIVER.bits - }, - transform, - inverse_transpose_model: transform.inverse().transpose(), - }, - ), - )); - } - *previous_caster_len = caster_values.len(); - commands.insert_or_spawn_batch(caster_values); + let mut caster_commands = Vec::with_capacity(*prev_len_shadow_caster); + let mut not_caster_commands = Vec::with_capacity(*prev_len_not_shadow_caster); + let visible_meshes = meshes_query.iter().filter(|(_, vis, ..)| vis.is_visible); - let mut not_caster_values = Vec::with_capacity(*previous_not_caster_len); - for (entity, computed_visibility, transform, mesh, not_receiver) in not_caster_query.iter() { - if !computed_visibility.is_visible { - continue; - } + for (entity, _, transform, handle, is_receiver, is_caster) in visible_meshes { let transform = transform.compute_matrix(); - not_caster_values.push(( - entity, - ( - mesh.clone_weak(), - MeshUniform { - flags: if not_receiver.is_some() { - MeshFlags::empty().bits - } else { - MeshFlags::SHADOW_RECEIVER.bits - }, - transform, - inverse_transpose_model: transform.inverse().transpose(), - }, - NotShadowCaster, - ), - )); + let shadow_receiver_flags = if is_receiver.is_some() { + MeshFlags::SHADOW_RECEIVER.bits + } else { + MeshFlags::empty().bits + }; + let uniform = MeshUniform { + flags: shadow_receiver_flags, + transform, + inverse_transpose_model: transform.inverse().transpose(), + }; + if is_caster.is_some() { + caster_commands.push((entity, (handle.clone_weak(), uniform))); + } else { + not_caster_commands.push((entity, (handle.clone_weak(), uniform, NotShadowCaster))); + } } - *previous_not_caster_len = not_caster_values.len(); - commands.insert_or_spawn_batch(not_caster_values); + *prev_len_shadow_caster = caster_commands.len(); + *prev_len_not_shadow_caster = not_caster_commands.len(); + commands.insert_or_spawn_batch(caster_commands); + commands.insert_or_spawn_batch(not_caster_commands); } #[derive(Debug, Default)] From 58d0efe48241355575d0509e9df1cb497484564b Mon Sep 17 00:00:00 2001 From: Nicola Papale Date: Fri, 1 Jul 2022 20:44:12 +0200 Subject: [PATCH 2/2] Update some names --- crates/bevy_pbr/src/render/mesh.rs | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/crates/bevy_pbr/src/render/mesh.rs b/crates/bevy_pbr/src/render/mesh.rs index db4c1ea4135d6..db3aeee86190e 100644 --- a/crates/bevy_pbr/src/render/mesh.rs +++ b/crates/bevy_pbr/src/render/mesh.rs @@ -116,41 +116,41 @@ bitflags::bitflags! { pub fn extract_meshes( mut commands: Commands, - mut prev_len_shadow_caster: Local, - mut prev_len_not_shadow_caster: Local, + mut prev_caster_commands_len: Local, + mut prev_not_caster_commands_len: Local, meshes_query: Query<( Entity, &ComputedVisibility, &GlobalTransform, &Handle, - Option>, - Option>, + Option>, + Option>, )>, ) { - let mut caster_commands = Vec::with_capacity(*prev_len_shadow_caster); - let mut not_caster_commands = Vec::with_capacity(*prev_len_not_shadow_caster); + let mut caster_commands = Vec::with_capacity(*prev_caster_commands_len); + let mut not_caster_commands = Vec::with_capacity(*prev_not_caster_commands_len); let visible_meshes = meshes_query.iter().filter(|(_, vis, ..)| vis.is_visible); - for (entity, _, transform, handle, is_receiver, is_caster) in visible_meshes { + for (entity, _, transform, handle, not_receiver, not_caster) in visible_meshes { let transform = transform.compute_matrix(); - let shadow_receiver_flags = if is_receiver.is_some() { - MeshFlags::SHADOW_RECEIVER.bits - } else { + let shadow_receiver_flags = if not_receiver.is_some() { MeshFlags::empty().bits + } else { + MeshFlags::SHADOW_RECEIVER.bits }; let uniform = MeshUniform { flags: shadow_receiver_flags, transform, inverse_transpose_model: transform.inverse().transpose(), }; - if is_caster.is_some() { - caster_commands.push((entity, (handle.clone_weak(), uniform))); - } else { + if not_caster.is_some() { not_caster_commands.push((entity, (handle.clone_weak(), uniform, NotShadowCaster))); + } else { + caster_commands.push((entity, (handle.clone_weak(), uniform))); } } - *prev_len_shadow_caster = caster_commands.len(); - *prev_len_not_shadow_caster = not_caster_commands.len(); + *prev_caster_commands_len = caster_commands.len(); + *prev_not_caster_commands_len = not_caster_commands.len(); commands.insert_or_spawn_batch(caster_commands); commands.insert_or_spawn_batch(not_caster_commands); }