summaryrefslogtreecommitdiffstats
path: root/wgpu
diff options
context:
space:
mode:
authorLibravatar Daniel Yoon <101683475+Koranir@users.noreply.github.com>2024-02-03 17:27:24 +1100
committerLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-02-10 00:24:41 +0100
commit712c8e53f2385ed425173cab327e06a214248579 (patch)
tree25db3ee83b7094a316fb494ef4a912dec3334166 /wgpu
parent7ee00e751a8fe5cedadeeb478c6f0e7d6a5dc0dc (diff)
downloadiced-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.rs60
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,
},