diff options
Diffstat (limited to 'renderer/src/compositor.rs')
-rw-r--r-- | renderer/src/compositor.rs | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/renderer/src/compositor.rs b/renderer/src/compositor.rs index dc2c50ff..c23a814c 100644 --- a/renderer/src/compositor.rs +++ b/renderer/src/compositor.rs @@ -4,6 +4,7 @@ use crate::graphics::{Error, Viewport}; use crate::{Renderer, Settings}; use std::env; +use std::future::Future; pub enum Compositor { TinySkia(iced_tiny_skia::window::Compositor), @@ -25,22 +26,25 @@ impl crate::graphics::Compositor for Compositor { fn new<W: Window + Clone>( settings: Self::Settings, compatible_window: W, - ) -> Result<Self, Error> { + ) -> impl Future<Output = Result<Self, Error>> { let candidates = Candidate::list_from_env().unwrap_or(Candidate::default_list()); - let mut error = Error::GraphicsAdapterNotFound; + async move { + let mut error = Error::GraphicsAdapterNotFound; - for candidate in candidates { - match candidate.build(settings, compatible_window.clone()) { - Ok(compositor) => return Ok(compositor), - Err(new_error) => { - error = new_error; + for candidate in candidates { + match candidate.build(settings, compatible_window.clone()).await + { + Ok(compositor) => return Ok(compositor), + Err(new_error) => { + error = new_error; + } } } - } - Err(error) + Err(error) + } } fn create_renderer(&self) -> Self::Renderer { @@ -225,7 +229,7 @@ impl Candidate { ) } - fn build<W: Window>( + async fn build<W: Window>( self, settings: Settings, _compatible_window: W, @@ -252,7 +256,8 @@ impl Candidate { ..iced_wgpu::Settings::from_env() }, _compatible_window, - )?; + ) + .await?; Ok(Compositor::Wgpu(compositor)) } |