diff --git a/crates/bevy_render/src/view/window/mod.rs b/crates/bevy_render/src/view/window/mod.rs index 16a4455f49..657106d5a0 100644 --- a/crates/bevy_render/src/view/window/mod.rs +++ b/crates/bevy_render/src/view/window/mod.rs @@ -101,19 +101,11 @@ impl DerefMut for ExtractedWindows { fn extract_windows( mut extracted_windows: ResMut, mut closing: Extract>, - windows: Extract< - Query<( - Entity, - &Window, - &PresentMode, - &RawHandleWrapper, - Option<&PrimaryWindow>, - )>, - >, + windows: Extract)>>, mut removed: Extract>, mut window_surfaces: ResMut, ) { - for (entity, window, present_mode, handle, primary) in windows.iter() { + for (entity, window, handle, primary) in windows.iter() { if primary.is_some() { extracted_windows.primary = Some(entity); } @@ -128,7 +120,7 @@ fn extract_windows( handle: handle.clone(), physical_width: new_width, physical_height: new_height, - present_mode: *present_mode, + present_mode: window.present_mode, desired_maximum_frame_latency: window.desired_maximum_frame_latency, swap_chain_texture: None, swap_chain_texture_view: None, @@ -142,7 +134,8 @@ fn extract_windows( extracted_window.swap_chain_texture_view = None; extracted_window.size_changed = new_width != extracted_window.physical_width || new_height != extracted_window.physical_height; - extracted_window.present_mode_changed = *present_mode != extracted_window.present_mode; + extracted_window.present_mode_changed = + window.present_mode != extracted_window.present_mode; if extracted_window.size_changed { debug!( @@ -159,9 +152,9 @@ fn extract_windows( if extracted_window.present_mode_changed { debug!( "Window Present Mode changed from {:?} to {:?}", - extracted_window.present_mode, *present_mode + extracted_window.present_mode, window.present_mode ); - extracted_window.present_mode = *present_mode; + extracted_window.present_mode = window.present_mode; } } diff --git a/crates/bevy_window/src/window.rs b/crates/bevy_window/src/window.rs index 2612c63c5a..2faf397ff4 100644 --- a/crates/bevy_window/src/window.rs +++ b/crates/bevy_window/src/window.rs @@ -161,8 +161,10 @@ impl ContainsEntity for NormalizedWindowRef { all(feature = "serialize", feature = "bevy_reflect"), reflect(Serialize, Deserialize) )] -#[require(CursorOptions, PresentMode)] +#[require(CursorOptions)] pub struct Window { + /// What presentation mode to give the window. + pub present_mode: PresentMode, /// Which fullscreen or windowing mode should be used. pub mode: WindowMode, /// Where the window should be placed. @@ -468,6 +470,7 @@ impl Default for Window { fn default() -> Self { Self { title: DEFAULT_WINDOW_TITLE.to_owned(), + present_mode: PresentMode::default(), name: None, mode: Default::default(), position: Default::default(), @@ -1205,11 +1208,11 @@ pub enum VideoModeSelection { /// [`AutoVsync`]: PresentMode::AutoVsync /// [`AutoNoVsync`]: PresentMode::AutoNoVsync #[repr(C)] -#[derive(Component, Default, Copy, Clone, Debug, PartialEq, Eq, Hash)] +#[derive(Default, Copy, Clone, Debug, PartialEq, Eq, Hash)] #[cfg_attr( feature = "bevy_reflect", derive(Reflect), - reflect(Component, Debug, PartialEq, Hash, Clone) + reflect(Debug, PartialEq, Hash, Clone) )] #[cfg_attr(feature = "serialize", derive(serde::Serialize, serde::Deserialize))] #[cfg_attr( diff --git a/examples/stress_tests/bevymark.rs b/examples/stress_tests/bevymark.rs index 6d8fbcf6ee..53423434ca 100644 --- a/examples/stress_tests/bevymark.rs +++ b/examples/stress_tests/bevymark.rs @@ -163,14 +163,11 @@ fn main() { .run(); } -fn configure_window( - trigger: On, - mut window: Query<(&mut Window, &mut PresentMode)>, -) { - let (mut window, mut present_mode) = window.get_mut(trigger.target()).unwrap(); +fn configure_window(trigger: On, mut window: Query<&mut Window>) { + let mut window = window.get_mut(trigger.target()).unwrap(); window.title = "BevyMark".to_string(); window.resolution = WindowResolution::new(1920.0, 1080.0).with_scale_factor_override(1.0); - *present_mode = PresentMode::AutoNoVsync; + window.present_mode = PresentMode::AutoNoVsync; } #[derive(Resource)] diff --git a/examples/stress_tests/many_animated_sprites.rs b/examples/stress_tests/many_animated_sprites.rs index 1e8fa6d7fc..c2e6bbd93a 100644 --- a/examples/stress_tests/many_animated_sprites.rs +++ b/examples/stress_tests/many_animated_sprites.rs @@ -41,13 +41,10 @@ fn main() { .run(); } -fn configure_window( - trigger: On, - mut window: Query<(&mut Window, &mut PresentMode)>, -) { - let (mut window, mut present_mode) = window.get_mut(trigger.target()).unwrap(); +fn configure_window(trigger: On, mut window: Query<&mut Window>) { + let mut window = window.get_mut(trigger.target()).unwrap(); window.resolution = WindowResolution::new(1920.0, 1080.0).with_scale_factor_override(1.0); - *present_mode = PresentMode::AutoNoVsync; + window.present_mode = PresentMode::AutoNoVsync; } fn setup( diff --git a/examples/stress_tests/many_buttons.rs b/examples/stress_tests/many_buttons.rs index 4e78c88df9..4419328af5 100644 --- a/examples/stress_tests/many_buttons.rs +++ b/examples/stress_tests/many_buttons.rs @@ -123,13 +123,10 @@ fn main() { app.insert_resource(args).run(); } -fn configure_window( - trigger: On, - mut window: Query<(&mut Window, &mut PresentMode)>, -) { - let (mut window, mut present_mode) = window.get_mut(trigger.target()).unwrap(); +fn configure_window(trigger: On, mut window: Query<&mut Window>) { + let mut window = window.get_mut(trigger.target()).unwrap(); window.resolution = WindowResolution::new(1920.0, 1080.0).with_scale_factor_override(1.0); - *present_mode = PresentMode::AutoNoVsync; + window.present_mode = PresentMode::AutoNoVsync; } fn set_text_colors_changed(mut colors: Query<&mut TextColor>) { diff --git a/examples/stress_tests/many_cameras_lights.rs b/examples/stress_tests/many_cameras_lights.rs index e02f8c2664..1d25edae57 100644 --- a/examples/stress_tests/many_cameras_lights.rs +++ b/examples/stress_tests/many_cameras_lights.rs @@ -18,13 +18,10 @@ fn main() { .run(); } -fn configure_window( - trigger: On, - mut window: Query<(&mut Window, &mut PresentMode)>, -) { - let (mut window, mut present_mode) = window.get_mut(trigger.target()).unwrap(); +fn configure_window(trigger: On, mut window: Query<&mut Window>) { + let mut window = window.get_mut(trigger.target()).unwrap(); window.resolution = WindowResolution::new(1920.0, 1080.0).with_scale_factor_override(1.0); - *present_mode = PresentMode::AutoNoVsync; + window.present_mode = PresentMode::AutoNoVsync; } const CAMERA_ROWS: usize = 4; diff --git a/examples/stress_tests/many_cubes.rs b/examples/stress_tests/many_cubes.rs index d809cf1712..b4a5bbbeec 100644 --- a/examples/stress_tests/many_cubes.rs +++ b/examples/stress_tests/many_cubes.rs @@ -125,13 +125,10 @@ fn main() { app.insert_resource(args).run(); } -fn configure_window( - trigger: On, - mut window: Query<(&mut Window, &mut PresentMode)>, -) { - let (mut window, mut present_mode) = window.get_mut(trigger.target()).unwrap(); +fn configure_window(trigger: On, mut window: Query<&mut Window>) { + let mut window = window.get_mut(trigger.target()).unwrap(); window.resolution = WindowResolution::new(1920.0, 1080.0).with_scale_factor_override(1.0); - *present_mode = PresentMode::AutoNoVsync; + window.present_mode = PresentMode::AutoNoVsync; } const WIDTH: usize = 200; diff --git a/examples/stress_tests/many_foxes.rs b/examples/stress_tests/many_foxes.rs index 8417b4d3b0..e063905478 100644 --- a/examples/stress_tests/many_foxes.rs +++ b/examples/stress_tests/many_foxes.rs @@ -68,14 +68,11 @@ fn main() { .run(); } -fn configure_window( - trigger: On, - mut window: Query<(&mut Window, &mut PresentMode)>, -) { - let (mut window, mut present_mode) = window.get_mut(trigger.target()).unwrap(); +fn configure_window(trigger: On, mut window: Query<&mut Window>) { + let mut window = window.get_mut(trigger.target()).unwrap(); window.title = "🦊🦊🦊 Many Foxes! 🦊🦊🦊".to_string(); window.resolution = WindowResolution::new(1920.0, 1080.0).with_scale_factor_override(1.0); - *present_mode = PresentMode::AutoNoVsync; + window.present_mode = PresentMode::AutoNoVsync; } #[derive(Resource)] diff --git a/examples/stress_tests/many_gizmos.rs b/examples/stress_tests/many_gizmos.rs index 029d79f42c..5e8cd4a7a5 100644 --- a/examples/stress_tests/many_gizmos.rs +++ b/examples/stress_tests/many_gizmos.rs @@ -37,14 +37,11 @@ fn main() { app.run(); } -fn configure_window( - trigger: On, - mut window: Query<(&mut Window, &mut PresentMode)>, -) { - let (mut window, mut present_mode) = window.get_mut(trigger.target()).unwrap(); +fn configure_window(trigger: On, mut window: Query<&mut Window>) { + let mut window = window.get_mut(trigger.target()).unwrap(); window.title = "Many Debug Lines".to_string(); window.resolution = WindowResolution::new(1920.0, 1080.0).with_scale_factor_override(1.0); - *present_mode = PresentMode::AutoNoVsync; + window.present_mode = PresentMode::AutoNoVsync; } #[derive(Resource, Debug)] diff --git a/examples/stress_tests/many_glyphs.rs b/examples/stress_tests/many_glyphs.rs index 9ecc057040..2110224912 100644 --- a/examples/stress_tests/many_glyphs.rs +++ b/examples/stress_tests/many_glyphs.rs @@ -58,13 +58,10 @@ fn main() { app.insert_resource(args).run(); } -fn configure_window( - trigger: On, - mut window: Query<(&mut Window, &mut PresentMode)>, -) { - let (mut window, mut present_mode) = window.get_mut(trigger.target()).unwrap(); +fn configure_window(trigger: On, mut window: Query<&mut Window>) { + let mut window = window.get_mut(trigger.target()).unwrap(); window.resolution = WindowResolution::new(1920.0, 1080.0).with_scale_factor_override(1.0); - *present_mode = PresentMode::AutoNoVsync; + window.present_mode = PresentMode::AutoNoVsync; } fn setup(mut commands: Commands, args: Res) { diff --git a/examples/stress_tests/many_lights.rs b/examples/stress_tests/many_lights.rs index 31cd1ac723..b9ee0cd549 100644 --- a/examples/stress_tests/many_lights.rs +++ b/examples/stress_tests/many_lights.rs @@ -33,14 +33,11 @@ fn main() { .run(); } -fn configure_window( - trigger: On, - mut window: Query<(&mut Window, &mut PresentMode)>, -) { - let (mut window, mut present_mode) = window.get_mut(trigger.target()).unwrap(); +fn configure_window(trigger: On, mut window: Query<&mut Window>) { + let mut window = window.get_mut(trigger.target()).unwrap(); window.title = "many_lights".to_string(); window.resolution = WindowResolution::new(1920.0, 1080.0).with_scale_factor_override(1.0); - *present_mode = PresentMode::AutoNoVsync; + window.present_mode = PresentMode::AutoNoVsync; } fn setup( diff --git a/examples/stress_tests/many_materials.rs b/examples/stress_tests/many_materials.rs index aa3f66c0e0..9a67221151 100644 --- a/examples/stress_tests/many_materials.rs +++ b/examples/stress_tests/many_materials.rs @@ -35,14 +35,11 @@ fn main() { .run(); } -fn configure_window( - trigger: On, - mut window: Query<(&mut Window, &mut PresentMode)>, -) { - let (mut window, mut present_mode) = window.get_mut(trigger.target()).unwrap(); +fn configure_window(trigger: On, mut window: Query<&mut Window>) { + let mut window = window.get_mut(trigger.target()).unwrap(); window.resolution = WindowResolution::new(1920.0, 1080.0).with_scale_factor_override(1.0); window.title = "many_materials".into(); - *present_mode = PresentMode::AutoNoVsync; + window.present_mode = PresentMode::AutoNoVsync; } fn setup( diff --git a/examples/stress_tests/many_sprites.rs b/examples/stress_tests/many_sprites.rs index 4f914827d5..439829c245 100644 --- a/examples/stress_tests/many_sprites.rs +++ b/examples/stress_tests/many_sprites.rs @@ -48,13 +48,10 @@ fn main() { .run(); } -fn configure_window( - trigger: On, - mut window: Query<(&mut Window, &mut PresentMode)>, -) { - let (mut window, mut present_mode) = window.get_mut(trigger.target()).unwrap(); +fn configure_window(trigger: On, mut window: Query<&mut Window>) { + let mut window = window.get_mut(trigger.target()).unwrap(); window.resolution = WindowResolution::new(1920.0, 1080.0).with_scale_factor_override(1.0); - *present_mode = PresentMode::AutoNoVsync; + window.present_mode = PresentMode::AutoNoVsync; } fn setup(mut commands: Commands, assets: Res, color_tint: Res) { diff --git a/examples/stress_tests/many_text2d.rs b/examples/stress_tests/many_text2d.rs index c12da3794f..0813b59541 100644 --- a/examples/stress_tests/many_text2d.rs +++ b/examples/stress_tests/many_text2d.rs @@ -95,13 +95,10 @@ impl Default for PrintingTimer { } } -fn configure_window( - trigger: On, - mut window: Query<(&mut Window, &mut PresentMode)>, -) { - let (mut window, mut present_mode) = window.get_mut(trigger.target()).unwrap(); +fn configure_window(trigger: On, mut window: Query<&mut Window>) { + let mut window = window.get_mut(trigger.target()).unwrap(); window.resolution = WindowResolution::new(1920.0, 1080.0).with_scale_factor_override(1.0); - *present_mode = PresentMode::AutoNoVsync; + window.present_mode = PresentMode::AutoNoVsync; } fn setup(mut commands: Commands, font: Res, args: Res) { diff --git a/examples/stress_tests/text_pipeline.rs b/examples/stress_tests/text_pipeline.rs index 122562bb22..4382e7698b 100644 --- a/examples/stress_tests/text_pipeline.rs +++ b/examples/stress_tests/text_pipeline.rs @@ -28,13 +28,10 @@ fn main() { .run(); } -fn configure_window( - trigger: On, - mut window: Query<(&mut Window, &mut PresentMode)>, -) { - let (mut window, mut present_mode) = window.get_mut(trigger.target()).unwrap(); +fn configure_window(trigger: On, mut window: Query<&mut Window>) { + let mut window = window.get_mut(trigger.target()).unwrap(); window.resolution = WindowResolution::new(1920.0, 1080.0).with_scale_factor_override(1.0); - *present_mode = PresentMode::AutoNoVsync; + window.present_mode = PresentMode::AutoNoVsync; } fn spawn(mut commands: Commands, asset_server: Res) { diff --git a/examples/ui/text_debug.rs b/examples/ui/text_debug.rs index c80604ffa4..e7ba24b416 100644 --- a/examples/ui/text_debug.rs +++ b/examples/ui/text_debug.rs @@ -19,9 +19,9 @@ fn main() { .run(); } -fn configure_window(trigger: On, mut window: Query<&mut PresentMode>) { - let mut present_mode = window.get_mut(trigger.target()).unwrap(); - *present_mode = PresentMode::AutoNoVsync; +fn configure_window(trigger: On, mut window: Query<&mut Window>) { + let mut window = window.get_mut(trigger.target()).unwrap(); + window.present_mode = PresentMode::AutoNoVsync; } #[derive(Component)] diff --git a/examples/window/low_power.rs b/examples/window/low_power.rs index 951ed91a9b..7771bbde20 100644 --- a/examples/window/low_power.rs +++ b/examples/window/low_power.rs @@ -37,10 +37,10 @@ fn main() { .run(); } -fn configure_window(trigger: On, mut window: Query<&mut PresentMode>) { - let mut present_mode = window.get_mut(trigger.target()).unwrap(); +fn configure_window(trigger: On, mut window: Query<&mut Window>) { + let mut window = window.get_mut(trigger.target()).unwrap(); // Turn off vsync to maximize CPU/GPU usage - *present_mode = PresentMode::AutoNoVsync; + window.present_mode = PresentMode::AutoNoVsync; } #[derive(Resource, Debug)] diff --git a/examples/window/window_settings.rs b/examples/window/window_settings.rs index 7713521e7b..ea7d9b4cd6 100644 --- a/examples/window/window_settings.rs +++ b/examples/window/window_settings.rs @@ -38,11 +38,8 @@ fn main() { .run(); } -fn configure_window( - trigger: On, - mut window: Query<(&mut Window, &mut PresentMode)>, -) { - let (mut window, mut present_mode) = window.get_mut(trigger.target()).unwrap(); +fn configure_window(trigger: On, mut window: Query<&mut Window>) { + let mut window = window.get_mut(trigger.target()).unwrap(); window.title = "I am a window!".into(); window.name = Some("bevy.app".into()); window.resolution = (500., 300.).into(); @@ -57,7 +54,7 @@ fn configure_window( // This is useful when you want to avoid the white window that shows up before the GPU is ready to render the app. window.visible = false; - *present_mode = PresentMode::AutoNoVsync; + window.present_mode = PresentMode::AutoNoVsync; } fn make_visible(mut window: Single<&mut Window>, frames: Res) { @@ -72,14 +69,14 @@ fn make_visible(mut window: Single<&mut Window>, frames: Res) { /// This system toggles the vsync mode when pressing the button V. /// You'll see fps increase displayed in the console. -fn toggle_vsync(input: Res>, mut present_mode: Single<&mut PresentMode>) { +fn toggle_vsync(input: Res>, mut window: Single<&mut Window>) { if input.just_pressed(KeyCode::KeyV) { - **present_mode = if matches!(**present_mode, PresentMode::AutoVsync) { + window.present_mode = if matches!(window.present_mode, PresentMode::AutoVsync) { PresentMode::AutoNoVsync } else { PresentMode::AutoVsync }; - info!("PRESENT_MODE: {:?}", *present_mode); + info!("PRESENT_MODE: {:?}", window.present_mode); } }