diff --git a/examples/osgcamera/osgcamera.cpp b/examples/osgcamera/osgcamera.cpp index a3feb9e70..26d18c4e5 100644 --- a/examples/osgcamera/osgcamera.cpp +++ b/examples/osgcamera/osgcamera.cpp @@ -3,79 +3,12 @@ #include #include #include +#include #include #include #include #include -class ThreadingHandler : public osgGA::GUIEventHandler -{ -public: - - ThreadingHandler() {} - - bool handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa) - { - osgViewer::Viewer* viewer = dynamic_cast(&aa); - if (!viewer) return false; - - switch(ea.getEventType()) - { - case(osgGA::GUIEventAdapter::KEYUP): - { - if (ea.getKey()=='m') - { - switch(viewer->getThreadingModel()) - { - case(osgViewer::Viewer::SingleThreaded): - viewer->setThreadingModel(osgViewer::Viewer::CullDrawThreadPerContext); - osg::notify(osg::NOTICE)<<"Threading model 'CullDrawThreadPerContext' selected."<setThreadingModel(osgViewer::Viewer::DrawThreadPerContext); - osg::notify(osg::NOTICE)<<"Threading model 'DrawThreadPerContext' selected."<setThreadingModel(osgViewer::Viewer::CullThreadPerCameraDrawThreadPerContext); - osg::notify(osg::NOTICE)<<"Threading model 'CullThreadPerCameraDrawThreadPerContext' selected."<setThreadingModel(osgViewer::Viewer::SingleThreaded); - osg::notify(osg::NOTICE)<<"Threading model 'SingleThreaded' selected."<setThreadingModel(viewer->suggestBestThreadingModel()); - osg::notify(osg::NOTICE)<<"Threading model 'AutomaticSelection' selected."<getEndBarrierPosition()) - { - case(osgViewer::Viewer::BeforeSwapBuffers): - viewer->setEndBarrierPosition(osgViewer::Viewer::AfterSwapBuffers); - osg::notify(osg::NOTICE)<<"Threading model 'AfterSwapBuffers' selected."<setEndBarrierPosition(osgViewer::Viewer::BeforeSwapBuffers); - osg::notify(osg::NOTICE)<<"Threading model 'BeforeSwapBuffers' selected."< traits = new osg::GraphicsContext::Traits; - traits->screenNum = i / 3; + traits->screenNum = multipleScreens ? i / 3 : 0; traits->x = (i*width)/numCameras; traits->y = 0; traits->width = width/numCameras-1; @@ -247,7 +180,7 @@ int main( int argc, char **argv ) } } - osgViewer::Viewer viewer; + osgViewer::Viewer viewer(arguments); while (arguments.read("-s")) { viewer.setThreadingModel(osgViewer::Viewer::SingleThreaded); } while (arguments.read("-g")) { viewer.setThreadingModel(osgViewer::Viewer::CullDrawThreadPerContext); } @@ -260,10 +193,14 @@ int main( int argc, char **argv ) // alternative viewer window setups. while (arguments.read("-1")) { singleWindowMultipleCameras(viewer); } - while (arguments.read("-2")) { multipleWindowMultipleCameras(viewer); } + while (arguments.read("-2")) { multipleWindowMultipleCameras(viewer, false); } + while (arguments.read("-3")) { multipleWindowMultipleCameras(viewer, true); } if (apm.valid()) viewer.setCameraManipulator(apm.get()); else viewer.setCameraManipulator( new osgGA::TrackballManipulator() ); + + viewer.addEventHandler(new osgViewer::StatsHandler); + viewer.addEventHandler(new osgViewer::ThreadingHandler); std::string configfile; while (arguments.read("--config", configfile)) @@ -299,6 +236,9 @@ int main( int argc, char **argv ) // load the scene. osg::ref_ptr loadedModel = osgDB::readNodeFiles(arguments); + + if (!loadedModel) loadedModel = osgDB::readNodeFile("cow.osg"); + if (!loadedModel) { std::cout << argv[0] <<": No data loaded." << std::endl;