diff --git a/include/osgDB/ReadFile b/include/osgDB/ReadFile index 42600b11c..8cb895691 100644 --- a/include/osgDB/ReadFile +++ b/include/osgDB/ReadFile @@ -19,18 +19,42 @@ #include #include +#include #include namespace osgDB { + +/** Read an osg::Object from file. + * Return valid osg::Object on success, + * return NULL on failure. + * Use the useObjectCache flag to override the osgDB::Regisytr::getUseObjectCacheHint(). + * The osgDB::Registry is used to load the appropriate ReaderWriter plugin + * for the filename extension, and this plugin then handles the request + * to read the specified file.*/ +extern OSGDB_EXPORT osg::Object* readObjectFile(const std::string& filename,bool useObjectCache); + /** Read an osg::Object from file. * Return valid osg::Object on success, * return NULL on failure. * The osgDB::Registry is used to load the appropriate ReaderWriter plugin * for the filename extension, and this plugin then handles the request * to read the specified file.*/ -extern OSGDB_EXPORT osg::Object* readObjectFile(const std::string& filename,bool useObjectCache=false); +inline osg::Object* readObjectFile(const std::string& filename) +{ + return readObjectFile(filename,Registry::instance()->getUseObjectCacheHint()); +} + + +/** Read an osg::Image from file. + * Return valid osg::Image on success, + * return NULL on failure. + * Use the useObjectCache flag to override the osgDB::Regisytr::getUseObjectCacheHint(). + * The osgDB::Registry is used to load the appropriate ReaderWriter plugin + * for the filename extension, and this plugin then handles the request + * to read the specified file.*/ +extern OSGDB_EXPORT osg::Image* readImageFile(const std::string& filename,bool useObjectCache); /** Read an osg::Image from file. * Return valid osg::Image on success, @@ -38,7 +62,19 @@ extern OSGDB_EXPORT osg::Object* readObjectFile(const std::string& filename,bool * The osgDB::Registry is used to load the appropriate ReaderWriter plugin * for the filename extension, and this plugin then handles the request * to read the specified file.*/ -extern OSGDB_EXPORT osg::Image* readImageFile(const std::string& filename,bool useObjectCache=false); +inline osg::Image* readImageFile(const std::string& filename) +{ + return readImageFile(filename,Registry::instance()->getUseObjectCacheHint()); +} + +/** Read an osg::Node from file. + * Return valid osg::Node on success, + * return NULL on failure. + * Use the useObjectCache flag to override the osgDB::Regisytr::getUseObjectCacheHint(). + * The osgDB::Registry is used to load the appropriate ReaderWriter plugin + * for the filename extension, and this plugin then handles the request + * to read the specified file.*/ +extern OSGDB_EXPORT osg::Node* readNodeFile(const std::string& filename,bool useObjectCache); /** Read an osg::Node from file. * Return valid osg::Node on success, @@ -46,15 +82,36 @@ extern OSGDB_EXPORT osg::Image* readImageFile(const std::string& filename,bool * The osgDB::Registry is used to load the appropriate ReaderWriter plugin * for the filename extension, and this plugin then handles the request * to read the specified file.*/ -extern OSGDB_EXPORT osg::Node* readNodeFile(const std::string& filename,bool useObjectCache=false); +inline osg::Node* readNodeFile(const std::string& filename) +{ + return readNodeFile(filename,Registry::instance()->getUseObjectCacheHint()); +} + + +/** Read an osg::Node subgraph from files, creating a osg::Group to contain the nodes if more + * than one subgraph has been loaded. + * Use the useObjectCache flag to override the osgDB::Regisytr::getUseObjectCacheHint().*/ +extern OSGDB_EXPORT osg::Node* readNodeFiles(std::vector& commandLine,bool useObjectCache); /** Read an osg::Node subgraph from files, creating a osg::Group to contain the nodes if more * than one subgraph has been loaded.*/ -extern OSGDB_EXPORT osg::Node* readNodeFiles(std::vector& commandLine,bool useObjectCache=false); +inline osg::Node* readNodeFiles(std::vector& commandLine) +{ + return readNodeFiles(commandLine,Registry::instance()->getUseObjectCacheHint()); +} + + +/** Read an osg::Node subgraph from files, creating a osg::Group to contain the nodes if more + * than one subgraph has been loaded. + * Use the useObjectCache flag to override the osgDB::Regisytr::getUseObjectCacheHint().*/ +extern OSGDB_EXPORT osg::Node* readNodeFiles(osg::ArgumentParser& parser,bool useObjectCache); /** Read an osg::Node subgraph from files, creating a osg::Group to contain the nodes if more * than one subgraph has been loaded.*/ -extern OSGDB_EXPORT osg::Node* readNodeFiles(osg::ArgumentParser& parser,bool useObjectCache=false); +inline osg::Node* readNodeFiles(osg::ArgumentParser& parser) +{ + return readNodeFiles(parser,Registry::instance()->getUseObjectCacheHint()); +} } diff --git a/include/osgDB/Registry b/include/osgDB/Registry index 294f0e1d7..ca9a83594 100644 --- a/include/osgDB/Registry +++ b/include/osgDB/Registry @@ -191,7 +191,14 @@ class OSGDB_EXPORT Registry : public osg::Referenced /** Remove all objects in the cache regardless of having external references or expiry times.*/ void clearObjectCache(); + /** Add a filename,object,timestamp tripple to the Registry::ObjectCache.*/ void addEntryToObjectCache(const std::string& filename, osg::Object* object, double timestamp = 0.0); + + /** Set whether the Registry::ObjectCache should be used by default.*/ + void setUseObjectCacheHint(bool useObjectCache) { _useObjectCacheHint = useObjectCache; } + + /** Get whether the Registry::ObjectCache should be used by default.*/ + bool getUseObjectCacheHint() const { return _useObjectCacheHint; } /** get the attached library with specified name.*/ DynamicLibrary* getLibrary(const std::string& fileName); @@ -247,7 +254,8 @@ class OSGDB_EXPORT Registry : public osg::Referenced FilePathList _dataFilePath; FilePathList _libraryFilePath; - + + bool _useObjectCacheHint; ObjectCache _objectCache; }; diff --git a/src/osgDB/Registry.cpp b/src/osgDB/Registry.cpp index 7f29db32f..129dcff72 100644 --- a/src/osgDB/Registry.cpp +++ b/src/osgDB/Registry.cpp @@ -93,6 +93,8 @@ Registry::Registry() _createNodeFromImage = true; _openingLibrary = false; + + _useObjectCacheHint = false; initFilePathLists(); @@ -143,6 +145,7 @@ Registry::Registry() addFileExtensionAlias("pbm", "pnm"); addFileExtensionAlias("pgm", "pnm"); addFileExtensionAlias("ppm", "pnm"); + }