- Implement the initial version of the run method of the glium platform - Add asset manager to the context of the renderer. I will probably move that to either the engine or somewhere else later. - Other unimportant stuff that I'm too lazy to include here. Early stage commit messages don't really matter anyways.
69 lines
2.4 KiB
Rust
69 lines
2.4 KiB
Rust
use std::sync::{Arc, RwLock};
|
|
use raidillon_platform::Platform;
|
|
use glium::winit::event_loop::EventLoop;
|
|
use glium::winit::window::Window;
|
|
use glium::backend::glutin::Display;
|
|
use glium::glutin::surface::WindowSurface;
|
|
use glium::backend::glutin::SimpleWindowBuilder;
|
|
use glium::Surface;
|
|
use crate::system::{RenderingSystemManager, RenderingSystem, RenderingContext};
|
|
use winit::event::{Event, WindowEvent};
|
|
use raidillon_core::Engine;
|
|
use crate::GliumAssetManager;
|
|
use crate::render::BasicRenderingSystem;
|
|
|
|
pub struct GliumPlatform<RS: RenderingSystem> {
|
|
event_loop: EventLoop<()>,
|
|
window: Window,
|
|
display: Display<WindowSurface>,
|
|
rendering_system_manager: RenderingSystemManager<RS>,
|
|
asset_manager: Arc<RwLock<GliumAssetManager>>,
|
|
}
|
|
|
|
impl<RS: RenderingSystem> Platform for GliumPlatform<RS> {
|
|
fn initialize(title: String, width: u32, height: u32) -> Self {
|
|
let event_loop = glium::winit::event_loop::EventLoop::builder()
|
|
.build()
|
|
.expect("create event-loop");
|
|
|
|
let (window, display) = SimpleWindowBuilder::new()
|
|
.with_title(title.as_str())
|
|
.with_inner_size(width, height)
|
|
.build(&event_loop);
|
|
|
|
let asset_manager = Arc::new(RwLock::new(GliumAssetManager::new(Box::new(display.clone()))));
|
|
let rendering_system_manager = RenderingSystemManager::new();
|
|
Self {
|
|
event_loop,
|
|
window,
|
|
display,
|
|
rendering_system_manager,
|
|
asset_manager,
|
|
}
|
|
}
|
|
|
|
fn run(mut self, engine: Engine) {
|
|
let _ = &self.event_loop.run(move |event, el| {
|
|
match event {
|
|
Event::WindowEvent { event, .. } => match event {
|
|
WindowEvent::CloseRequested => {},
|
|
WindowEvent::RedrawRequested => {
|
|
let mut target = self.display.draw();
|
|
target.clear_color(0.0, 0.0, 0.0, 1.0);
|
|
// TODO: let mut context;
|
|
|
|
for (system_id, system) in self.rendering_system_manager.systems.iter_mut() {
|
|
todo!();
|
|
}
|
|
}
|
|
_ => {},
|
|
},
|
|
Event::AboutToWait => {
|
|
// TODO: Run <engine: Engine> systems here
|
|
self.window.request_redraw();
|
|
}
|
|
_ => {},
|
|
}
|
|
});
|
|
}
|
|
}
|