diff options
| author | HampusM <hampus@hampusmat.com> | 2026-06-25 01:05:56 +0200 |
|---|---|---|
| committer | HampusM <hampus@hampusmat.com> | 2026-06-30 18:24:46 +0200 |
| commit | 1a3cc9a6b7c20589db5c56e20aa2c69ac61763a0 (patch) | |
| tree | 2186e0946aeef1b029aa28e74420baf634f0e21e /engine | |
| parent | 6f1186236aca39c49816bc3d52f28dd880cff6a9 (diff) | |
refactor(engine): render only to window targeted windows
Diffstat (limited to 'engine')
| -rw-r--r-- | engine/src/rendering.rs | 14 | ||||
| -rw-r--r-- | engine/src/rendering/backend/opengl.rs | 8 | ||||
| -rw-r--r-- | engine/src/rendering/main_render_pass.rs | 13 | ||||
| -rw-r--r-- | engine/src/shader/default.rs | 6 |
4 files changed, 26 insertions, 15 deletions
diff --git a/engine/src/rendering.rs b/engine/src/rendering.rs index 2ec0b38..e9e620e 100644 --- a/engine/src/rendering.rs +++ b/engine/src/rendering.rs @@ -121,6 +121,10 @@ impl Default for Extension } } +/// Marker component for windows that should be renderer to. +#[derive(Debug, Clone, Copy, Component)] +pub struct TargetWindow; + builder! { #[builder(name=GraphicsPropertiesBuilder, derives=(Debug, Clone))] #[derive(Debug, Clone, Sole)] @@ -400,7 +404,7 @@ impl Default for CommandQueue #[tracing::instrument(skip_all)] fn enqueue_commands_from_render_passes( - window_surface_spec_query: Query<(&SurfaceSpec,), (With<Window>,)>, + window_surface_spec_query: Query<(&SurfaceSpec,), (With<Window>, With<TargetWindow>)>, mut command_queue: Single<CommandQueue>, mut render_passes: Single<RenderPasses>, mut active_draw_props: Local<ActiveDrawProperties>, @@ -450,6 +454,10 @@ fn handle_window_changed( for evt_match in &observe { let window_ent = evt_match.get_entity(); + if window_ent.get::<TargetWindow>().is_none() { + continue; + } + let Some(window_surface_spec) = window_ent.get::<SurfaceSpec>() else { continue; }; @@ -485,6 +493,10 @@ fn handle_window_removed( let window_ent = evt_match.get_entity(); + if window_ent.get::<TargetWindow>().is_none() { + continue; + } + tracing::debug!( entity_id = %window_ent_id, title = %evt_match.get_ent_target_comp().title, diff --git a/engine/src/rendering/backend/opengl.rs b/engine/src/rendering/backend/opengl.rs index 47c2145..c1e4823 100644 --- a/engine/src/rendering/backend/opengl.rs +++ b/engine/src/rendering/backend/opengl.rs @@ -3,6 +3,7 @@ use std::borrow::Cow; use std::collections::HashMap; +use ecs::query::term::With; use glutin::config::Config as GlutinConfig; use glutin::display::GetGlDisplay; use glutin::error::Error as GlutinError; @@ -101,6 +102,7 @@ use crate::rendering::{ SurfaceSpec, POST_RENDER_PHASE, RENDER_PHASE, + TargetWindow }; use crate::shader::cursor::BindingValue as ShaderBindingValue; use crate::shader::{ @@ -183,6 +185,7 @@ fn prepare_windows( window_query: Query< (Option<&Window>, &mut WindowCreationAttributes), ( + With<TargetWindow>, Without<CreationReady>, Without<WindowGlConfig>, Without<WindowClosed>, @@ -258,7 +261,10 @@ fn prepare_windows( #[tracing::instrument(skip_all)] fn init_window_graphics( - window_query: Query<(&Window, &WindowGlConfig), (Without<SurfaceSpec>,)>, + window_query: Query< + (&Window, &WindowGlConfig), + (With<TargetWindow>, Without<SurfaceSpec>,) + >, windowing_context: Single<WindowingContext>, graphics_props: Single<GraphicsProperties>, mut graphics_ctx: Single<GraphicsContext>, diff --git a/engine/src/rendering/main_render_pass.rs b/engine/src/rendering/main_render_pass.rs index a733482..3429e34 100644 --- a/engine/src/rendering/main_render_pass.rs +++ b/engine/src/rendering/main_render_pass.rs @@ -6,16 +6,7 @@ use crate::ecs::Query; use crate::model::{MaterialSearchResult, Model}; use crate::rendering::object::{Id as ObjectId, Store as ObjectStore}; use crate::rendering::{ - BufferClearMask, - Command, - DrawMeshOptions, - DrawProperties, - DrawPropertiesUpdateFlags, - MeshUsage, - PendingShaderBindings, - RenderPass, - RenderPasses, - SurfaceSpec, + BufferClearMask, Command, DrawMeshOptions, DrawProperties, DrawPropertiesUpdateFlags, MeshUsage, PendingShaderBindings, RenderPass, RenderPasses, SurfaceSpec, TargetWindow }; use crate::shader::default::ASSET_LABEL as DEFAULT_SHADER_ASSET_LABEL; use crate::shader::{ @@ -36,7 +27,7 @@ type RenderableEntity<'a> = ( #[tracing::instrument(skip_all)] pub fn add_main_render_passes( renderable_query: Query<RenderableEntity<'_>, (Without<NoDraw>,)>, - window_surface_spec_query: Query<(&SurfaceSpec,), (With<Window>,)>, + window_surface_spec_query: Query<(&SurfaceSpec,), (With<Window>, With<TargetWindow>)>, assets: Single<Assets>, shader_context: Single<ShaderContext>, mut render_passes: Single<RenderPasses>, diff --git a/engine/src/shader/default.rs b/engine/src/shader/default.rs index e682a81..cac4c4b 100644 --- a/engine/src/shader/default.rs +++ b/engine/src/shader/default.rs @@ -1,6 +1,8 @@ use std::path::Path; use std::sync::LazyLock; +use ecs::query::term::With; + use crate::asset::{Assets, Label as AssetLabel}; use crate::camera::{Active as ActiveCamera, Camera}; use crate::data_types::dimens::Dimens; @@ -14,7 +16,7 @@ use crate::material::{Flags as MaterialFlags, Material}; use crate::matrix::Matrix; use crate::model::{MaterialSearchResult, Model}; use crate::projection::{ClipVolume as ProjectionClipVolume, Projection}; -use crate::rendering::{PendingShaderBindings, SurfaceSpec}; +use crate::rendering::{PendingShaderBindings, SurfaceSpec, TargetWindow as RenderingTargetWindow}; use crate::shader::cursor::{BindingValue as ShaderBindingValue, Cursor as ShaderCursor}; use crate::shader::{ Context as ShaderContext, @@ -34,7 +36,7 @@ pub static ASSET_LABEL: LazyLock<AssetLabel> = LazyLock::new(|| AssetLabel { pub fn enqueue_set_shader_bindings( renderable_query: Query<RenderableEntity<'_>, (Without<NoDraw>,)>, camera_query: Query<(&Camera, &WorldPosition, &ActiveCamera)>, - window_query: Query<(&Window, &SurfaceSpec)>, + window_query: Query<(&Window, &SurfaceSpec), (With<RenderingTargetWindow>,)>, point_light_query: Query<(&PointLight, &WorldPosition)>, directional_light_query: Query<(&DirectionalLight,)>, assets: Single<Assets>, |
