mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2025-01-16 15:14:17 +00:00
3252f1e301
We may want to change the interface between the shaders and the renderer for ngl, and therefore, sharing the shaders between gl and ngl will not be practical, going forward.
41 lines
1.3 KiB
GLSL
41 lines
1.3 KiB
GLSL
// VERTEX_SHADER:
|
|
uniform vec4 u_color;
|
|
uniform vec4 u_widths;
|
|
uniform vec4[3] u_outline_rect;
|
|
|
|
_OUT_ vec4 final_color;
|
|
_OUT_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_outside_outline;
|
|
_OUT_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_inside_outline;
|
|
|
|
void main() {
|
|
gl_Position = u_projection * u_modelview * vec4(aPosition, 0.0, 1.0);
|
|
|
|
final_color = gsk_premultiply(u_color) * u_alpha;
|
|
|
|
GskRoundedRect outside = gsk_create_rect(u_outline_rect);
|
|
GskRoundedRect inside = gsk_rounded_rect_shrink (outside, u_widths);
|
|
|
|
gsk_rounded_rect_transform(outside, u_modelview);
|
|
gsk_rounded_rect_transform(inside, u_modelview);
|
|
|
|
gsk_rounded_rect_encode(outside, transformed_outside_outline);
|
|
gsk_rounded_rect_encode(inside, transformed_inside_outline);
|
|
}
|
|
|
|
// FRAGMENT_SHADER:
|
|
uniform vec4[3] u_outline_rect;
|
|
|
|
_IN_ vec4 final_color;
|
|
_IN_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_outside_outline;
|
|
_IN_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_inside_outline;
|
|
|
|
void main() {
|
|
vec2 frag = gsk_get_frag_coord();
|
|
|
|
float alpha = clamp(gsk_rounded_rect_coverage(gsk_decode_rect(transformed_outside_outline), frag) -
|
|
gsk_rounded_rect_coverage(gsk_decode_rect(transformed_inside_outline), frag),
|
|
0.0, 1.0);
|
|
|
|
gskSetOutputColor(final_color * alpha);
|
|
}
|