summaryrefslogtreecommitdiffstats
path: root/examples/qt3d/tessellation-modes/shaders/quads.tes
blob: a3fd4844175d35e74e3a9ea08f3578c79f79919b (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
40
#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;
}