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();
|
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) &&
|
if ((vibration_value.low_amplitude != 0.0f || vibration_value.high_amplitude != 0.0f) &&
|
||||||
duration_cast<milliseconds>(
|
duration_cast<milliseconds>(
|
||||||
now - controller.vibration[device_index].last_vibration_timepoint) <
|
now - controller.vibration[device_index].last_vibration_timepoint) <
|
||||||
milliseconds(10)) {
|
milliseconds(15)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -438,10 +438,17 @@ SDLDriver::SDLDriver(std::string input_engine_) : InputEngine(std::move(input_en
|
||||||
using namespace std::chrono_literals;
|
using namespace std::chrono_literals;
|
||||||
while (initialized) {
|
while (initialized) {
|
||||||
SDL_PumpEvents();
|
SDL_PumpEvents();
|
||||||
SendVibrations();
|
|
||||||
std::this_thread::sleep_for(1ms);
|
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
|
// Because the events for joystick connection happens before we have our event watcher added, we
|
||||||
// can just open all the joysticks right here
|
// can just open all the joysticks right here
|
||||||
|
@ -457,6 +464,7 @@ SDLDriver::~SDLDriver() {
|
||||||
initialized = false;
|
initialized = false;
|
||||||
if (start_thread) {
|
if (start_thread) {
|
||||||
poll_thread.join();
|
poll_thread.join();
|
||||||
|
vibration_thread.join();
|
||||||
SDL_QuitSubSystem(SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER);
|
SDL_QuitSubSystem(SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -128,5 +128,6 @@ private:
|
||||||
std::atomic<bool> initialized = false;
|
std::atomic<bool> initialized = false;
|
||||||
|
|
||||||
std::thread poll_thread;
|
std::thread poll_thread;
|
||||||
|
std::thread vibration_thread;
|
||||||
};
|
};
|
||||||
} // namespace InputCommon
|
} // namespace InputCommon
|
||||||
|
|
Reference in New Issue