From 38697140054e4d5c058633b40910bbb94d594191 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Tue, 25 Apr 2017 20:26:26 +0100 Subject: [PATCH] Added multiple view support to osgautotransform for testing multi-views --- .../osgautotransform/osgautotransform.cpp | 97 +++++++++++++++++-- 1 file changed, 91 insertions(+), 6 deletions(-) diff --git a/examples/osgautotransform/osgautotransform.cpp b/examples/osgautotransform/osgautotransform.cpp index 0d1c1bb9e..118dd6130 100644 --- a/examples/osgautotransform/osgautotransform.cpp +++ b/examples/osgautotransform/osgautotransform.cpp @@ -18,7 +18,9 @@ #include #include -#include +#include +#include +#include #include #include @@ -193,13 +195,96 @@ osg::Node* createScene() return root; } -int main(int, char**) +osgViewer::View* createView(osg::ref_ptr scenegraph, osg::ref_ptr gc, unsigned int x, unsigned int y, unsigned int width, unsigned int height) { - // construct the viewer. - osgViewer::Viewer viewer; + OSG_NOTICE<<"createView(....,x="<getCamera()->setGraphicsContext(gc); + view->getCamera()->setViewport(new osg::Viewport(x, y, width, height)); + //view->getCamera()->setProjectionMatrixAsPerspective(30.0, double(width) / double(height), 1.0, 1000.0); + view->setCameraManipulator(new osgGA::TrackballManipulator); + view->setSceneData(scenegraph); + return view; +} + +int main(int argc, char** argv) +{ + osg::ArgumentParser arguments(&argc, argv); + + // construct the viewer. + osgViewer::CompositeViewer viewer(arguments); + + + // create the scene graph that contains osg::AutoTransform nodes, see about for implementation details + osg::ref_ptr scenegraph = createScene(); + + unsigned int numViews = 1; + while (arguments.read("-n",numViews)) {} + + if (numViews<=1) + { + osgViewer::View* view = new osgViewer::View; + view->setUpViewAcrossAllScreens(); + view->setSceneData(scenegraph.get()); + view->setCameraManipulator(new osgGA::TrackballManipulator); + view->addEventHandler( new osgViewer::StatsHandler ); + viewer.addView(view); + } + else + { + osg::GraphicsContext::WindowingSystemInterface* wsi = osg::GraphicsContext::getWindowingSystemInterface(); + if (!wsi) + { + osg::notify(osg::NOTICE)<<"Error, no WindowSystemInterface available, cannot create windows."<getScreenResolution(osg::GraphicsContext::ScreenIdentifier(0), width, height); + + unsigned int x=0, y=0; + while(arguments.read("--window", x, y, width, height)) {} + + osg::ref_ptr traits = new osg::GraphicsContext::Traits; + traits->x = x; + traits->y = y; + traits->width = width; + traits->height = height; + traits->windowDecoration = true; + traits->doubleBuffer = true; + traits->sharedContext = 0; + + + osg::ref_ptr gc = osg::GraphicsContext::createGraphicsContext(traits.get()); + if (!gc) + { + osg::notify(osg::NOTICE)<<" GraphicsWindow has not been created successfully."<addEventHandler( new osgViewer::StatsHandler ); + + } // run the viewers frame loop return viewer.run();