我在Vertex Buffer Object(VBO)中遇到了一个奇怪的问题。我创建了一个包含VBO创建和删除的类。我删除了类的析构函数中的所有VBO(使用glDeleteBuffers())。
现在我创建了2个OpenGL上下文窗口,每个窗口都运行VBO类。现在,当我关闭一个GLwindow时,它的析构函数调用并且VBO也被删除,但奇怪的是第二个窗口上的析构函数效果,第二个窗口上运行的对象消失了。当我使用弃用的glVertex3fv进行渲染时,我可以看到对象但不能看到VBO。 如果我不使用GLwindow类的析构函数删除VBO,一切正常。我不应该删除每个上下文删除VBO吗?
我的问题是为什么会这样?我知道OpenGL是一个状态机,但是我们不能创建一个全新的独立类对象吗?
我注意到与(glDeleteTextures())相同的效果如果我不使用析构函数删除纹理,没有什么奇怪的事情发生但是如果我删除一个Glwindows纹理,它会影响渲染的第二个Glwindow,纹理会消失。
它是否已知问题或仅发生在我身上?
答案 0 :(得分:0)
Reto Koradi已经提到了复制语义。要记住的另一件事是OpenGL允许上下文共享,即一些对象在OpenGL上下文之间共享,并且在一个上下文中删除将其从所有上下文中删除。超越共享上下文的对象是
中超出共享上下文的对象