aboutsummaryrefslogtreecommitdiff
path: root/src/render_helpers/shaders/resize_prelude.frag
blob: ffb46c9386650096b0e5603ad0db54e60230f911 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
precision highp 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;
uniform float niri_scale;

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);
    float half_px = 0.5 / niri_scale;
    return 1.0 - smoothstep(radius - half_px, radius + half_px, dist);
}