diff --git a/include/osgText/Font b/include/osgText/Font index c9a561b4d..4a038276c 100644 --- a/include/osgText/Font +++ b/include/osgText/Font @@ -26,6 +26,8 @@ #include #include +#include + namespace osgText { class Font; @@ -159,6 +161,11 @@ public: * for all graphics contexts. */ virtual void releaseGLObjects(osg::State* state=0) const; + typedef OpenThreads::Mutex FontMutex; + + /** Get the mutex that enables the serialization of calls to this font.*/ + FontMutex& getSerializeFontCallsMutex() const { return _serializeFontCallsMutex; } + protected: virtual ~Font(); @@ -172,6 +179,7 @@ protected: typedef std::pair< unsigned int, unsigned int > SizePair; typedef std::map< SizePair, GlyphMap > SizeGlyphMap; + mutable FontMutex _serializeFontCallsMutex; osg::ref_ptr _texenv; osg::ref_ptr _stateset; diff --git a/src/osgText/Text.cpp b/src/osgText/Text.cpp index 3b30e9555..416e7d256 100644 --- a/src/osgText/Text.cpp +++ b/src/osgText/Text.cpp @@ -448,6 +448,7 @@ String::iterator Text::computeLastCharacterOnLine(osg::Vec2& cursor, String::ite return lastChar; } + void Text::computeGlyphRepresentation() { Font* activefont = getActiveFont(); @@ -462,6 +463,8 @@ void Text::computeGlyphRepresentation() computePositions(); //to reset the origin return; } + + OpenThreads::ScopedLock lock(activefont->getSerializeFontCallsMutex()); // initialize bounding box, it will be expanded during glyph position calculation _textBB.init();