diff options
| author | iwubcode <iwubcode@users.noreply.github.com> | 2021-02-27 16:41:50 -0600 |
|---|---|---|
| committer | iwubcode <iwubcode@users.noreply.github.com> | 2021-02-27 17:29:48 -0600 |
| commit | 32d584a0f5f58ff80ab9ad95ff3d1b10e30d108f (patch) | |
| tree | 61844ca761f13be9299b3f47f4b6eb0e7ba17130 /Source/Core/InputCommon/InputConfig.cpp | |
| parent | 158674c274228fc88cec318959d28a3661126a99 (diff) | |
InputCommon: reduce number of image loads and texture cache invalidations by only running dynamic input textures once for all controllers
Diffstat (limited to 'Source/Core/InputCommon/InputConfig.cpp')
| -rw-r--r-- | Source/Core/InputCommon/InputConfig.cpp | 33 |
1 files changed, 25 insertions, 8 deletions
diff --git a/Source/Core/InputCommon/InputConfig.cpp b/Source/Core/InputCommon/InputConfig.cpp index 03d2874332..72b28b6d16 100644 --- a/Source/Core/InputCommon/InputConfig.cpp +++ b/Source/Core/InputCommon/InputConfig.cpp @@ -4,6 +4,7 @@ #include <vector> +#include "Common/Config/Config.h" #include "Common/FileUtil.h" #include "Common/IniFile.h" #include "Common/MsgHandler.h" @@ -101,6 +102,8 @@ bool InputConfig::LoadConfig(bool isGC) !inifile.GetSections().empty()) { int n = 0; + + std::vector<std::string> controller_names; for (auto& controller : m_controllers) { IniFile::Section config; @@ -113,9 +116,8 @@ bool InputConfig::LoadConfig(bool isGC) controller->GetName() + "'", 6000); - IniFile profile_ini; - profile_ini.Load(profile[n]); - config = *profile_ini.GetOrCreateSection("Profile"); + inifile.Load(profile[n]); + config = *inifile.GetOrCreateSection("Profile"); } else { @@ -133,10 +135,13 @@ bool InputConfig::LoadConfig(bool isGC) controller->LoadConfig(&config); // Update refs controller->UpdateReferences(g_controller_interface); + controller_names.push_back(controller->GetName()); // Next profile n++; } + + m_dynamic_input_tex_config_manager.GenerateTextures(inifile, controller_names); return true; } else @@ -154,8 +159,14 @@ void InputConfig::SaveConfig() IniFile inifile; inifile.Load(ini_filename); + std::vector<std::string> controller_names; for (auto& controller : m_controllers) + { controller->SaveConfig(inifile.GetOrCreateSection(controller->GetName())); + controller_names.push_back(controller->GetName()); + } + + m_dynamic_input_tex_config_manager.GenerateTextures(inifile, controller_names); inifile.Save(ini_filename); } @@ -195,11 +206,6 @@ void InputConfig::UnregisterHotplugCallback() g_controller_interface.UnregisterDevicesChangedCallback(m_hotplug_callback_handle); } -void InputConfig::OnControllerCreated(ControllerEmu::EmulatedController& controller) -{ - controller.SetDynamicInputTextureManager(&m_dynamic_input_tex_config_manager); -} - bool InputConfig::IsControllerControlledByGamepadDevice(int index) const { if (static_cast<size_t>(index) >= m_controllers.size()) @@ -215,3 +221,14 @@ bool InputConfig::IsControllerControlledByGamepadDevice(int index) const || (controller.source == "DInput" && controller.name == "Keyboard Mouse")); // Windows Keyboard/Mouse } + +void InputConfig::GenerateControllerTextures(const IniFile& file) +{ + std::vector<std::string> controller_names; + for (auto& controller : m_controllers) + { + controller_names.push_back(controller->GetName()); + } + + m_dynamic_input_tex_config_manager.GenerateTextures(file, controller_names); +} |
