Skip to content

Commit adfbf36

Browse files
committed
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.
1 parent e28b88b commit adfbf36

File tree

1 file changed

+33
-69
lines changed

1 file changed

+33
-69
lines changed

crates/bevy_pbr/src/render/mesh.rs

Lines changed: 33 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -116,79 +116,43 @@ bitflags::bitflags! {
116116

117117
pub fn extract_meshes(
118118
mut commands: Commands,
119-
mut previous_caster_len: Local<usize>,
120-
mut previous_not_caster_len: Local<usize>,
121-
caster_query: Query<
122-
(
123-
Entity,
124-
&ComputedVisibility,
125-
&GlobalTransform,
126-
&Handle<Mesh>,
127-
Option<&NotShadowReceiver>,
128-
),
129-
Without<NotShadowCaster>,
130-
>,
131-
not_caster_query: Query<
132-
(
133-
Entity,
134-
&ComputedVisibility,
135-
&GlobalTransform,
136-
&Handle<Mesh>,
137-
Option<&NotShadowReceiver>,
138-
),
139-
With<NotShadowCaster>,
140-
>,
119+
mut prev_len_shadow_caster: Local<usize>,
120+
mut prev_len_not_shadow_caster: Local<usize>,
121+
meshes_query: Query<(
122+
Entity,
123+
&ComputedVisibility,
124+
&GlobalTransform,
125+
&Handle<Mesh>,
126+
Option<Without<NotShadowReceiver>>,
127+
Option<Without<NotShadowCaster>>,
128+
)>,
141129
) {
142-
let mut caster_values = Vec::with_capacity(*previous_caster_len);
143-
for (entity, computed_visibility, transform, handle, not_receiver) in caster_query.iter() {
144-
if !computed_visibility.is_visible {
145-
continue;
146-
}
147-
let transform = transform.compute_matrix();
148-
caster_values.push((
149-
entity,
150-
(
151-
handle.clone_weak(),
152-
MeshUniform {
153-
flags: if not_receiver.is_some() {
154-
MeshFlags::empty().bits
155-
} else {
156-
MeshFlags::SHADOW_RECEIVER.bits
157-
},
158-
transform,
159-
inverse_transpose_model: transform.inverse().transpose(),
160-
},
161-
),
162-
));
163-
}
164-
*previous_caster_len = caster_values.len();
165-
commands.insert_or_spawn_batch(caster_values);
130+
let mut caster_commands = Vec::with_capacity(*prev_len_shadow_caster);
131+
let mut not_caster_commands = Vec::with_capacity(*prev_len_not_shadow_caster);
132+
let visible_meshes = meshes_query.iter().filter(|(_, vis, ..)| vis.is_visible);
166133

167-
let mut not_caster_values = Vec::with_capacity(*previous_not_caster_len);
168-
for (entity, computed_visibility, transform, mesh, not_receiver) in not_caster_query.iter() {
169-
if !computed_visibility.is_visible {
170-
continue;
171-
}
134+
for (entity, _, transform, handle, is_receiver, is_caster) in visible_meshes {
172135
let transform = transform.compute_matrix();
173-
not_caster_values.push((
174-
entity,
175-
(
176-
mesh.clone_weak(),
177-
MeshUniform {
178-
flags: if not_receiver.is_some() {
179-
MeshFlags::empty().bits
180-
} else {
181-
MeshFlags::SHADOW_RECEIVER.bits
182-
},
183-
transform,
184-
inverse_transpose_model: transform.inverse().transpose(),
185-
},
186-
NotShadowCaster,
187-
),
188-
));
136+
let shadow_receiver_flags = if is_receiver.is_some() {
137+
MeshFlags::SHADOW_RECEIVER.bits
138+
} else {
139+
MeshFlags::empty().bits
140+
};
141+
let uniform = MeshUniform {
142+
flags: shadow_receiver_flags,
143+
transform,
144+
inverse_transpose_model: transform.inverse().transpose(),
145+
};
146+
if is_caster.is_some() {
147+
caster_commands.push((entity, (handle.clone_weak(), uniform)));
148+
} else {
149+
not_caster_commands.push((entity, (handle.clone_weak(), uniform, NotShadowCaster)));
150+
}
189151
}
190-
*previous_not_caster_len = not_caster_values.len();
191-
commands.insert_or_spawn_batch(not_caster_values);
152+
*prev_len_shadow_caster = caster_commands.len();
153+
*prev_len_not_shadow_caster = not_caster_commands.len();
154+
commands.insert_or_spawn_batch(caster_commands);
155+
commands.insert_or_spawn_batch(not_caster_commands);
192156
}
193157

194158
#[derive(Debug, Default)]

0 commit comments

Comments
 (0)