#version 150 compatibility
#extension GL_EXT_geometry_shader4 : enable

layout(points) in;
layout(line_strip, max_vertices = 24) out;

in mat4 PM[];
in vec4 color_gs[];

out vec4 color;

int surface_side_handling(in vec3 position, inout vec3 normal, inout vec4 color);

void emit_vertex(in vec4 p)
{
	gl_Position = gl_ProjectionMatrix * p;
	EmitVertex();
}

void main()
{
	color = color_gs[0];
	vec4 C0 = PM[0] * vec4(-0.5, -0.5, -0.5, 1.0);
	vec4 C1 = PM[0] * vec4(0.5, -0.5, -0.5, 1.0);
	vec4 C2 = PM[0] * vec4(-0.5, 0.5, -0.5, 1.0);
	vec4 C3 = PM[0] * vec4(0.5, 0.5, -0.5, 1.0);
	vec4 C4 = PM[0] * vec4(-0.5, -0.5, 0.5, 1.0);
	vec4 C5 = PM[0] * vec4(0.5, -0.5, 0.5, 1.0);
	vec4 C6 = PM[0] * vec4(-0.5, 0.5, 0.5, 1.0);
	vec4 C7 = PM[0] * vec4(0.5, 0.5, 0.5, 1.0);
	emit_vertex(C0);
	emit_vertex(C4);
	emit_vertex(C6);
	emit_vertex(C2);
	emit_vertex(C0);
	emit_vertex(C1);
	emit_vertex(C5);
	emit_vertex(C7);
	emit_vertex(C3);
	emit_vertex(C1);
	EndPrimitive();
	emit_vertex(C4);
	emit_vertex(C5);
	EndPrimitive();
	emit_vertex(C6);
	emit_vertex(C7);
	EndPrimitive();
	emit_vertex(C2);
	emit_vertex(C3);
	EndPrimitive();
}
