summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetr Mikheev <ptmikheev@gmail.com>2021-12-18 17:04:55 +0100
committerPetr Mikheev <ptmikheev@gmail.com>2021-12-23 12:33:14 +0100
commitb06248a31f52c0c7b808d79dd2b14df5d6bf37e3 (patch)
tree582b5874c1b23c6e91fdc06df79dc0073183a65b
parent826553f2beedbcaab26bf225a9452b4d6a0dca21 (diff)
Fix #6502
-rw-r--r--components/resource/scenemanager.cpp9
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)
{