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:
commit
5601c7c0c7
8
main.rs
8
main.rs
@ -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(())
|
||||||
}
|
}
|
||||||
|
|||||||
@ -78,6 +78,7 @@ where
|
|||||||
},
|
},
|
||||||
Key::Close => {
|
Key::Close => {
|
||||||
info!("Shutting down IV !");
|
info!("Shutting down IV !");
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
_ => (),
|
_ => (),
|
||||||
|
|||||||
@ -46,7 +46,7 @@ impl Drop for WinitWindow {
|
|||||||
},
|
},
|
||||||
_ => true,
|
_ => true,
|
||||||
} {}
|
} {}
|
||||||
trace!("Dropped !");
|
trace!("Dropped window !");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
123
src/lib.rs
123
src/lib.rs
@ -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);
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|||||||
@ -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 !");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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 !");
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user