查看: 1912|回复: 4

我的texture析构问题

[复制链接]

该用户从未签到

发表于 2011-4-28 16:55:31 | 显示全部楼层 |阅读模式
我想把模型的所有的纹理名称变换一下,先得到texture2D,然后将符合的纹理读取并赋予,这样的话每次的内存都会增加,根据王锐老师《osg指南》里面说法采用了 setUnRefImageDataAfterApply ,还是不对,现贴代码如下,请各位老师指教。还有程序不合理之处也请指出,麻烦各位了。



  1. for (unsigned int i = 0; i <texSize; i++)
  2. {  
  3.   osg::ref_ptr<osg::Texture2D> texture =dynamic_cast<osg::Texture2D*>(pStateSet->getTextureAttribute(i,osg::StateAttribute::TEXTURE));  

  4.      
  5.    unsigned int nImages = texture->getNumImages();
  6.    for (unsigned int j = 0; j < nImages; j++)
  7.    {   
  8.     std::string imageName=texture->getImage(j)->getFileName();  
  9.     std::vector<Name_PP>::const_iterator iter=_Name_PP->begin();
  10.     while(iter!=_Name_PP->end())
  11.     {
  12.      if(imageName==iter->imgName.c_str())
  13.      {
  14.        std::string temp=fileName.substr(0,fileName.size()-3);
  15.        temp=temp.append("jpg");
  16.        osg::ref_ptr<osg::Image> pImage=new osg::Image;
  17.        pImage=osgDB::readImageFile(temp);  
  18.        if(!pImage)
  19.          return false;
  20.        pImage->setFileName(temp);
  21.        texture->setImage(pImage);
  22.       
  23.      }
  24.      iter++;
  25.     }   
  26.    }
  27.   pGeometry->setTexCoordArray(0,TexCoor);  
  28.    
  29.   texture->setUnRefImageDataAfterApply(true);  
  30. }

复制代码

该用户从未签到

 楼主| 发表于 2011-4-28 16:59:05 | 显示全部楼层
补充:第19行,我使用了智能指针,的程序中每次读取完都会增加内存,但是没有及时的析构。拙略的问题,麻烦各位老师了

该用户从未签到

发表于 2011-4-29 08:32:27 | 显示全部楼层
这段程序中没有什么显著的问题,您的内存泄露可能来自别的地方

该用户从未签到

 楼主| 发表于 2011-4-29 09:40:33 | 显示全部楼层
回复 3# array


    哦,再问一下王老师,我在查看了image和texture2D的reference时,他的引用数总是为2,程序结束后也是如此,这样子正常吗?

该用户从未签到

发表于 2011-4-29 13:46:12 | 显示全部楼层
这说明您在别的地方也引用了对象,并且没有及时释放
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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