tesselation as a function of distance
[ld42_outofspace] / sdr / field.tc.glsl
1 #version 410 compatibility
2
3 layout(vertices = 4) out;
4
5 uniform int tess_level;
6
7 in float dist[gl_MaxPatchVertices];
8
9 void main()
10 {
11         gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;
12         gl_out[gl_InvocationID].gl_TexCoord[0] = gl_in[gl_InvocationID].gl_TexCoord[0];
13         gl_out[gl_InvocationID].gl_TexCoord[1] = gl_in[gl_InvocationID].gl_TexCoord[1];
14
15         const float min_tess_dist = 800.0;
16         float t = clamp(1.0 - dist[0] / min_tess_dist, 0.0, 1.0);
17         int tess = int(t * float(tess_level - 1.0)) + 1;
18
19         gl_TessLevelInner[0] = tess;
20         gl_TessLevelInner[1] = tess;
21
22         gl_TessLevelOuter[0] = tess;
23         gl_TessLevelOuter[1] = tess;
24         gl_TessLevelOuter[2] = tess;
25         gl_TessLevelOuter[3] = tess;
26 }