From dc83e399a931df77b5d812995328a2f96cbe3e5e Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Mon, 20 Jan 2003 20:33:50 +0000 Subject: [PATCH] Improvements to osgProducer lib, in particular adding a mutex lock to the init() call in SceneView to prevent init running multi-threaded. --- include/osgProducer/SceneHandler | 3 +++ src/osgProducer/SceneHandler.cpp | 34 ++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/include/osgProducer/SceneHandler b/include/osgProducer/SceneHandler index e7bb8857f..1b12a2ba4 100644 --- a/include/osgProducer/SceneHandler +++ b/include/osgProducer/SceneHandler @@ -18,6 +18,9 @@ class OSGPRODUCER_EXPORT SceneHandler : public Producer::Camera::SceneHandler, p SceneHandler( osg::DisplaySettings *ds = NULL); + /// override the init method to force it be run one at a time. + virtual void init(); + void cull(Producer::Camera &cam); void draw(Producer::Camera &); diff --git a/src/osgProducer/SceneHandler.cpp b/src/osgProducer/SceneHandler.cpp index c5bba4a0e..1be113a9b 100644 --- a/src/osgProducer/SceneHandler.cpp +++ b/src/osgProducer/SceneHandler.cpp @@ -3,6 +3,7 @@ //as published by the Free Software Foundation. #include +#include using namespace osgUtil; using namespace osgProducer; @@ -14,8 +15,28 @@ SceneHandler::SceneHandler( osg::DisplaySettings *ds = NULL) : pm = new osg::RefMatrix; } +void SceneHandler::init() +{ + static Producer::Mutex mutex; + osg::notify(osg::INFO)<<"entering "<set(cam.getProjectionMatrix()); mm->set(cam.getPositionAndAttitudeMatrix()); setProjectionMatrix( pm.get() ); @@ -28,11 +49,24 @@ void SceneHandler::cull(Producer::Camera &cam) setViewport( x, y, w, h ); SceneView::cull(); + +// osg::notify(osg::INFO)<<" done "<