42 lines
1.0 KiB
GLSL

#version 450 core
layout (points) in;
layout (triangle_strip, max_vertices = 14) out;
layout (location = 0) in vec3 mins[];
layout (location = 1) in vec3 maxes[];
layout (location = 2) in uint id[];
layout (location = 0) out uint _id;
layout (set = 0, binding = 0) uniform Matrices {
mat4 view;
mat4 proj;
};
void main(void) {
int cube_vertices[14] = {
0, 1, 2, 3, 7, 6, 5, 4, 0, 1, 5, 6, 2, 3
};
for(int i = 0; i < gl_in.length(); i++) {
vec3 vertices[] = {
vec3(mins[i].x, mins[i].y, mins[i].z),
vec3(mins[i].x, mins[i].y, maxes[i].z),
vec3(mins[i].x, maxes[i].y, mins[i].z),
vec3(mins[i].x, maxes[i].y, maxes[i].z),
vec3(maxes[i].x, mins[i].y, mins[i].z),
vec3(maxes[i].x, mins[i].y, maxes[i].z),
vec3(maxes[i].x, maxes[i].y, mins[i].z),
vec3(maxes[i].x, maxes[i].y, maxes[i].z),
};
_id = id[i];
for(int j = 0; j < 14; j++) {
gl_Position = proj*view*vec4(vertices[cube_vertices[j]], 1.0);
EmitVertex();
}
EndPrimitive();
}
}