diff options
author | Petr Mikheev <ptmikheev@gmail.com> | 2021-12-18 17:04:55 +0100 |
---|---|---|
committer | Petr Mikheev <ptmikheev@gmail.com> | 2021-12-23 12:33:14 +0100 |
commit | b06248a31f52c0c7b808d79dd2b14df5d6bf37e3 (patch) | |
tree | 582b5874c1b23c6e91fdc06df79dc0073183a65b | |
parent | 826553f2beedbcaab26bf225a9452b4d6a0dca21 (diff) |
Fix #6502
-rw-r--r-- | components/resource/scenemanager.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/components/resource/scenemanager.cpp b/components/resource/scenemanager.cpp index 5f2d78d2ed..72349dadb1 100644 --- a/components/resource/scenemanager.cpp +++ b/components/resource/scenemanager.cpp @@ -1,6 +1,7 @@ #include "scenemanager.hpp" #include <cstdlib> +#include <filesystem> #include <osg/AlphaFunc> #include <osg/Node> @@ -10,6 +11,7 @@ #include <osgUtil/IncrementalCompileOperation> +#include <osgDB/FileUtils> #include <osgDB/SharedStateManager> #include <osgDB/Registry> @@ -472,9 +474,14 @@ namespace Resource osgDB::ReaderWriter::ReadResult readImage(const std::string& filename, const osgDB::Options* options) override { + std::filesystem::path filePath(filename); + if (filePath.is_absolute()) + // It is a hack. Needed because either OSG or libcollada-dom tries to make an absolute path from + // our relative VFS path by adding current working directory. + filePath = std::filesystem::relative(filename, osgDB::getCurrentWorkingDirectory()); try { - return osgDB::ReaderWriter::ReadResult(mImageManager->getImage(filename), osgDB::ReaderWriter::ReadResult::FILE_LOADED); + return osgDB::ReaderWriter::ReadResult(mImageManager->getImage(filePath), osgDB::ReaderWriter::ReadResult::FILE_LOADED); } catch (std::exception& e) { |