OpenGL:VBO删除的奇怪巴哈维
OpenGL: Strange bahaviour of VBO deletion?
我在顶点缓冲区对象(VBO)中遇到了一个奇怪的问题。我创建了一个包含 VBO 创建和删除的类。我删除了类析构函数中的所有 VBO(使用 glDeleteBuffers())。
现在我创建了 2 个 OpenGL 上下文窗口,每个窗口都使用 VBO 类运行。现在,当我关闭一个 GLwindow 时,它的析构函数调用和 VBO 也被删除,但奇怪的是第二个窗口上的析构函数效果,在第二个窗口上运行的对象消失了。当我使用已弃用的glVertex3fv渲染时,我可以看到对象,但不能使用VBO进行渲染。如果我不使用 GLwindow 类的析构函数删除 VBO,一切正常。我不应该在每次删除上下文时删除 VBO?
我的问题是为什么会发生这种情况?我知道OpenGL是一个状态机,但我们不能创建一个完整的新独立类对象吗?
我注意到 (glDeleteTextures()) 同样的效果,如果我不使用析构函数删除纹理,则不会发生任何奇怪的事情,但是如果我删除一个 Glwindows 纹理,它会对渲染的第二个 Glwindow 产生影响并且纹理消失。
这是已知问题还是仅发生在我身上?
Reto Koradi 已经提到了复制语义。要记住的另一件事是OpenGL允许上下文共享,即某些对象在OpenGL上下文之间共享,在一个上下文中删除会将其从所有上下文中删除。超越共享上下文的对象是
- 纹理
- 使用 glBindBuffer 绑定的缓冲区对象
- 渲染缓冲区
不超越共享上下文的对象包括
- 帧缓冲对象
- 顶点数组对象
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 将二维矢量传递给类
- 指向多维数组C++的指针
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- C++使用数组作为多维数组,尽管将其初始化为带有指针的 1D
- 如何将三维尺寸不固定的三维阵列展平为一维阵列
- 使用Qt C++计算类似Git的SHA1哈希
- 将值从二维数组输出到文本文件
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 用C++将哈希表写入文件并从文件中恢复
- MacOS通过在莫哈韦"wchar.h"下破碎的自制啤酒发出叮当声
- 我在二维向量中是否正确分配了内存
- 如何创建多维类
- 更新到莫哈韦后出现cmath错误
- 如何在 perl 中将多维映射从 c++ 转换为哈希
- 对齐方式究竟如何影响内存布局和新放置的巴哈维?
- 二维哈希映射:行和列类型为指针的矩阵
- OpenGL:VBO删除的奇怪巴哈维
- 二维哈希映射的操作
- 二维哈尔小波变换软阈值图像去噪(c++)