Blame | Last modification | View Log | RSS feed
#version 120
#extension GL_EXT_gpu_shader4 : enable
uniform vec2 WIN_SCALE;
varying in float n[6];
varying in vec4 diffuseIn[1];
varying vec4 diffuse;
noperspective varying float dist[6];
noperspective varying float n_frag;
float distance(vec2 p, vec2 p0, vec2 p1)
{
vec2 v0 = p1-p0;
vec2 v1 = p0-p;
vec2 v2 = p1-p;
float l = length(v0);
return abs(v1.x*v2.y - v1.y * v2.x)/l;
}
vec2 p[6];
void compute_dist(int i, int N)
{
for(int k=1;k<N-1;++k) {
int j = (i+k)%N;
dist[j] = distance(p[i],p[j],p[(j+1)%N]);
}
dist[i] = 0;
dist[(i+N-1)%N] = 0;
}
void main(void)
{
n_frag = n[0];
int N = int(n[0]);
for(int i=0;i<N;++i) {
p[i] = WIN_SCALE * gl_PositionIn[i].xy/gl_PositionIn[i].w;
dist[i] = 0;
}
for(int l=0;l<N;++l)
{
int i = (l%2==0) ? l/2 : N-(l+1)/2;
compute_dist(i,N);
diffuse = diffuseIn[i];
gl_Position = gl_PositionIn[i];
EmitVertex();
}
EndPrimitive();
}