diff --git a/crates/bevy_render/src/camera/camera.rs b/crates/bevy_render/src/camera/camera.rs index 2c7fe77352..5589e1a3d8 100644 --- a/crates/bevy_render/src/camera/camera.rs +++ b/crates/bevy_render/src/camera/camera.rs @@ -1,7 +1,7 @@ use crate::CameraProjection; use bevy_app::{EventReader, Events}; use bevy_property::Properties; -use bevy_window::WindowResized; +use bevy_window::{WindowCreated, WindowResized, Windows}; use glam::Mat4; use legion::{prelude::*, storage::Component}; @@ -15,11 +15,27 @@ pub fn camera_system( _resources: &mut Resources, ) -> Box { let mut window_resized_event_reader = EventReader::::default(); + let mut window_created_event_reader = EventReader::::default(); (move |world: &mut SubWorld, window_resized_events: Res>, + window_created_events: Res>, + windows: Res, query: &mut Query<(Write, Write)>| { let primary_window_resized_event = window_resized_event_reader .find_latest(&window_resized_events, |event| event.is_primary); + + for event in window_created_event_reader.iter(&window_created_events) { + if !event.is_primary { + continue; + } + if let Some(window) = windows.get(event.id) { + for (mut camera, mut camera_projection) in query.iter_mut(world) { + camera_projection.update(window.width as usize, window.height as usize); + camera.view_matrix = camera_projection.get_view_matrix(); + } + } + } + if let Some(primary_window_resized_event) = primary_window_resized_event { for (mut camera, mut camera_projection) in query.iter_mut(world) { camera_projection.update( diff --git a/crates/bevy_window/src/window.rs b/crates/bevy_window/src/window.rs index f73cc33f7b..ed403186bc 100644 --- a/crates/bevy_window/src/window.rs +++ b/crates/bevy_window/src/window.rs @@ -14,6 +14,7 @@ impl WindowId { } } +#[derive(Debug)] pub struct Window { pub id: WindowId, pub width: u32,