aboutsummaryrefslogtreecommitdiff
path: root/src/render_helpers/shaders/resize_prelude.frag
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-05-01 19:06:08 +0400
committerIvan Molodetskikh <yalterz@gmail.com>2024-05-02 14:27:53 +0400
commit42cef79c699c0f03b4bb99c4278169c48d9a5bd0 (patch)
tree630d18b49f3d93603a79bcfc5734dc773c6d0cb6 /src/render_helpers/shaders/resize_prelude.frag
parentd86df5025cfd26ef4a3c48acd8ee80555265ee53 (diff)
downloadniri-42cef79c699c0f03b4bb99c4278169c48d9a5bd0.tar.gz
niri-42cef79c699c0f03b4bb99c4278169c48d9a5bd0.tar.bz2
niri-42cef79c699c0f03b4bb99c4278169c48d9a5bd0.zip
Implement rounded window corners
Diffstat (limited to 'src/render_helpers/shaders/resize_prelude.frag')
-rw-r--r--src/render_helpers/shaders/resize_prelude.frag51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/render_helpers/shaders/resize_prelude.frag b/src/render_helpers/shaders/resize_prelude.frag
new file mode 100644
index 00000000..5c052277
--- /dev/null
+++ b/src/render_helpers/shaders/resize_prelude.frag
@@ -0,0 +1,51 @@
+precision mediump float;
+
+#if defined(DEBUG_FLAGS)
+uniform float niri_tint;
+#endif
+
+varying vec2 niri_v_coords;
+uniform vec2 niri_size;
+
+uniform mat3 niri_input_to_curr_geo;
+uniform mat3 niri_curr_geo_to_prev_geo;
+uniform mat3 niri_curr_geo_to_next_geo;
+uniform vec2 niri_curr_geo_size;
+
+uniform sampler2D niri_tex_prev;
+uniform mat3 niri_geo_to_tex_prev;
+
+uniform sampler2D niri_tex_next;
+uniform mat3 niri_geo_to_tex_next;
+
+uniform float niri_progress;
+uniform float niri_clamped_progress;
+
+uniform vec4 niri_corner_radius;
+uniform float niri_clip_to_geometry;
+
+uniform float niri_alpha;
+
+float niri_rounding_alpha(vec2 coords, vec2 size) {
+ vec2 center;
+ float radius;
+
+ if (coords.x < niri_corner_radius.x && coords.y < niri_corner_radius.x) {
+ radius = niri_corner_radius.x;
+ center = vec2(radius, radius);
+ } else if (size.x - niri_corner_radius.y < coords.x && coords.y < niri_corner_radius.y) {
+ radius = niri_corner_radius.y;
+ center = vec2(size.x - radius, radius);
+ } else if (size.x - niri_corner_radius.z < coords.x && size.y - niri_corner_radius.z < coords.y) {
+ radius = niri_corner_radius.z;
+ center = vec2(size.x - radius, size.y - radius);
+ } else if (coords.x < niri_corner_radius.w && size.y - niri_corner_radius.w < coords.y) {
+ radius = niri_corner_radius.w;
+ center = vec2(radius, size.y - radius);
+ } else {
+ return 1.0;
+ }
+
+ float dist = distance(coords, center);
+ return 1.0 - smoothstep(radius - 0.5, radius + 0.5, dist);
+}