diff --git a/crates/bevy_render/src/camera/camera.rs b/crates/bevy_render/src/camera/camera.rs index 973ce35f6b..8c0f3c814f 100644 --- a/crates/bevy_render/src/camera/camera.rs +++ b/crates/bevy_render/src/camera/camera.rs @@ -1,6 +1,6 @@ use super::CameraProjection; use bevy_app::prelude::{EventReader, Events}; -use bevy_ecs::{Component, Local, Query, Res}; +use bevy_ecs::{Added, Component, Entity, Local, Query, Res}; use bevy_math::Mat4; use bevy_property::Properties; use bevy_window::{WindowCreated, WindowId, WindowResized, Windows}; @@ -38,7 +38,8 @@ pub fn camera_system( window_resized_events: Res>, window_created_events: Res>, windows: Res, - mut query: Query<(&mut Camera, &mut T)>, + mut query: Query<(Entity, &mut Camera, &mut T)>, + mut query_added: Query<(Entity, Added)>, ) { let mut changed_window_ids = Vec::new(); // handle resize events. latest events are handled first because we only want to resize each window once @@ -67,9 +68,13 @@ pub fn camera_system( changed_window_ids.push(event.id); } - for (mut camera, mut camera_projection) in &mut query.iter() { + let mut added_cameras = vec![]; + for (entity, _camera) in &mut query_added.iter() { + added_cameras.push(entity); + } + for (entity, mut camera, mut camera_projection) in &mut query.iter() { if let Some(window) = windows.get(camera.window) { - if changed_window_ids.contains(&window.id) { + if changed_window_ids.contains(&window.id) || added_cameras.contains(&entity) { camera_projection.update(window.width as usize, window.height as usize); camera.projection_matrix = camera_projection.get_projection_matrix(); camera.depth_calculation = camera_projection.depth_calculation();