0

如何在运行时更改细分级别?
我唯一的想法是创建一个只有一个变量的缓冲区对象,我必须通过它......有没有更好的解决方案?

我有一个可以正常工作的镶嵌控制着色器文件:

[...]
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;
}
4

1 回答 1

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​​);

将被使用。在这种情况下,曲面细分评估着色器使用顶点着色器输出的值。

于 2014-08-07T08:31:51.437 回答