diff --git a/src/osgViewer/CompositeViewer.cpp b/src/osgViewer/CompositeViewer.cpp index 15a2a8b15..cbd120fc3 100644 --- a/src/osgViewer/CompositeViewer.cpp +++ b/src/osgViewer/CompositeViewer.cpp @@ -119,6 +119,8 @@ bool CompositeViewer::readConfiguration(const std::string& filename) void CompositeViewer::addView(osgViewer::View* view) { + if (!view) return; + bool alreadyRealized = isRealized(); bool threadsWereRuinning = _threadsRunning; @@ -128,6 +130,18 @@ void CompositeViewer::addView(osgViewer::View* view) view->_viewerBase = this; + if (view->getSceneData()) + { + // make sure that existing scene graph objects are allocated with thread safe ref/unref + if (getThreadingModel()!=ViewerBase::SingleThreaded) + { + view->getSceneData()->setThreadSafeRefUnref(true); + } + + // update the scene graph so that it has enough GL object buffer memory for the graphics contexts that will be using it. + view->getSceneData()->resizeGLObjectBuffers(osg::DisplaySettings::instance()->getMaxNumberOfGraphicsContexts()); + } + view->setFrameStamp(_frameStamp.get()); if (alreadyRealized) diff --git a/src/osgViewer/View.cpp b/src/osgViewer/View.cpp index 8ec7c456a..7f30d6184 100644 --- a/src/osgViewer/View.cpp +++ b/src/osgViewer/View.cpp @@ -278,7 +278,8 @@ void View::setSceneData(osg::Node* node) getSceneData()->accept(sodv); // make sure that existing scene graph objects are allocated with thread safe ref/unref - if (getViewerBase()->getThreadingModel()!=ViewerBase::SingleThreaded) + if (getViewerBase() && + getViewerBase()->getThreadingModel()!=ViewerBase::SingleThreaded) { getSceneData()->setThreadSafeRefUnref(true); }