如何使用 webgl 处理和更新大型数组?
How to process and update large arrays using webgl?
我有两个大的Uint8Array
。尺寸为:1024
和 2048
我想在每一帧中更新这些数组。
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。
我有两个大的Uint8Array
。尺寸为:1024
和 2048
我想在每一帧中更新这些数组。
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。