查看: 1808|回复: 3

OSG渲染状态树构建中StateSet的比较--Design OR BUG?

[复制链接]

该用户从未签到

发表于 2010-6-23 12:03:07 | 显示全部楼层 |阅读模式
我们知道,OSG中由StateGraph对象构建渲染状态树(不考虑叶子节点),StateGraph类中包含如下定义的子节点列表:
  1. typedef std::map< const osg::StateSet*, osg::ref_ptr<StateGraph> >   ChildList;
复制代码
该map使用StateSet对象指针作为索引,即是说在StateGraph::find_or_insert中,判断当前StateSet是否已经在树中的依据是比较StateSet对象指针值而不是调用StateSet重载的比较运算符计算比较StateSet对象的内容。
那么StateSet及StateAttribute类实现的比较运算操作实际上在这里没有起到作用。

这是设计如此,还是一个失误?

该用户从未签到

发表于 2010-6-23 13:14:43 | 显示全部楼层
当然是要直接比较指针了,否则谁能承受比较过程中的CPU消耗?因此我们才说共享StateSet对象以及其它场景对象可以提升渲染的效率
StateSet的比较运算符并不需要在构建渲染树时起到作用,在SharedStateManager中自然有它的用武之地

该用户从未签到

 楼主| 发表于 2010-6-23 15:14:15 | 显示全部楼层
SharedStateManager出现在DatabasePager的实现中,但却被注释掉了,这是为什么?
  1.     // make sure a SharedStateManager exists.
  2.     //osgDB::Registry::instance()->getOrCreateSharedStateManager();
复制代码

该用户从未签到

发表于 2010-6-23 17:18:31 | 显示全部楼层
开发者需要使用SharedStateManager的时候,在自己的程序中创建getOrCreateSharedStateManager()就可以了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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