查看: 3066|回复: 5

论坛里有没有人关注过simgear这个开源库,想应用这个开源库,但遇到头痛的问题

[复制链接]

该用户从未签到

发表于 2010-8-21 15:54:29 | 显示全部楼层 |阅读模式
只要向天空中添加云层,就报如下错误
Error: In Texture::Extensions::setupGLExtensions(..) OpenGL version test failed, requires valid graphics context.
跟踪simgear代码,在osg::TextureCubeMap::getExtensions(0, true);这个地方就发生了中断,上网查了查,array说“必须保证OpenGL的执行函数都在makeCurrent的前提下执行,否则都会返回无效值。”
我想知道这个该如何进行设置呢,osg中的makeCurrent不是在执行viewer.realize()的时候已经设置了么?

该用户从未签到

 楼主| 发表于 2010-8-23 08:12:04 | 显示全部楼层
自己顶一个,继续寻找答案中

该用户从未签到

发表于 2010-8-23 08:52:25 | 显示全部楼层
osg中的makeCurrent不是在执行viewer.realize()的时候已经设置了么
不是这样的。realize()的工作是自动初始化Viewer所需的线程和数据缓存等,不是makeCurrent

该用户从未签到

 楼主| 发表于 2010-8-23 16:23:14 | 显示全部楼层
viewer.realize();
viewer.getCamera()->getGraphicsContext()->isCurrent();
按上面的顺序写则后者返回值为true,若用下面的方式
viewer.getCamera()->getGraphicsContext()->isCurrent();
viewer.realize();
则产生中断,所以说makeCurrent的操作是在viewer.realize();时完成的吧

该用户从未签到

发表于 2010-8-25 08:17:52 | 显示全部楼层
makeCurrent并不是在某个阶段完成的,而是不断被调用的。这是OSG的多线程机制所决定的。每个渲染线程都会在具体的时机调用makeCurrent以取得OpenGL渲染上下文的控制权,完成绘制后用releaseContext释放——因此您的说法是不准确的

该用户从未签到

 楼主| 发表于 2010-8-25 15:47:56 | 显示全部楼层
谢谢array。您的回复帮我解决了一个之前遗留的问题,但上面的问题还是不知道如何解决,目前直接给注释掉了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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