Glsl WebGL中工作项(着色器实例)内存的限制是什么?
我在我的WebGL顶点着色器中声明一个数组: 属性向量2位置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。我猜我试图在堆栈上使用太多内存。有没有更好的编程方
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的一致性测试是免费的、开源的(斜接)并且可用的?您知道哪些测试引用了最大内存吗?此外,这些测试的来源似乎是