64 lines
1,022 B
Plaintext
64 lines
1,022 B
Plaintext
@vs circle_vs
|
|
in vec2 vertex;
|
|
in vec2 apos;
|
|
in float aradius;
|
|
in vec4 acolor;
|
|
in float asegsize;
|
|
in float afill;
|
|
|
|
out vec2 coords;
|
|
out vec4 fcolor;
|
|
out float segsize;
|
|
out float fill;
|
|
out float radius;
|
|
|
|
uniform cvs_params { mat4 proj; };
|
|
|
|
void main()
|
|
{
|
|
gl_Position = proj * vec4((vertex * aradius) + apos, 0.0, 1.0);
|
|
coords = vertex;
|
|
fcolor = acolor;
|
|
segsize = asegsize;
|
|
fill = afill;
|
|
radius = aradius;
|
|
}
|
|
@end
|
|
|
|
@fs circle_fs
|
|
|
|
out vec4 color;
|
|
|
|
in vec2 coords;
|
|
in vec4 fcolor;
|
|
in float segsize;
|
|
in float fill;
|
|
in float radius;
|
|
|
|
#define PI 3.14
|
|
|
|
void main()
|
|
{
|
|
float px = 1/radius;
|
|
float R1 = 1.f;
|
|
float R2 = 1.0 - fill;
|
|
float dist = sqrt(pow(coords.x,2) + pow(coords.y,2));
|
|
color = fcolor;
|
|
|
|
float sm = 1 - smoothstep(R1-px,R1,dist);
|
|
float sm2 = smoothstep(R2-px,R2,dist);
|
|
float a = sm*sm2;
|
|
color = mix(vec4(0,0,0,0), fcolor, a);
|
|
|
|
if (segsize<0)
|
|
return;
|
|
|
|
float f = atan(coords.y, coords.x) + PI;
|
|
|
|
if (mod(f, segsize) < segsize/2)
|
|
discard;
|
|
}
|
|
|
|
@end
|
|
|
|
@program circle circle_vs circle_fs |