wip: Changes of the week

- Move engine to a different crate
- Add engine trait
- Refactor the rest of the codebase to work with these changes
- Add debug ui buffer, use it to finish imgui support
This commit is contained in:
reo 2025-09-07 17:00:04 +03:00
parent 3fd5b09a94
commit 15122b8ebd
20 changed files with 344 additions and 117 deletions

View file

@ -12,25 +12,26 @@ use glium::Surface;
use crate::system::{RenderingSystemManager, RenderingSystem, RenderingContext, SystemID};
use winit::event::{Event, WindowEvent};
use raidillon_assets::{ModelManager, ModelManagerRef};
use raidillon_core::Engine;
use raidillon_core::engine::EngineTrait;
use raidillon_engine::Engine;
use crate::{GliumAssetManager};
use crate::render::debug_ui::ImguiBridge;
use crate::render::BasicMeshRenderingSystem;
pub const MESH_RENDERER: &str = "mesh_renderer";
pub const DEBUG_UI_RENDERER: &str = "debug_ui_renderer";
pub struct GliumPlatform {
pub struct GliumPlatform<E: EngineTrait> {
event_loop: EventLoop<()>,
window: Window,
display: Display<WindowSurface>,
rendering_system_manager: RenderingSystemManager,
asset_manager: ModelManagerRef,
engine: Engine,
imgui_bridge: ImguiBridge,
engine: E,
}
impl Platform for GliumPlatform {
fn initialize(mut engine: Engine, title: String, width: u32, height: u32) -> Self {
impl<E: EngineTrait> Platform<E> for GliumPlatform<E> {
fn initialize(mut engine: E, title: String, width: u32, height: u32) -> Self {
let event_loop = glium::winit::event_loop::EventLoop::builder()
.build()
.expect("create event-loop");
@ -46,10 +47,13 @@ impl Platform for GliumPlatform {
// Install rendering systems
rendering_system_manager.add_system(
MESH_RENDERER,
Box::new(BasicMeshRenderingSystem::initialize(&display))
Box::new(BasicMeshRenderingSystem::initialize(&display, &window))
);
let imgui_bridge = ImguiBridge::new(&display, &window).unwrap();
rendering_system_manager.add_system(
DEBUG_UI_RENDERER,
Box::new(ImguiBridge::initialize(&display, &window)),
);
Self {
event_loop,
@ -58,7 +62,6 @@ impl Platform for GliumPlatform {
rendering_system_manager,
asset_manager,
engine,
imgui_bridge,
}
}
@ -81,11 +84,13 @@ impl Platform for GliumPlatform {
WindowEvent::RedrawRequested => {
let mut target = self.display.draw();
target.clear_color_and_depth((0.1, 0.1, 0.15, 1.0), 1.0);
// TODO: let mut context;
let (scene_mut, debug_ui_buffer) = self.engine.scene_and_debug_ui_buffer_mut();
let mut context = RenderingContext {
scene: self.engine.scene_manager.current_mut(),
scene: scene_mut,
target: &mut target,
asset_manager: self.asset_manager.clone(),
window: &mut self.window,
debug_ui_buffer,
};
for (system_id, system) in self.rendering_system_manager.systems.iter_mut() {