Files
HydraV3/HydraEngine/source/ShaderFiles/landscape_shader.tesc
T
2026-09-28 15:31:22 +01:00

60 lines
1.8 KiB
GLSL

// 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;
}
}