查看: 2072|回复: 5

如何获得当前osgViewer对应的GraphicsContext

[复制链接]

该用户从未签到

发表于 2009-5-30 15:26:50 | 显示全部楼层 |阅读模式
版主,我按您的提示看了看DatabasePager中FindCompileableGLObjectsVisitor和compileAllGLObjects的实现代码,自己写了个
FindCompileableGLObjectsVisitor的节点访问类,从而找到节点中需要编译的stateset与Drawable属性,然后跟踪compileAllGLObjects函数,现在遇到了问题,就是在compileAllGLObjects要用到Context的state属性作为参数,现在要从当前osgViewer获得Context,从而获得CompileContext(),从而才能完成节点的预编译,自己通过当前的osgViewer获得Contexts()进而获得CompileContext(),怎么老是为空啊,请版主帮忙给看看,谢谢了!代码如下:
osg::Viewer::ViewerBase::Contexts m_context;
g_osg->getViewer()->getContexts(m_context);
osg::GraphicsContext *gc=m_context.front()->getRegisteredGraphicsContexts(0).font()->CompileContext(0);每次获得的gc都为空,自己对这一块不太熟悉,请版主赐教啊!

该用户从未签到

发表于 2009-5-30 19:53:09 | 显示全部楼层
直接用
  1. osg::GraphicsContext* gc = osg::GraphicsContext::getCompileContext(id);
复制代码
应该就可以了?不过这个肯定需要在仿真循环运行中执行的。我也没有用过,不太好说

该用户从未签到

 楼主| 发表于 2009-5-31 08:21:30 | 显示全部楼层
好的,谢谢老大了!不过按您说的这个我也试了试好像也不行,不过应该是您说的应该在仿真循环中执行,我是用在了自己的调度进程中了,另外我还试了试通过在viewer->realize()后得到其CompileContext传给了一个全局变量,编译stateset与Drawable后再加入场景后发现模型丢失了纹理,这是什么原因啊!请版主赐教啊!谢谢了!

该用户从未签到

 楼主| 发表于 2009-5-31 08:55:31 | 显示全部楼层
我刚去试了试,还是不行,在仿真循环中的preframe中获取的gc都是空的,不知道为什么啊,对了版主问个比较弱的问题,osg::GraphicsContext::getCompileContext(id);中的id应该默认是从0开始的吗。我使用的是getCompileContext(0),是不是用的不对啊。

该用户从未签到

发表于 2009-5-31 08:55:54 | 显示全部楼层
我只是照抄了DatabasePager的做法,至于为什么在您那里不行,抱歉我无法判断。

该用户从未签到

 楼主| 发表于 2009-5-31 10:26:32 | 显示全部楼层
版主我找到了,只要用上osg::DisplaySetting::instance()->setCompileContextsHint(true)就可以使当前的编译上下文可用了。不过就是编译后模型纹理没有了!我再继续找找原因吧!谢谢版主了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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