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.
This commit is contained in:
ickshonpe 2025-01-06 18:49:18 +00:00 committed by GitHub
parent 13deb3ed76
commit b4b47d695b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 15 additions and 12 deletions

View File

@ -251,10 +251,11 @@ pub fn extract_shadows(
>, >,
mapping: Extract<Query<RenderEntity>>, mapping: Extract<Query<RenderEntity>>,
) { ) {
let default_camera_entity = default_ui_camera.get();
for (entity, uinode, transform, view_visibility, box_shadow, clip, camera) in &box_shadow_query for (entity, uinode, transform, view_visibility, box_shadow, clip, camera) in &box_shadow_query
{ {
let Some(camera_entity) = camera.map(TargetCamera::entity).or(default_ui_camera.get()) let Some(camera_entity) = camera.map(TargetCamera::entity).or(default_camera_entity) else {
else {
continue; continue;
}; };

View File

@ -76,13 +76,14 @@ pub fn extract_debug_overlay(
return; return;
} }
let default_camera_entity = default_ui_camera.get();
for (entity, uinode, visibility, maybe_clip, transform, camera) in &uinode_query { for (entity, uinode, visibility, maybe_clip, transform, camera) in &uinode_query {
if !debug_options.show_hidden && !visibility.get() { if !debug_options.show_hidden && !visibility.get() {
continue; continue;
} }
let Some(camera_entity) = camera.map(TargetCamera::entity).or(default_ui_camera.get()) let Some(camera_entity) = camera.map(TargetCamera::entity).or(default_camera_entity) else {
else {
continue; continue;
}; };

View File

@ -267,11 +267,11 @@ pub fn extract_uinode_background_colors(
>, >,
mapping: Extract<Query<RenderEntity>>, mapping: Extract<Query<RenderEntity>>,
) { ) {
let default_camera_entity = default_ui_camera.get();
for (entity, uinode, transform, view_visibility, clip, camera, background_color) in for (entity, uinode, transform, view_visibility, clip, camera, background_color) in
&uinode_query &uinode_query
{ {
let Some(camera_entity) = camera.map(TargetCamera::entity).or(default_ui_camera.get()) let Some(camera_entity) = camera.map(TargetCamera::entity).or(default_camera_entity) else {
else {
continue; continue;
}; };
@ -330,9 +330,9 @@ pub fn extract_uinode_images(
>, >,
mapping: Extract<Query<RenderEntity>>, mapping: Extract<Query<RenderEntity>>,
) { ) {
let default_camera_entity = default_ui_camera.get();
for (entity, uinode, transform, view_visibility, clip, camera, image) in &uinode_query { for (entity, uinode, transform, view_visibility, clip, camera, image) in &uinode_query {
let Some(camera_entity) = camera.map(TargetCamera::entity).or(default_ui_camera.get()) let Some(camera_entity) = camera.map(TargetCamera::entity).or(default_camera_entity) else {
else {
continue; continue;
}; };
@ -423,7 +423,7 @@ pub fn extract_uinode_borders(
ui_children: UiChildren, ui_children: UiChildren,
) { ) {
let image = AssetId::<Image>::default(); let image = AssetId::<Image>::default();
let default_camera_entity = default_ui_camera.get();
for ( for (
entity, entity,
node, node,
@ -437,7 +437,7 @@ pub fn extract_uinode_borders(
{ {
let Some(camera_entity) = maybe_camera let Some(camera_entity) = maybe_camera
.map(TargetCamera::entity) .map(TargetCamera::entity)
.or(default_ui_camera.get()) .or(default_camera_entity)
else { else {
continue; continue;
}; };

View File

@ -264,9 +264,10 @@ pub fn extract_ui_texture_slices(
>, >,
mapping: Extract<Query<RenderEntity>>, mapping: Extract<Query<RenderEntity>>,
) { ) {
let default_camera_entity = default_ui_camera.get();
for (entity, uinode, transform, view_visibility, clip, camera, image) in &slicers_query { for (entity, uinode, transform, view_visibility, clip, camera, image) in &slicers_query {
let Some(camera_entity) = camera.map(TargetCamera::entity).or(default_ui_camera.get()) let Some(camera_entity) = camera.map(TargetCamera::entity).or(default_camera_entity) else {
else {
continue; continue;
}; };