0

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

gl_InvocationID 是什么?

任何机构都可以用一些简单的方式解释吗?

4

1 回答 1

1

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

在几何着色器中,您可以让 GL 为每个基元多次运行几何着色器。这在您想从多个角度绘制同一事物的情况下很有用。每次着色器在同一组数据上运行时,gl_InvocationID都会递增。

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

这就是为什么您通常会看到 Tessellation Control Shaders 编写如下内容:

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(它避免了顺序依赖并防止覆盖不同调用已经写入的数据)。

于 2014-12-14T14:12:44.557 回答