diff options
Diffstat (limited to 'engine')
| -rw-r--r-- | engine/src/rendering.rs | 59 | ||||
| -rw-r--r-- | engine/src/rendering/backend/opengl.rs | 8 |
2 files changed, 22 insertions, 45 deletions
diff --git a/engine/src/rendering.rs b/engine/src/rendering.rs index 57d9698..2a73625 100644 --- a/engine/src/rendering.rs +++ b/engine/src/rendering.rs @@ -10,7 +10,7 @@ use crate::data_types::dimens::Dimens; use crate::draw_flags::PolygonModeConfig; use crate::ecs::actions::Actions; use crate::ecs::component::local::Local; -use crate::ecs::event::component::{Changed, EventMatchExt, Removed}; +use crate::ecs::event::component::{EventMatchExt, Removed}; use crate::ecs::pair::{ChildOf, Pair}; use crate::ecs::phase::{Phase, POST_UPDATE as POST_UPDATE_PHASE}; use crate::ecs::query::term::With; @@ -86,7 +86,6 @@ impl crate::ecs::extension::Extension for Extension .initialize((ActiveDrawProperties::default(),)), ); - collector.add_observer(handle_window_changed); collector.add_observer(handle_window_removed); crate::rendering::shader::prepare(&mut collector); @@ -172,6 +171,7 @@ impl Default for GraphicsPropertiesBuilder pub struct Surface { pub id: SurfaceId, + pub size: PhysicalSize<u32>, } #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] @@ -429,7 +429,7 @@ impl Default for CommandQueue #[tracing::instrument(skip_all)] fn enqueue_commands_from_render_passes( - window_surface_query: Query<(&Surface, With<Window>, With<TargetWindow>)>, + window_surface_query: Query<(&mut Surface, &Window, With<TargetWindow>)>, mut command_queue: Single<CommandQueue>, mut render_passes: Single<RenderPasses>, mut active_draw_props: Local<ActiveDrawProperties>, @@ -445,6 +445,17 @@ fn enqueue_commands_from_render_passes( let mut last_render_pass_draw_props = active_draw_props.draw_properties.clone(); + for (mut window_surface, window) in &window_surface_query { + if window_surface.size != window.inner_size { + command_queue.push(Command::SetSurfaceSize( + window_surface.id, + window.inner_size, + )); + + window_surface.size = window.inner_size.clone(); + } + } + for render_pass in render_passes.passes.drain(..) { if render_pass.draw_properties != last_render_pass_draw_props { command_queue.push(Command::UpdateDrawProperties( @@ -473,52 +484,12 @@ fn enqueue_commands_from_render_passes( active_draw_props.draw_properties = last_render_pass_draw_props; - for (window_surface,) in &window_surface_query { + for (window_surface, _) in &window_surface_query { command_queue.push(Command::SwapBuffers(window_surface.id)); } } #[tracing::instrument(skip_all)] -fn handle_window_changed( - observe: Observe<Pair<Changed, Window>>, - mut command_queue: Single<CommandQueue>, -) -{ - let Ok(command_queue) = command_queue.get_mut() else { - unreachable!(); - }; - - for evt_match in &observe { - let window_ent = evt_match.get_entity(); - - if window_ent.get::<TargetWindow>().is_none() { - continue; - } - - let Some(window_surface) = window_ent.get::<Surface>() else { - continue; - }; - - let window = evt_match.get_ent_target_comp(); - - tracing::trace!( - window_id=?window.wid(), - window_title=&*window.title, - "Handling potential resize of window" - ); - - command_queue.queue.push_front(Command::SetSurfaceSize( - window_surface.id, - evt_match.get_ent_target_comp().inner_size.clone(), - )); - - command_queue - .queue - .push_front(Command::MakeCurrent(window_surface.id)); - } -} - -#[tracing::instrument(skip_all)] fn handle_window_removed( observe: Observe<Pair<Removed, Window>>, mut command_queue: Single<CommandQueue>, diff --git a/engine/src/rendering/backend/opengl.rs b/engine/src/rendering/backend/opengl.rs index 33a1712..e00faa2 100644 --- a/engine/src/rendering/backend/opengl.rs +++ b/engine/src/rendering/backend/opengl.rs @@ -427,7 +427,13 @@ fn init_window_graphics( let surface_id = SurfaceId::new_unique(); - actions.add_components(window_ent_id, (Surface { id: surface_id },)); + actions.add_components( + window_ent_id, + (Surface { + id: surface_id, + size: window.inner_size.clone(), + },), + ); graphics_ctx.surfaces.insert( surface_id, |
