#version 410 core
layout (points) in;
layout (triangle_strip, max_vertices = 4) out;
// in VS_OUT {} gs_in[];

out GS_OUT {
	vec2 textCoord;
} gs_out;

uniform mat4 u_view;
uniform mat4 u_projection;
uniform mat4 u_model;

void createQuad(vec4 base_position){
	vec4 vertexPosition[4];
	vertexPosition[0] = vec4(-0.25, 0.0, 0.0, 0.0); 	// down left
	vertexPosition[1] = vec4( 0.25, 0.0, 0.0, 0.0);		// down right
	vertexPosition[2] = vec4(-0.25, 0.5, 0.0, 0.0);	// up left
	vertexPosition[3] = vec4( 0.25, 0.5, 0.0, 0.0);	// up right

	vec2 textCoords[4];
	textCoords[0] = vec2(0.0, 0.0);
	textCoords[1] = vec2(1.0, 0.0);
	textCoords[2] = vec2(0.0, 1.0);
	textCoords[3] = vec2(1.0, 1.0);

	for(int i = 0; i < 4; i++) {
	    gl_Position = u_projection * u_view * (base_position + vertexPosition[i]);
	    gs_out.textCoord = textCoords[i];
	    EmitVertex();
    }
    EndPrimitive();
}

void main(){
	createQuad(gl_in[0].gl_Position);
}