summaryrefslogtreecommitdiffstats
path: root/winit
diff options
context:
space:
mode:
authorLibravatar Billy Messenger <BillyDM@tutamail.com>2021-07-22 13:08:13 -0500
committerLibravatar Billy Messenger <BillyDM@tutamail.com>2021-07-22 13:08:13 -0500
commita7d2834a6d15466eecca29bb6357d3539cb652cd (patch)
tree4cd74ac7fbde634e32b90704184296568e220aaf /winit
parent191288771f747f89e555dd315b424b468ab3d52a (diff)
downloadiced-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.rs41
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 {