mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2026-09-30 14:16:51 -05:00
waterfall loading of textures via id to prefer elfid-gameid when launched via elf; fallback to gameid if no match
This commit is contained in:
@@ -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 {};
|
||||
}
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user