查看: 2892|回复: 1

发现osg3.4中的一个bug,请指教

[复制链接]

该用户从未签到

发表于 2015-11-18 14:42:30 | 显示全部楼层 |阅读模式
本帖最后由 江湖贫侠 于 2015-11-18 14:44 编辑

发现的现象是:当程序初始化graphicswindowembed后,但还没开始渲染就关闭程序时,graphicswindowembed析构会发生崩溃,崩溃点是osg/State.cpp中
L1029
  1.   _glExtensions->glGetQueryiv(GL_TIMESTAMP, GL_QUERY_COUNTER_BITS_ARB, &bits);
复制代码


同时发现程序会提示:
QQ图片20151118143528.png

继续跟踪发现,在osg/State.cpp L969
  1.         _glExtensions = new GLExtensions(_contextID);
  2.     GLExtensions::Set(_contextID, _glExtensions.get());
复制代码

会构造GLExtensions,其构造函数osg/GLExtensions.cpp中 L440行,
  1. GLExtensions::GLExtensions(unsigned int contextID)
  2. {
  3.     const char* version = (const char*) glGetString( GL_VERSION );
  4.     if (!version)
  5.     {
  6.         OSG_NOTIFY(osg::FATAL)<<"Error: OpenGL version test failed, requires valid graphics context."<<std::endl;
  7.         return;
  8.     }
  9. .........
  10. }
复制代码
当检测opengl失败后直接返回,无异常丢出。这样在State.cpp中无法知道GLExtensions是否被构造成功,后续的访问就会出错。

我目前的权益之计是将osg/GLExtensions.cpp中的return改为throw,在程序外部捕获该异常并处理。

不知道有啥更好的办法么?

该用户从未签到

发表于 2016-2-2 14:36:51 | 显示全部楼层
http://bbs.osgchina.org/forum.ph ... amp;page=1#pid70710
您好,我遇到同样的问题如上,您最后是如何处理的呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表