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>>,
) {
let default_camera_entity = default_ui_camera.get();
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())
else {
let Some(camera_entity) = camera.map(TargetCamera::entity).or(default_camera_entity) else {
continue;
};

View File

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

View File

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

View File

@ -264,9 +264,10 @@ pub fn extract_ui_texture_slices(
>,
mapping: Extract<Query<RenderEntity>>,
) {
let default_camera_entity = default_ui_camera.get();
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())
else {
let Some(camera_entity) = camera.map(TargetCamera::entity).or(default_camera_entity) else {
continue;
};