From Bradley Anderegg, "The first change just exposes the archive extension list so that

external applications can determine if an archive extension is valid.

The second change is a bug fix in Registry::read(const ReadFunctor&)
where if you pass in valid options they get wiped out after the archive
is loaded but before being passed along to the plugin."
This commit is contained in:
Robert Osfield 2011-04-19 14:11:13 +00:00
parent 3c4180d982
commit cfb19182e6
2 changed files with 9 additions and 2 deletions

View File

@ -485,6 +485,9 @@ class OSGDB_EXPORT Registry : public osg::Referenced
/** Get the ObjectWrapperManager that is used to store all the ObjectWrappers. */ /** Get the ObjectWrapperManager that is used to store all the ObjectWrappers. */
DeprecatedDotOsgWrapperManager* getDeprecatedDotOsgObjectWrapperManager() { return _deprecatedDotOsgWrapperManager.get(); } DeprecatedDotOsgWrapperManager* getDeprecatedDotOsgObjectWrapperManager() { return _deprecatedDotOsgWrapperManager.get(); }
typedef std::vector< std::string> ArchiveExtensionList;
const ArchiveExtensionList& getArchiveExtensions() const { return _archiveExtList; }
protected: protected:
virtual ~Registry(); virtual ~Registry();
@ -492,7 +495,6 @@ class OSGDB_EXPORT Registry : public osg::Referenced
typedef std::vector< osg::ref_ptr<DynamicLibrary> > DynamicLibraryList; typedef std::vector< osg::ref_ptr<DynamicLibrary> > DynamicLibraryList;
typedef std::map< std::string, std::string> ExtensionAliasMap; typedef std::map< std::string, std::string> ExtensionAliasMap;
typedef std::map< std::string, std::string> MimeTypeExtensionMap; typedef std::map< std::string, std::string> MimeTypeExtensionMap;
typedef std::vector< std::string> ArchiveExtensionList;
typedef std::pair<osg::ref_ptr<osg::Object>, double > ObjectTimeStampPair; typedef std::pair<osg::ref_ptr<osg::Object>, double > ObjectTimeStampPair;
typedef std::map<std::string, ObjectTimeStampPair > ObjectCache; typedef std::map<std::string, ObjectTimeStampPair > ObjectCache;

View File

@ -1036,7 +1036,12 @@ ReaderWriter::ReadResult Registry::read(const ReadFunctor& readFunctor)
osgDB::Archive* archive = result.getArchive(); osgDB::Archive* archive = result.getArchive();
osg::ref_ptr<Options> options = new Options; //if valid options were passed through the read functor clone them
//otherwise make new options
osg::ref_ptr<osgDB::ReaderWriter::Options> options = readFunctor._options ?
readFunctor._options->cloneOptions() :
new osgDB::ReaderWriter::Options;
options->setDatabasePath(archiveName); options->setDatabasePath(archiveName);
return archive->readObject(fileName,options.get()); return archive->readObject(fileName,options.get());