diff --git a/crates/bevy_ui/src/widget/text.rs b/crates/bevy_ui/src/widget/text.rs index 5750cc6e77e4d..741b5a72b6615 100644 --- a/crates/bevy_ui/src/widget/text.rs +++ b/crates/bevy_ui/src/widget/text.rs @@ -133,7 +133,9 @@ fn create_text_measure( /// is only able to detect that a `Text` component has changed and will regenerate the `Measure` on /// color changes. This can be expensive, particularly for large blocks of text, and the [`bypass_change_detection`](bevy_ecs::change_detection::DetectChangesMut::bypass_change_detection) /// method should be called when only changing the `Text`'s colors. +#[allow(clippy::too_many_arguments)] pub fn measure_text_system( + mut scale_factors_buffer: Local>, mut last_scale_factors: Local>, fonts: Res>, camera_query: Query<(Entity, &Camera)>, @@ -151,14 +153,14 @@ pub fn measure_text_system( >, mut text_pipeline: ResMut, ) { - let mut scale_factors: EntityHashMap = EntityHashMap::default(); + scale_factors_buffer.clear(); for (text, content_size, text_flags, camera, mut buffer) in &mut text_query { let Some(camera_entity) = camera.map(TargetCamera::entity).or(default_ui_camera.get()) else { continue; }; - let scale_factor = match scale_factors.entry(camera_entity) { + let scale_factor = match scale_factors_buffer.entry(camera_entity) { Entry::Occupied(entry) => *entry.get(), Entry::Vacant(entry) => *entry.insert( camera_query @@ -187,7 +189,7 @@ pub fn measure_text_system( ); } } - *last_scale_factors = scale_factors; + std::mem::swap(&mut *last_scale_factors, &mut *scale_factors_buffer); } #[allow(clippy::too_many_arguments)] @@ -260,6 +262,7 @@ fn queue_text( #[allow(clippy::too_many_arguments)] pub fn text_system( mut textures: ResMut>, + mut scale_factors_buffer: Local>, mut last_scale_factors: Local>, fonts: Res>, camera_query: Query<(Entity, &Camera)>, @@ -277,14 +280,14 @@ pub fn text_system( &mut CosmicBuffer, )>, ) { - let mut scale_factors: EntityHashMap = EntityHashMap::default(); + scale_factors_buffer.clear(); for (node, text, text_layout_info, text_flags, camera, mut buffer) in &mut text_query { let Some(camera_entity) = camera.map(TargetCamera::entity).or(default_ui_camera.get()) else { continue; }; - let scale_factor = match scale_factors.entry(camera_entity) { + let scale_factor = match scale_factors_buffer.entry(camera_entity) { Entry::Occupied(entry) => *entry.get(), Entry::Vacant(entry) => *entry.insert( camera_query @@ -317,5 +320,5 @@ pub fn text_system( ); } } - *last_scale_factors = scale_factors; + std::mem::swap(&mut *last_scale_factors, &mut *scale_factors_buffer); }