如何使用 webgl 处理和更新大型数组?

How to process and update large arrays using webgl?

我有两个大的Uint8Array。尺寸为:10242048

我想在每一帧中更新这些数组。

1024 长度数组适合 256 个 vec4 制服,或 16*16 图像。但我不认为,这是正确的做法。

如何将大型数组从 javascript 发送到 GLSL?


编辑

我的纹理问题是,要更新每一帧中的图像,我必须将数据复制到 ImageData 对象中。然后我必须将 imageData 绘制到 canvas 上。之后,我必须获取 canvas 的 dataURL,并更改图像的 src 属性

纹理是在 WebGL 中处理大型数据集的合适方式。您可以将数据存储在 1D 或 2D 纹理中,然后在片段着色器中使用它。

您可以直接从类型化数组将数据加载到纹理中,无需先创建图像,请参阅 this answer for more details

如果制服太多,您很容易 运行 在某些 GPU 上遇到问题。有关制服数量的一些典型限制,请参阅 webglstats.com,特别是 MAX_VERTEX_UNIFORM_VECTORS 和 MAX_FRAGMENT_UNIFORM_VECTORS。