summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/DynamicInputTextures/DITConfiguration.cpp
diff options
context:
space:
mode:
authoriwubcode <iwubcode@users.noreply.github.com>2025-01-25 21:49:32 -0600
committeriwubcode <iwubcode@users.noreply.github.com>2025-03-22 14:53:02 -0500
commitd03f9032c129e440e4f07d319be8b52500798e07 (patch)
tree8be51b82db6cde8050f55bbb35287d83b4de0c85 /Source/Core/InputCommon/DynamicInputTextures/DITConfiguration.cpp
parent18979129f35f56de9f87e2a7919788679337abfa (diff)
Core / DolphinQt / InputCommon: reduce the number disk writes when using DynamicInputTextures
Diffstat (limited to 'Source/Core/InputCommon/DynamicInputTextures/DITConfiguration.cpp')
-rw-r--r--Source/Core/InputCommon/DynamicInputTextures/DITConfiguration.cpp42
1 files changed, 14 insertions, 28 deletions
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 <picojson.h>
#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<std::string>& controller_names) const
+void Configuration::GenerateTextures(const Common::IniFile& file,
+ const std::vector<std::string>& 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<std::string>& 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