diff --git a/src/input_common/drivers/sdl_driver.cpp b/src/input_common/drivers/sdl_driver.cpp index dd7e8edc30..a5438b433f 100644 --- a/src/input_common/drivers/sdl_driver.cpp +++ b/src/input_common/drivers/sdl_driver.cpp @@ -697,16 +697,6 @@ SDLDriver::SDLDriver(std::string input_engine_) : InputEngine(std::move(input_en SDL_AddEventWatch(&SDLEventWatcher, this); initialized = true; - if (start_thread) { - vibration_thread = std::thread([this] { - Common::SetCurrentThreadName("SDL_Vibration"); - using namespace std::chrono_literals; - while (initialized) { - SendVibrations(); - std::this_thread::sleep_for(250ms); // 4 TPS - } - }); - } // Because the events for joystick connection happens before we have our event watcher added, we // can just open all the joysticks right here int joystick_count = 0; @@ -725,7 +715,6 @@ SDLDriver::~SDLDriver() { initialized = false; if (start_thread) { - vibration_thread.join(); SDL_QuitSubSystem(SDL_INIT_JOYSTICK | SDL_INIT_GAMEPAD); } } @@ -805,10 +794,7 @@ Common::Input::DriverResult SDLDriver::SetVibration( .type = Common::Input::VibrationAmplificationType::Exponential, }; - vibration_queue.Push(VibrationRequest{ - .identifier = identifier, - .vibration = new_vibration, - }); + joystick->RumblePlay(new_vibration); return Common::Input::DriverResult::Success; } @@ -852,31 +838,6 @@ bool SDLDriver::IsVibrationEnabled(const PadIdentifier& identifier) { return true; } -void SDLDriver::SendVibrations() { - std::vector filtered_vibrations{}; - while (!vibration_queue.Empty()) { - VibrationRequest request; - vibration_queue.Pop(request); - const auto joystick = GetSDLJoystickByGUID(request.identifier.guid.RawString(), - static_cast(request.identifier.port)); - const auto it = std::find_if(filtered_vibrations.begin(), filtered_vibrations.end(), - [request](VibrationRequest vibration) { - return vibration.identifier == request.identifier; - }); - if (it == filtered_vibrations.end()) { - filtered_vibrations.push_back(std::move(request)); - continue; - } - *it = request; - } - - for (const auto& vibration : filtered_vibrations) { - const auto joystick = GetSDLJoystickByGUID(vibration.identifier.guid.RawString(), - static_cast(vibration.identifier.port)); - joystick->RumblePlay(vibration.vibration); - } -} - Common::ParamPackage SDLDriver::BuildAnalogParamPackageForButton(int port, const Common::UUID& guid, s32 axis, float value) const { Common::ParamPackage params{}; diff --git a/src/input_common/drivers/sdl_driver.h b/src/input_common/drivers/sdl_driver.h index bf4a45e83d..ca1cbe7faa 100644 --- a/src/input_common/drivers/sdl_driver.h +++ b/src/input_common/drivers/sdl_driver.h @@ -113,16 +113,11 @@ private: /// Returns true if the button is on the left joycon bool IsButtonOnLeftSide(Settings::NativeButton::Values button) const; - /// Queue of vibration request to controllers - Common::SPSCQueue vibration_queue; - /// Map of GUID of a list of corresponding virtual Joysticks ankerl::unordered_dense::map>> joystick_map; std::mutex joystick_map_mutex; - bool start_thread = false; std::atomic initialized = false; - - std::thread vibration_thread; + bool start_thread; }; } // namespace InputCommon