From f61755aa37a9ef34b32f6b3071aad737c6877648 Mon Sep 17 00:00:00 2001 From: ickshonpe Date: Fri, 17 Mar 2023 08:49:40 +0000 Subject: [PATCH] Skip the UV calculations for untextured UI nodes (#7809) --- crates/bevy_ui/src/render/mod.rs | 58 +++++++++++++++++--------------- 1 file changed, 31 insertions(+), 27 deletions(-) diff --git a/crates/bevy_ui/src/render/mod.rs b/crates/bevy_ui/src/render/mod.rs index 2cfa098d28bb1..fb1fbb05758e6 100644 --- a/crates/bevy_ui/src/render/mod.rs +++ b/crates/bevy_ui/src/render/mod.rs @@ -496,34 +496,38 @@ pub fn prepare_uinodes( continue; } } + let uvs = if current_batch_handle.id() == DEFAULT_IMAGE_HANDLE.id() { + [Vec2::ZERO, Vec2::X, Vec2::ONE, Vec2::Y] + } else { + let atlas_extent = extracted_uinode.atlas_size.unwrap_or(uinode_rect.max); + let mut uvs = [ + Vec2::new( + uinode_rect.min.x + positions_diff[0].x, + uinode_rect.min.y + positions_diff[0].y, + ), + Vec2::new( + uinode_rect.max.x + positions_diff[1].x, + uinode_rect.min.y + positions_diff[1].y, + ), + Vec2::new( + uinode_rect.max.x + positions_diff[2].x, + uinode_rect.max.y + positions_diff[2].y, + ), + Vec2::new( + uinode_rect.min.x + positions_diff[3].x, + uinode_rect.max.y + positions_diff[3].y, + ), + ] + .map(|pos| pos / atlas_extent); - let atlas_extent = extracted_uinode.atlas_size.unwrap_or(uinode_rect.max); - let mut uvs = [ - Vec2::new( - uinode_rect.min.x + positions_diff[0].x, - uinode_rect.min.y + positions_diff[0].y, - ), - Vec2::new( - uinode_rect.max.x + positions_diff[1].x, - uinode_rect.min.y + positions_diff[1].y, - ), - Vec2::new( - uinode_rect.max.x + positions_diff[2].x, - uinode_rect.max.y + positions_diff[2].y, - ), - Vec2::new( - uinode_rect.min.x + positions_diff[3].x, - uinode_rect.max.y + positions_diff[3].y, - ), - ] - .map(|pos| pos / atlas_extent); - - if extracted_uinode.flip_x { - uvs = [uvs[1], uvs[0], uvs[3], uvs[2]]; - } - if extracted_uinode.flip_y { - uvs = [uvs[3], uvs[2], uvs[1], uvs[0]]; - } + if extracted_uinode.flip_x { + uvs = [uvs[1], uvs[0], uvs[3], uvs[2]]; + } + if extracted_uinode.flip_y { + uvs = [uvs[3], uvs[2], uvs[1], uvs[0]]; + } + uvs + }; let color = extracted_uinode.color.as_linear_rgba_f32(); for i in QUAD_INDICES {