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

标签 javascript glsl webgl typed-arrays

我有两个大的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。

关于javascript - 如何使用 webgl 处理和更新大型数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35254326/

相关文章:

javascript - 如何从加载到 javascript 的导出 XML 数据中删除不需要的空格

iphone - GLSL:iPhone应用程序无法访问内置属性?

opengl - 为什么有一个单独的投影矩阵是有益的,但结合模型和 View 矩阵?

javascript - 使用php和mysql的条形图

javascript - 如何根据页面上不同对象的位置在 Javascript/Mootools 中定位箭头

javascript - 检查片段着色器中是否加载了 webgl 纹理

opengl-es - 对于 opengl (webgl) 是 png 还是 jpeg 是最合适的文件格式?

opengl - 渲染具有多个索引的网格

javascript - 如何解决 Google API 中的 CORS 问题?

opengl - 着色器变量归一化职责