我在“顶点缓冲对象”(VBO)中遇到了一个奇怪的问题。我创建了一个包含VBO创建和删除的类。我删除了类的析构函数中的所有VBO(带有glDeleteBuffers())。
现在,我创建了2个OpenGL上下文窗口,每个窗口都与VBO类一起运行。现在,当我关闭一个GLwindow时,它的析构函数调用也被删除,但VBO也被删除了,但奇怪的是第二个窗口上的析构函数效果,在第二个窗口上运行的对象消失了。使用不推荐使用的glVertex3fv进行渲染时,可以看到该对象,但不能看到VBO。如果我不使用GLwindow类的析构函数删除VBO,则一切正常。我不应该在每次上下文删除时都删除VBO吗?
我的问题是为什么会这样?我知道OpenGL是状态机,但我们不能制作一个全新的独立类对象吗?
我注意到(glDeleteTextures())具有相同的效果,如果不使用析构函数删除纹理,则不会发生任何奇怪的事情,但是如果删除一个Glwindows纹理,它将对渲染的第二个Glwindow产生影响,并且纹理消失。
它是已知问题还是仅在我身上发生?
Reto Koradi已经提到过复制语义。要记住的另一件事是OpenGL允许上下文共享,即,某些对象在OpenGL上下文之间共享,并且在一个上下文中删除会从所有上下文中删除它。超越共享上下文的对象是
在不超越共享上下文的对象中有
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句