summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/HiresTextures.cpp
diff options
context:
space:
mode:
authoriwubcode <iwubcode@users.noreply.github.com>2021-05-14 18:18:15 -0500
committeriwubcode <iwubcode@users.noreply.github.com>2021-06-19 21:15:38 -0500
commitdf53a5f8809d1f9c21a2975a2fd6e98e9c7a8424 (patch)
tree4bfea3bb81c50cacc72f38efc6f81b26702cde51 /Source/Core/VideoCommon/HiresTextures.cpp
parent8fb0f913315f98c9c3f3bf51ad0fc4e534991e10 (diff)
VideoCommon: enhance hi res texture support by having exact matches be picked before wildcard matches. Additionally, add the ability to ignore the texture hash portion of the texture name when loading a hi res texture
Diffstat (limited to 'Source/Core/VideoCommon/HiresTextures.cpp')
-rw-r--r--Source/Core/VideoCommon/HiresTextures.cpp29
1 files changed, 19 insertions, 10 deletions
diff --git a/Source/Core/VideoCommon/HiresTextures.cpp b/Source/Core/VideoCommon/HiresTextures.cpp
index 96c9ccbf10..20a394586b 100644
--- a/Source/Core/VideoCommon/HiresTextures.cpp
+++ b/Source/Core/VideoCommon/HiresTextures.cpp
@@ -221,20 +221,29 @@ std::string HiresTexture::GenBaseName(TextureInfo& texture_info, bool dump)
const auto texture_name_details = texture_info.CalculateTextureName();
- // try to match a wildcard template
- if (!dump)
- {
- const std::string texture_name =
- fmt::format("{}_${}", texture_name_details.base_name, texture_name_details.format_name);
- if (s_textureMap.find(texture_name) != s_textureMap.end())
- return texture_name;
- }
-
- // else generate the complete texture
+ // look for an exact match first
const std::string full_name = texture_name_details.GetFullName();
if (dump || s_textureMap.find(full_name) != s_textureMap.end())
return full_name;
+ // else try and find a wildcard
+ if (!dump)
+ {
+ // Single wildcard ignoring the tlut hash
+ const std::string texture_name_single_wildcard_tlut =
+ fmt::format("{}_{}_$_{}", texture_name_details.base_name, texture_name_details.texture_name,
+ texture_name_details.format_name);
+ if (s_textureMap.find(texture_name_single_wildcard_tlut) != s_textureMap.end())
+ return texture_name_single_wildcard_tlut;
+
+ // Single wildcard ignoring the texture hash
+ const std::string texture_name_single_wildcard_tex =
+ fmt::format("{}_${}_{}", texture_name_details.base_name, texture_name_details.tlut_name,
+ texture_name_details.format_name);
+ if (s_textureMap.find(texture_name_single_wildcard_tex) != s_textureMap.end())
+ return texture_name_single_wildcard_tex;
+ }
+
return "";
}