#version 450 core

layout(vertices = 4) out;

in VS_OUT {
    vec3 position;
    vec2 texCoord;
} tc_in[];

out TC_OUT {
    vec3 position;
    vec2 texCoord;
} tc_out[];

uniform float tessellationFactor;

void main() {
    // Set tessellation levels
    if (gl_InvocationID == 0) {
        gl_TessLevelOuter[0] = tessellationFactor; // Level of tessellation along one edge
        gl_TessLevelOuter[1] = tessellationFactor; // Level of tessellation along another edge
        gl_TessLevelOuter[2] = tessellationFactor; // Level of tessellation along the other edge
        gl_TessLevelOuter[3] = tessellationFactor; // Level of tessellation along the other edge

        gl_TessLevelInner[0] = tessellationFactor; // Level of tessellation for the inner part
        gl_TessLevelInner[1] = tessellationFactor; // Level of tessellation for the inner part
    }

    // Pass through position and texture coordinates to the tessellation evaluation shader
    tc_out[gl_InvocationID].position = tc_in[gl_InvocationID].position;
    tc_out[gl_InvocationID].texCoord = tc_in[gl_InvocationID].texCoord;
}