Hi,

I spent the whole day chasing a weird memory leak on my GPU. 
The following code is part of a (not working well) FBO render solution.


Code:

#include <osg/CameraNode>
#include <osgViewer/ViewerEventHandlers>


void foo()
{
   osg::ref_ptr<osg::Camera> c = new osg::Camera();

   c->setCullingMode(osgUtil::CullVisitor::VIEW_FRUSTUM_CULLING);  // Disable 
SMALL_FEATURE_CULLING
   c->setComputeNearFarMode(osgUtil::CullVisitor::DO_NOT_COMPUTE_NEAR_FAR);
   c->setClearColor( osg::Vec4(1.0, 1.0, 1.0, 0.0) ); // default white
   c->setClearMask(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
   c->setReferenceFrame(osg::Transform::ABSOLUTE_RF);
   c->setRenderTargetImplementation(osg::Camera::FRAME_BUFFER_OBJECT);
   c->setRenderOrder(osg::Camera::PRE_RENDER);
   osg::ref_ptr<osg::Group> topg = new osg::Group;

   topg->addChild( c);

   osgViewer::Viewer viewer;
   viewer.setSceneData(topg);
   viewer.realize();
   viewer.frame();

}

int main(int argc, char* argv[])
{
   {
      {
         foo();
      }
   }

        return 0;
}




When I run this with dDebugger I get  memory leaks.

Call stack:

> 
> osgViewer::GraphicsWindow::makeContextCurrentImplementation - 
> osg55-osgViewerd.dll
> osgViewer::GraphicsWindow::makeContextCurrentImplementation - 
> osg55-osgViewerd.dll
> osgViewer::GraphicsWindow::makeContextCurrentImplementation - 
> osg55-osgViewerd.dll
> osgViewer::GraphicsWindow::makeContextCurrentImplementation - 
> osg55-osgViewerd.dll
> osg::LineSegment::start - osg55-osgd.dll
> osgViewer::GraphicsWindow::makeContextCurrentImplementation - 
> osg55-osgViewerd.dll
> osgViewer::GraphicsWindow::makeContextCurrentImplementation - 
> osg55-osgViewerd.dll
> foo - osg_viewer_leak_test.cpp, line 22
> main - osg_viewer_leak_test.cpp, line 31
> __tmainCRTStartup - crtexe.c, line 597
> mainCRTStartup - crtexe.c, line 413
> RegisterWaitForInputIdle - kernel32.dll
> 


These are two render buffers and one FBO

when I change the 

Code:

 c->setRenderTargetImplementation(osg::Camera::FRAME_BUFFER_OBJECT);


from FRAME_BUFFER_OBJECT to FRAME_BUFFER ->

Code:

 ->setRenderTargetImplementation(osg::Camera::FRAME_BUFFER);



No leak occurs.

Win XP Pro, SP 2, GeForce GTX 285, Driver 191.07
gDebugger 5.2.1

------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=28363#28363





_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to