aboutsummaryrefslogtreecommitdiff
path: root/src/render_helpers
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2025-02-08 13:33:28 +0300
committerIvan Molodetskikh <yalterz@gmail.com>2025-02-10 07:29:33 -0800
commit4f05a74aa84bca74b650cffdc7ad889413f621cf (patch)
tree9bf496dde8954c60fb5ba232a2f2b10babcd9de5 /src/render_helpers
parentc30f522ef28ed01744f5c90150af8a9c4da558f1 (diff)
downloadniri-4f05a74aa84bca74b650cffdc7ad889413f621cf.tar.gz
niri-4f05a74aa84bca74b650cffdc7ad889413f621cf.tar.bz2
niri-4f05a74aa84bca74b650cffdc7ad889413f621cf.zip
Add alpha parameter to shaders
Lets us add extra opacity.
Diffstat (limited to 'src/render_helpers')
-rw-r--r--src/render_helpers/border.rs8
-rw-r--r--src/render_helpers/shader_element.rs2
-rw-r--r--src/render_helpers/shadow.rs8
3 files changed, 18 insertions, 0 deletions
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<f64, Logical>,
opaque_regions: Option<Vec<Rectangle<f64, Logical>>>,
scale: f32,
+ alpha: f32,
uniforms: Vec<Uniform<'static>>,
textures: HashMap<String, GlesTexture>,
) {
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<f64, Logical>,
window_corner_radius: CornerRadius,
@@ -44,6 +45,7 @@ impl ShadowRenderElement {
scale: f32,
window_geometry: Rectangle<f64, Logical>,
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<f64, Logical>,
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),