javascript - WebGL 在尝试加载 float 组时提示 "array size too large"

标签 javascript arrays glsl webgl

我正在尝试在 GPU 上加载大量 float 。该数组将由片段着色器使用以执行其计算。奇怪的是,将以下行添加到片段着色器:

uniform vec3 xyz[512*512];

编译时足以触发以下错误:

Uncaught OpenGL error: ERROR: 0:4: '' : array size too large 
ERROR: 0:6: 'x' :  field selection requires structure, vector, or matrix on left hand side 

为什么会这样?一个 512*512 的数组似乎并不合理,因为它只有 3mb 左右,比我 GPU 上的内存量少得多。

最佳答案

数组中的每个索引都计入最大统一向量的限制,这在很大程度上取决于实现。顶点和片段着色器中使用的制服有单独的限制(两者中使用的制服都计入两者)。要查询这些限制使用

gl.getParameter( gl.MAX_VERTEX_UNIFORM_VECTORS );
gl.getParameter( gl.MAX_FRAGMENT_UNIFORM_VECTORS );

通常他们在 ~200 左右,但最好的办法是查找 webglstats .

如果您想将那么多数据作为制服发送,您通常会将其作为( float )纹理发送。

关于javascript - WebGL 在尝试加载 float 组时提示 "array size too large",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28248898/

相关文章:

c++ - 不正确的插值,opengl索引的vbo,顶点结构和glsl

c++ - 如何在 glsl 中编写基本着色器?

javascript - jquery MVC4 接收 JSON

javascript - 在没有业力的情况下运行 Jasmine Angular Testing

javascript - 如何获取SVG元素的位置

arrays - Julia 使用向量作为索引访问特定的 Matrix 元素

debugging - 用于调试着色器的免费软件

javascript - 为什么我的 Regex 使用 "++"而不是任何其他特殊字符组合创建内部服务器错误?

arrays - 将一个源数组拆分为多个副本的正确方法是什么?

java - 哈希表大小设置