diff options
| author | 2024-02-10 00:50:49 +0100 | |
|---|---|---|
| committer | 2024-02-10 00:50:49 +0100 | |
| commit | c63529095604ffde00a504ed083474707ab484de (patch) | |
| tree | 76a8a103f6352263ccd30a7e230089fbb2d54822 /wgpu/src/window | |
| parent | 7ee00e751a8fe5cedadeeb478c6f0e7d6a5dc0dc (diff) | |
| parent | 0bcdefeb00c899c23bc7b54903df5bcbc644fbb5 (diff) | |
| download | iced-c63529095604ffde00a504ed083474707ab484de.tar.gz iced-c63529095604ffde00a504ed083474707ab484de.tar.bz2 iced-c63529095604ffde00a504ed083474707ab484de.zip | |
Merge pull request #2231 from Koranir/transparency-fix
Fix alpha mode misconfiguration in wgpu renderer
Diffstat (limited to '')
| -rw-r--r-- | wgpu/src/window/compositor.rs | 55 | 
1 files changed, 40 insertions, 15 deletions
| diff --git a/wgpu/src/window/compositor.rs b/wgpu/src/window/compositor.rs index 58f3f654..33133016 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,48 @@ impl Compositor {          log::info!("Selected: {:#?}", adapter.get_info()); -        let format = compatible_surface.as_ref().and_then(|surface| { -            let capabilities = surface.get_capabilities(&adapter); +        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 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)) -            }; +                log::info!("Available formats: {formats:#?}"); -            format.or_else(|| { -                log::warn!("No format found!"); +                let format = if color::GAMMA_CORRECTION { +                    formats.find(wgpu::TextureFormat::is_srgb) +                } else { +                    formats.find(|format| !wgpu::TextureFormat::is_srgb(format)) +                }; -                capabilities.formats.first().copied() -            }) -        })?; +                let format = format.or_else(|| { +                    log::warn!("No format found!"); + +                    capabilities.formats.first().copied() +                }); + +                let alpha_modes = capabilities.alpha_modes; + +                log::info!("Available alpha modes: {alpha_modes:#?}"); -        log::info!("Selected format: {format:?}"); +                let preferred_alpha = if alpha_modes +                    .contains(&wgpu::CompositeAlphaMode::PostMultiplied) +                { +                    wgpu::CompositeAlphaMode::PostMultiplied +                } else if alpha_modes +                    .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 +144,7 @@ impl Compositor {              device,              queue,              format, +            alpha_mode,          })      } @@ -249,7 +274,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,              }, | 
