From f2ef8ce7c1e82e2ec54849105b034c4bb8cac7cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tur=C3=A1nszki=20J=C3=A1nos?= Date: Mon, 10 Jun 2024 17:02:10 +0200 Subject: [PATCH] resource manager fix --- WickedEngine/wiResourceManager.cpp | 20 ++++++++------------ WickedEngine/wiVersion.cpp | 2 +- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/WickedEngine/wiResourceManager.cpp b/WickedEngine/wiResourceManager.cpp index e3a75061c..18f11623d 100644 --- a/WickedEngine/wiResourceManager.cpp +++ b/WickedEngine/wiResourceManager.cpp @@ -341,12 +341,7 @@ namespace wi { if (resource->filedata.empty()) { - if (wi::helper::FileRead(resource->container_filename, resource->filedata, resource->container_filesize, resource->container_fileoffset)) - { - resource->container_fileoffset = 0; - resource->container_filesize = resource->filedata.size(); - } - else + if (!wi::helper::FileRead(resource->container_filename, resource->filedata, resource->container_filesize, resource->container_fileoffset)) { resource.reset(); return Resource(); @@ -356,6 +351,8 @@ namespace wi filesize = resource->filedata.size(); } + flags |= resource->flags; + bool success = false; if (has_flag(flags, Flags::IMPORT_DELAY)) @@ -1228,7 +1225,7 @@ namespace wi }; } - if (!resource->filedata.empty() && !has_flag(resource->flags, Flags::IMPORT_RETAIN_FILEDATA) && !has_flag(flags, Flags::IMPORT_RETAIN_FILEDATA) && !has_flag(flags, Flags::IMPORT_DELAY)) + if (!resource->filedata.empty() && !has_flag(flags, Flags::IMPORT_RETAIN_FILEDATA) && !has_flag(flags, Flags::IMPORT_DELAY)) { // file data can be discarded: resource->filedata.clear(); @@ -1496,7 +1493,6 @@ namespace wi struct TempResource { std::string name; - Flags flags = Flags::NONE; const uint8_t* filedata = nullptr; size_t filesize = 0; }; @@ -1513,7 +1509,9 @@ namespace wi archive >> resource.name; uint32_t flags_temp; archive >> flags_temp; - resource.flags = (Flags)flags_temp; + // Note: flags not applied here, but they must be read + // We don't apply the flags, because they will be requested later by for example materials + // If we would apply flags here, then flags from previous session would be applied, that maybe we no longer want (for example RETAIN_FILEDATA) // We don't read the file data from archive into a vector like usual, instead map the vector, // this is much faster and we don't need to retain this data after archive lifetime @@ -1522,8 +1520,6 @@ namespace wi size_t file_offset = archive.GetPos() - resource.filesize; resource.name = archive.GetSourceDirectory() + resource.name; - resource.flags |= Flags::IMPORT_DELAY; // delay resource creation, to be able to receive additional flags (this way only file data is loaded) - resource.flags &= ~Flags::IMPORT_RETAIN_FILEDATA; // don't need to retain file data, we will keep it alive through the whole serialization if (Contains(resource.name)) continue; @@ -1533,7 +1529,7 @@ namespace wi auto& tmp_resource = temp_resources[i]; auto res = Load( tmp_resource.name, - tmp_resource.flags, + Flags::IMPORT_DELAY, tmp_resource.filedata, tmp_resource.filesize, archive.GetSourceFileName(), diff --git a/WickedEngine/wiVersion.cpp b/WickedEngine/wiVersion.cpp index 11ecd6632..69a4e16e1 100644 --- a/WickedEngine/wiVersion.cpp +++ b/WickedEngine/wiVersion.cpp @@ -9,7 +9,7 @@ namespace wi::version // minor features, major updates, breaking compatibility changes const int minor = 71; // minor bug fixes, alterations, refactors, updates - const int revision = 480; + const int revision = 481; const std::string version_string = std::to_string(major) + "." + std::to_string(minor) + "." + std::to_string(revision);