您可以将数组作为输入传递给几何着色器吗?

Can you pass an array as input to a geometry shader?

能否将 vec2 数组作为输入传递给几何着色器?如果是这样,语法是什么?

GLSL 中的数组数组是从左到右读取的。 vec2[3][6] 读作 "an array of 3 elements, where each element is an array of 6 elements, where each element is a vec2."

GS 输入已排列;每个元素代表前一个着色器阶段的单个输出。 "single output" 实际上可能是数组类型这一事实无关紧要。

因此,如果您使用 input/output 不在接口块中的变量,则如下所示:

//Vertex Shader
out vec2[6] someVariable;

//Geometry Shader
in vec2[][6] someVariable;

第一个索引是顶点索引。

请注意,这可能需要 GLSL 4.30 或 ARB_arrays_of_arrays。

如果使用interface blocks传递数据,则数组走接口块本身的实例名:

//Vertex Shader
out SomeName
{
  vec2[6] someVariable;
};

//Geometry Shader
in SomeName
{
  vec2[6] someVariable;
} instanceName[];

由于该块有一个实例名称,您可以在 GLSL 中将其称为 instanceName[index].someVariable

这可以在 OpenGL 3.2 中完成。