From 9f4addb0576d8c0afd884f1c948f491d6e0708bc Mon Sep 17 00:00:00 2001 From: HampusM Date: Tue, 21 Apr 2026 15:46:24 +0200 Subject: feat(engine): add renderer extension --- engine/src/renderer.rs | 43 +++++++++++++++++++++++++++++++++++++++++++ engine/src/renderer/opengl.rs | 15 --------------- 2 files changed, 43 insertions(+), 15 deletions(-) (limited to 'engine') diff --git a/engine/src/renderer.rs b/engine/src/renderer.rs index bdbbe0c..6ef1535 100644 --- a/engine/src/renderer.rs +++ b/engine/src/renderer.rs @@ -63,6 +63,49 @@ declare_entity!( (Phase, Pair::builder().relation::().target_id(*RENDER_PHASE).build()) ); +builder! { +#[builder(name=ExtensionBuilder, derives=(Debug, Clone, Default))] +#[derive(Debug, Clone)] +#[non_exhaustive] +pub struct Extension {} +} + +impl Extension +{ + pub fn builder() -> ExtensionBuilder + { + ExtensionBuilder::default() + } +} + +impl ecs::extension::Extension for Extension +{ + fn collect(self, mut collector: ecs::extension::Collector<'_>) + { + collector.add_declared_entity(&PRE_RENDER_PHASE); + collector.add_declared_entity(&RENDER_PHASE); + collector.add_declared_entity(&POST_RENDER_PHASE); + + let _ = collector.add_sole(RenderPasses::default()); + + collector.add_system(*PRE_RENDER_PHASE, main_render_pass::add_main_render_passes); + + collector.add_system(*RENDER_PHASE, enqueue_commands_from_render_passes); + + collector.add_observer(handle_window_changed); + + opengl::Extension::default().collect(collector); + } +} + +impl Default for Extension +{ + fn default() -> Self + { + Self::builder().build() + } +} + builder! { /// Window graphics properties. #[builder(name=GraphicsPropertiesBuilder, derives=(Debug, Clone))] diff --git a/engine/src/renderer/opengl.rs b/engine/src/renderer/opengl.rs index 1cd46b2..4e865fb 100644 --- a/engine/src/renderer/opengl.rs +++ b/engine/src/renderer/opengl.rs @@ -94,9 +94,7 @@ use crate::renderer::{ DrawPropertiesUpdateFlags, GraphicsProperties, POST_RENDER_PHASE, - PRE_RENDER_PHASE, RENDER_PHASE, - RenderPasses, SurfaceId, SurfaceSpec, WindowUsingRendererCtx, @@ -161,24 +159,11 @@ impl ecs::extension::Extension for Extension { fn collect(self, mut collector: ecs::extension::Collector<'_>) { - collector.add_declared_entity(&PRE_RENDER_PHASE); - collector.add_declared_entity(&RENDER_PHASE); - collector.add_declared_entity(&POST_RENDER_PHASE); - - let _ = collector.add_sole(RenderPasses::default()); - - collector.add_system( - *PRE_RENDER_PHASE, - crate::renderer::main_render_pass::add_main_render_passes, - ); - - collector.add_system(*RENDER_PHASE, super::enqueue_commands_from_render_passes); collector.add_system(*RENDER_PHASE, handle_commands); collector.add_system(*POST_RENDER_PHASE, prepare_windows); collector.add_system(*POST_RENDER_PHASE, init_window_graphics); - collector.add_observer(super::handle_window_changed); collector.add_observer(handle_window_removed); } } -- cgit v1.2.3-18-g5258