Files
loop/shader/dualTwoD/ellipse.vert
T

34 lines
898 B
GLSL

#version 450 core
struct PosCol { vec4 posx; vec4 colx; };
layout (std140, binding = 0) uniform TheMat { mat4 theMat; } ;
layout (std430, binding = 13) readonly buffer Data { PosCol data[]; };
layout (location = 0) uniform int n;
out vec4 gColC; // center color
out vec4 gColE; // edge color
out vec2 gBoundingBox;
out vec3 gPos;
const int ks[6] = //
{1,0,2 // 2--3
,2,0,3 // | |
}; // 1--0
//
const vec2 bs[4] =
{ vec2( 1, 1)
, vec2(-1, 1)
, vec2(-1,-1)
, vec2( 1,-1)
} ;
void main()
{
int i0 = n + (3 * (gl_VertexID/6) );
gColC = data[i0].colx;
gColE = data[i0+1].colx;
int k = ks[gl_VertexID % 6];
gBoundingBox = bs[k];
gPos = (k > 2.5
? data[i0].posx + data[i0+2].posx - data[i0+1].posx
: data[i0+k].posx
).xyz;
gl_Position = theMat * vec4(gPos,1);
}