Just imagine this scenario of a DrawCallBack
struct SnapImage : public osg::Camera::DrawCallback
{
SnapImage(unsigned int format):
_snapImage(false),_format(format)
{
_image = new osg::Image;
_image->setPacking(4);
}
~SnapImage(){};
virtual void operator () (osg::RenderInfo& renderInfo) const
{
if (!_snapImage) return;
osg::notify(osg::NOTICE)<<"Camera callback"<<std::endl;
osg::Camera* camera = renderInfo.getCurrentCamera();
osg::Viewport* viewport = camera ? camera->getViewport() : 0;
if (viewport && _image.valid())
{
_image->readPixels(int(viewport->x()),int(viewport->y()),int(viewport->width()),int(viewport->height()),
_format,
GL_UNSIGNED_BYTE);
osg::notify(osg::NOTICE)<<"Taken screenshot.." <<std::endl;
}
_snapImage = false;
}
mutable bool _snapImage;
mutable unsigned int _format;
mutable osg::ref_ptr<osg::Image> _image;
};
This will likely crash when width is not a multiple of 4. I not calling
setPacking() after the image has been allocated.
I wanted a packing of 4 as this matches the "packing" of BMP
------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=46659#46659
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org