想知道是否可以将大型数组传递给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 = ...;
}
Run Code Online (Sandbox Code Playgroud)
然后将这样填充:
gl.uniform4fv(myarrayloc, myarray)
Run Code Online (Sandbox Code Playgroud)
我已经看到了许多如何传递这样的值的示例,例如:
gl.uniform4fv(offsetLoc, [1, 0, 0, 0])
Run Code Online (Sandbox Code Playgroud)
但是我还没有看到是否可以传递一个很大的,动态大小的数组。
这样做的原因是您可以处理2个数组:
换句话说huge,不能大于1024 vec4s或特定GPU的限制。还要注意,基于规范中指定的统一打包规则,这也意味着最大的float统一数组也为1024或特定GPU的限制。
您可以声明数组
uniform vec4 foo[3];
Run Code Online (Sandbox Code Playgroud)
并设置它们的值
gl.uniform4fv(fooLoc, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]);
Run Code Online (Sandbox Code Playgroud)
纹理是将大量随机访问数据传递到WebGL中的方式。这个答案可能是有意义的。
| 归档时间: |
|
| 查看次数: |
551 次 |
| 最近记录: |