diff options
Diffstat (limited to 'Source/Core/VideoCommon')
| -rw-r--r-- | Source/Core/VideoCommon/HiresTextures.cpp | 40 | ||||
| -rw-r--r-- | Source/Core/VideoCommon/HiresTextures.h | 7 |
2 files changed, 32 insertions, 15 deletions
diff --git a/Source/Core/VideoCommon/HiresTextures.cpp b/Source/Core/VideoCommon/HiresTextures.cpp index 1e423a8aa6..575f82be04 100644 --- a/Source/Core/VideoCommon/HiresTextures.cpp +++ b/Source/Core/VideoCommon/HiresTextures.cpp @@ -3,6 +3,7 @@ #include "VideoCommon/HiresTextures.h" +#include <fmt/format.h> #include <memory> #include <string> #include <string_view> @@ -10,8 +11,6 @@ #include <utility> #include <xxhash.h> -#include <fmt/format.h> - #include "Common/CommonPaths.h" #include "Common/FileSearch.h" #include "Common/FileUtil.h" @@ -84,9 +83,9 @@ void HiresTexture::Update() return; } - const std::string& game_id = SConfig::GetInstance().GetGameID(); - const std::set<std::string> texture_directories = - GetTextureDirectoriesWithGameId(File::GetUserPath(D_HIRESTEXTURES_IDX), game_id); + const std::set<std::string> texture_directories = GetTextureDirectoriesForFirstMatchingGameId( + File::GetUserPath(D_HIRESTEXTURES_IDX), SConfig::GetInstance().GetGameIDsForTextures()); + constexpr auto extensions = std::to_array<std::string_view>({".png", ".dds"}); for (const auto& texture_directory : texture_directories) @@ -141,16 +140,14 @@ void HiresTexture::Update() } } - if (g_ActiveConfig.bCacheHiresTextures) - { - OSD::AddMessage(fmt::format("Loading '{}' custom textures", s_hires_texture_cache.size()), - 10000); - } - else - { - OSD::AddMessage( - fmt::format("Found '{}' custom textures", s_hires_texture_id_to_arbmipmap.size()), 10000); - } + const std::vector<std::string> game_ids_for_textures = + SConfig::GetInstance().GetGameIDsForTextures(); + const std::string game_id_display = fmt::format("{}", fmt::join(game_ids_for_textures, "' or '")); + + const auto message = fmt::format("{} '{}' custom textures for '{}'", + g_ActiveConfig.bCacheHiresTextures ? "Preloading" : "Found", + s_hires_texture_cache.size(), game_id_display); + OSD::AddMessage(message, 10000); } void HiresTexture::Clear() @@ -238,3 +235,16 @@ std::set<std::string> GetTextureDirectoriesWithGameId(const std::string& root_di return result; } + +std::set<std::string> +GetTextureDirectoriesForFirstMatchingGameId(const std::string& root_directory, + const std::vector<std::string>& game_ids) +{ + for (const auto& game_id : game_ids) + { + auto directories = GetTextureDirectoriesWithGameId(root_directory, game_id); + if (!directories.empty()) + return directories; + } + return {}; +} diff --git a/Source/Core/VideoCommon/HiresTextures.h b/Source/Core/VideoCommon/HiresTextures.h index f577aebd78..84c6c6b646 100644 --- a/Source/Core/VideoCommon/HiresTextures.h +++ b/Source/Core/VideoCommon/HiresTextures.h @@ -3,6 +3,7 @@ #pragma once +#include <fmt/ranges.h> #include <memory> #include <set> #include <string> @@ -20,6 +21,12 @@ enum class TextureFormat; std::set<std::string> GetTextureDirectoriesWithGameId(const std::string& root_directory, const std::string& game_id); +// Tries each id in priority order, returning the directories for the first id that matches +// anything. Returns an empty set if none of the ids match. +std::set<std::string> +GetTextureDirectoriesForFirstMatchingGameId(const std::string& root_directory, + const std::vector<std::string>& game_ids); + class HiresTexture { public: |
