summaryrefslogtreecommitdiffstats
path: root/examples/tessellation-modes/shaders/triangles.tes
blob: c833e95875dc20d05e1207c261ea1df50f994eb5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#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;
}