Remove OptionsPusher and manipulation of osgDB dataFilePathList.

The bug it worked around has been fixed in the OSG ac3d loader, and changing
the path list has unpleasant multithreading implications.
This commit is contained in:
Tim Moore
2009-01-14 22:13:12 +01:00
parent 2d11419cba
commit db8f7f21e8

View File

@@ -280,39 +280,6 @@ public:
}
};
// Work around an OSG bug - the file loaders don't use the file path
// in options while the file is being loaded.
struct OptionsPusher {
FilePathList localPathList;
bool validOptions;
OptionsPusher(const ReaderWriter::Options* options):
validOptions(false)
{
if (!options)
return;
Registry* registry = Registry::instance();
localPathList = registry->getDataFilePathList();
const FilePathList& regPathList = registry->getDataFilePathList();
const FilePathList& optionsPathList = options->getDatabasePathList();
for (FilePathList::const_iterator iter = optionsPathList.begin();
iter != optionsPathList.end();
++iter) {
if (find(regPathList.begin(), regPathList.end(), *iter)
== regPathList.end())
localPathList.push_back(*iter);
}
// Save the current Registry path list and install the augmented one.
localPathList.swap(registry->getDataFilePathList());
validOptions = true;
}
~OptionsPusher()
{
// Restore the old path list
if (validOptions)
localPathList.swap(Registry::instance()->getDataFilePathList());
}
};
} // namespace
Node* DefaultProcessPolicy::process(Node* node, const string& filename,
@@ -332,10 +299,9 @@ ModelRegistry::readImage(const string& fileName,
= imageCallbackMap.find(getFileExtension(fileName));
// XXX Workaround for OSG plugin bug
{
OptionsPusher pusher(opt);
if (iter != imageCallbackMap.end() && iter->second.valid())
return iter->second->readImage(fileName, opt);
string absFileName = findDataFile(fileName);
string absFileName = findDataFile(fileName, opt);
if (!fileExists(absFileName)) {
SG_LOG(SG_IO, SG_ALERT, "Cannot find image file \""
<< fileName << "\"");
@@ -484,7 +450,6 @@ ModelRegistry::readNode(const string& fileName,
{
ScopedLock<ReentrantMutex> lock(readerMutex);
// XXX Workaround for OSG plugin bug.
OptionsPusher pusher(opt);
Registry* registry = Registry::instance();
ReaderWriter::ReadResult res;
Node* cached = 0;