glBindVertexArray随机INVALID_OPERATION

时间:2012-09-18 09:41:50

标签: opengl opengl-3

我正面临着在尝试绑定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。请注意,vao [2]的内容与glGenVertexArrays返回的内容相同,并且在执行期间永远不会删除该数组。

根据规范,仅当传递非零名称并且glGenVertexArrays未返回名称本身时才会发出INVALID_OPERATION,显然不是这种情况。

问题偶尔发生,大约只有15%的时间运行应用程序,否则一切都按预期工作。调试模式中问题仍然存在。

我刚刚升级了我的工作站,我曾经使用NVidia驱动程序290.10和Qt 4.7.1在OpenSUSE 12.1上进行开发,从未遇到过这个问题。

我刚刚使用NVidia驱动程序304.43和Qt 4.8.1转移到OpenSUSE 12.2,我遇到了这个问题。

以前有人遇到过这种情况吗?我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

好的我的错,有一个glDeleteVertexArrays()疯狂了......但是很难发现。

据说在旧操作系统和驱动程序上返回的名称,初始内存布局或任何不同之处,它只是删除了一个不存在的VAO,而在这里它指向一个有效的...

改变linux版本/发行版或者去BSD真的帮助我编写了真正的可移植代码..