aboutsummaryrefslogtreecommitdiff
path: root/src/render_helpers/shaders
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2025-11-16 11:26:40 +0300
committerIvan Molodetskikh <yalterz@gmail.com>2025-11-16 22:36:01 +0300
commitb774fc1bafd3f9c612ad117986510f8710fd7cc6 (patch)
tree5c849941e364c48f49708f722649e3c610e92eac /src/render_helpers/shaders
parent661fcd42ad284bf4cf68581ae0979fe04b0f2838 (diff)
downloadniri-b774fc1bafd3f9c612ad117986510f8710fd7cc6.tar.gz
niri-b774fc1bafd3f9c612ad117986510f8710fd7cc6.tar.bz2
niri-b774fc1bafd3f9c612ad117986510f8710fd7cc6.zip
render_helpers: Add GradientFadeTexture
Diffstat (limited to 'src/render_helpers/shaders')
-rw-r--r--src/render_helpers/shaders/gradient_fade.frag47
-rw-r--r--src/render_helpers/shaders/mod.rs12
2 files changed, 59 insertions, 0 deletions
diff --git a/src/render_helpers/shaders/gradient_fade.frag b/src/render_helpers/shaders/gradient_fade.frag
new file mode 100644
index 00000000..eccc7066
--- /dev/null
+++ b/src/render_helpers/shaders/gradient_fade.frag
@@ -0,0 +1,47 @@
+#version 100
+
+//_DEFINES_
+
+#if defined(EXTERNAL)
+#extension GL_OES_EGL_image_external : require
+#endif
+
+precision highp float;
+#if defined(EXTERNAL)
+uniform samplerExternalOES tex;
+#else
+uniform sampler2D tex;
+#endif
+
+uniform float alpha;
+varying vec2 v_coords;
+
+#if defined(DEBUG_FLAGS)
+uniform float tint;
+#endif
+
+// x is left edge, y is right edge of the gradient.
+uniform vec2 cutoff;
+
+void main() {
+ // Sample the texture.
+ vec4 color = texture2D(tex, v_coords);
+#if defined(NO_ALPHA)
+ color = vec4(color.rgb, 1.0);
+#endif
+
+ if (cutoff.x < cutoff.y) {
+ float fade = clamp((cutoff.y - v_coords.x) / (cutoff.y - cutoff.x), 0.0, 1.0);
+ color = color * fade;
+ }
+
+ // Apply final alpha and tint.
+ color = color * alpha;
+
+#if defined(DEBUG_FLAGS)
+ if (tint == 1.0)
+ color = vec4(0.0, 0.2, 0.0, 0.2) + color * 0.8;
+#endif
+
+ gl_FragColor = color;
+}
diff --git a/src/render_helpers/shaders/mod.rs b/src/render_helpers/shaders/mod.rs
index 2db00662..6fccce7f 100644
--- a/src/render_helpers/shaders/mod.rs
+++ b/src/render_helpers/shaders/mod.rs
@@ -14,6 +14,7 @@ pub struct Shaders {
pub shadow: Option<ShaderProgram>,
pub clipped_surface: Option<GlesTexProgram>,
pub resize: Option<ShaderProgram>,
+ pub gradient_fade: Option<GlesTexProgram>,
pub custom_resize: RefCell<Option<ShaderProgram>>,
pub custom_close: RefCell<Option<ShaderProgram>>,
pub custom_open: RefCell<Option<ShaderProgram>>,
@@ -96,11 +97,22 @@ impl Shaders {
})
.ok();
+ let gradient_fade = renderer
+ .compile_custom_texture_shader(
+ include_str!("gradient_fade.frag"),
+ &[UniformName::new("cutoff", UniformType::_2f)],
+ )
+ .map_err(|err| {
+ warn!("error compiling gradient fade shader: {err:?}");
+ })
+ .ok();
+
Self {
border,
shadow,
clipped_surface,
resize,
+ gradient_fade,
custom_resize: RefCell::new(None),
custom_close: RefCell::new(None),
custom_open: RefCell::new(None),