Skip to content

Commit 7807225

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 b7d784d commit 7807225

File tree

1 file changed

+32
-69
lines changed

1 file changed

+32
-69
lines changed

crates/bevy_pbr/src/render/mesh.rs

+32-69
Original file line numberDiff line numberDiff line change
@@ -108,79 +108,42 @@ bitflags::bitflags! {
108108

109109
pub fn extract_meshes(
110110
mut commands: Commands,
111-
mut previous_caster_len: Local<usize>,
112-
mut previous_not_caster_len: Local<usize>,
113-
caster_query: Query<
114-
(
115-
Entity,
116-
&ComputedVisibility,
117-
&GlobalTransform,
118-
&Handle<Mesh>,
119-
Option<&NotShadowReceiver>,
120-
),
121-
Without<NotShadowCaster>,
122-
>,
123-
not_caster_query: Query<
124-
(
125-
Entity,
126-
&ComputedVisibility,
127-
&GlobalTransform,
128-
&Handle<Mesh>,
129-
Option<&NotShadowReceiver>,
130-
),
131-
With<NotShadowCaster>,
132-
>,
111+
mut prev_len_shadow_caster: Local<usize>,
112+
mut prev_len_not_shadow_caster: Local<usize>,
113+
meshes_query: Query<(
114+
Entity,
115+
&ComputedVisibility,
116+
&GlobalTransform,
117+
&Handle<Mesh>,
118+
Option<Without<NotShadowReceiver>>,
119+
Option<Without<NotShadowCaster>>,
120+
)>,
133121
) {
134-
let mut caster_values = Vec::with_capacity(*previous_caster_len);
135-
for (entity, computed_visibility, transform, handle, not_receiver) in caster_query.iter() {
136-
if !computed_visibility.is_visible {
137-
continue;
138-
}
122+
let mut caster_commands = Vec::with_capacity(*prev_len_shadow_caster);
123+
let mut not_caster_commands = Vec::with_capacity(*prev_len_not_shadow_caster);
124+
let visible_meshes = meshes_query.iter().filter(|(_, vis, ..)| vis.is_visible);
125+
for (entity, _, transform, handle, is_receiver, is_caster) in visible_meshes {
139126
let transform = transform.compute_matrix();
140-
caster_values.push((
141-
entity,
142-
(
143-
handle.clone_weak(),
144-
MeshUniform {
145-
flags: if not_receiver.is_some() {
146-
MeshFlags::empty().bits
147-
} else {
148-
MeshFlags::SHADOW_RECEIVER.bits
149-
},
150-
transform,
151-
inverse_transpose_model: transform.inverse().transpose(),
152-
},
153-
),
154-
));
155-
}
156-
*previous_caster_len = caster_values.len();
157-
commands.insert_or_spawn_batch(caster_values);
158-
159-
let mut not_caster_values = Vec::with_capacity(*previous_not_caster_len);
160-
for (entity, computed_visibility, transform, mesh, not_receiver) in not_caster_query.iter() {
161-
if !computed_visibility.is_visible {
162-
continue;
127+
let shadow_receiver_flags = if is_receiver.is_some() {
128+
MeshFlags::SHADOW_RECEIVER.bits
129+
} else {
130+
MeshFlags::empty().bits
131+
};
132+
let uniform = MeshUniform {
133+
flags: shadow_receiver_flags,
134+
transform,
135+
inverse_transpose_model: transform.inverse().transpose(),
136+
};
137+
if is_caster.is_some() {
138+
caster_commands.push((entity, (handle.clone_weak(), uniform)));
139+
} else {
140+
not_caster_commands.push((entity, (handle.clone_weak(), uniform, NotShadowCaster)));
163141
}
164-
let transform = transform.compute_matrix();
165-
not_caster_values.push((
166-
entity,
167-
(
168-
mesh.clone_weak(),
169-
MeshUniform {
170-
flags: if not_receiver.is_some() {
171-
MeshFlags::empty().bits
172-
} else {
173-
MeshFlags::SHADOW_RECEIVER.bits
174-
},
175-
transform,
176-
inverse_transpose_model: transform.inverse().transpose(),
177-
},
178-
NotShadowCaster,
179-
),
180-
));
181142
}
182-
*previous_not_caster_len = not_caster_values.len();
183-
commands.insert_or_spawn_batch(not_caster_values);
143+
*prev_len_shadow_caster = caster_commands.len();
144+
*prev_len_not_shadow_caster = not_caster_commands.len();
145+
commands.insert_or_spawn_batch(caster_commands);
146+
commands.insert_or_spawn_batch(not_caster_commands);
184147
}
185148

186149
#[derive(Debug, Default)]

0 commit comments

Comments
 (0)