C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – glDeleteBuffers()在析构函数调用期间崩溃大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
正如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()在析构函数调用期间崩溃全部内容,希望文章能够帮你解决c – glDeleteBuffers()在析构函数调用期间崩溃所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。