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 '')
| -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 {  | 
