曲面细分着色器

时间:2014-12-14 10:05:42

标签: opengl tesselation

我正在尝试在openGL 4.1中学习曲面细分着色器。我了解大部分事情。我有一个问题。

什么是gl_InvocationID?

任何人都可以用一些简单的方法解释一下吗?

1 个答案:

答案 0 :(得分:1)

gl_InvocationID有两个当前用途,但它在两者中代表相同的概念。

在“几何体着色器”中,您可以让GL在每个基元上多次运行几何体着色器。这在您想要从多个角度绘制相同内容的场景中非常有用。每次着色器在同一组数据上运行时,gl_InvocationID都会递增。

Geometry和Tessellation Shaders之间的共同主题是每次调用共享相同的输入数据。曲面细分控制着色器可以读取输入补丁基元中的每个顶点,实际上您需要gl_InvocationID来了解您应该处理哪个数据点。

这就是为什么你通常会看到Tessellation Control Shaders写成这样的东西:

gl_out [gl_InvocationID].gl_Position = gl_in [gl_InvocationID].gl_Position;

gl_ingl_out是Tessellation控件着色器中可能非常大的数组(大小等于GL_PATCH_VERTICES),您必须知道您感兴趣的是哪个顶点。

另外,请记住,您不能从Tessellation控件着色器写入gl_out [gl_InvocationID]以外的任何索引。该属性保持并行调用Tessellation控件着色器(它避免了顺序依赖性并防止覆盖不同调用已写入的数据)。