only create wgpu swap chain when surface is ready

This commit is contained in:
Carter Anderson 2020-03-28 13:56:29 -07:00
parent 26ff878469
commit ed9eb88835
2 changed files with 27 additions and 22 deletions

View File

@ -6,7 +6,7 @@ fn main() {
.setup_world(setup) .setup_world(setup)
.add_system(build_move_system()) .add_system(build_move_system())
.add_default_diagnostics() .add_default_diagnostics()
.print_diagnostics(std::time::Duration::from_secs_f64(1.0)) .print_diagnostics()
.run(); .run();
} }

View File

@ -346,6 +346,7 @@ impl WgpuRenderer {
impl Renderer for WgpuRenderer { impl Renderer for WgpuRenderer {
fn resize(&mut self, world: &mut World, resources: &mut Resources) { fn resize(&mut self, world: &mut World, resources: &mut Resources) {
if let Some(surface) = self.surface.as_ref() {
self.encoder = Some( self.encoder = Some(
self.device self.device
.borrow() .borrow()
@ -359,7 +360,7 @@ impl Renderer for WgpuRenderer {
let swap_chain = self let swap_chain = self
.device .device
.borrow() .borrow()
.create_swap_chain(self.surface.as_ref().unwrap(), &swap_chain_descriptor); .create_swap_chain(surface, &swap_chain_descriptor);
// WgpuRenderer can't own swap_chain without creating lifetime ergonomics issues, so lets just store it in World. // WgpuRenderer can't own swap_chain without creating lifetime ergonomics issues, so lets just store it in World.
resources.insert(swap_chain); resources.insert(swap_chain);
@ -371,6 +372,10 @@ impl Renderer for WgpuRenderer {
// consume current encoder // consume current encoder
let command_buffer = self.encoder.take().unwrap().finish(); let command_buffer = self.encoder.take().unwrap().finish();
self.queue.submit(&[command_buffer]); self.queue.submit(&[command_buffer]);
} else {
// TODO: remove this warning if this case is not a problem
println!("warning: attempted to resize renderer before surface was ready");
}
} }
fn update(&mut self, world: &mut World, resources: &mut Resources) { fn update(&mut self, world: &mut World, resources: &mut Resources) {