想知道是否可以将大型数组传递给WebGL着色器,如下所示:
// array here
uniform vec4[huge] mydynamicarray;
void main() {
// iterate through the array here to perform processing on it,
// then write value to gl_Position
gl_Position = ...;
}
然后会像这样填充:
gl.uniform4fv(myarrayloc, myarray)
我见过很多examples如何传递这样的值,例如:
gl.uniform4fv(offsetLoc, [1, 0, 0, 0])
但是我还没有看到是否可以传入一个非常大的动态大小的数组。
这样做的原因是你可以处理2个数组:
答案 0 :(得分:4)
Most WebGL implementations have a limit of 1024 or less uniform vectors
换句话说,huge
不能超过1024 vec4s,也不能超过特定GPU的限制。另请注意,基于规范中指定的统一打包规则,这也意味着最大的浮点统一数组也是1024或者特定GPU的限制。
您可以声明数组
uniform vec4 foo[3];
并使用
设置其值gl.uniform4fv(fooLoc, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]);
纹理是将大量随机访问数据传递到WebGL 的方式。 This answer might be relevant