查看: 1782|回复: 5

设置了UnRefImageDataAfterApply后重新获取纹理问题

[复制链接]

该用户从未签到

发表于 2013-1-9 13:13:43 | 显示全部楼层 |阅读模式
本帖最后由 gis_wudi 于 2013-1-9 14:32 编辑

      如题
    setUnRefImageDataAfterApply为true后,如何能强制或通过特殊手段获取到该节点对象的贴图
比如一个模型文件贴图特别庞大,正常情况下设置为true,但有对该模型进行编辑和修改(如夸张顶点数据显示)的需求时,需要获取其贴图,该怎么操作
   别说要修改文件设置,那样就有问题了,如果是pagedlod,子文件非常多,甚至只有在交互操作修改的时候,才能知道是哪个文件   

该用户从未签到

 楼主| 发表于 2013-1-9 15:38:17 | 显示全部楼层
本帖最后由 gis_wudi 于 2013-1-9 17:09 编辑

     追加一个问题:
    看到3.0的版本,虽然设置了setUnRefImageDataAfterApply为true ,但内存中,节点依然有image的存在,并没有UnRef,这个问题怎么解释
  难道说3.0中并没有在内存中释放image吗?
   看了一下3.0的代码,   
   _useHardwareMipMapGeneration = in->readBool();
   _unrefImageDataAfterApply = in->readBool();   这句读取始终是false

该用户从未签到

发表于 2013-1-14 09:28:00 | 显示全部楼层
setUnRefImageDataAfterApply肯定是有用的,您可以在程序代码中设置这个函数来判断一下。至于您的第一个问题,我只能说这种时候没有特别的好办法,只能用NodeVisitor遍历找到不能unref的图对象并且设置

该用户从未签到

 楼主| 发表于 2013-1-14 10:55:45 | 显示全部楼层
array 发表于 2013-1-14 09:28
setUnRefImageDataAfterApply肯定是有用的,您可以在程序代码中设置这个函数来判断一下。至于您的第一个问题 ...

nodevisitor也考虑过,但对于pagedlod来讲,在读入的时候,某些模型节点还没有加载
如果非要解决,看来只能重写pagedlod类了

该用户从未签到

发表于 2013-1-16 09:41:33 | 显示全部楼层
那么最好是在制作模型的时候就注意UnrefImage的问题

该用户从未签到

 楼主| 发表于 2013-1-17 10:58:56 | 显示全部楼层
嗯,看来这种问题,还是需要特殊处理一下,谢谢array耐心解答
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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