|
本帖最后由 江湖贫侠 于 2015-11-18 14:44 编辑
发现的现象是:当程序初始化graphicswindowembed后,但还没开始渲染就关闭程序时,graphicswindowembed析构会发生崩溃,崩溃点是osg/State.cpp中
L1029- _glExtensions->glGetQueryiv(GL_TIMESTAMP, GL_QUERY_COUNTER_BITS_ARB, &bits);
复制代码 。
同时发现程序会提示:
继续跟踪发现,在osg/State.cpp L969
- _glExtensions = new GLExtensions(_contextID);
- GLExtensions::Set(_contextID, _glExtensions.get());
复制代码
会构造GLExtensions,其构造函数osg/GLExtensions.cpp中 L440行,
- GLExtensions::GLExtensions(unsigned int contextID)
- {
- const char* version = (const char*) glGetString( GL_VERSION );
- if (!version)
- {
- OSG_NOTIFY(osg::FATAL)<<"Error: OpenGL version test failed, requires valid graphics context."<<std::endl;
- return;
- }
- .........
- }
复制代码 当检测opengl失败后直接返回,无异常丢出。这样在State.cpp中无法知道GLExtensions是否被构造成功,后续的访问就会出错。
我目前的权益之计是将osg/GLExtensions.cpp中的return改为throw,在程序外部捕获该异常并处理。
不知道有啥更好的办法么? |
|