查看: 2219|回复: 3

PagedLOD使用中的内存泄漏?

[复制链接]

该用户从未签到

发表于 2009-8-17 23:27:43 | 显示全部楼层 |阅读模式
本帖最后由 leon 于 2009-8-17 23:31 编辑

情况是这样的:
pagedLod的地形数据,程序中会动态设定每个lod的range。设定的过程:在每帧的update过程中,得到每个LOD的BoundingSphere的半径,将其乘以一个参数(由程序控制),根据得到的数分别设置本LOD和其子LOD的Range。其代码如下:

osg::BoundingSphere _bb = _LOD->computeBound();
float _dist = _PagedLODKen*_bb.radius();
_LOD->setRange(0,_dist,5e+4);
_LOD->setRange(1,0,_dist);

现在的问题是:当所乘的参数(即程序中的_PagedLODKen,只在这里起作用)大于1时,程序所占内存会随着pagedLOD的反复载入(比如某水平视角的camera绕铅锤轴原地360°旋转)而不断增加,直到内存几乎耗尽。若所乘参数小于等于1则完全没有该现象。另外,如果程序运行不牵涉到pagedLOD的反复载入(比如俯视视角下)则也没有内存不断增加的现象。

请教问题可能出在什么地方,怎么试着解决?

该用户从未签到

发表于 2009-8-18 00:15:33 | 显示全部楼层
只要设置PagedLOD的代码正确,便不会有内存耗尽的情况。不知您是如何为PagedLOD添加子对象的?

该用户从未签到

 楼主| 发表于 2009-8-19 10:13:13 | 显示全部楼层
本帖最后由 leon 于 2009-8-19 10:18 编辑

地形是由vpb生成的,生成的命令如下:

osgdem -t "image.tif" -d "dem.dem" --geocentric -l 8 -o "a.ive" --tile-image-size 1024 --tile-terrain-size 256

问题困扰了很久,还是找不到原因。

另外问一下:osg的指针内存释放是在reference的引用数变为0的时候立即进行的,还是有统一的内存回收机制?

该用户从未签到

发表于 2009-8-19 12:18:06 | 显示全部楼层
两种都可以,默认是前一种。使用vpb生成的PagedLOD地形不会出现内存泄露问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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