Glsl WebGL中工作项(着色器实例)内存的限制是什么?

Glsl WebGL中工作项(着色器实例)内存的限制是什么?,glsl,webgl,Glsl,Webgl,我在我的WebGL顶点着色器中声明一个数组: 属性向量2位置 void main() { #define length 1024 float arr[length]; // use arr so that it doesn't get optimized away 这是可行的,但如果我将length增加到2048,那么gl.drawArrays什么也不做。没有错误-着色器编译、程序链接和过程gl.validateProgram。我猜我试图在堆栈上使用太多内存。有没有更好的编程方

我在我的WebGL顶点着色器中声明一个数组:

属性向量2位置

void main() {

  #define length 1024
  float arr[length];
  // use arr so that it doesn't get optimized away
这是可行的,但如果我将
length
增加到2048,那么
gl.drawArrays
什么也不做。没有错误-着色器编译、程序链接和过程
gl.validateProgram
。我猜我试图在堆栈上使用太多内存。有没有更好的编程方法来发现这个限制?我做错什么了吗

没有错误-着色器编译、程序链接和传递gl.validateProgram

正如规范所保证的那样

:

着色器不应编译失败,程序对象也不应编译失败 由于缺少指令空间或缺少临时变量而导致的链接

GLSL规范很有帮助地指出:

变量的最大数量由定义

您可以以低廉的价格获得自己的一致性测试副本

但是,您至少可以检测到这种情况(第41页第2.10节):

并非总是能够在链接时确定程序对象是否实际执行。因此,在发出第一个呈现命令(DrawArrays或DrawElements)时会进行验证,以确定是否可以执行当前活动的程序对象。如果无法执行,则不会渲染片段,渲染命令将生成错误
无效\u操作


GLSL没有堆栈。那么我该怎么称呼它呢?非功能的
glDrawArrays()
是否会导致
glGetError()
返回
GL\u INVALID\u OPERATION
?@genpfault否,没有错误WebGL的一致性测试是免费的、开源的(斜接)并且可用的?您知道哪些测试引用了最大内存吗?此外,这些测试的来源似乎是