int main( int argc, char **argv ) { osg::ArgumentParser arguments(&argc,argv); osgViewer::Viewer viewer(arguments); viewer.setThreadingModel(osgViewer::Viewer::SingleThreaded); // use new #pragma(tic) shader composition. osg::ref_ptr<osg::Node> scenegraph = createNewShaderCompositionScene(arguments); if (!scenegraph) return 1; osg::ref_ptr<osg::StateSet> stateSet = scenegraph->getOrCreateStateSet(); osg::MatrixfArrayUniform* LRuniform = stateSet->getOrCreateUniform<osg::MatrixfArrayUniform>("transform_block"); LRuniform->resize(2); viewer.setSceneData(scenegraph.get()); viewer.realize(); double width = viewer.getCamera()->getViewport()->width(); double height = viewer.getCamera()->getViewport()->height(); stateSet->setAttribute(new osg::ViewportIndexed(0, 0.0, 0.0, width * 0.5, height)); // left stateSet->setAttribute(new osg::ViewportIndexed(1, width * 0.5, 0.0, width * 0.5, height)); // right osg::Camera *cam = viewer.getCamera(); osg::Matrix matrixL = cam->getProjectionMatrix(); LRuniform->setElement(0, matrixL); double l, r, b, t, n, f; matrixL.getFrustum(l, r, b, t, n, f); osg::Matrix matrixR; matrixR.makeFrustum(l * 2.0, r* 2.0, b* 2.0, t* 2.0, n, f); LRuniform->setElement(1, matrixR); return viewer.run(); }
int main( int argc, char **argv ) { osg::ArgumentParser arguments(&argc,argv); osgViewer::Viewer viewer(arguments); viewer.setThreadingModel(osgViewer::Viewer::SingleThreaded); if (arguments.read("--old")) { // use deprecated shader composition infrastructure osg::ref_ptr<osg::Node> scenegraph = createOldShaderCompositionScene(arguments); if (!scenegraph) return 1; viewer.setSceneData(scenegraph.get()); viewer.realize(); // enable shader composition osgViewer::Viewer::Windows windows; viewer.getWindows(windows); for(osgViewer::Viewer::Windows::iterator itr = windows.begin(); itr != windows.end(); ++itr) { (*itr)->getState()->setShaderCompositionEnabled(true); } } else { // use new #pragma(tic) shader composition. osg::ref_ptr<osg::Node> scenegraph = createNewShaderCompositionScene(arguments); if (!scenegraph) return 1; viewer.setSceneData(scenegraph.get()); } return viewer.run(); }