From ecf42b97df85df25b1b825f37adfeb00f658f6ee Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Thu, 7 Mar 2024 23:25:24 +0100 Subject: Fix `block_on` in `iced_wgpu` hanging Wasm builds --- renderer/src/compositor.rs | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) (limited to 'renderer') 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( settings: Self::Settings, compatible_window: W, - ) -> Result { + ) -> impl Future> { 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( + async fn build( self, settings: Settings, _compatible_window: W, @@ -252,7 +256,8 @@ impl Candidate { ..iced_wgpu::Settings::from_env() }, _compatible_window, - )?; + ) + .await?; Ok(Compositor::Wgpu(compositor)) } -- cgit