forked from AuroraMiddleware/gtk
38 lines
1.0 KiB
Plaintext
38 lines
1.0 KiB
Plaintext
|
#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);
|
||
|
}
|