summaryrefslogtreecommitdiffstats
path: root/wgpu/src/window/compositor.rs
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2023-05-31 21:31:58 +0200
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2023-05-31 21:31:58 +0200
commitfaa7627ea41b1ce372bae7f0d2ae36e9b15a97a3 (patch)
treea4e8dfb4fb901bdf8fa401b45601af6cf44c4567 /wgpu/src/window/compositor.rs
parentb5f102c55835cf42427f9f8672634e81a5d724f6 (diff)
downloadiced-faa7627ea41b1ce372bae7f0d2ae36e9b15a97a3.tar.gz
iced-faa7627ea41b1ce372bae7f0d2ae36e9b15a97a3.tar.bz2
iced-faa7627ea41b1ce372bae7f0d2ae36e9b15a97a3.zip
Introduce `web-colors` feature flag to enable sRGB linear blending
This is how browsers perform color management. They treat gamma-corrected sRGB colors as if they were linear RGB. Correctness aside, this mode is introduced for legacy reasons. Most UI/UX tooling uses this color management as well, and many have created an intuition about how color should behave from interacting with a browser. This feature flag should facilitate application development with `iced` in those cases. More details: https://webcolorisstillbroken.com/
Diffstat (limited to 'wgpu/src/window/compositor.rs')
-rw-r--r--wgpu/src/window/compositor.rs22
1 files changed, 13 insertions, 9 deletions
diff --git a/wgpu/src/window/compositor.rs b/wgpu/src/window/compositor.rs
index 500458e8..2eaafde0 100644
--- a/wgpu/src/window/compositor.rs
+++ b/wgpu/src/window/compositor.rs
@@ -1,6 +1,7 @@
//! Connect a window with a renderer.
use crate::core::Color;
use crate::graphics;
+use crate::graphics::color;
use crate::graphics::compositor;
use crate::graphics::{Error, Primitive, Viewport};
use crate::{Backend, Renderer, Settings};
@@ -69,16 +70,19 @@ impl<Theme> Compositor<Theme> {
let format = compatible_surface.as_ref().and_then(|surface| {
let capabilities = surface.get_capabilities(&adapter);
- capabilities
- .formats
- .iter()
- .copied()
- .find(wgpu::TextureFormat::is_srgb)
- .or_else(|| {
- log::warn!("No sRGB format found!");
+ let mut formats = capabilities.formats.iter().copied();
- capabilities.formats.first().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);