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

Passing large array into uniform in 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. 一个是统一数组,您可以为每个向量迭代它。

Most WebGL implementations have a limit of 1024 or less uniform vectors

换句话说,huge 不能大于 1024 个 vec4 或任何特定 GPU 的限制。另请注意,根据规范中指定的统一打包规则,这也意味着最大的浮点统一数组也是 1024 或任何特定 GPU 的限制。

你可以声明数组

uniform vec4 foo[3];

并设置它们的值

gl.uniform4fv(fooLoc, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]);

纹理是将大量随机访问数据传递到 WebGL 的方式.