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();
}
Ejemplo n.º 2
0
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();
}