您可以将数组作为输入传递给几何着色器吗?
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 中完成。
能否将 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 中完成。