Merge branch '9-engine-clean-too-early-during-shutdown' into 'dev'

Resolve "Engine clean too early during shutdown"

See merge request Steins7/iv!9
This commit is contained in:
Steins7 2021-02-03 09:45:18 +01:00
commit 5601c7c0c7
7 changed files with 11 additions and 139 deletions

View File

@ -32,17 +32,11 @@ fn setup_logger() -> Result<(), fern::InitError> {
Ok(()) Ok(())
} }
//pub fn draw_frame(hal : &mut HalState, local : &LocalState) -> Result<(), &'static str> {
//
// hal.draw_clear_frame(local.color());
//}
pub fn main() -> Result<(), &'static str> { pub fn main() -> Result<(), &'static str> {
setup_logger().unwrap(); setup_logger().unwrap();
run()?; run()?;
//print!("test");
Ok(()) Ok(())
} }

View File

@ -78,6 +78,7 @@ where
}, },
Key::Close => { Key::Close => {
info!("Shutting down IV !"); info!("Shutting down IV !");
return; return;
} }
_ => (), _ => (),

View File

@ -46,7 +46,7 @@ impl Drop for WinitWindow {
}, },
_ => true, _ => true,
} {} } {}
trace!("Dropped !"); trace!("Dropped window !");
} }
} }

View File

@ -92,129 +92,6 @@ pub fn run() -> Result<(), &'static str> {
let mut controller = Controller::new(vec![subengine_pipeline]); let mut controller = Controller::new(vec![subengine_pipeline]);
controller.run(); controller.run();
//let engine_pipelines = vec![
// EnginePipeline {
// Inputs: vec![0,1],
// Engines: vec![&color_engine],
// Renderers: vec![(1,0)],
// },
// EnginePipeline {
// Inputs: vec![3],
// Engines: vec![&color_engine],
// Renderers: vec![(1,1),(1,2),(1,3)],
//}];
//let controller = Controller::new(renderers, &windows, &windows, engine_pipelines);
//controller.run();
//Ok(())
//let local_state = LocalState::default();
// let color = [0.5, 0.0, 0.0, 1.0];
//
// loop {
// for window in &mut windows {
// match renderer.draw_clear_frame(window, color) {
// Err(err) => println!("{}", err),
// _ => (),
// }}}
//
Ok(()) Ok(())
} }
// let (input_tx, input_rx) = mpsc::channel();
// let mut window_senders = HashMap::with_capacity(1);
// window_senders.insert(1, input_tx);
//
// let control_thread = RefCell::new(Some(thread::spawn(move || {
// #[allow(unused_imports)]
// use log::{debug, error, info, trace, warn};
//
// let (cmd_tx, cmd_rx) = mpsc::channel();
// let render_thread = thread::spawn(move || {
// #[allow(unused_imports)]
// use log::{debug, error, info, trace, warn};
//
// let mut color = [0.0, 0.0, 0.0, 0.0];
//
// loop
//
// //TODO manage errors
// for window in windows {
// let _ = renderer.draw_clear_frame(&mut window, color);
// }
//
// match cmd_rx.try_recv().unwrap_or(Command::NoCommand) {
// Command::NoCommand => (),
// Command::Stop => {
// warn!("Stop render thread");
// return;
// },
// Command::Color{r, g, b, a} => {
// color = [r, g, b, a];
// },
// }
// }
// });
//
// loop {
// match input_rx.recv().unwrap() {
// Input::Close => {
// cmd_tx.send(Command::Stop).unwrap();
// //TODO stop event_loop
// warn!("wait for render thread");
// render_thread.join().unwrap();
// warn!("Stop control thread");
// return;
// },
// Input::Mouse{x, y} => {
// let pos = Command::Color{
// r: (x/1280.0) as f32,
// g: (y/720.0) as f32,
// b: ((x/1280.0 + y/720.0)/2.0) as f32,
// a: 1.0,
// };
// cmd_tx.send(pos).unwrap();
// },
// }
// }
// })));
//
// windows[0].event_loop.run(move |event, _, control_flow| {
// #[allow(unused_imports)]
// use log::{debug, error, info, trace, warn};
//
// *control_flow = ControlFlow::Wait;
//
// //TODO manage errors
// let input_tx = window_senders.get(&1).unwrap();
// match event {
// Event::WindowEvent{window_id: _, event} => match event {
// WindowEvent::CloseRequested => {
// input_tx.send(Input::Close).unwrap();
// let handle = control_thread.replace(None).unwrap();
// warn!("Wait for control thread");
// handle.join().unwrap();
// warn!("Stop input thread");
// *control_flow = ControlFlow::Exit;
// },
// WindowEvent::CursorMoved{position, ..} => {
// input_tx
// .send(Input::Mouse{
// x: position.x,
// y: position.y})
// .unwrap();
// },
// _ => (),
// }
// _ => (),
// }
// });
//}
//
//mod tests {
// #[test]
// fn it_works() {
// assert_eq!(2 + 2, 4);
// }
//}

View File

@ -41,25 +41,26 @@ where
device::Device, device::Device,
}; };
debug!("Dropping Pipelines...");
for pipeline in self.pipelines.drain(..) {
pipeline.drop(&mut self.gpu);
}
debug!("Waiting for device to idle..."); debug!("Waiting for device to idle...");
let _ = self.gpu let _ = self.gpu
.device() .device()
.wait_idle(); .wait_idle();
debug!("Dropping Pipelines...");
for pipeline in self.pipelines.drain(..) {
pipeline.drop(&mut self.gpu);
}
info!("Dropping Renderer..."); info!("Dropping Renderer...");
unsafe { unsafe {
debug!("Dropping SwapSystems...");
for mut swap_system in self.swap_systems.drain(..) { for mut swap_system in self.swap_systems.drain(..) {
self.instance.destroy_surface(swap_system.drop(&mut self.gpu)); self.instance.destroy_surface(swap_system.drop(&mut self.gpu));
} }
ManuallyDrop::drop(&mut self.gpu); ManuallyDrop::drop(&mut self.gpu);
ManuallyDrop::drop(&mut self.instance); ManuallyDrop::drop(&mut self.instance);
} }
trace!("Renderer dropped !"); debug!("Renderer dropped !");
} }
} }

View File

@ -37,7 +37,7 @@ where
pub fn drop(&mut self, gpu: &mut Gpu<B>) -> B::Surface { pub fn drop(&mut self, gpu: &mut Gpu<B>) -> B::Surface {
use gfx_hal::device::Device; use gfx_hal::device::Device;
debug!("Dropping SwapSystem..."); trace!("Dropping frames...");
for mut frame in self.frames.drain(..) { for mut frame in self.frames.drain(..) {
frame.drop(gpu); frame.drop(gpu);
} }

View File

@ -32,7 +32,6 @@ where
pool::CommandPool, pool::CommandPool,
}; };
trace!("Dropping Frame...");
unsafe { unsafe {
if self.image_view.is_some() { if self.image_view.is_some() {
warn!("Dropping non-presented frame !"); warn!("Dropping non-presented frame !");