From 4f05a74aa84bca74b650cffdc7ad889413f621cf Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Sat, 8 Feb 2025 13:33:28 +0300 Subject: Add alpha parameter to shaders Lets us add extra opacity. --- src/render_helpers/border.rs | 8 ++++++++ src/render_helpers/shader_element.rs | 2 ++ src/render_helpers/shadow.rs | 8 ++++++++ 3 files changed, 18 insertions(+) (limited to 'src/render_helpers') diff --git a/src/render_helpers/border.rs b/src/render_helpers/border.rs index c0ab6663..588e53b1 100644 --- a/src/render_helpers/border.rs +++ b/src/render_helpers/border.rs @@ -39,6 +39,7 @@ struct Parameters { corner_radius: CornerRadius, // Should only be used for visual improvements, i.e. corner radius anti-aliasing. scale: f32, + alpha: f32, } impl BorderRenderElement { @@ -54,6 +55,7 @@ impl BorderRenderElement { border_width: f32, corner_radius: CornerRadius, scale: f32, + alpha: f32, ) -> Self { let inner = ShaderRenderElement::empty(ProgramType::Border, Kind::Unspecified); let mut rv = Self { @@ -69,6 +71,7 @@ impl BorderRenderElement { border_width, corner_radius, scale, + alpha, }, }; rv.update_inner(); @@ -90,6 +93,7 @@ impl BorderRenderElement { border_width: 0., corner_radius: Default::default(), scale: 1., + alpha: 1., }, } } @@ -111,6 +115,7 @@ impl BorderRenderElement { border_width: f32, corner_radius: CornerRadius, scale: f32, + alpha: f32, ) { let params = Parameters { size, @@ -123,6 +128,7 @@ impl BorderRenderElement { border_width, corner_radius, scale, + alpha, }; if self.params == params { return; @@ -144,6 +150,7 @@ impl BorderRenderElement { border_width, corner_radius, scale, + alpha, } = self.params; let grad_offset = geometry.loc - gradient_area.loc; @@ -189,6 +196,7 @@ impl BorderRenderElement { size, None, scale, + alpha, vec![ Uniform::new("colorspace", colorspace), Uniform::new("hue_interpolation", hue_interpolation), diff --git a/src/render_helpers/shader_element.rs b/src/render_helpers/shader_element.rs index 2ec100ba..be3ccec6 100644 --- a/src/render_helpers/shader_element.rs +++ b/src/render_helpers/shader_element.rs @@ -227,12 +227,14 @@ impl ShaderRenderElement { size: Size, opaque_regions: Option>>, scale: f32, + alpha: f32, uniforms: Vec>, textures: HashMap, ) { self.area.size = size; self.opaque_regions = opaque_regions.unwrap_or_default(); self.scale = scale; + self.alpha = alpha; self.additional_uniforms = uniforms; self.textures = textures; diff --git a/src/render_helpers/shadow.rs b/src/render_helpers/shadow.rs index b98202e4..332703a0 100644 --- a/src/render_helpers/shadow.rs +++ b/src/render_helpers/shadow.rs @@ -28,6 +28,7 @@ struct Parameters { corner_radius: CornerRadius, // Should only be used for visual improvements, i.e. corner radius anti-aliasing. scale: f32, + alpha: f32, window_geometry: Rectangle, window_corner_radius: CornerRadius, @@ -44,6 +45,7 @@ impl ShadowRenderElement { scale: f32, window_geometry: Rectangle, window_corner_radius: CornerRadius, + alpha: f32, ) -> Self { let inner = ShaderRenderElement::empty(ProgramType::Shadow, Kind::Unspecified); let mut rv = Self { @@ -55,6 +57,7 @@ impl ShadowRenderElement { sigma, corner_radius, scale, + alpha, window_geometry, window_corner_radius, }, @@ -74,6 +77,7 @@ impl ShadowRenderElement { sigma: 0., corner_radius: Default::default(), scale: 1., + alpha: 1., window_geometry: Default::default(), window_corner_radius: Default::default(), }, @@ -95,12 +99,14 @@ impl ShadowRenderElement { scale: f32, window_geometry: Rectangle, window_corner_radius: CornerRadius, + alpha: f32, ) { let params = Parameters { size, geometry, color, sigma, + alpha, corner_radius, scale, window_geometry, @@ -120,6 +126,7 @@ impl ShadowRenderElement { geometry, color, sigma, + alpha, corner_radius, scale, window_geometry, @@ -145,6 +152,7 @@ impl ShadowRenderElement { size, None, scale, + alpha, vec![ Uniform::new("shadow_color", color.to_array_premul()), Uniform::new("sigma", sigma), -- cgit