我正在尝试在openGL 4.1中学习曲面细分着色器。我了解大部分事情。我有一个问题。
什么是gl_InvocationID?
任何人都可以用一些简单的方法解释一下吗?
答案 0 :(得分:1)
gl_InvocationID
有两个当前用途,但它在两者中代表相同的概念。在“几何体着色器”中,您可以让GL在每个基元上多次运行几何体着色器。这在您想要从多个角度绘制相同内容的场景中非常有用。每次着色器在同一组数据上运行时,gl_InvocationID
都会递增。
Geometry和Tessellation Shaders之间的共同主题是每次调用共享相同的输入数据。曲面细分控制着色器可以读取输入补丁基元中的每个顶点,实际上您需要gl_InvocationID
来了解您应该处理哪个数据点。
gl_out [gl_InvocationID].gl_Position = gl_in [gl_InvocationID].gl_Position;
gl_in
和gl_out
是Tessellation控件着色器中可能非常大的数组(大小等于GL_PATCH_VERTICES
),您必须知道您感兴趣的是哪个顶点。
另外,请记住,您不能从Tessellation控件着色器写入gl_out [gl_InvocationID]
以外的任何索引。该属性保持并行调用Tessellation控件着色器(它避免了顺序依赖性并防止覆盖不同调用已写入的数据)。