summaryrefslogtreecommitdiff
path: root/engine
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2026-06-25 01:05:56 +0200
committerHampusM <hampus@hampusmat.com>2026-06-30 18:24:46 +0200
commit1a3cc9a6b7c20589db5c56e20aa2c69ac61763a0 (patch)
tree2186e0946aeef1b029aa28e74420baf634f0e21e /engine
parent6f1186236aca39c49816bc3d52f28dd880cff6a9 (diff)
refactor(engine): render only to window targeted windows
Diffstat (limited to 'engine')
-rw-r--r--engine/src/rendering.rs14
-rw-r--r--engine/src/rendering/backend/opengl.rs8
-rw-r--r--engine/src/rendering/main_render_pass.rs13
-rw-r--r--engine/src/shader/default.rs6
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>,