如何在运行时更改tesselation leveln?
我唯一的想法是创建一个只有一个变量的缓冲对象,我必须通过它...有没有更好的解决方案?
我有一个tesselation控件着色器文件,可以正常工作:
[...]
void main()
{
if(gl_InvocationID==0)
{
gl_TessLevelInner[0]= 5.0;
gl_TessLevelOuter[0]=5.0;
gl_TessLevelOuter[1]=5.0;
gl_TessLevelOuter[2]=5.0;
}
gl_out[gl_InvocationID].gl_Position =gl_in[gl_InvocationID].gl_Position;
}
答案 0 :(得分:0)
您可以将镶嵌细分值作为制服传递或(因为每个绘制调用的值都是常量)完全绕过曲面细分控制着色器。如果没有TCS链接到着色器程序,则使用 -
提供的值GLfloat outer_values[4];
GLfloat inner_values[2];
// outer_values and inner_values should be set here
glPatchParameterfv(GL_PATCH_DEFAULT_OUTER_LEVEL, outer_values);
glPatchParameterfv(GL_PATCH_DEFAULT_INNER_LEVEL, inner_values);
将改为使用。在这种情况下,曲面细分评估着色器使用从顶点着色器输出的值。