gpt4 book ai didi

c++ - glDeleteBuffers() 在析构函数调用期间崩溃

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:11:53 27 4
gpt4 key购买 nike

正如 Qt 用户所知,使用任何 OpenGL 扩展都非常麻烦。我让它工作的方法是像这样扩展 QGLFunctions 类:

 class Object3D : protected QGLFunctions{ 
...
}

为了使 Object3D 能够正确运行,以便它可以调用 glGenBuffer() 等函数,需要调用

initializeGLFunctions(glWidget->context());

在创建 QGLWidget 之后,否则它会在使用任何扩展功能时简单地使应用程序崩溃。虽然我最终可以在 Object3D 存在期间调用“glGenBuffer()”和其他函数,但它似乎在包含“glDeleteBuffer()”调用的 ~Object3D() 调用时崩溃。我确信是那个调用导致了应用程序崩溃。

有人知道怎么解决这个问题吗?我怀疑这是因为 QGLWidget 在 Object3D 之前先被删除,所以 QGLWidget 的上下文消失了。如果是这种情况,我如何确保 QGLWidget 被最后删除,因为 QGLWidget 被添加到 QMainWindow 中,它只是按照添加的顺序删除其子项?

最佳答案

一般规则是,如果您不能保证在上下文仍然存在时 OpenGL RAII 对象将被销毁,则不要将 OpenGL 对象包装在 RAII C++ 类中。以其他方式管理 OpenGL 对象的生命周期。

这是您的代码(您没有向我们展示);只有您可以决定在何处或如何管理类的销毁。您需要一些系统来管理您的对象,以确保以正确的顺序销毁(和创建)事物。

关于c++ - glDeleteBuffers() 在析构函数调用期间崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13336729/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com