summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/ControllerInterface
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/InputCommon/ControllerInterface')
-rw-r--r--Source/Core/InputCommon/ControllerInterface/XInput/XInput.cpp10
-rw-r--r--Source/Core/InputCommon/ControllerInterface/XInput/XInput.h3
2 files changed, 9 insertions, 4 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
diff --git a/Source/Core/InputCommon/ControllerInterface/XInput/XInput.h b/Source/Core/InputCommon/ControllerInterface/XInput/XInput.h
index 59a3f6ff79..012e99eba2 100644
--- a/Source/Core/InputCommon/ControllerInterface/XInput/XInput.h
+++ b/Source/Core/InputCommon/ControllerInterface/XInput/XInput.h
@@ -90,7 +90,8 @@ public:
private:
XINPUT_STATE m_state_in;
- XINPUT_VIBRATION m_state_out;
+ XINPUT_VIBRATION m_state_out{};
+ XINPUT_VIBRATION m_current_state_out{};
const BYTE m_subtype;
const u8 m_index;
};