diff options
Diffstat (limited to 'Source/Core/VideoCommon/HiresTextures.cpp')
| -rw-r--r-- | Source/Core/VideoCommon/HiresTextures.cpp | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/Source/Core/VideoCommon/HiresTextures.cpp b/Source/Core/VideoCommon/HiresTextures.cpp index bcc0cac4c9..039bc87c5e 100644 --- a/Source/Core/VideoCommon/HiresTextures.cpp +++ b/Source/Core/VideoCommon/HiresTextures.cpp @@ -51,7 +51,7 @@ static std::thread s_prefetcher; void HiresTexture::Init() { - Update(); + // Note: Update is not called here so that we handle dynamic textures on startup more gracefully } void HiresTexture::Shutdown() @@ -76,8 +76,7 @@ void HiresTexture::Update() if (!g_ActiveConfig.bHiresTextures) { - s_textureMap.clear(); - s_textureCache.clear(); + Clear(); return; } @@ -87,7 +86,8 @@ void HiresTexture::Update() } const std::string& game_id = SConfig::GetInstance().GetGameID(); - const std::set<std::string> texture_directories = GetTextureDirectories(game_id); + const std::set<std::string> texture_directories = + GetTextureDirectoriesWithGameId(File::GetUserPath(D_HIRESTEXTURES_IDX), game_id); const std::vector<std::string> extensions{".png", ".dds"}; for (const auto& texture_directory : texture_directories) @@ -145,6 +145,12 @@ void HiresTexture::Update() } } +void HiresTexture::Clear() +{ + s_textureMap.clear(); + s_textureCache.clear(); +} + void HiresTexture::Prefetch() { Common::SetCurrentThreadName("Prefetcher"); @@ -454,10 +460,11 @@ bool HiresTexture::LoadTexture(Level& level, const std::vector<u8>& buffer) return true; } -std::set<std::string> HiresTexture::GetTextureDirectories(const std::string& game_id) +std::set<std::string> GetTextureDirectoriesWithGameId(const std::string& root_directory, + const std::string& game_id) { std::set<std::string> result; - const std::string texture_directory = File::GetUserPath(D_HIRESTEXTURES_IDX) + game_id; + const std::string texture_directory = root_directory + game_id; if (File::Exists(texture_directory)) { @@ -466,8 +473,7 @@ std::set<std::string> HiresTexture::GetTextureDirectories(const std::string& gam else { // If there's no directory with the region-specific ID, look for a 3-character region-free one - const std::string region_free_directory = - File::GetUserPath(D_HIRESTEXTURES_IDX) + game_id.substr(0, 3); + const std::string region_free_directory = root_directory + game_id.substr(0, 3); if (File::Exists(region_free_directory)) { @@ -482,7 +488,6 @@ std::set<std::string> HiresTexture::GetTextureDirectories(const std::string& gam }; // Look for any other directories that might be specific to the given gameid - const auto root_directory = File::GetUserPath(D_HIRESTEXTURES_IDX); const auto files = Common::DoFileSearch({root_directory}, {".txt"}, true); for (const auto& file : files) { @@ -490,8 +495,8 @@ std::set<std::string> HiresTexture::GetTextureDirectories(const std::string& gam { // The following code is used to calculate the top directory // of a found gameid.txt file - // ex: <dolphin dir>/Load/Textures/My folder/gameids/<gameid>.txt - // would insert "<dolphin dir>/Load/Textures/My folder" + // ex: <root directory>/My folder/gameids/<gameid>.txt + // would insert "<root directory>/My folder" const auto directory_path = file.substr(root_directory.size()); const std::size_t first_path_separator_position = directory_path.find_first_of(DIR_SEP_CHR); result.insert(root_directory + directory_path.substr(0, first_path_separator_position)); |
