From a7d2834a6d15466eecca29bb6357d3539cb652cd Mon Sep 17 00:00:00 2001 From: Billy Messenger Date: Thu, 22 Jul 2021 13:08:13 -0500 Subject: add custom error for Compositor::draw() --- winit/src/application.rs | 41 ++++++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 15 deletions(-) (limited to 'winit') diff --git a/winit/src/application.rs b/winit/src/application.rs index 903d03e2..b04fc609 100644 --- a/winit/src/application.rs +++ b/winit/src/application.rs @@ -366,7 +366,7 @@ async fn run_instance( viewport_version = current_viewport_version; } - if let Ok(new_mouse_interaction) = compositor.draw( + match compositor.draw( &mut renderer, &mut swap_chain, state.viewport(), @@ -374,23 +374,34 @@ async fn run_instance( &primitive, &debug.overlay(), ) { - debug.render_finished(); + Ok(new_mouse_interaction) => { + debug.render_finished(); - if new_mouse_interaction != mouse_interaction { - window.set_cursor_icon(conversion::mouse_interaction( - new_mouse_interaction, - )); + if new_mouse_interaction != mouse_interaction { + window.set_cursor_icon( + conversion::mouse_interaction( + new_mouse_interaction, + ), + ); - mouse_interaction = new_mouse_interaction; - } - - // TODO: Handle animations! - // Maybe we can use `ControlFlow::WaitUntil` for this. - } else { - debug.render_finished(); + mouse_interaction = new_mouse_interaction; + } - // Rendering could not complete, try again next frame. - window.request_redraw(); + // TODO: Handle animations! + // Maybe we can use `ControlFlow::WaitUntil` for this. + } + Err(error) => match error { + window::CompositorDrawError::SwapchainOutdated(_) => { + debug.render_finished(); + + // Swapchain is outdated. Try rendering again next frame. + window.request_redraw(); + } + window::CompositorDrawError::FatalSwapchainError(e) => { + // Fatal swapchain error. Rendering cannot continue. + panic!("{}", e); + } + }, } } event::Event::WindowEvent { -- cgit