| #version 400 core |
| |
| layout( quads, fractional_even_spacing, ccw ) in; |
| |
| out EyeSpaceVertex { |
| vec3 position; |
| vec3 normal; |
| } te_out; |
| |
| uniform mat4 modelView; |
| uniform mat3 modelViewNormal; |
| uniform mat4 projectionMatrix; |
| uniform mat4 mvp; |
| |
| void main() |
| { |
| float u = gl_TessCoord.x; |
| float v = gl_TessCoord.y; |
| |
| vec4 p00 = gl_in[0].gl_Position; |
| vec4 p10 = gl_in[1].gl_Position; |
| vec4 p11 = gl_in[2].gl_Position; |
| vec4 p01 = gl_in[3].gl_Position; |
| |
| // Linearly interpolate to the vertex position using the |
| // (u,v) barycentric coords |
| vec4 pos = p00 * ( 1.0 - u ) * ( 1.0 - v ) |
| + p10 * u * ( 1.0 - v ) |
| + p01 * v * ( 1.0 - u ) |
| + p11 * u * v; |
| |
| // Transform to eye space (for lighting calcs) |
| te_out.position = vec3( modelView * pos ); |
| |
| // Assume normal points along z |
| te_out.normal = normalize( modelViewNormal * vec3( 0.0, 0.0, 1.0 ) ); |
| |
| // Transform to clip-space |
| gl_Position = mvp * pos; |
| } |