Rename DefaultCameraView (#17235)

# Objective

The name `DefaultCameraView` is confusing and misleading:
* It isn't the default UI camera, which is either the camera with the
`IsDefaultUiCamera` marker component or, if no such camera is found, the
camera with the highest order which has the primary window as its render
target.
* It doesn't make sense to call it a "default", every active 2d and 3d
camera is given its own `DefaultCameraView`.
* The name doesn't make it clear that it's UI specific component.

## Solution

Rename `DefaultCameraView` to `UiCameraView`, add a doc comment for it
and rename a few other fields and variables.

## Migration Guide

`DefaultCameraView` has been renamed to `UiCameraView`
This commit is contained in:
ickshonpe 2025-01-08 18:44:11 +00:00 committed by GitHub
parent 020d082617
commit e896c364dc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 26 additions and 23 deletions

View File

@ -137,7 +137,7 @@ pub fn build_ui_render(app: &mut App) {
.add_systems( .add_systems(
ExtractSchedule, ExtractSchedule,
( (
extract_default_ui_camera_view, extract_ui_camera_view,
extract_uinode_background_colors.in_set(RenderUiSystem::ExtractBackgrounds), extract_uinode_background_colors.in_set(RenderUiSystem::ExtractBackgrounds),
extract_uinode_images.in_set(RenderUiSystem::ExtractImages), extract_uinode_images.in_set(RenderUiSystem::ExtractImages),
extract_uinode_borders.in_set(RenderUiSystem::ExtractBorders), extract_uinode_borders.in_set(RenderUiSystem::ExtractBorders),
@ -532,10 +532,11 @@ const UI_CAMERA_FAR: f32 = 1000.0;
const UI_CAMERA_TRANSFORM_OFFSET: f32 = -0.1; const UI_CAMERA_TRANSFORM_OFFSET: f32 = -0.1;
#[derive(Component)] #[derive(Component)]
pub struct DefaultCameraView(pub Entity); /// Entity id of the temporary render entity with the corresponding extracted UI view.
pub struct UiCameraView(pub Entity);
/// Extracts all UI elements associated with a camera into the render world. /// Extracts all UI elements associated with a camera into the render world.
pub fn extract_default_ui_camera_view( pub fn extract_ui_camera_view(
mut commands: Commands, mut commands: Commands,
mut transparent_render_phases: ResMut<ViewSortedRenderPhases<TransparentUi>>, mut transparent_render_phases: ResMut<ViewSortedRenderPhases<TransparentUi>>,
query: Extract< query: Extract<
@ -553,13 +554,13 @@ pub fn extract_default_ui_camera_view(
) { ) {
live_entities.clear(); live_entities.clear();
for (entity, camera, ui_anti_alias, shadow_samples) in &query { for (render_entity, camera, ui_anti_alias, shadow_samples) in &query {
// ignore inactive cameras // ignore inactive cameras
if !camera.is_active { if !camera.is_active {
commands commands
.get_entity(entity) .get_entity(render_entity)
.expect("Camera entity wasn't synced.") .expect("Camera entity wasn't synced.")
.remove::<(DefaultCameraView, UiAntiAlias, BoxShadowSamples)>(); .remove::<(UiCameraView, UiAntiAlias, BoxShadowSamples)>();
continue; continue;
} }
@ -573,7 +574,7 @@ pub fn extract_default_ui_camera_view(
0.0, 0.0,
UI_CAMERA_FAR, UI_CAMERA_FAR,
); );
let default_camera_view = commands let ui_camera_view = commands
.spawn(( .spawn((
ExtractedView { ExtractedView {
clip_from_view: projection_matrix, clip_from_view: projection_matrix,
@ -594,18 +595,18 @@ pub fn extract_default_ui_camera_view(
)) ))
.id(); .id();
let mut entity_commands = commands let mut entity_commands = commands
.get_entity(entity) .get_entity(render_entity)
.expect("Camera entity wasn't synced."); .expect("Camera entity wasn't synced.");
entity_commands.insert(DefaultCameraView(default_camera_view)); entity_commands.insert(UiCameraView(ui_camera_view));
if let Some(ui_anti_alias) = ui_anti_alias { if let Some(ui_anti_alias) = ui_anti_alias {
entity_commands.insert(*ui_anti_alias); entity_commands.insert(*ui_anti_alias);
} }
if let Some(shadow_samples) = shadow_samples { if let Some(shadow_samples) = shadow_samples {
entity_commands.insert(*shadow_samples); entity_commands.insert(*shadow_samples);
} }
transparent_render_phases.insert_or_clear(entity); transparent_render_phases.insert_or_clear(render_entity);
live_entities.insert(entity); live_entities.insert(render_entity);
} }
} }

View File

@ -1,7 +1,7 @@
use core::ops::Range; use core::ops::Range;
use super::{ImageNodeBindGroups, UiBatch, UiMeta}; use super::{ImageNodeBindGroups, UiBatch, UiMeta};
use crate::DefaultCameraView; use crate::UiCameraView;
use bevy_ecs::{ use bevy_ecs::{
prelude::*, prelude::*,
system::{lifetimeless::*, SystemParamItem}, system::{lifetimeless::*, SystemParamItem},
@ -19,23 +19,24 @@ use bevy_render::{
use tracing::error; use tracing::error;
pub struct UiPassNode { pub struct UiPassNode {
ui_view_query: QueryState<(&'static ViewTarget, &'static ExtractedCamera), With<ExtractedView>>, camera_view_query:
default_camera_view_query: QueryState<&'static DefaultCameraView>, QueryState<(&'static ViewTarget, &'static ExtractedCamera), With<ExtractedView>>,
ui_camera_view_query: QueryState<&'static UiCameraView>,
} }
impl UiPassNode { impl UiPassNode {
pub fn new(world: &mut World) -> Self { pub fn new(world: &mut World) -> Self {
Self { Self {
ui_view_query: world.query_filtered(), camera_view_query: world.query_filtered(),
default_camera_view_query: world.query(), ui_camera_view_query: world.query(),
} }
} }
} }
impl Node for UiPassNode { impl Node for UiPassNode {
fn update(&mut self, world: &mut World) { fn update(&mut self, world: &mut World) {
self.ui_view_query.update_archetypes(world); self.camera_view_query.update_archetypes(world);
self.default_camera_view_query.update_archetypes(world); self.ui_camera_view_query.update_archetypes(world);
} }
fn run( fn run(
@ -56,19 +57,20 @@ impl Node for UiPassNode {
return Ok(()); return Ok(());
}; };
let Ok((target, camera)) = self.ui_view_query.get_manual(world, input_view_entity) else { let Ok((target, camera)) = self.camera_view_query.get_manual(world, input_view_entity)
else {
return Ok(()); return Ok(());
}; };
if transparent_phase.items.is_empty() { if transparent_phase.items.is_empty() {
return Ok(()); return Ok(());
} }
// use the "default" view entity if it is defined // use the UI view entity if it is defined
let view_entity = if let Ok(default_view) = self let view_entity = if let Ok(ui_camera_view) = self
.default_camera_view_query .ui_camera_view_query
.get_manual(world, input_view_entity) .get_manual(world, input_view_entity)
{ {
default_view.0 ui_camera_view.0
} else { } else {
input_view_entity input_view_entity
}; };