diff --git a/examples/osgshadow/osgshadow.cpp b/examples/osgshadow/osgshadow.cpp index dc664230f..be04abab6 100644 --- a/examples/osgshadow/osgshadow.cpp +++ b/examples/osgshadow/osgshadow.cpp @@ -376,6 +376,7 @@ int main(int argc, char** argv) } + osg::DisplaySettings::instance()->setMinimumNumStencilBits(8); viewer.setSceneData(group.get()); diff --git a/examples/osgstereoimage/osgstereoimage.cpp b/examples/osgstereoimage/osgstereoimage.cpp index 6f83d0067..ad3d352f8 100644 --- a/examples/osgstereoimage/osgstereoimage.cpp +++ b/examples/osgstereoimage/osgstereoimage.cpp @@ -475,8 +475,6 @@ int main( int argc, char **argv ) //osgDB::writeNodeFile(*rootNode,"test.osg"); - // set the scene to render - viewer.setSceneData(rootNode.get()); viewer.getCamera()->setCullMask(0xffffffff); viewer.getCamera()->setCullMaskLeft(0x00000001); @@ -485,6 +483,9 @@ int main( int argc, char **argv ) // set up the use of stereo by default. osg::DisplaySettings::instance()->setStereo(true); + // set the scene to render + viewer.setSceneData(rootNode.get()); + // create the windows and run the threads. viewer.realize(); diff --git a/include/osgViewer/View b/include/osgViewer/View index 12d352d71..6eaf0115f 100644 --- a/include/osgViewer/View +++ b/include/osgViewer/View @@ -50,6 +50,17 @@ class OSGVIEWER_EXPORT View : public osg::View, public osgGA::GUIActionAdapter EventHandlers& getEventHandlers() { return _eventHandlers; } const EventHandlers& getEventHandlers() const { return _eventHandlers; } + + /** Set the DsplaySettings object associated with this view.*/ + void setDisplaySettings(osg::DisplaySettings* ds) { _displaySettings = ds; } + + /** Set the DsplaySettings object associated with this view.*/ + osg::DisplaySettings* getDisplaySettings() { return _displaySettings.get(); } + + /** Set the DsplaySettings object associated with this view.*/ + const osg::DisplaySettings* getDisplaySettings() const { return _displaySettings.get(); } + + /** Convinience method for creating slave Cameras and associated GraphicsWindows across all screens.*/ void setUpViewAcrossAllScreens(); @@ -87,6 +98,8 @@ class OSGVIEWER_EXPORT View : public osg::View, public osgGA::GUIActionAdapter typedef std::map, osg::ref_ptr > CameraSceneViewMap; CameraSceneViewMap _cameraSceneViewMap; + + osg::ref_ptr _displaySettings; }; } diff --git a/src/osgViewer/View.cpp b/src/osgViewer/View.cpp index 76ddead49..c24ac6ace 100644 --- a/src/osgViewer/View.cpp +++ b/src/osgViewer/View.cpp @@ -71,6 +71,8 @@ void View::setUpViewAcrossAllScreens() return; } + osg::DisplaySettings* ds = _displaySettings.valid() ? _displaySettings.get() : osg::DisplaySettings::instance(); + double fovy, aspectRatio, zNear, zFar; _camera->getProjectionMatrixAsPerspective(fovy, aspectRatio, zNear, zFar); @@ -87,6 +89,8 @@ void View::setUpViewAcrossAllScreens() traits->y = 0; traits->width = width; traits->height = height; + traits->alpha = ds->getMinimumNumAlphaBits(); + traits->stencil = ds->getMinimumNumStencilBits(); traits->windowDecoration = false; traits->doubleBuffer = true; traits->sharedContext = 0; @@ -134,6 +138,8 @@ void View::setUpViewAcrossAllScreens() traits->y = 0; traits->width = width; traits->height = height; + traits->alpha = ds->getMinimumNumAlphaBits(); + traits->stencil = ds->getMinimumNumStencilBits(); traits->windowDecoration = false; traits->doubleBuffer = true; traits->sharedContext = 0; @@ -180,6 +186,8 @@ void View::setUpViewAcrossAllScreens() traits->y = 0; traits->width = width; traits->height = height; + traits->alpha = ds->getMinimumNumAlphaBits(); + traits->stencil = ds->getMinimumNumStencilBits(); traits->windowDecoration = false; traits->doubleBuffer = true; traits->sharedContext = 0; @@ -225,6 +233,8 @@ void View::setUpViewOnSingleScreen(unsigned int screenNum) return; } + osg::DisplaySettings* ds = _displaySettings.valid() ? _displaySettings.get() : osg::DisplaySettings::instance(); + unsigned int width, height; wsi->getScreenResolution(osg::GraphicsContext::ScreenIdentifier(screenNum), width, height); @@ -233,6 +243,8 @@ void View::setUpViewOnSingleScreen(unsigned int screenNum) traits->y = 0; traits->width = width; traits->height = height; + traits->alpha = ds->getMinimumNumAlphaBits(); + traits->stencil = ds->getMinimumNumStencilBits(); traits->windowDecoration = false; traits->doubleBuffer = true; traits->sharedContext = 0; diff --git a/src/osgViewer/Viewer.cpp b/src/osgViewer/Viewer.cpp index a69b16057..f952021f2 100644 --- a/src/osgViewer/Viewer.cpp +++ b/src/osgViewer/Viewer.cpp @@ -453,6 +453,7 @@ void Viewer::setUpRenderingSupport() _cameraSceneViewMap[_camera] = sceneView; sceneView->setDefaults(); + sceneView->setDisplaySettings(_displaySettings.get()); sceneView->setCamera(_camera.get()); sceneView->setState(_camera->getGraphicsContext()->getState()); sceneView->setSceneData(getSceneData()); @@ -471,6 +472,7 @@ void Viewer::setUpRenderingSupport() sceneView->setDefaults(); sceneView->setCamera(slave._camera.get()); + sceneView->setDisplaySettings(_displaySettings.get()); sceneView->setState(slave._camera->getGraphicsContext()->getState()); sceneView->setSceneData(getSceneData()); sceneView->setFrameStamp(frameStamp);