我正在尝试在 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/