diff --git a/examples/ui_bench.rs b/examples/ui_bench.rs index 825bcf8ad1..8390a390b1 100644 --- a/examples/ui_bench.rs +++ b/examples/ui_bench.rs @@ -6,7 +6,7 @@ fn main() { .setup_world(setup) .add_system(build_move_system()) .add_default_diagnostics() - .print_diagnostics(std::time::Duration::from_secs_f64(1.0)) + .print_diagnostics() .run(); } diff --git a/src/render/renderer/renderers/wgpu_renderer/wgpu_renderer.rs b/src/render/renderer/renderers/wgpu_renderer/wgpu_renderer.rs index f84c2715c3..602be10f7f 100644 --- a/src/render/renderer/renderers/wgpu_renderer/wgpu_renderer.rs +++ b/src/render/renderer/renderers/wgpu_renderer/wgpu_renderer.rs @@ -346,31 +346,36 @@ impl WgpuRenderer { impl Renderer for WgpuRenderer { fn resize(&mut self, world: &mut World, resources: &mut Resources) { - self.encoder = Some( - self.device + if let Some(surface) = self.surface.as_ref() { + self.encoder = Some( + self.device + .borrow() + .create_command_encoder(&wgpu::CommandEncoderDescriptor { todo: 0 }), + ); + let swap_chain_descriptor: wgpu::SwapChainDescriptor = { + let window: &Window = &resources.get::().unwrap(); + window.into() + }; + + let swap_chain = self + .device .borrow() - .create_command_encoder(&wgpu::CommandEncoderDescriptor { todo: 0 }), - ); - let swap_chain_descriptor: wgpu::SwapChainDescriptor = { - let window: &Window = &resources.get::().unwrap(); - window.into() - }; + .create_swap_chain(surface, &swap_chain_descriptor); - let swap_chain = self - .device - .borrow() - .create_swap_chain(self.surface.as_ref().unwrap(), &swap_chain_descriptor); + // WgpuRenderer can't own swap_chain without creating lifetime ergonomics issues, so lets just store it in World. + resources.insert(swap_chain); + let mut render_graph = resources.get_mut::().unwrap(); + for resource_provider in render_graph.resource_providers.iter_mut() { + resource_provider.resize(self, world, resources, swap_chain_descriptor.width, swap_chain_descriptor.height); + } - // WgpuRenderer can't own swap_chain without creating lifetime ergonomics issues, so lets just store it in World. - resources.insert(swap_chain); - let mut render_graph = resources.get_mut::().unwrap(); - for resource_provider in render_graph.resource_providers.iter_mut() { - resource_provider.resize(self, world, resources, swap_chain_descriptor.width, swap_chain_descriptor.height); + // consume current encoder + let command_buffer = self.encoder.take().unwrap().finish(); + 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"); } - - // consume current encoder - let command_buffer = self.encoder.take().unwrap().finish(); - self.queue.submit(&[command_buffer]); } fn update(&mut self, world: &mut World, resources: &mut Resources) {