summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp
diff options
context:
space:
mode:
authormimimi085181 <mimimi085181@gmail.com>2016-04-21 14:22:48 +0200
committermimimi085181 <mimimi085181@gmail.com>2016-04-23 13:45:10 +0200
commitfcd5170cff5614f6585c11fa22e2a8d986de4055 (patch)
treed9bac97a7c78ccf5e990f3c116e35d50fc2684e6 /Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp
parentbdb9da21041fdcefa4504c28259647eea910e36c (diff)
XInput: Apply Rumble/Motor output only on changes (again)
Disclaimer: I can't test if this works on xbox one controllers, i don't have one. But i have conformed that this UpdateMotors() is related to rumble for emulated wiimotes. This partially reverts commit "XInput: Apply immediately as well" (1958a10b6f5ba8348268b077f6410dadb2a20c8f) from pr # https://github.com/dolphin-emu/dolphin/pull/1560 Hopefully this fixes the xbox one controller rumble issue: https://bugs.dolphin-emu.org/issues/9071 And in theory it might reduce the used usb bandwidth, as it was originally intended before pr 1560. @JMC47: Please do a good amount of testing, to see if this breaks rumble for wiimotes or gamecube controllers emulated with xinput devices.
Diffstat (limited to 'Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp')
-rw-r--r--Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp10
1 files changed, 7 insertions, 3 deletions
diff --git a/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp b/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp
index 1ee374d483..c8438b488f 100644
--- a/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp
+++ b/Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp
@@ -124,8 +124,6 @@ void DeInit()
Device::Device(const XINPUT_CAPABILITIES& caps, u8 index)
: m_subtype(caps.SubType), m_index(index)
{
- ZeroMemory(&m_state_out, sizeof(m_state_out));
-
// XInputGetCaps seems to always claim all capabilities are supported
// but I will leave all this stuff in, incase m$ fixes xinput up a bit
@@ -213,7 +211,13 @@ void Device::UpdateInput()
void Device::UpdateMotors()
{
- PXInputSetState(m_index, &m_state_out);
+ // this if statement is to make rumble work better when multiple ControllerInterfaces are using the device
+ // only calls XInputSetState if the state changed
+ if (memcmp(&m_state_out, &m_current_state_out, sizeof(m_state_out)))
+ {
+ m_current_state_out = m_state_out;
+ PXInputSetState(m_index, &m_state_out);
+ }
}
// GET name/source/id