Change the DefaultFont so that it's managemed via the ObjectCache to enabl it to be release and cleared in a central manner.

Added call to Registry::releaseGLObjects() to osgViewer/Renderer.cpp to enable automatic clean up of objects in the ObjectCache.
This commit is contained in:
Robert Osfield 2019-07-25 14:10:01 +01:00
parent 887ecf255c
commit 2716c8a32b
4 changed files with 19 additions and 4 deletions

View File

@ -83,7 +83,7 @@ public:
virtual std::string getFileName() const; virtual std::string getFileName() const;
static osg::ref_ptr<Font>& getDefaultFont(); static osg::ref_ptr<Font> getDefaultFont();
typedef std::vector< osg::ref_ptr<osg::StateSet> > StateSets; typedef std::vector< osg::ref_ptr<osg::StateSet> > StateSets;
StateSets& getCachedStateSets() { return _statesets; } StateSets& getCachedStateSets() { return _statesets; }

View File

@ -28,6 +28,8 @@ public:
DefaultFont(); DefaultFont();
virtual const char* className() const { return "DefaultFont"; }
virtual std::string getFileName() const { return ""; } virtual std::string getFileName() const { return ""; }
virtual bool supportsMultipleFontResolutions() const { return false; } virtual bool supportsMultipleFontResolutions() const { return false; }

View File

@ -36,13 +36,23 @@
using namespace osgText; using namespace osgText;
using namespace std; using namespace std;
osg::ref_ptr<Font>& Font::getDefaultFont() osg::ref_ptr<Font> Font::getDefaultFont()
{ {
static OpenThreads::Mutex s_DefaultFontMutex; static OpenThreads::Mutex s_DefaultFontMutex;
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(s_DefaultFontMutex); OpenThreads::ScopedLock<OpenThreads::Mutex> lock(s_DefaultFontMutex);
static osg::ref_ptr<Font> s_defaultFont = new DefaultFont; osg::ref_ptr<osg::Object> object = osgDB::Registry::instance()->getObjectCache()->getFromObjectCache("DefaultFont");
return s_defaultFont; osg::ref_ptr<osgText::Font> font = dynamic_cast<osgText::Font*>(object.get());
if (!font)
{
font = new DefaultFont;
osgDB::Registry::instance()->getObjectCache()->addEntryToObjectCache("DefaultFont", font.get());
return font;
}
else
{
return font;
}
} }
static OpenThreads::ReentrantMutex& getFontFileMutex() static OpenThreads::ReentrantMutex& getFontFileMutex()

View File

@ -25,6 +25,7 @@
#include <osgDB/DatabasePager> #include <osgDB/DatabasePager>
#include <osgDB/ImagePager> #include <osgDB/ImagePager>
#include <osgDB/Registry>
#include <osg/io_utils> #include <osg/io_utils>
@ -960,6 +961,8 @@ void Renderer::resizeGLObjectBuffers(unsigned int maxSize)
void Renderer::releaseGLObjects(osg::State* state) const void Renderer::releaseGLObjects(osg::State* state) const
{ {
osgDB::Registry::instance()->releaseGLObjects(state);
if (_sceneView[0].valid()) _sceneView[0]->releaseGLObjects(state); if (_sceneView[0].valid()) _sceneView[0]->releaseGLObjects(state);
if (_sceneView[1].valid()) _sceneView[1]->releaseGLObjects(state); if (_sceneView[1].valid()) _sceneView[1]->releaseGLObjects(state);
} }