查看: 4357|回复: 9

分享一点对setDataVariance(DYNAMIC)的理解

[复制链接]

该用户从未签到

发表于 2011-12-29 15:46:53 | 显示全部楼层 |阅读模式
简单来讲,就是为了线程同步,避免一个正在渲染线程中被渲染的对象在仿真渲染线程中被修改而发生访问冲突。
这也是我从前的理解,于是对所有可能会动态修改的东西,都设置了为DYNAMIC的,包括一些可能会动态添加、删除子节点的组节点,也设置为DYNAMIC。

但是,今天翻看了一下这块的代码,发现在渲染中被优先渲染的“动态”drawable只有两种情况:
1)Drawable本身被指定为DYNAMIC或被指定了回调
2)一个节点的StateSet是DYNAMIC的话,其子树中的所有Drawable被视为“动态”

由此可见,只有需要动态修改StateSet或Drawable时,才需要设置其为DYNAMIC。
而对于节点设置DYNAMIC是没有意义的。

一点认识与大家分享,如果有误还请不吝指出。

该用户从未签到

发表于 2011-12-29 16:57:47 | 显示全部楼层
在osghud例子中使用了DYNAMIC,一直不知道为什么用DYNAMIC。学习了……

该用户从未签到

发表于 2011-12-30 11:06:03 | 显示全部楼层
  1. if (_parent && _parent->_dynamic) _dynamic = true;
  2. else _dynamic = stateset->getDataVariance()==osg::Object::DYNAMIC;
复制代码
证实lz说法正确,学习~

该用户从未签到

发表于 2012-1-6 09:22:56 | 显示全部楼层
谢谢楼主分享心得

该用户从未签到

发表于 2012-2-8 10:35:59 | 显示全部楼层
学习了!

该用户从未签到

发表于 2012-12-2 13:30:44 | 显示全部楼层
谢谢楼主

该用户从未签到

发表于 2012-12-2 13:34:46 | 显示全部楼层
/** Set the data variance of this object.
           * Can be set to either STATIC for values that do not change over the lifetime of the object,
           * or DYNAMIC for values that vary over the lifetime of the object. The DataVariance value
           * can be used by routines such as optimization codes that wish to share static data.
           * UNSPECIFIED is used to specify that the DataVariance hasn't been set yet. */
        enum DataVariance
        {
            DYNAMIC,
            STATIC,
            UNSPECIFIED
        };
  inline void setDataVariance(DataVariance dv) { _dataVariance = dv; }

该用户从未签到

发表于 2012-12-2 16:23:18 | 显示全部楼层
谢谢LZ分享,学习了。

该用户从未签到

发表于 2016-2-21 17:43:38 | 显示全部楼层
谢谢LZ,学习了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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