diff options
author | 2024-02-03 17:27:24 +1100 | |
---|---|---|
committer | 2024-02-10 00:24:41 +0100 | |
commit | 712c8e53f2385ed425173cab327e06a214248579 (patch) | |
tree | 25db3ee83b7094a316fb494ef4a912dec3334166 /wgpu | |
parent | 7ee00e751a8fe5cedadeeb478c6f0e7d6a5dc0dc (diff) | |
download | iced-712c8e53f2385ed425173cab327e06a214248579.tar.gz iced-712c8e53f2385ed425173cab327e06a214248579.tar.bz2 iced-712c8e53f2385ed425173cab327e06a214248579.zip |
Fix alpha mode configuration in `iced_wgpu`
Diffstat (limited to 'wgpu')
-rw-r--r-- | wgpu/src/window/compositor.rs | 60 |
1 files changed, 40 insertions, 20 deletions
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, }, |