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

This commit is contained in:
Robert Osfield 2009-01-26 16:55:53 +00:00
parent 69f9377093
commit c7bf776bcb

View File

@ -72,7 +72,7 @@ class Logos: public osg::Drawable
sset->setRenderBinDetails( StateSet::TRANSPARENT_BIN + 1 , "RenderBin" );
#endif
setStateSet( sset );
viewport = new osg::Viewport;
_viewport = new osg::Viewport;
setCullCallback( new logosCullCallback );
_contextID = 0;
}
@ -94,12 +94,12 @@ class Logos: public osg::Drawable
float vy = 0.0;
float vw = 1.0;
float vh = 1.0;
if (viewport)
if (_viewport.valid())
{
vx = viewport->x();
vy = viewport->y();
vw = viewport->width();
vh = viewport->height();
vx = _viewport->x();
vy = _viewport->y();
vw = _viewport->width();
vh = _viewport->height();
}
glMatrixMode( GL_PROJECTION );
@ -113,10 +113,12 @@ class Logos: public osg::Drawable
glColor4f( 1, 1, 1, 1 );
std::vector <osg::Image *>::const_iterator p;
Images::const_iterator p;
float th = 0.0;
for( p = logos[Center].begin(); p != logos[Center].end(); p++ )
for( p = _logos[Center].begin(); p != _logos[Center].end(); p++ )
{
th += (*p)->t();
}
float place[][4] = {
{ vw*0.5, ((vh*0.5) + th*0.5), -0.5, -1.0 },
@ -130,13 +132,13 @@ class Logos: public osg::Drawable
for( int i = Center; i < last_position; i++ )
{
if( logos[i].size() != 0 )
if( _logos[i].size() != 0 )
{
float x = place[i][0];
float y = place[i][1];
float xi = place[i][2];
float yi = place[i][3];
for( p = logos[i].begin(); p != logos[i].end(); p++ )
for( p = _logos[i].begin(); p != _logos[i].end(); p++ )
{
osg::Image *img = *p;
x = place[i][0] + xi * img->s();
@ -160,19 +162,19 @@ class Logos: public osg::Drawable
{
osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile( name.c_str() );
if( image.valid())
logos[pos].push_back( image.get() );
_logos[pos].push_back( image );
else
osg::notify(osg::WARN)<< "Logos::addLogo image file not found : " << name << ".\n";
}
osg::Viewport *getViewport() { return viewport; }
osg::Viewport *getViewport() { return _viewport.get(); }
void setContextID( unsigned int id ) { _contextID = id; }
bool hasLogos()
{
int n = 0;
for( int i = Center; i < last_position; i++ )
n += logos[i].size();
n += _logos[i].size();
return (n != 0);
}
@ -186,8 +188,10 @@ class Logos: public osg::Drawable
virtual ~Logos() {}
private :
std::vector <osg::Image *> logos[last_position];
osg::Viewport *viewport;
typedef std::vector < osg::ref_ptr<osg::Image> > Images;
Images _logos[last_position];
osg::ref_ptr<osg::Viewport> _viewport;
unsigned int _contextID;
};