在WebGL中将大型数组传递到uniform的方法

6

想知道是否可能将一个大的数组传递到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)

我看过许多关于如何传递这样的值的示例,比如:

gl.uniform4fv(offsetLoc, [1, 0, 0, 0])

但是我没有看到是否可以传递一个非常大的、动态大小的数组。

这样做的原因是你可以处理两个数组:

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

6

大多数WebGL实现都有1024个或更少的统一向量限制

换句话说,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的方式。这个答案可能是相关的

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接