forked from AuroraMiddleware/gtk
685288216f
No need to do this for every fragment.
38 lines
1.0 KiB
GLSL
38 lines
1.0 KiB
GLSL
#ifndef GSK_LEGACY
|
|
precision highp float;
|
|
#endif
|
|
|
|
#if defined(GSK_GLES) || defined(GSK_LEGACY)
|
|
#define _OUT_ varying
|
|
#define _IN_ varying
|
|
#define _ROUNDED_RECT_UNIFORM_ vec4[3]
|
|
#else
|
|
#define _OUT_ out
|
|
#define _IN_ in
|
|
#define _ROUNDED_RECT_UNIFORM_ RoundedRect
|
|
#endif
|
|
|
|
|
|
struct RoundedRect
|
|
{
|
|
vec4 bounds;
|
|
// Look, arrays can't be in structs if you want to return the struct
|
|
// from a function in gles or whatever. Just kill me.
|
|
vec4 corner_points1; // xy = top left, zw = top right
|
|
vec4 corner_points2; // xy = bottom right, zw = bottom left
|
|
};
|
|
|
|
// Transform from a GskRoundedRect to a RoundedRect as we need it.
|
|
RoundedRect
|
|
create_rect(vec4[3] data)
|
|
{
|
|
vec4 bounds = vec4(data[0].xy, data[0].xy + data[0].zw);
|
|
|
|
vec4 corner_points1 = vec4(bounds.xy + data[1].xy,
|
|
bounds.zy + vec2(data[1].zw * vec2(-1, 1)));
|
|
vec4 corner_points2 = vec4(bounds.zw + (data[2].xy * vec2(-1, -1)),
|
|
bounds.xw + vec2(data[2].zw * vec2(1, -1)));
|
|
|
|
return RoundedRect(bounds, corner_points1, corner_points2);
|
|
}
|