Hi Robert, I am using code extracted from the osgscreencapture example to generate small thumbnails of loaded shapes. It all work is very nicely except that it is leaking memory on each usage. I have commented out our code and based on that and a few other tests I am fairly convinced that the leak is the pixel buffer (GraphicsContext) itself.
osg::ref_ptr<osg::GraphicsContext> createPixelBuffer(int aSize, int aNumSamples) { osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits; traits->x = 0; traits->y = 0; traits->width = aSize; traits->height = aSize; traits->red = 8; traits->green = 8; traits->blue = 8; traits->alpha = 8; traits->windowDecoration = false; traits->pbuffer = true; traits->doubleBuffer = true; traits->sharedContext = 0; traits->readDISPLAY(); traits->setUndefinedScreenDetailsToDefaultScreen(); if (aNumSamples != 0) { traits->sampleBuffers = 1; traits->samples = aNumSamples; } return osg::GraphicsContext::createGraphicsContext(traits.get()); } bool generateThumbnail(const std::string & aFilePath, const std::string & aThumbnailPath, const std::string & aResourcesPath, int aSize, bool aTopDownView) { auto pixelBuffer = createPixelBuffer(aSize, 8); if (!pixelBuffer) { pixelBuffer = createPixelBuffer(aSize, 0); } // const auto shape = loadShapeOrError(aFilePath); osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer; auto camera = viewer->getCamera(); camera->setGraphicsContext(pixelBuffer.get()); camera->setViewport(new osg::Viewport(0, 0, aSize, aSize)); camera->setDrawBuffer(GL_BACK); camera->setReadBuffer(GL_BACK); // setupShapeViewer(viewer, shape.get(), aResourcesPath, aTopDownView); // osg::ref_ptr<ImageGrabber> grabber = new ImageGrabber(aThumbnailPath); // viewer.getCamera()->setPostDrawCallback(grabber.get()); viewer->realize(); viewer->frame(); return true; }; If I call the above code repeatedly then it leaks and I cannot understand why since everything is in osg:ref_ptr<>. The Viewer was a concrete instance originally but that makes no difference. I have also tried using a slave camera as in the original example. I have a nasty workaround of extracting a shared pixel buffer and re-using it - but ideally this code would be called using std::async, to have multiple thumbnails generated in parallel, so that is going to be tricky. Kinda hoping you can point to my stupid mistake in how I am using osg ;) Thanks, Brian -- You received this message because you are subscribed to the Google Groups "OpenSceneGraph Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to osg-users+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/osg-users/acdd2682-5b66-4064-aed1-66d2e5c9e3d5o%40googlegroups.com.
_______________________________________________ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org