From 776099312dd87114a22409dbe3e0cd952161a844 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Tue, 16 Sep 2003 11:54:56 +0000 Subject: [PATCH] Moved a local new StateSet into cull callback as a ref_ptr to prevent memory leaks. --- .../osgshadowtexture/CreateShadowedScene.cpp | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/examples/osgshadowtexture/CreateShadowedScene.cpp b/examples/osgshadowtexture/CreateShadowedScene.cpp index 5aa328a0d..7c2de968d 100644 --- a/examples/osgshadowtexture/CreateShadowedScene.cpp +++ b/examples/osgshadowtexture/CreateShadowedScene.cpp @@ -21,7 +21,8 @@ class CreateShadowTextureCullCallback : public osg::NodeCallback _position(position), _ambientLightColor(ambientLightColor), _unit(textureUnit), - _shadowState(new osg::StateSet) + _shadowState(new osg::StateSet), + _shadowedState(new osg::StateSet) { _texture = new osg::Texture2D; _texture->setFilter(osg::Texture2D::MIN_FILTER,osg::Texture2D::LINEAR); @@ -57,6 +58,7 @@ class CreateShadowTextureCullCallback : public osg::NodeCallback osg::Vec4 _ambientLightColor; unsigned int _unit; osg::ref_ptr _shadowState; + osg::ref_ptr _shadowedState; // we need this to get round the order dependance // of eye linear tex gen... @@ -217,9 +219,6 @@ void CreateShadowTextureCullCallback::doPreRender(osg::Node& node, osgUtil::Cull // set up the stateset to decorate the shadower with the shadow texture // with the appropriate tex gen coords. - osg::StateSet* stateset = new osg::StateSet; - - MyTexGen* texgen = new MyTexGen; texgen->setMatrix(MV); texgen->setMode(osg::TexGen::EYE_LINEAR); @@ -228,14 +227,14 @@ void CreateShadowTextureCullCallback::doPreRender(osg::Node& node, osgUtil::Cull texgen->setPlane(osg::TexGen::R,osg::Plane(MVPT(0,2),MVPT(1,2),MVPT(2,2),MVPT(3,2))); texgen->setPlane(osg::TexGen::Q,osg::Plane(MVPT(0,3),MVPT(1,3),MVPT(2,3),MVPT(3,3))); - stateset->setTextureAttributeAndModes(_unit,_texture.get(),osg::StateAttribute::ON); - stateset->setTextureAttribute(_unit,texgen); - stateset->setTextureMode(_unit,GL_TEXTURE_GEN_S,osg::StateAttribute::ON); - stateset->setTextureMode(_unit,GL_TEXTURE_GEN_T,osg::StateAttribute::ON); - stateset->setTextureMode(_unit,GL_TEXTURE_GEN_R,osg::StateAttribute::ON); - stateset->setTextureMode(_unit,GL_TEXTURE_GEN_Q,osg::StateAttribute::ON); + _shadowedState->setTextureAttributeAndModes(_unit,_texture.get(),osg::StateAttribute::ON); + _shadowedState->setTextureAttribute(_unit,texgen); + _shadowedState->setTextureMode(_unit,GL_TEXTURE_GEN_S,osg::StateAttribute::ON); + _shadowedState->setTextureMode(_unit,GL_TEXTURE_GEN_T,osg::StateAttribute::ON); + _shadowedState->setTextureMode(_unit,GL_TEXTURE_GEN_R,osg::StateAttribute::ON); + _shadowedState->setTextureMode(_unit,GL_TEXTURE_GEN_Q,osg::StateAttribute::ON); - cv.pushStateSet(stateset); + cv.pushStateSet(_shadowedState.get()); // must traverse the shadower traverse(&node,&cv);