[osg-users] how to release loaded model
Robert Osfield
robert.osfield at gmail.com
Thu Jul 24 03:16:27 PDT 2008
Hi Su,
You shouldn't be called ref_ptr.release() in this context, you should
be just setting the ref_ptr<> to null.
ref_ptr::release() is a specialist helper method with does an
unref_noDelete on the referenced object - it deliberately doesn't
delete the object that it's unrefecing. This functionality is
required for functions that use ref_ptr<> locally but then have to
pass a C* point of the object.
Robert.
On Thu, Jul 24, 2008 at 10:45 AM, su hu <tttsuhu at gmail.com> wrote:
> Hi all.
>
> I need to release loaded model and reload other model. I did as follow:
>
>
> osgViewer::Viewer Viewer;
> osg::ref_ptr<osg::Group> root = new osg::Group;
> osg::ref_ptr<osg::Group> ModelRoot = new osg::Group;
> osg::ref_ptr<osg::Node> loadedModel;
> ...
> Viewer.setSceneData(root.get()
> );
> root->addChild(ModelRoot.get());
> ...
>
> //in frame loop
> .....
> switch(CMD)
> {
> case LOAD_SCENE:
> {
>
> loadedModel = osgDB::readNodeFile(CMD_SceneFileName);
>
> if (loadedModel.valid())
> {
> ModelRoot->addChild(loadedModel.get());
> }
> break;
> }
> case RELEASE_SCENE:
> {
> if(ModelRoot.valid())
> {
> ModelRoot->removeChildren(0,ModelRoot->getNumChildren());
> }
>
> loadedModel.release();
>
> break;
> }
>
> }
>
> ...
>
> The loadedModel is added to ModelRoot and is not added to any other group.
>
> Models could be loaded and "released". But I found used memory was not
> reduced at all after "RELEASE_SCENE" was executed. After loading and
> releasing several times, used memory is more than 1GB and program is
> freezed. I want to know the reason and how to improve it.
>
> Much appreciation to any reply.
>
>
> Regards,
>
> Su Hu
> _______________________________________________
> osg-users mailing list
> osg-users at lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
>
More information about the osg-users
mailing list