From b7813793b413e3ca78ec147ff9d3ef2f3f2cb717 Mon Sep 17 00:00:00 2001 From: Robert Swain Date: Tue, 8 Mar 2022 17:54:11 +0100 Subject: [PATCH 1/2] bevy_render: Batch insertion for prepare_uniform_components --- crates/bevy_render/src/render_component.rs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/crates/bevy_render/src/render_component.rs b/crates/bevy_render/src/render_component.rs index 1c72786f89f16..bf700a343d868 100644 --- a/crates/bevy_render/src/render_component.rs +++ b/crates/bevy_render/src/render_component.rs @@ -107,18 +107,23 @@ fn prepare_uniform_components( render_queue: Res, mut component_uniforms: ResMut>, components: Query<(Entity, &C)>, + mut prev_len: Local, ) where C: AsStd140 + Clone, { component_uniforms.uniforms.clear(); + let mut entities = Vec::with_capacity(*prev_len); for (entity, component) in components.iter() { - commands - .get_or_spawn(entity) - .insert(DynamicUniformIndex:: { + entities.push(( + entity, + (DynamicUniformIndex:: { index: component_uniforms.uniforms.push(component.clone()), marker: PhantomData, - }); + },), + )); } + *prev_len = entities.len(); + commands.insert_or_spawn_batch(entities); component_uniforms .uniforms From cad7c2762503d6c2c4cc582e899d18ca43705292 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois?= Date: Fri, 11 Mar 2022 13:35:28 +0100 Subject: [PATCH 2/2] bevy_render: Use iterator and collect for slightly better performance --- crates/bevy_render/src/render_component.rs | 24 +++++++++++----------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/crates/bevy_render/src/render_component.rs b/crates/bevy_render/src/render_component.rs index bf700a343d868..d6a72e337c4c7 100644 --- a/crates/bevy_render/src/render_component.rs +++ b/crates/bevy_render/src/render_component.rs @@ -107,22 +107,22 @@ fn prepare_uniform_components( render_queue: Res, mut component_uniforms: ResMut>, components: Query<(Entity, &C)>, - mut prev_len: Local, ) where C: AsStd140 + Clone, { component_uniforms.uniforms.clear(); - let mut entities = Vec::with_capacity(*prev_len); - for (entity, component) in components.iter() { - entities.push(( - entity, - (DynamicUniformIndex:: { - index: component_uniforms.uniforms.push(component.clone()), - marker: PhantomData, - },), - )); - } - *prev_len = entities.len(); + let entities = components + .iter() + .map(|(entity, component)| { + ( + entity, + (DynamicUniformIndex:: { + index: component_uniforms.uniforms.push(component.clone()), + marker: PhantomData, + },), + ) + }) + .collect::>(); commands.insert_or_spawn_batch(entities); component_uniforms