查看: 1899|回复: 11

osg渲染时内存过大。

[复制链接]

该用户从未签到

发表于 2011-6-28 10:54:35 | 显示全部楼层 |阅读模式
本帖最后由 wanghuisoftware 于 2011-6-28 11:13 编辑

请教下,我用MFC建立osg的客户端应用程序,建立节点时就800M左右,可在调用osg的初始化时,内存增长到1.7G才显示出来,请问是什么原因,osg的frame循环会占用这么大的内存吗?它里面也只是写事件、更新呀。


void cOSG::Render(void* ptr)
{
    cOSG* osg = (cOSG*)ptr;
    osgViewer::Viewer* viewer = osg->getViewer();
   
    while(!viewer->done())
    {
        viewer->frame();
    }   
    _endthread();
}


运行这个线程后内存增加的。请问是何原因呢?需要做哪些优化来减少内存。

该用户从未签到

发表于 2011-6-28 12:59:24 | 显示全部楼层
很多程序都有这问题.释放泄露

该用户从未签到

 楼主| 发表于 2011-6-28 13:10:32 | 显示全部楼层
回复 2# robert


    请问如何释放泄露呢?

该用户从未签到

发表于 2011-6-28 13:51:14 | 显示全部楼层
要么就是你的程序有没有,要么就是你的模型有问题,具体不清楚你咋搞的

该用户从未签到

 楼主| 发表于 2011-6-28 15:01:11 | 显示全部楼层
回复 4# FlySky


    您好,请问下,您所说的模型有问题,一般是指那些方面呢?场景结构的组织?我就是按照树形结构来组织的,主要里面都是自定义绘制的图形构成叶子节点,根据空间拓扑关系来生成组节点,依次进行下去直至一个root,至于可能的原因还请多多指教。

该用户从未签到

发表于 2011-6-29 08:12:14 | 显示全部楼层
OSG的渲染过程不会占用什么内存,除非您在更新回调或者别的什么地方做了有问题的事情

该用户从未签到

 楼主| 发表于 2011-6-29 09:24:27 | 显示全部楼层
回复 6# array


    您好,我没有更改frame()方法,也没有添加节点的更新回调,就是创建完场景树后,osg初始化显示,会出什么问题呢?如果是场景结构组织的问题,挑选与绘制比较耗时,但内存应该不会占那么多呀,还请锐哥指教。

该用户从未签到

发表于 2011-6-29 09:28:01 | 显示全部楼层
那只能说明您的场景构架和组织及优化等存在很多问题~~~

该用户从未签到

 楼主| 发表于 2011-7-28 23:56:21 | 显示全部楼层
回复 8# FlySky


    请问场景架构组织有问题,会占这么大的内存吗?

该用户从未签到

发表于 2011-7-29 12:36:50 | 显示全部楼层
猜想哦:如果场景树中多是些小(一个Geometry只有几个面片)而多的节点,在构建渲染树的时候,增加巨大数量的内存对象,是否可能引起这种内存暴涨。

该用户从未签到

 楼主| 发表于 2011-7-31 09:49:50 | 显示全部楼层
回复 6# array


    请问Array,我简单测试了cow.osg的性能,在从文件中读取节点,至设置到Viewer.setSceneData,内存占用2M多,运行到realize()\advance时会达到9M,但运行Viewer.run()后内存会达到30M,可见在三个遍历的过程中占据不少内容。除了渲染属性所占的内存外,是否能否说明cow.osg的场景组织结构也是有一定问题的?

该用户从未签到

发表于 2011-8-1 08:40:24 | 显示全部楼层
这并没有什么问题,OpenGL在CPU端会建立各种buffer空间,此外纹理之类都会在cpu端占用空间(除非您强制删除它们),因此最后的内存大小和cow文件的大小不一样这是天经地义的事情,我也没说过场景组织结构有问题这种话——关键是,您的内存在不断上涨,这才是您需要解决的问题,并且我认为这也是您的代码中存在的问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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