From 712c8e53f2385ed425173cab327e06a214248579 Mon Sep 17 00:00:00 2001 From: Daniel Yoon <101683475+Koranir@users.noreply.github.com> Date: Sat, 3 Feb 2024 17:27:24 +1100 Subject: Fix alpha mode configuration in `iced_wgpu` --- wgpu/src/window/compositor.rs | 60 ++++++++++++++++++++++++++++--------------- 1 file changed, 40 insertions(+), 20 deletions(-) (limited to 'wgpu/src/window') diff --git a/wgpu/src/window/compositor.rs b/wgpu/src/window/compositor.rs index 58f3f654..3e329362 100644 --- a/wgpu/src/window/compositor.rs +++ b/wgpu/src/window/compositor.rs @@ -15,6 +15,7 @@ pub struct Compositor { device: wgpu::Device, queue: wgpu::Queue, format: wgpu::TextureFormat, + alpha_mode: wgpu::CompositeAlphaMode, } impl Compositor { @@ -61,25 +62,43 @@ impl Compositor { log::info!("Selected: {:#?}", adapter.get_info()); - let format = compatible_surface.as_ref().and_then(|surface| { - let capabilities = surface.get_capabilities(&adapter); - - let mut formats = capabilities.formats.iter().copied(); - - let format = if color::GAMMA_CORRECTION { - formats.find(wgpu::TextureFormat::is_srgb) - } else { - formats.find(|format| !wgpu::TextureFormat::is_srgb(format)) - }; - - format.or_else(|| { - log::warn!("No format found!"); - - capabilities.formats.first().copied() - }) - })?; - - log::info!("Selected format: {format:?}"); + let (format, alpha_mode) = + compatible_surface.as_ref().and_then(|surface| { + let capabilities = surface.get_capabilities(&adapter); + + let mut formats = capabilities.formats.iter().copied(); + + let format = if color::GAMMA_CORRECTION { + formats.find(wgpu::TextureFormat::is_srgb) + } else { + formats.find(|format| !wgpu::TextureFormat::is_srgb(format)) + }; + + let format = format.or_else(|| { + log::warn!("No format found!"); + + capabilities.formats.first().copied() + }); + + let alphas = capabilities.alpha_modes; + let preferred_alpha = if alphas + .contains(&wgpu::CompositeAlphaMode::PostMultiplied) + { + wgpu::CompositeAlphaMode::PostMultiplied + } else if alphas + .contains(&wgpu::CompositeAlphaMode::PreMultiplied) + { + wgpu::CompositeAlphaMode::PreMultiplied + } else { + wgpu::CompositeAlphaMode::Auto + }; + + format.zip(Some(preferred_alpha)) + })?; + + log::info!( + "Selected format: {format:?} with alpha mode: {alpha_mode:?}" + ); #[cfg(target_arch = "wasm32")] let limits = [wgpu::Limits::downlevel_webgl2_defaults() @@ -120,6 +139,7 @@ impl Compositor { device, queue, format, + alpha_mode, }) } @@ -249,7 +269,7 @@ impl graphics::Compositor for Compositor { present_mode: self.settings.present_mode, width, height, - alpha_mode: wgpu::CompositeAlphaMode::Auto, + alpha_mode: self.alpha_mode, view_formats: vec![], desired_maximum_frame_latency: 2, }, -- cgit From 8a8c1ab2c8a0777425c60d4a36d6dd4b2589501f Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sat, 10 Feb 2024 00:38:25 +0100 Subject: Log available formats and alpha modes in `wgpu::window::compositor` --- wgpu/src/window/compositor.rs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'wgpu/src/window') diff --git a/wgpu/src/window/compositor.rs b/wgpu/src/window/compositor.rs index 3e329362..33133016 100644 --- a/wgpu/src/window/compositor.rs +++ b/wgpu/src/window/compositor.rs @@ -68,6 +68,8 @@ impl Compositor { let mut formats = capabilities.formats.iter().copied(); + log::info!("Available formats: {formats:#?}"); + let format = if color::GAMMA_CORRECTION { formats.find(wgpu::TextureFormat::is_srgb) } else { @@ -80,12 +82,15 @@ impl Compositor { capabilities.formats.first().copied() }); - let alphas = capabilities.alpha_modes; - let preferred_alpha = if alphas + let alpha_modes = capabilities.alpha_modes; + + log::info!("Available alpha modes: {alpha_modes:#?}"); + + let preferred_alpha = if alpha_modes .contains(&wgpu::CompositeAlphaMode::PostMultiplied) { wgpu::CompositeAlphaMode::PostMultiplied - } else if alphas + } else if alpha_modes .contains(&wgpu::CompositeAlphaMode::PreMultiplied) { wgpu::CompositeAlphaMode::PreMultiplied -- cgit