在GLSL-ES中,可以有阵列。例如,GLSL ES Specification给出了以下数组的统一变量示例:
uniform vec4 lightPosition[4];
是否可以将顶点属性作为数组?换句话说,根据规范,以下是否合法?
attribute vec4 foo[3]; // three vec4s per vertex
GLSL ES规范中的任何地方都明确提到了答案(是或否)? (我找不到它,但我没有阅读规范的每一行。)
此外,如果它是合法的,如何使用OpenGL ES 2.0 API初始化这样的属性? (假设使用glVertexAttribPointer
,顶点/数组元素/向量元素的布局是什么?)
答案 0 :(得分:10)
GLSL ES 2.0 specification表示属性不能声明为数组。
在桌面GL中,您可以拥有属性数组。当为属性分配属性索引(使用glBindAttribLocation
或由链接的着色器自动分配)时,它将获得连续属性,从您使用glBindAttribLocation
时请求的属性开始。因此,如果foo
的位置为5,则foo[0]
为5,foo[1]
为6,foo[2]
为7。
如果有一些ES 2.0扩展允许属性数组,它可能会像这样工作。