From d03f9032c129e440e4f07d319be8b52500798e07 Mon Sep 17 00:00:00 2001 From: iwubcode Date: Sat, 25 Jan 2025 21:49:32 -0600 Subject: Core / DolphinQt / InputCommon: reduce the number disk writes when using DynamicInputTextures --- .../DynamicInputTextures/DITConfiguration.cpp | 42 ++++++++-------------- 1 file changed, 14 insertions(+), 28 deletions(-) (limited to 'Source/Core/InputCommon/DynamicInputTextures/DITConfiguration.cpp') diff --git a/Source/Core/InputCommon/DynamicInputTextures/DITConfiguration.cpp b/Source/Core/InputCommon/DynamicInputTextures/DITConfiguration.cpp index 870dbf9bba..cced429e81 100644 --- a/Source/Core/InputCommon/DynamicInputTextures/DITConfiguration.cpp +++ b/Source/Core/InputCommon/DynamicInputTextures/DITConfiguration.cpp @@ -10,7 +10,6 @@ #include #include "Common/CommonPaths.h" -#include "Common/FileUtil.h" #include "Common/IniFile.h" #include "Common/JsonUtil.h" #include "Common/Logging/Log.h" @@ -68,26 +67,30 @@ Configuration::Configuration(const std::string& json_path) Configuration::~Configuration() = default; -bool Configuration::GenerateTextures(const Common::IniFile& file, - const std::vector& controller_names) const +void Configuration::GenerateTextures(const Common::IniFile& file, + const std::vector& controller_names, + OutputDetails* output) const { - bool any_dirty = false; for (const auto& texture_data : m_dynamic_input_textures) { - any_dirty |= GenerateTexture(file, controller_names, texture_data); + GenerateTexture(file, controller_names, texture_data, output); } - - return any_dirty; } -bool Configuration::GenerateTexture(const Common::IniFile& file, +void Configuration::GenerateTexture(const Common::IniFile& file, const std::vector& controller_names, - const Data& texture_data) const + const Data& texture_data, OutputDetails* output) const { // Two copies of the loaded texture // The first one is used as a fallback if a key or device isn't mapped // the second one is used as the final image to write to the textures directory const auto original_image = LoadImage(m_base_path + texture_data.m_image_name); + if (!original_image) + { + ERROR_LOG_FMT(VIDEO, "Failed to load image '{}' needed for dynamic input texture generation", + texture_data.m_image_name); + return; + } auto image_to_write = original_image; bool dirty = false; @@ -179,25 +182,8 @@ bool Configuration::GenerateTexture(const Common::IniFile& file, if (dirty) { - const std::string& game_id = SConfig::GetInstance().GetGameID(); - const auto hi_res_folder = - File::GetUserPath(D_HIRESTEXTURES_IDX) + texture_data.m_generated_folder_name; - if (!File::IsDirectory(hi_res_folder)) - { - File::CreateDir(hi_res_folder); - } - WriteImage(hi_res_folder + DIR_SEP + texture_data.m_hires_texture_name, *image_to_write); - - const auto game_id_folder = hi_res_folder + DIR_SEP + "gameids"; - if (!File::IsDirectory(game_id_folder)) - { - File::CreateDir(game_id_folder); - } - File::CreateEmptyFile(game_id_folder + DIR_SEP + game_id + ".txt"); - - return true; + (*output)[texture_data.m_generated_folder_name][texture_data.m_hires_texture_name] = + std::move(*image_to_write); } - - return false; } } // namespace InputCommon::DynamicInputTextures -- cgit v1.2.3