Added camera final callback attachment code.

This commit is contained in:
Robert Osfield
2008-05-22 15:43:01 +00:00
parent 0a3737eb2c
commit fd76054eac

View File

@@ -29,6 +29,68 @@
#include <iostream>
class WindowCaptureCallback : public osg::Camera::DrawCallback
{
public:
WindowCaptureCallback()
{
}
virtual void operator () (osg::RenderInfo& renderInfo) const
{
osg::GraphicsContext* gc = renderInfo.getState()->getGraphicsContext();
osg::notify(osg::NOTICE)<<"Capture screen image "<<gc<<std::endl;
}
};
void addCallbackToViewer(osgViewer::ViewerBase& viewer, WindowCaptureCallback* callback)
{
osgViewer::ViewerBase::Windows windows;
viewer.getWindows(windows);
for(osgViewer::ViewerBase::Windows::iterator itr = windows.begin();
itr != windows.end();
++itr)
{
osgViewer::GraphicsWindow* window = *itr;
osg::GraphicsContext::Cameras& cameras = window->getCameras();
osg::Camera* lastCamera = 0;
for(osg::GraphicsContext::Cameras::iterator cam_itr = cameras.begin();
cam_itr != cameras.end();
++cam_itr)
{
if (lastCamera)
{
if ((*cam_itr)->getRenderOrder() > (*cam_itr)->getRenderOrder())
{
lastCamera = (*cam_itr);
}
if ((*cam_itr)->getRenderOrder() == lastCamera->getRenderOrder() &&
(*cam_itr)->getRenderOrderNum() >= lastCamera->getRenderOrderNum())
{
lastCamera = (*cam_itr);
}
}
else
{
lastCamera = *cam_itr;
}
}
if (lastCamera)
{
osg::notify(osg::NOTICE)<<"Last camera "<<lastCamera<<std::endl;
lastCamera->setFinalDrawCallback(callback);
}
else
{
osg::notify(osg::NOTICE)<<"No camera found"<<std::endl;
}
}
}
int main(int argc, char** argv)
{
// use an ArgumentParser object to manage the program arguments.
@@ -135,6 +197,8 @@ int main(int argc, char** argv)
viewer.setSceneData( loadedModel.get() );
viewer.realize();
addCallbackToViewer(viewer, new WindowCaptureCallback);
return viewer.run();