我有两个大的Uint8Array
。它们的大小分别是:1024
和2048
我想在每一帧中更新这些数组。
1024
长度的数组可以适合256个vec4 uniforms或16 * 16图像,但我认为这不是正确的方法。
如何从javascript发送大数组到GLSL?
编辑
我的纹理问题在于:要在每一帧中更新图像,我必须将数据复制到ImageData
对象中。然后我必须将imageData绘制到画布上。之后,我必须获取画布的dataURL,并更改图像的src属性。
我有两个大的Uint8Array
。它们的大小分别是:1024
和2048
我想在每一帧中更新这些数组。
1024
长度的数组可以适合256个vec4 uniforms或16 * 16图像,但我认为这不是正确的方法。
如何从javascript发送大数组到GLSL?
编辑
我的纹理问题在于:要在每一帧中更新图像,我必须将数据复制到ImageData
对象中。然后我必须将imageData绘制到画布上。之后,我必须获取画布的dataURL,并更改图像的src属性。
纹理是在WebGL中处理大型数据集的适当方式。您可以将数据存储在1D或2D纹理中,然后在片段着色器中使用它。
您可以直接从类型化数组加载数据到纹理中,无需先创建图像,请参见此答案以获取更多详细信息。
如果uniforms太多,在某些GPU上很容易遇到问题。请参见webglstats.com以获取有关uniforms数量的一些典型限制,特别是MAX_VERTEX_UNIFORM_VECTORS和MAX_FRAGMENT_UNIFORM_VECTORS。
ImageData
中。您可以直接将类型化数组上传到纹理中。 - gman