diff --git a/WickedEngine/WickedEngine_Windows.vcxproj b/WickedEngine/WickedEngine_Windows.vcxproj
index ddefd9cbd..60eaab952 100644
--- a/WickedEngine/WickedEngine_Windows.vcxproj
+++ b/WickedEngine/WickedEngine_Windows.vcxproj
@@ -93,6 +93,7 @@
_WIN32_WINNT=0x0601;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)
BULLET;%(AdditionalIncludeDirectories)
true
+ false
Windows
@@ -116,6 +117,7 @@
_WIN32_WINNT=0x0601;_DEBUG;_LIB;%(PreprocessorDefinitions)
BULLET;%(AdditionalIncludeDirectories)
true
+ false
Windows
diff --git a/WickedEngine/wiArchive.cpp b/WickedEngine/wiArchive.cpp
index 29345ff1b..3593712e3 100644
--- a/WickedEngine/wiArchive.cpp
+++ b/WickedEngine/wiArchive.cpp
@@ -88,3 +88,13 @@ bool wiArchive::SaveFile(const string& fileName)
return false;
}
+
+string wiArchive::GetSourceDirectory()
+{
+ return wiHelper::GetDirectoryFromPath(fileName);
+}
+
+string wiArchive::GetSourceFileName()
+{
+ return fileName;
+}
diff --git a/WickedEngine/wiArchive.h b/WickedEngine/wiArchive.h
index 706a6d772..178b04d0e 100644
--- a/WickedEngine/wiArchive.h
+++ b/WickedEngine/wiArchive.h
@@ -21,6 +21,8 @@ public:
bool IsOpen();
void Close();
bool SaveFile(const string& fileName);
+ string GetSourceDirectory();
+ string GetSourceFileName();
// It could be templated but we have to be extremely careful of different datasizes on different platforms
// because serialized data should be interchangeable!
diff --git a/WickedEngine/wiHelper.cpp b/WickedEngine/wiHelper.cpp
index 490d00c30..2ab830c4a 100644
--- a/WickedEngine/wiHelper.cpp
+++ b/WickedEngine/wiHelper.cpp
@@ -172,6 +172,11 @@ namespace wiHelper
string GetFileNameFromPath(const string& fullPath)
{
+ if (fullPath.empty())
+ {
+ return fullPath;
+ }
+
string ret, empty;
SplitPath(fullPath, empty, ret);
return ret;
@@ -179,6 +184,11 @@ namespace wiHelper
string GetDirectoryFromPath(const string& fullPath)
{
+ if (fullPath.empty())
+ {
+ return fullPath;
+ }
+
string ret, empty;
SplitPath(fullPath, ret, empty);
return ret;
diff --git a/WickedEngine/wiLoader.cpp b/WickedEngine/wiLoader.cpp
index 792103ad0..dedad9022 100644
--- a/WickedEngine/wiLoader.cpp
+++ b/WickedEngine/wiLoader.cpp
@@ -1521,7 +1521,7 @@ void Material::Serialize(wiArchive& archive)
archive >> parallaxOcclusionMapping;
}
- string texturesDir = "textures/";
+ string texturesDir = archive.GetSourceDirectory() + "textures/";
if (!refMapName.empty())
{
refMapName = texturesDir + refMapName;
@@ -2510,11 +2510,6 @@ void Model::CleanUp()
}
void Model::LoadFromDisk(const string& dir, const string& name, const string& identifier)
{
- if (!dir.empty())
- {
- wiHelper::SetWorkingDirectory(wiHelper::GetOriginalWorkingDirectory() + dir);
- }
-
wiArchive archive(name + ".wimf", true);
if (archive.IsOpen())
{
@@ -3828,7 +3823,7 @@ void Decal::Serialize(wiArchive& archive)
archive >> life;
archive >> fadeStart;
- string texturesDir = "textures/";
+ string texturesDir = archive.GetSourceDirectory() + "textures/";
if (!texName.empty())
{
texName = texturesDir + texName;
@@ -4177,7 +4172,7 @@ void Light::Serialize(wiArchive& archive)
{
archive >> rim;
Texture2D* tex;
- rim = "rims/" + rim;
+ rim = archive.GetSourceDirectory() + "rims/" + rim;
if (!rim.empty() && (tex = (Texture2D*)wiResourceManager::GetGlobal()->add(rim)) != nullptr) {
lensFlareRimTextures.push_back(tex);
lensFlareNames.push_back(rim);
@@ -4199,4 +4194,4 @@ void Light::Serialize(wiArchive& archive)
}
}
}
-#pragma endregion
\ No newline at end of file
+#pragma endregion
diff --git a/WickedEngine/wiVersion.cpp b/WickedEngine/wiVersion.cpp
index 831ed5dcd..b4590f9d0 100644
--- a/WickedEngine/wiVersion.cpp
+++ b/WickedEngine/wiVersion.cpp
@@ -7,7 +7,7 @@ namespace wiVersion
// minor features, major bug fixes
const int minor = 8;
// minor bug fixes, alterations, refactors
- const int revision = 41;
+ const int revision = 42;
long GetVersion()