Add custom window background/clear color (incl. transparency) support, fixes #272

wgpu would currently ignore the alpha: https://github.com/gfx-rs/wgpu/issues/687

glow (and naively patched wgpu) requires premultiplied alpha, so if you don't
multiply the RGB by the A right now, the semi-transparent color would be wrong
(too bright).

winit with_transparent doesn't seem necessary.
This commit is contained in:
Greg V 2020-05-31 16:53:57 +03:00
parent 05750bf186
commit a65d6a11cb
6 changed files with 49 additions and 9 deletions

View file

@ -1,10 +1,11 @@
//! Configure a renderer.
pub use iced_graphics::Antialiasing;
pub use iced_native::Color;
/// The settings of a [`Renderer`].
///
/// [`Renderer`]: ../struct.Renderer.html
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct Settings {
/// The bytes of the font that will be used by default.
///
@ -13,6 +14,9 @@ pub struct Settings {
/// The antialiasing strategy that will be used for triangle primitives.
pub antialiasing: Option<Antialiasing>,
/// The color that will be used to clear the window surface.
pub background_color: Color,
}
impl Default for Settings {
@ -20,6 +24,7 @@ impl Default for Settings {
Settings {
default_font: None,
antialiasing: None,
background_color: Color::WHITE,
}
}
}

View file

@ -21,7 +21,12 @@ impl iced_graphics::window::GLCompositor for Compositor {
) -> (Self, Self::Renderer) {
let gl = glow::Context::from_loader_function(loader_function);
gl.clear_color(1.0, 1.0, 1.0, 1.0);
gl.clear_color(
settings.background_color.r,
settings.background_color.g,
settings.background_color.b,
settings.background_color.a,
);
// Enable auto-conversion from/to sRGB
gl.enable(glow::FRAMEBUFFER_SRGB);