Show
Ignore:
Timestamp:
01/26/09 17:55:53 (5 years ago)
Author:
robert
Message:

Converted across to using ref_ptr<> to avoid memory leak/dangling pointer issues.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/src/osgPlugins/logo/ReaderWriterLOGO.cpp

    r9527 r9550  
    7373#endif 
    7474            setStateSet( sset ); 
    75             viewport = new osg::Viewport; 
     75            _viewport = new osg::Viewport; 
    7676            setCullCallback( new logosCullCallback ); 
    7777            _contextID = 0; 
     
    9595            float vw = 1.0; 
    9696            float vh = 1.0; 
    97             if (viewport) 
    98             { 
    99                 vx = viewport->x(); 
    100                 vy = viewport->y(); 
    101                 vw = viewport->width(); 
    102                 vh = viewport->height(); 
     97            if (_viewport.valid()) 
     98            { 
     99                vx = _viewport->x(); 
     100                vy = _viewport->y(); 
     101                vw = _viewport->width(); 
     102                vh = _viewport->height(); 
    103103            } 
    104104 
     
    114114            glColor4f( 1, 1, 1, 1 ); 
    115115 
    116             std::vector <osg::Image *>::const_iterator p; 
     116            Images::const_iterator p; 
    117117            float th = 0.0; 
    118             for( p = logos[Center].begin(); p != logos[Center].end(); p++ ) 
     118            for( p = _logos[Center].begin(); p != _logos[Center].end(); p++ ) 
     119            { 
    119120                th += (*p)->t(); 
     121            } 
    120122 
    121123            float place[][4] = { 
     
    131133            for( int i = Center; i < last_position; i++ ) 
    132134            { 
    133                 if( logos[i].size() != 0 ) 
     135                if( _logos[i].size() != 0 ) 
    134136                { 
    135137                    float x = place[i][0]; 
     
    137139                    float xi = place[i][2]; 
    138140                    float yi = place[i][3]; 
    139                     for( p = logos[i].begin(); p != logos[i].end(); p++ ) 
     141                    for( p = _logos[i].begin(); p != _logos[i].end(); p++ ) 
    140142                    { 
    141143                        osg::Image *img = *p; 
     
    161163            osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile( name.c_str() ); 
    162164            if( image.valid()) 
    163                 logos[pos].push_back( image.get() );  
     165                _logos[pos].push_back( image );  
    164166            else 
    165167                osg::notify(osg::WARN)<< "Logos::addLogo image file not found : " << name << ".\n"; 
    166168        } 
    167169 
    168         osg::Viewport *getViewport() { return viewport; } 
     170        osg::Viewport *getViewport() { return _viewport.get(); } 
    169171        void setContextID( unsigned int id ) { _contextID = id; } 
    170172 
     
    173175            int n = 0; 
    174176            for( int i = Center; i < last_position; i++ ) 
    175                 n += logos[i].size(); 
     177                n += _logos[i].size(); 
    176178            return (n != 0); 
    177179        } 
     
    187189        virtual ~Logos() {} 
    188190    private : 
    189         std::vector <osg::Image *> logos[last_position]; 
    190         osg::Viewport *viewport; 
     191        typedef std::vector < osg::ref_ptr<osg::Image> >  Images; 
     192 
     193        Images _logos[last_position]; 
     194        osg::ref_ptr<osg::Viewport> _viewport; 
    191195        unsigned int _contextID; 
    192196};