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

Ite*_*tor 4 javascript glsl webgl typed-arrays

我有两个大Uint8Array.尺寸是:10242048

我想在每个帧中更新这些数组.

1024长度阵列将配合到256和vec4制服,或16×16的图像.但我不认为,这是正确的做法.

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


编辑

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

小智 6

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

您可以直接从类型化数组将数据加载到纹理中,您无需先创建图像,有关详细信息,请参阅此答案.

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