diff options
author | 2021-07-22 13:08:13 -0500 | |
---|---|---|
committer | 2021-07-22 13:08:13 -0500 | |
commit | a7d2834a6d15466eecca29bb6357d3539cb652cd (patch) | |
tree | 4cd74ac7fbde634e32b90704184296568e220aaf /winit | |
parent | 191288771f747f89e555dd315b424b468ab3d52a (diff) | |
download | iced-a7d2834a6d15466eecca29bb6357d3539cb652cd.tar.gz iced-a7d2834a6d15466eecca29bb6357d3539cb652cd.tar.bz2 iced-a7d2834a6d15466eecca29bb6357d3539cb652cd.zip |
add custom error for Compositor::draw()
Diffstat (limited to 'winit')
-rw-r--r-- | winit/src/application.rs | 41 |
1 files changed, 26 insertions, 15 deletions
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<A, E, C>( 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<A, E, C>( &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 { |