我正面临着一个奇怪的崩溃,当我试图绑定一个VAO时,它会随机出现。
VAO本身以前是由glGenVertexArrays生成的,它不会返回任何错误。
glGenVertexArrays(NUM_VAO,vao);
glGenBuffers(NUM_VAO,vbo);
glBindVertexArray(vao[2]);
glBindBuffer(GL_ARRAY_BUFFER,vbo[2]);
glBufferData(GL_ARRAY_BUFFER,1024*sizeof(GLfloat),NULL,GL_DYNAMIC_DRAW);
glVertexAttribPointer(...);
glEnableVertexAttribArray(...);在执行过程中,调用:
glBindVertexArray(vao[2])可能会也可能不会生成INVALID_OPERATION。注意,vao2的内容与glGenVertexArrays返回的内容相同,并且该数组在执行过程中不会被删除。
根据规范,只有当传递了非零名称并且名称本身不是由glGenVertexArrays返回时,才会发出INVALID_OPERATION,这显然不是这种情况。
这个问题偶尔会发生,大约只有15%的应用程序运行时间,否则一切都会按预期运行。在调试模式下问题仍然存在。
我刚刚升级了我的工作站,我曾经在OpenSUSE 12.1上使用NVidia驱动程序290.10和Qt 4.7.1进行开发,从来没有遇到过这个问题。
我刚刚使用NVidia驱动程序304.43和Qt 4.8.1迁移到OpenSUSE 12.2,我遇到了这个问题。
以前有没有人遇到过这种情况?我是不是遗漏了什么?
发布于 2012-09-18 19:58:17
好吧好吧是我的错,有一个glDeleteVertexArrays()变得疯狂了..但它真的很难被发现。
据推测,在旧操作系统和驱动程序上,返回的名称、初始内存布局或任何其他内容都不同,它只是删除了一个不存在的VAO,而在这里它指向一个有效的VAO。
更改linux版本/发行版或使用BSD确实对我编写真正可移植的代码有很大帮助。
https://stackoverflow.com/questions/12474355
复制相似问题