From a8357a88769922094d95eff74c770200fc5aa04a Mon Sep 17 00:00:00 2001 From: Matthew Deville Date: Sun, 31 Aug 2025 17:25:38 +0200 Subject: [PATCH] wip --- src/main.rs | 2 +- src/material.rs | 1 - src/systems.rs | 26 +++++++++++--------------- 3 files changed, 12 insertions(+), 17 deletions(-) diff --git a/src/main.rs b/src/main.rs index 20f2cd4..f0c2299 100644 --- a/src/main.rs +++ b/src/main.rs @@ -17,7 +17,7 @@ fn main() { Update, ( material::update_material_time, - systems::resize_fullscreen_quad, + systems::screen_resized, systems::exit_app.run_if(input_just_pressed(KeyCode::Escape)), systems::toggle_fullscreen.run_if(input_just_pressed(KeyCode::F11)), ), diff --git a/src/material.rs b/src/material.rs index b371441..9299eaf 100644 --- a/src/material.rs +++ b/src/material.rs @@ -7,7 +7,6 @@ use bevy::{ const DEFAULT_SHADER_PATH: &str = "shaders/default.wgsl"; -// This is the struct that will be passed to your shader #[derive(Asset, TypePath, AsBindGroup, Clone)] pub struct CustomMaterial { #[uniform(0)] diff --git a/src/systems.rs b/src/systems.rs index 9e13c39..a967b79 100644 --- a/src/systems.rs +++ b/src/systems.rs @@ -1,23 +1,19 @@ use bevy::{ prelude::*, - window::{PrimaryWindow, WindowMode}, + window::{PrimaryWindow, WindowMode, WindowResized}, }; use crate::material::CustomMaterial; -/// Marker component for the fullscreen quad so we can update it on window resize #[derive(Component)] pub struct FullscreenQuad; -/// set up a simple 2D-screen-like surface pub fn setup( mut meshes: ResMut>, mut materials: ResMut>, - mut primary_window: Single<&mut Window, With>, + primary_window: Single<&Window, With>, mut commands: Commands, ) { - primary_window.decorations = false; - commands.spawn(Camera2d); // quad that fills the whole window @@ -39,16 +35,16 @@ pub fn setup( )); } -/// Update fullscreen quad transforms when the primary window is resized. -pub fn resize_fullscreen_quad( - primary_window: Single<&Window, With>, - mut transform: Single<&mut Transform, With>, +pub fn screen_resized( + mut events: EventReader, + shader_data: Single<(&mut Transform, &MeshMaterial2d), With>, + mut materials: ResMut>, ) { - let size = Vec2::new( - primary_window.resolution.width(), - primary_window.resolution.height(), - ); - transform.scale = Vec3::new(size.x, size.y, 1.0); + let (mut transform, material) = shader_data.into_inner(); + if let Some(event) = events.read().last() { + transform.scale = Vec3::new(event.width, event.height, 1.0); + materials.get_mut(&material.0).unwrap().resolution = Vec2::new(event.width, event.height); + } } pub fn exit_app(mut exit: EventWriter) {