Skip to content

Commit b4b47d6

Browse files
authored
default UI camera extraction fix (#17100)
# Objective In UI extraction the default UI camera is queried for every UI node. It only needs to be retrieved once. ## Solution Query for the default UI camera once before iterating the UI nodes. ``` cargo run --example many_buttons --release --features "trace_tracy" ``` <img width="631" alt="default-camera-extract" src="https://github.com/user-attachments/assets/db712bce-6a0b-49a7-8e20-654baf588390" /> `extract_uinode_background_colors` yellow is this PR, red is main.
1 parent 13deb3e commit b4b47d6

File tree

4 files changed

+15
-12
lines changed

4 files changed

+15
-12
lines changed

crates/bevy_ui/src/render/box_shadow.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -251,10 +251,11 @@ pub fn extract_shadows(
251251
>,
252252
mapping: Extract<Query<RenderEntity>>,
253253
) {
254+
let default_camera_entity = default_ui_camera.get();
255+
254256
for (entity, uinode, transform, view_visibility, box_shadow, clip, camera) in &box_shadow_query
255257
{
256-
let Some(camera_entity) = camera.map(TargetCamera::entity).or(default_ui_camera.get())
257-
else {
258+
let Some(camera_entity) = camera.map(TargetCamera::entity).or(default_camera_entity) else {
258259
continue;
259260
};
260261

crates/bevy_ui/src/render/debug_overlay.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,14 @@ pub fn extract_debug_overlay(
7676
return;
7777
}
7878

79+
let default_camera_entity = default_ui_camera.get();
80+
7981
for (entity, uinode, visibility, maybe_clip, transform, camera) in &uinode_query {
8082
if !debug_options.show_hidden && !visibility.get() {
8183
continue;
8284
}
8385

84-
let Some(camera_entity) = camera.map(TargetCamera::entity).or(default_ui_camera.get())
85-
else {
86+
let Some(camera_entity) = camera.map(TargetCamera::entity).or(default_camera_entity) else {
8687
continue;
8788
};
8889

crates/bevy_ui/src/render/mod.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -267,11 +267,11 @@ pub fn extract_uinode_background_colors(
267267
>,
268268
mapping: Extract<Query<RenderEntity>>,
269269
) {
270+
let default_camera_entity = default_ui_camera.get();
270271
for (entity, uinode, transform, view_visibility, clip, camera, background_color) in
271272
&uinode_query
272273
{
273-
let Some(camera_entity) = camera.map(TargetCamera::entity).or(default_ui_camera.get())
274-
else {
274+
let Some(camera_entity) = camera.map(TargetCamera::entity).or(default_camera_entity) else {
275275
continue;
276276
};
277277

@@ -330,9 +330,9 @@ pub fn extract_uinode_images(
330330
>,
331331
mapping: Extract<Query<RenderEntity>>,
332332
) {
333+
let default_camera_entity = default_ui_camera.get();
333334
for (entity, uinode, transform, view_visibility, clip, camera, image) in &uinode_query {
334-
let Some(camera_entity) = camera.map(TargetCamera::entity).or(default_ui_camera.get())
335-
else {
335+
let Some(camera_entity) = camera.map(TargetCamera::entity).or(default_camera_entity) else {
336336
continue;
337337
};
338338

@@ -423,7 +423,7 @@ pub fn extract_uinode_borders(
423423
ui_children: UiChildren,
424424
) {
425425
let image = AssetId::<Image>::default();
426-
426+
let default_camera_entity = default_ui_camera.get();
427427
for (
428428
entity,
429429
node,
@@ -437,7 +437,7 @@ pub fn extract_uinode_borders(
437437
{
438438
let Some(camera_entity) = maybe_camera
439439
.map(TargetCamera::entity)
440-
.or(default_ui_camera.get())
440+
.or(default_camera_entity)
441441
else {
442442
continue;
443443
};

crates/bevy_ui/src/render/ui_texture_slice_pipeline.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -264,9 +264,10 @@ pub fn extract_ui_texture_slices(
264264
>,
265265
mapping: Extract<Query<RenderEntity>>,
266266
) {
267+
let default_camera_entity = default_ui_camera.get();
268+
267269
for (entity, uinode, transform, view_visibility, clip, camera, image) in &slicers_query {
268-
let Some(camera_entity) = camera.map(TargetCamera::entity).or(default_ui_camera.get())
269-
else {
270+
let Some(camera_entity) = camera.map(TargetCamera::entity).or(default_camera_entity) else {
270271
continue;
271272
};
272273

0 commit comments

Comments
 (0)