wip: week of changes
This commit is contained in:
parent
03e8f34dba
commit
176ea52ab0
20 changed files with 171 additions and 47 deletions
|
|
@ -1,3 +1,5 @@
|
|||
use std::cell::RefCell;
|
||||
use std::rc::Rc;
|
||||
use std::sync::{Arc, RwLock};
|
||||
use raidillon_platform::Platform;
|
||||
use glium::winit::event_loop::EventLoop;
|
||||
|
|
@ -8,20 +10,22 @@ use glium::backend::glutin::SimpleWindowBuilder;
|
|||
use glium::Surface;
|
||||
use crate::system::{RenderingSystemManager, RenderingSystem, RenderingContext};
|
||||
use winit::event::{Event, WindowEvent};
|
||||
use raidillon_assets::{ModelManager, ModelManagerRef};
|
||||
use raidillon_core::Engine;
|
||||
use crate::GliumAssetManager;
|
||||
use crate::render::BasicRenderingSystem;
|
||||
|
||||
pub struct GliumPlatform<RS: RenderingSystem> {
|
||||
pub struct GliumPlatform {
|
||||
event_loop: EventLoop<()>,
|
||||
window: Window,
|
||||
display: Display<WindowSurface>,
|
||||
rendering_system_manager: RenderingSystemManager<RS>,
|
||||
asset_manager: Arc<RwLock<GliumAssetManager>>,
|
||||
rendering_system_manager: RenderingSystemManager,
|
||||
asset_manager: ModelManagerRef,
|
||||
engine: Engine,
|
||||
}
|
||||
|
||||
impl<RS: RenderingSystem> Platform for GliumPlatform<RS> {
|
||||
fn initialize(title: String, width: u32, height: u32) -> Self {
|
||||
impl Platform for GliumPlatform {
|
||||
fn initialize(mut engine: Engine, title: String, width: u32, height: u32) -> Self {
|
||||
let event_loop = glium::winit::event_loop::EventLoop::builder()
|
||||
.build()
|
||||
.expect("create event-loop");
|
||||
|
|
@ -31,18 +35,20 @@ impl<RS: RenderingSystem> Platform for GliumPlatform<RS> {
|
|||
.with_inner_size(width, height)
|
||||
.build(&event_loop);
|
||||
|
||||
let asset_manager = Arc::new(RwLock::new(GliumAssetManager::new(Box::new(display.clone()))));
|
||||
let asset_manager: ModelManagerRef = Rc::new(RefCell::new(Box::new(GliumAssetManager::new(Box::new(display.clone())))));
|
||||
let rendering_system_manager = RenderingSystemManager::new();
|
||||
engine.set_model_manager(asset_manager.clone());
|
||||
Self {
|
||||
event_loop,
|
||||
window,
|
||||
display,
|
||||
rendering_system_manager,
|
||||
asset_manager,
|
||||
engine
|
||||
}
|
||||
}
|
||||
|
||||
fn run(mut self, engine: Engine) {
|
||||
fn run(mut self) {
|
||||
let _ = &self.event_loop.run(move |event, el| {
|
||||
match event {
|
||||
Event::WindowEvent { event, .. } => match event {
|
||||
|
|
@ -51,15 +57,22 @@ impl<RS: RenderingSystem> Platform for GliumPlatform<RS> {
|
|||
let mut target = self.display.draw();
|
||||
target.clear_color(0.0, 0.0, 0.0, 1.0);
|
||||
// TODO: let mut context;
|
||||
let mut context = RenderingContext {
|
||||
scene: self.engine.scene_manager.current_mut(),
|
||||
target: &mut target,
|
||||
asset_manager: self.asset_manager.clone(),
|
||||
};
|
||||
|
||||
for (system_id, system) in self.rendering_system_manager.systems.iter_mut() {
|
||||
todo!();
|
||||
system.render(&mut context);
|
||||
}
|
||||
target.finish().unwrap();
|
||||
}
|
||||
_ => {},
|
||||
},
|
||||
Event::AboutToWait => {
|
||||
// TODO: Run <engine: Engine> systems here
|
||||
self.engine.set_winit_event(event.clone());
|
||||
self.engine.update();
|
||||
self.window.request_redraw();
|
||||
}
|
||||
_ => {},
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue