首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >glBindVertexArray随机INVALID_OPERATION

glBindVertexArray随机INVALID_OPERATION
EN

Stack Overflow用户
提问于 2012-09-18 17:41:50
回答 1查看 1.3K关注 0票数 1

我正面临着一个奇怪的崩溃,当我试图绑定一个VAO时,它会随机出现。

VAO本身以前是由glGenVertexArrays生成的,它不会返回任何错误。

代码语言:javascript
复制
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(...);

在执行过程中,调用:

代码语言:javascript
复制
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,我遇到了这个问题。

以前有没有人遇到过这种情况?我是不是遗漏了什么?

EN

回答 1

Stack Overflow用户

发布于 2012-09-18 19:58:17

好吧好吧是我的错,有一个glDeleteVertexArrays()变得疯狂了..但它真的很难被发现。

据推测,在旧操作系统和驱动程序上,返回的名称、初始内存布局或任何其他内容都不同,它只是删除了一个不存在的VAO,而在这里它指向一个有效的VAO。

更改linux版本/发行版或使用BSD确实对我编写真正可移植的代码有很大帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12474355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档