查看: 1853|回复: 8

节点释放

[复制链接]

该用户从未签到

发表于 2010-12-15 14:19:28 | 显示全部楼层 |阅读模式
比如这样一个程序结构:

  1. osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer;
  2. osg::ref_ptr<osg::Group> root = new osg::Group;
  3. osg::ref_ptr<osg::Group> group = new osg::Group;
  4. osg::ref_ptr<osg::Node> node = osgDB::readNodeFile(modelName);
  5. group->addChild(node.get());
  6. root->addChild(group.get());
  7. viewer->setSceneData(root.get());
复制代码
现在要按下MFC等框架中的一个按钮,清空整个场景:

  1. root->removeChild(group.get());
复制代码
发现场景是清空了,可是内存没释放,请问下该如何释放内存?

该用户从未签到

发表于 2010-12-15 16:04:00 | 显示全部楼层
只要group没有被其它节点引用,那么它就会被自动释放

该用户从未签到

 楼主| 发表于 2010-12-15 16:34:13 | 显示全部楼层
恩,执行了root->removeChild(group.get());
是不是root还是在对group进行引用,所以内存没释放?
有没有其他方法清空整个场景呢?

该用户从未签到

发表于 2010-12-16 09:19:04 | 显示全部楼层
恩,执行了root->removeChild(group.get());
是不是root还是在对group进行引用,所以内存没释放?
此时root已经不会再引用group了

该用户从未签到

 楼主| 发表于 2010-12-16 13:30:35 | 显示全部楼层
谢谢array大哥,这个知道了,我是要完成场景切换的功能,在添加场景时只要:
[code]root->removeChild(group.get());
group = new osg::Group;[code]
就能清楚场景了,内存也正常的。
在对各个场景添加了水效果之后,内存根本就不清空了,而且我的RTT相机也是加在group下的,请问下有什么方法解决这种情况?

该用户从未签到

发表于 2010-12-16 15:54:03 | 显示全部楼层
在对各个场景添加了水效果之后,内存根本就不清空了,而且我的RTT相机也是加在group下的
能否更清楚地阐明您的实现

该用户从未签到

 楼主| 发表于 2010-12-16 17:03:17 | 显示全部楼层
我的实现是这样的,先定义一个场景总节点root,根节点group,模型节点node,
对node进行回调获取水模型,对其添加水效果,然后把其中的RTT相机和模型节点付给group:
  1. group->addChild(node.get());
  2.         group->addChild(rttCamera.get());
  3.         root->addChild(group.get());
  4.         viewer->setSceneData(root.get());
复制代码
目的就是要删除整个场景,我只添加
  1. root->removeChild(group.get());
  2. group = new osg::Group;
复制代码
内存不清除。请问下哪了出现了问题?

该用户从未签到

 楼主| 发表于 2010-12-16 17:06:52 | 显示全部楼层
我把那个水效果去掉后调用
  1. root->removeChild(group.get());
  2. group = new osg::Group;
复制代码
内存就清除了,实在找不到哪出了问题了。

该用户从未签到

 楼主| 发表于 2010-12-16 18:10:23 | 显示全部楼层
问题解决了,原来是RTT相机回调时,赋值时rttCamerade 的refCount加了一
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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