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