From Alberto Farre, changed the cache hint option in read*() calls from being

a bool to a enum osgDB::Registru::CacheHintOptions to be used a bit mask flag.

From Robert Osfied, added osgDB::Registry::ReadFileCallback and
osgDB::Registry::WriteFileCallback to allow customizition of read and write
calls.
This commit is contained in:
Robert Osfield
2004-04-10 16:11:56 +00:00
parent ae7ceae631
commit 2a6e155d03
5 changed files with 208 additions and 49 deletions

View File

@@ -24,7 +24,7 @@
using namespace osg;
using namespace osgDB;
Object* osgDB::readObjectFile(const std::string& filename,bool useObjectCache)
Object* osgDB::readObjectFile(const std::string& filename,Registry::CacheHintOptions useObjectCache)
{
ReaderWriter::ReadResult rr = Registry::instance()->readObject(filename,useObjectCache);
if (rr.validObject()) return rr.takeObject();
@@ -33,7 +33,7 @@ Object* osgDB::readObjectFile(const std::string& filename,bool useObjectCache)
}
Image* osgDB::readImageFile(const std::string& filename,bool useObjectCache)
Image* osgDB::readImageFile(const std::string& filename,Registry::CacheHintOptions useObjectCache)
{
ReaderWriter::ReadResult rr = Registry::instance()->readImage(filename,useObjectCache);
if (rr.validImage()) return rr.takeImage();
@@ -42,7 +42,7 @@ Image* osgDB::readImageFile(const std::string& filename,bool useObjectCache)
}
HeightField* osgDB::readHeightFieldFile(const std::string& filename,bool useObjectCache)
HeightField* osgDB::readHeightFieldFile(const std::string& filename,Registry::CacheHintOptions useObjectCache)
{
ReaderWriter::ReadResult rr = Registry::instance()->readHeightField(filename,useObjectCache);
if (rr.validHeightField()) return rr.takeHeightField();
@@ -51,7 +51,7 @@ HeightField* osgDB::readHeightFieldFile(const std::string& filename,bool useObje
}
Node* osgDB::readNodeFile(const std::string& filename,bool useObjectCache)
Node* osgDB::readNodeFile(const std::string& filename,Registry::CacheHintOptions useObjectCache)
{
ReaderWriter::ReadResult rr = Registry::instance()->readNode(filename,useObjectCache);
if (rr.validNode()) return rr.takeNode();
@@ -59,7 +59,7 @@ Node* osgDB::readNodeFile(const std::string& filename,bool useObjectCache)
return NULL;
}
Node* osgDB::readNodeFiles(std::vector<std::string>& commandLine,bool useObjectCache)
Node* osgDB::readNodeFiles(std::vector<std::string>& commandLine,Registry::CacheHintOptions useObjectCache)
{
typedef std::vector<osg::Node*> NodeList;
NodeList nodeList;
@@ -108,7 +108,7 @@ Node* osgDB::readNodeFiles(std::vector<std::string>& commandLine,bool useObjectC
}
Node* osgDB::readNodeFiles(osg::ArgumentParser& arguments,bool useObjectCache)
Node* osgDB::readNodeFiles(osg::ArgumentParser& arguments,Registry::CacheHintOptions useObjectCache)
{
typedef std::vector<osg::Node*> NodeList;

View File

@@ -137,7 +137,7 @@ Registry::Registry()
_createNodeFromImage = false;
_openingLibrary = false;
_useObjectCacheHint = false;
_useObjectCacheHint = CACHE_NONE;
initFilePathLists();
@@ -1244,9 +1244,11 @@ ReaderWriter::ReadResult Registry::readObject(const std::string& fileName)
return results.front();
}
ReaderWriter::ReadResult Registry::readObject(const std::string& file,bool useObjectCache)
ReaderWriter::ReadResult Registry::readObjectImplementation(const std::string& constFile,CacheHintOptions useObjectCache)
{
if (useObjectCache)
std::string file(constFile);
if (useObjectCache & CACHE_OBJECTS)
{
// search for entry in the object cache.
ObjectCache::iterator oitr=_objectCache.find(file);
@@ -1288,7 +1290,7 @@ ReaderWriter::ReadResult Registry::readObject(const std::string& file,bool useOb
}
}
ReaderWriter::WriteResult Registry::writeObject(const Object& obj,const std::string& fileName)
ReaderWriter::WriteResult Registry::writeObjectImplementation(const Object& obj,const std::string& fileName)
{
// record the errors reported by readerwriters.
typedef std::vector<ReaderWriter::WriteResult> Results;
@@ -1390,10 +1392,9 @@ ReaderWriter::ReadResult Registry::readImage(const std::string& fileName)
}
ReaderWriter::ReadResult Registry::readImage(const std::string& file,bool useObjectCache)
ReaderWriter::ReadResult Registry::readImageImplementation(const std::string& file,CacheHintOptions useObjectCache)
{
if (useObjectCache)
if (useObjectCache & CACHE_IMAGES)
{
// search for entry in the object cache.
ObjectCache::iterator oitr=_objectCache.find(file);
@@ -1439,7 +1440,7 @@ ReaderWriter::ReadResult Registry::readImage(const std::string& file,bool useObj
ReaderWriter::WriteResult Registry::writeImage(const Image& image,const std::string& fileName)
ReaderWriter::WriteResult Registry::writeImageImplementation(const Image& image,const std::string& fileName)
{
// record the errors reported by readerwriters.
typedef std::vector<ReaderWriter::WriteResult> Results;
@@ -1541,9 +1542,9 @@ ReaderWriter::ReadResult Registry::readHeightField(const std::string& fileName)
}
ReaderWriter::ReadResult Registry::readHeightField(const std::string& file,bool useObjectCache)
ReaderWriter::ReadResult Registry::readHeightFieldImplementation(const std::string& file,CacheHintOptions useObjectCache)
{
if (useObjectCache)
if (useObjectCache & CACHE_HEIGHTFIELDS)
{
// search for entry in the object cache.
ObjectCache::iterator oitr=_objectCache.find(file);
@@ -1589,7 +1590,7 @@ ReaderWriter::ReadResult Registry::readHeightField(const std::string& file,bool
ReaderWriter::WriteResult Registry::writeHeightField(const HeightField& HeightField,const std::string& fileName)
ReaderWriter::WriteResult Registry::writeHeightFieldImplementation(const HeightField& HeightField,const std::string& fileName)
{
// record the errors reported by readerwriters.
typedef std::vector<ReaderWriter::WriteResult> Results;
@@ -1686,7 +1687,7 @@ ReaderWriter::ReadResult Registry::readNode(const std::string& fileName)
// need to sort out.
bool useObjectCache=true;
CacheHintOptions useObjectCache = CACHE_ALL;
if (_createNodeFromImage)
{
@@ -1703,9 +1704,9 @@ ReaderWriter::ReadResult Registry::readNode(const std::string& fileName)
return results.front();
}
ReaderWriter::ReadResult Registry::readNode(const std::string& file,bool useObjectCache)
ReaderWriter::ReadResult Registry::readNodeImplementation(const std::string& file,CacheHintOptions useObjectCache)
{
if (useObjectCache)
if (useObjectCache & CACHE_NODES)
{
// search for entry in the object cache.
ObjectCache::iterator oitr=_objectCache.find(file);
@@ -1747,7 +1748,7 @@ ReaderWriter::ReadResult Registry::readNode(const std::string& file,bool useObje
}
}
ReaderWriter::WriteResult Registry::writeNode(const Node& node,const std::string& fileName)
ReaderWriter::WriteResult Registry::writeNodeImplementation(const Node& node,const std::string& fileName)
{
// record the errors reported by readerwriters.
typedef std::vector<ReaderWriter::WriteResult> Results;