// tessellation control shader #version 450 core // specify number of control points per patch output // this value controls the size of the input and output arrays layout (vertices=4) out; layout (location=0) in VS_OUT { vec2 vsUV; vec4 vsWorldPos; vec3 vsNormal; vec3 vsBiTangent; vec3 vsTangent; mat3 vsTBN; flat uint vsChunkID; flat uint vsMaterialID; }tc_in[]; layout (location=0) out TC_OUT { vec2 vsUV; vec4 vsWorldPos; vec3 vsNormal; vec3 vsBiTangent; vec3 vsTangent; mat3 vsTBN; flat uint vsChunkID; flat uint vsMaterialID; }tc_out[]; void main() { // ---------------------------------------------------------------------- // pass attributes through gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position; tc_out[gl_InvocationID].vsUV = tc_in[gl_InvocationID].vsUV; tc_out[gl_InvocationID].vsWorldPos = tc_in[gl_InvocationID].vsWorldPos; tc_out[gl_InvocationID].vsNormal = tc_in[gl_InvocationID].vsNormal; tc_out[gl_InvocationID].vsBiTangent = tc_in[gl_InvocationID].vsBiTangent; tc_out[gl_InvocationID].vsTangent = tc_in[gl_InvocationID].vsTangent; tc_out[gl_InvocationID].vsTBN = tc_in[gl_InvocationID].vsTBN; tc_out[gl_InvocationID].vsChunkID = tc_in[gl_InvocationID].vsChunkID; tc_out[gl_InvocationID].vsMaterialID = tc_in[gl_InvocationID].vsMaterialID; // ---------------------------------------------------------------------- // invocation zero controls tessellation levels for the entire patch if (gl_InvocationID == 0) { int divs = 63; gl_TessLevelOuter[0] = divs; gl_TessLevelOuter[1] = divs; gl_TessLevelOuter[2] = divs; gl_TessLevelOuter[3] = divs; gl_TessLevelInner[0] = divs; gl_TessLevelInner[1] = divs; } }