#version 400 core

layout( triangles, fractional_even_spacing, ccw ) in;

out EyeSpaceVertex {
    vec3 position;
    vec3 normal;
} te_out;

uniform mat4 modelViewMatrix;
uniform mat3 normalMatrix;
uniform mat4 projectionMatrix;
uniform mat4 mvp;

void main()
{
    float u = gl_TessCoord.x;
    float v = gl_TessCoord.y;
    float w = gl_TessCoord.z;

    vec4 p0 = gl_in[0].gl_Position;
    vec4 p1 = gl_in[1].gl_Position;
    vec4 p2 = gl_in[2].gl_Position;

    // Linearly interpolate to the vertex position using the
    // (u,v) barycentric coords
    vec4 pos = (u * p0)
             + (v * p1)
             + (w * p2);

    // Transform to eye space (for lighting calcs)
    te_out.position = vec3( modelViewMatrix * pos );

    // Assume normal points along z
    te_out.normal = normalize( normalMatrix * vec3( 0.0, 0.0, 1.0 ) );

    // Transform to clip-space
    gl_Position = mvp * pos;
}
