diff --git a/pipelined/bevy_render2/src/view/window.rs b/pipelined/bevy_render2/src/view/window.rs index 3173da919cc2d..67a3ec50a16e1 100644 --- a/pipelined/bevy_render2/src/view/window.rs +++ b/pipelined/bevy_render2/src/view/window.rs @@ -117,19 +117,22 @@ pub fn prepare_windows( .entry(window.id) .or_insert_with(|| render_device.create_swap_chain(surface, &swap_chain_descriptor)); - let frame = if let Ok(swap_chain_frame) = swap_chain.get_current_frame() { - swap_chain_frame - } else { - let swap_chain = window_surfaces - .swap_chains - .entry(window.id) - .or_insert_with(|| { - render_device.create_swap_chain(surface, &swap_chain_descriptor) - }); - - swap_chain - .get_current_frame() - .expect("Failed to acquire next swap chain texture!") + let frame = match swap_chain.get_current_frame() { + Ok(swap_chain_frame) => { + swap_chain_frame + }, + Err(wgpu::SwapChainError::Outdated) => { + let new_swap_chain = render_device.create_swap_chain(surface, &swap_chain_descriptor); + let frame = new_swap_chain.get_current_frame().expect("Error recreating swap chain"); + window_surfaces.swap_chains.insert( + window.id, + new_swap_chain + ); + frame + }, + err => { + err.expect("Failed to acquire next swap chain texture!") + } }; window.swap_chain_frame = Some(TextureView::from(frame));