在WebGL中将大数组传递给统一

时间:2018-04-25 23:09:23

标签: arrays webgl

想知道是否可以将大型数组传递给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个数组:

  1. 一个是在WebGL中并行运行的矢量数组。
  2. 一个可以为每个向量迭代的统一数组。

1 个答案:

答案 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