From 42b2e9b007d49506c98d0242b8b061df3aa4228b Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sat, 8 Apr 2023 06:44:46 +0200 Subject: Support `ICED_BACKEND` environment variable --- renderer/src/compositor.rs | 127 ++++++++++++++++++++++++++++++--------------- 1 file changed, 84 insertions(+), 43 deletions(-) (limited to 'renderer/src') diff --git a/renderer/src/compositor.rs b/renderer/src/compositor.rs index 218e7e33..1ce13c7d 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 raw_window_handle::{HasRawDisplayHandle, HasRawWindowHandle}; +use std::env; pub enum Compositor { #[cfg(feature = "wgpu")] @@ -28,53 +29,13 @@ impl crate::graphics::Compositor for Compositor { settings: Self::Settings, compatible_window: Option<&W>, ) -> Result<(Self, Self::Renderer), Error> { - #[cfg(feature = "wgpu")] - let new_wgpu = |settings: Self::Settings, compatible_window| { - let (compositor, backend) = iced_wgpu::window::compositor::new( - iced_wgpu::Settings { - default_font: settings.default_font, - default_text_size: settings.default_text_size, - antialiasing: settings.antialiasing, - ..iced_wgpu::Settings::from_env() - }, - compatible_window, - )?; - - Ok(( - Self::Wgpu(compositor), - Renderer::new(crate::Backend::Wgpu(backend)), - )) - }; - - #[cfg(feature = "tiny-skia")] - let new_tiny_skia = |settings: Self::Settings, _compatible_window| { - let (compositor, backend) = iced_tiny_skia::window::compositor::new( - iced_tiny_skia::Settings { - default_font: settings.default_font, - default_text_size: settings.default_text_size, - }, - ); - - Ok(( - Self::TinySkia(compositor), - Renderer::new(crate::Backend::TinySkia(backend)), - )) - }; - - let fail = |_, _| Err(Error::GraphicsAdapterNotFound); - - let candidates = &[ - #[cfg(feature = "wgpu")] - new_wgpu, - #[cfg(feature = "tiny-skia")] - new_tiny_skia, - fail, - ]; + let candidates = + Candidate::list_from_env().unwrap_or(Candidate::default_list()); let mut error = Error::GraphicsAdapterNotFound; for candidate in candidates { - match candidate(settings, compatible_window) { + match candidate.build(settings, compatible_window) { Ok((compositor, renderer)) => { return Ok((compositor, renderer)) } @@ -183,3 +144,83 @@ impl crate::graphics::Compositor for Compositor { }) } } + +enum Candidate { + Wgpu, + TinySkia, +} + +impl Candidate { + fn default_list() -> Vec { + vec![ + #[cfg(feature = "wgpu")] + Self::Wgpu, + #[cfg(feature = "tiny-skia")] + Self::TinySkia, + ] + } + + fn list_from_env() -> Option> { + let backends = env::var("ICED_BACKEND").ok()?; + + Some( + backends + .split(',') + .map(str::trim) + .map(|backend| match backend { + "wgpu" => Self::Wgpu, + "tiny-skia" => Self::TinySkia, + _ => panic!("unknown backend value: \"{backend}\""), + }) + .collect(), + ) + } + + fn build( + self, + settings: Settings, + compatible_window: Option<&W>, + ) -> Result<(Compositor, Renderer), Error> { + match self { + Self::Wgpu => { + if cfg!(feature = "wgpu") { + let (compositor, backend) = + iced_wgpu::window::compositor::new( + iced_wgpu::Settings { + default_font: settings.default_font, + default_text_size: settings.default_text_size, + antialiasing: settings.antialiasing, + ..iced_wgpu::Settings::from_env() + }, + compatible_window, + )?; + + return Ok(( + Compositor::Wgpu(compositor), + Renderer::new(crate::Backend::Wgpu(backend)), + )); + } else { + panic!("`wgpu` feature was not enabled in `iced_renderer`"); + } + } + Self::TinySkia => { + if cfg!(feature = "tiny-skia") { + let (compositor, backend) = + iced_tiny_skia::window::compositor::new( + iced_tiny_skia::Settings { + default_font: settings.default_font, + default_text_size: settings.default_text_size, + }, + ); + + Ok(( + Compositor::TinySkia(compositor), + Renderer::new(crate::Backend::TinySkia(backend)), + )) + } else { + panic!("`wgpu` feature was not enabled in `iced_renderer`"); + } + } + } + } +} -- cgit From c2249d2506585abac0f056c619a6dca1b05e8c46 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sat, 8 Apr 2023 06:45:44 +0200 Subject: Fix copy-pasted panic description in `iced_renderer` --- renderer/src/compositor.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'renderer/src') diff --git a/renderer/src/compositor.rs b/renderer/src/compositor.rs index 1ce13c7d..484d91eb 100644 --- a/renderer/src/compositor.rs +++ b/renderer/src/compositor.rs @@ -218,7 +218,7 @@ impl Candidate { Renderer::new(crate::Backend::TinySkia(backend)), )) } else { - panic!("`wgpu` feature was not enabled in `iced_renderer`"); + panic!("`tiny-skia` feature was not enabled in `iced_renderer`"); } } } -- cgit From e63cc181bddbdc0a5b9b091cfeee5e4343b3d906 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Wed, 26 Apr 2023 16:28:47 +0200 Subject: Fix `Candidate::build` in `compositor` of `iced_renderer` --- renderer/src/compositor.rs | 75 ++++++++++++++++++++++++---------------------- 1 file changed, 39 insertions(+), 36 deletions(-) (limited to 'renderer/src') diff --git a/renderer/src/compositor.rs b/renderer/src/compositor.rs index 484d91eb..e31c2bed 100644 --- a/renderer/src/compositor.rs +++ b/renderer/src/compositor.rs @@ -179,47 +179,50 @@ impl Candidate { fn build( self, settings: Settings, - compatible_window: Option<&W>, + _compatible_window: Option<&W>, ) -> Result<(Compositor, Renderer), Error> { match self { + #[cfg(feature = "wgpu")] Self::Wgpu => { - if cfg!(feature = "wgpu") { - let (compositor, backend) = - iced_wgpu::window::compositor::new( - iced_wgpu::Settings { - default_font: settings.default_font, - default_text_size: settings.default_text_size, - antialiasing: settings.antialiasing, - ..iced_wgpu::Settings::from_env() - }, - compatible_window, - )?; - - return Ok(( - Compositor::Wgpu(compositor), - Renderer::new(crate::Backend::Wgpu(backend)), - )); - } else { - panic!("`wgpu` feature was not enabled in `iced_renderer`"); - } + let (compositor, backend) = iced_wgpu::window::compositor::new( + iced_wgpu::Settings { + default_font: settings.default_font, + default_text_size: settings.default_text_size, + antialiasing: settings.antialiasing, + ..iced_wgpu::Settings::from_env() + }, + _compatible_window, + )?; + + Ok(( + Compositor::Wgpu(compositor), + Renderer::new(crate::Backend::Wgpu(backend)), + )) } + #[cfg(feature = "tiny-skia")] Self::TinySkia => { - if cfg!(feature = "tiny-skia") { - let (compositor, backend) = - iced_tiny_skia::window::compositor::new( - iced_tiny_skia::Settings { - default_font: settings.default_font, - default_text_size: settings.default_text_size, - }, - ); - - Ok(( - Compositor::TinySkia(compositor), - Renderer::new(crate::Backend::TinySkia(backend)), - )) - } else { - panic!("`tiny-skia` feature was not enabled in `iced_renderer`"); - } + let (compositor, backend) = + iced_tiny_skia::window::compositor::new( + iced_tiny_skia::Settings { + default_font: settings.default_font, + default_text_size: settings.default_text_size, + }, + ); + + Ok(( + Compositor::TinySkia(compositor), + Renderer::new(crate::Backend::TinySkia(backend)), + )) + } + #[cfg(not(feature = "wgpu"))] + Self::Wgpu => { + panic!("`wgpu` feature was not enabled in `iced_renderer`") + } + #[cfg(not(feature = "tiny-skia"))] + Self::TinySkia => { + panic!( + "`tiny-skia` feature was not enabled in `iced_renderer`" + ); } } } -- cgit From 9c63eb7df559e58b14188b4096e9bd206444bbf3 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Wed, 26 Apr 2023 16:46:27 +0200 Subject: Update `tiny-skia` and `resvg` --- renderer/src/compositor.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'renderer/src') diff --git a/renderer/src/compositor.rs b/renderer/src/compositor.rs index e31c2bed..48ed4b1f 100644 --- a/renderer/src/compositor.rs +++ b/renderer/src/compositor.rs @@ -123,11 +123,10 @@ impl crate::graphics::Compositor for Compositor { ), #[cfg(feature = "tiny-skia")] ( - Self::TinySkia(compositor), + Self::TinySkia(_compositor), crate::Backend::TinySkia(backend), Surface::TinySkia(surface), ) => iced_tiny_skia::window::compositor::present( - compositor, backend, surface, primitives, -- cgit