Subversion Repositories gelsvn

Rev

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();
}