input_common: sdl: lower vibration frequency and use it's own unique thread
This commit is contained in:
parent
01bc0c84f0
commit
5e7e55b98a
|
@ -820,11 +820,11 @@ bool Controller_NPad::VibrateControllerAtIndex(Core::HID::NpadIdType npad_id,
|
|||
|
||||
const auto now = steady_clock::now();
|
||||
|
||||
// Filter out non-zero vibrations that are within 10ms of each other.
|
||||
// Filter out non-zero vibrations that are within 15ms of each other.
|
||||
if ((vibration_value.low_amplitude != 0.0f || vibration_value.high_amplitude != 0.0f) &&
|
||||
duration_cast<milliseconds>(
|
||||
now - controller.vibration[device_index].last_vibration_timepoint) <
|
||||
milliseconds(10)) {
|
||||
milliseconds(15)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -438,10 +438,17 @@ SDLDriver::SDLDriver(std::string input_engine_) : InputEngine(std::move(input_en
|
|||
using namespace std::chrono_literals;
|
||||
while (initialized) {
|
||||
SDL_PumpEvents();
|
||||
SendVibrations();
|
||||
std::this_thread::sleep_for(1ms);
|
||||
}
|
||||
});
|
||||
vibration_thread = std::thread([this] {
|
||||
Common::SetCurrentThreadName("yuzu:input:SDL_Vibration");
|
||||
using namespace std::chrono_literals;
|
||||
while (initialized) {
|
||||
SendVibrations();
|
||||
std::this_thread::sleep_for(10ms);
|
||||
}
|
||||
});
|
||||
}
|
||||
// Because the events for joystick connection happens before we have our event watcher added, we
|
||||
// can just open all the joysticks right here
|
||||
|
@ -457,6 +464,7 @@ SDLDriver::~SDLDriver() {
|
|||
initialized = false;
|
||||
if (start_thread) {
|
||||
poll_thread.join();
|
||||
vibration_thread.join();
|
||||
SDL_QuitSubSystem(SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -128,5 +128,6 @@ private:
|
|||
std::atomic<bool> initialized = false;
|
||||
|
||||
std::thread poll_thread;
|
||||
std::thread vibration_thread;
|
||||
};
|
||||
} // namespace InputCommon
|
||||
|
|
Reference in New Issue