summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/VideoCommon')
-rw-r--r--Source/Core/VideoCommon/HiresTextures.cpp40
-rw-r--r--Source/Core/VideoCommon/HiresTextures.h7
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: