To solve creations with multi-threaded creation of text, added mutex to Font, and use of this mutex in Text, and added mutex to the reading
of fonts.
This commit is contained in:
parent
86e998f64c
commit
5ae1eb711a
@ -26,6 +26,8 @@
|
||||
#include <osgDB/ReaderWriter>
|
||||
#include <osgText/Export>
|
||||
|
||||
#include <OpenThreads/Mutex>
|
||||
|
||||
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<osg::TexEnv> _texenv;
|
||||
osg::ref_ptr<osg::StateSet> _stateset;
|
||||
|
@ -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<Font::FontMutex> lock(activefont->getSerializeFontCallsMutex());
|
||||
|
||||
// initialize bounding box, it will be expanded during glyph position calculation
|
||||
_textBB.init();
|
||||
|
Loading…
Reference in New Issue
Block a user