material->setColorMode(Material::AMBIENT_AND_DIFFUSE);
}
};
+
+// 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;
+ OptionsPusher(const ReaderWriter::Options* options)
+ {
+ 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_front(*iter);
+ }
+ // Save the current Registry path list and install the augmented one.
+ localPathList.swap(registry->getDataFilePathList());
+ }
+ ~OptionsPusher()
+ {
+ // Restore the old path list
+ localPathList.swap(Registry::instance()->getDataFilePathList());
+ }
+};
} // namespace
ReaderWriter::ReadResult
OpenThreads::ScopedLock<OpenThreads::ReentrantMutex> lock(readerMutex);
CallbackMap::iterator iter
= 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, opt);
+ string absFileName = findDataFile(fileName);
if (!fileExists(absFileName)) {
SG_LOG(SG_IO, SG_ALERT, "Cannot find image file \""
<< fileName << "\"");
const ReaderWriter::Options* opt)
{
OpenThreads::ScopedLock<OpenThreads::ReentrantMutex> lock(readerMutex);
+ // XXX Workaround for OSG plugin bug.
+ OptionsPusher pusher(opt);
Registry* registry = Registry::instance();
ReaderWriter::ReadResult res;
Node* cached = 0;