diff --git a/include/osgViewer/View b/include/osgViewer/View index cbe4a5ee4..d618127d7 100644 --- a/include/osgViewer/View +++ b/include/osgViewer/View @@ -60,10 +60,7 @@ class OSGVIEWER_EXPORT View : public osg::View, public osgGA::GUIActionAdapter const Scene* getScene() const { return _scene.get(); } /** Set the scene graph that the View will use.*/ - inline void setSceneData(osg::Node* node) { setSceneData(osg::ref_ptr(node)); } - - /** Set the scene graph that the View will use.*/ - virtual void setSceneData(osg::ref_ptr node); + virtual void setSceneData(osg::Node* node); /** Get the View's scene graph.*/ osg::Node* getSceneData() { return _scene.valid() ? _scene->getSceneData() : 0; } diff --git a/src/osgViewer/View.cpp b/src/osgViewer/View.cpp index b4d440ab1..e2ca602c9 100644 --- a/src/osgViewer/View.cpp +++ b/src/osgViewer/View.cpp @@ -243,13 +243,13 @@ void View::setStartTick(osg::Timer_t tick) _startTick = tick; } -void View::setSceneData(osg::ref_ptr node) +void View::setSceneData(osg::Node* node) { if (node==_scene->getSceneData()) return; - osg::ref_ptr scene = Scene::getScene(node.get()); + osg::ref_ptr scene = Scene::getScene(node); - if (scene.valid()) + if (scene) { osg::notify(osg::INFO)<<"View::setSceneData() Sharing scene "< node) osg::notify(osg::INFO)<<"View::setSceneData() Reusing exisitng scene"<<_scene.get()<setSceneData(node.get()); + _scene->setSceneData(node); } if (getSceneData()) @@ -276,6 +276,17 @@ void View::setSceneData(osg::ref_ptr node) // the scene graph from being run in parallel. osgUtil::Optimizer::StaticObjectDetectionVisitor sodv; getSceneData()->accept(sodv); + + // make sure that existing scene graph objects are allocated with thread safe ref/unref + if (getViewerBase()->getThreadingModel()!=ViewerBase::SingleThreaded) + { + osg::notify(osg::NOTICE)<<"Making sure we have set the thread safe ref/unref"<setThreadSafeRefUnref(true); + } + + // update the scene graph so that it has enough GL object buffer memory for the graphics contexts that will be using it. + getSceneData()->resizeGLObjectBuffers(osg::DisplaySettings::instance()->getMaxNumberOfGraphicsContexts()); } computeActiveCoordinateSystemNodePath(); diff --git a/src/osgViewer/Viewer.cpp b/src/osgViewer/Viewer.cpp index 5aaed116e..ea6df831c 100644 --- a/src/osgViewer/Viewer.cpp +++ b/src/osgViewer/Viewer.cpp @@ -360,16 +360,6 @@ void Viewer::setSceneData(osg::Node* node) setReferenceTime(0.0); View::setSceneData(node); - - if (_threadingModel!=SingleThreaded && getSceneData()) - { - // make sure that existing scene graph objects are allocated with thread safe ref/unref - 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. - getSceneData()->resizeGLObjectBuffers(osg::DisplaySettings::instance()->getMaxNumberOfGraphicsContexts()); - } - } GraphicsWindowEmbedded* Viewer::setUpViewerAsEmbeddedInWindow(int x, int y, int width, int height) diff --git a/src/osgWrappers/osgViewer/View.cpp b/src/osgWrappers/osgViewer/View.cpp index fbe18975c..c5673b09a 100644 --- a/src/osgWrappers/osgViewer/View.cpp +++ b/src/osgWrappers/osgViewer/View.cpp @@ -112,13 +112,8 @@ BEGIN_OBJECT_REFLECTOR(osgViewer::View) "", ""); I_Method1(void, setSceneData, IN, osg::Node *, node, - Properties::NON_VIRTUAL, - __void__setSceneData__osg_Node_P1, - "Set the scene graph that the View will use. ", - ""); - I_Method1(void, setSceneData, IN, osg::ref_ptr< osg::Node >, node, Properties::VIRTUAL, - __void__setSceneData__osg_ref_ptrT1_osg_Node_, + __void__setSceneData__osg_Node_P1, "Set the scene graph that the View will use. ", ""); I_Method0(osg::Node *, getSceneData,