34 lines
898 B
GLSL
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);
|
|
}
|