Merge pull request #1265 from PatrickvL/DInputDevicePolling

DInput : Poll each device only once (instead of per object)
This commit is contained in:
Luke Usher 2018-06-09 06:50:15 +01:00 committed by GitHub
commit 21e1c87970
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 32 additions and 22 deletions

View File

@ -482,6 +482,7 @@ void XBController::ListenPoll(XTL::X_XINPUT_STATE *Controller)
return; return;
XTL::LPDIRECTINPUTDEVICE8 pDevice=NULL; XTL::LPDIRECTINPUTDEVICE8 pDevice=NULL;
XTL::LPDIRECTINPUTDEVICE8 pPrevDevice=(XTL::LPDIRECTINPUTDEVICE8)-1;
HRESULT hRet=0; HRESULT hRet=0;
DWORD dwFlags=0; DWORD dwFlags=0;
@ -494,6 +495,10 @@ void XBController::ListenPoll(XTL::X_XINPUT_STATE *Controller)
Controller->Gamepad.sThumbRX = 0; Controller->Gamepad.sThumbRX = 0;
Controller->Gamepad.sThumbRY = 0; Controller->Gamepad.sThumbRY = 0;
XTL::DIJOYSTATE JoyState = { 0 };
BYTE KeyboardState[256] = { 0 };
XTL::DIMOUSESTATE2 MouseState = { 0 };
// ****************************************************************** // ******************************************************************
// * Poll all devices // * Poll all devices
// ****************************************************************** // ******************************************************************
@ -507,16 +512,36 @@ void XBController::ListenPoll(XTL::X_XINPUT_STATE *Controller)
continue; continue;
pDevice = m_InputDevice[dwDevice].m_Device; pDevice = m_InputDevice[dwDevice].m_Device;
if (pDevice == nullptr)
continue;
hRet = pDevice->Poll(); // Only poll on device-switch
if (pPrevDevice != pDevice) {
pPrevDevice = pDevice;
hRet = pDevice->Poll();
if (FAILED(hRet)) {
hRet = pDevice->Acquire();
while (hRet == DIERR_INPUTLOST)
hRet = pDevice->Acquire();
}
if(FAILED(hRet)) if (dwFlags & DEVICE_FLAG_JOYSTICK) {
{ JoyState = { 0 };
hRet = pDevice->Acquire(); if (pDevice->GetDeviceState(sizeof(JoyState), &JoyState) != DI_OK)
continue;
}
else if (dwFlags & DEVICE_FLAG_KEYBOARD) {
memset(KeyboardState, 0, sizeof(KeyboardState));
if (pDevice->GetDeviceState(sizeof(KeyboardState), &KeyboardState) != DI_OK)
continue;
}
else if (dwFlags & DEVICE_FLAG_MOUSE) {
MouseState = { 0 };
while(hRet == DIERR_INPUTLOST) if (pDevice->GetDeviceState(sizeof(MouseState), &MouseState) != DI_OK)
hRet = pDevice->Acquire(); continue;
} }
}
SHORT wValue = 0; SHORT wValue = 0;
@ -525,11 +550,6 @@ void XBController::ListenPoll(XTL::X_XINPUT_STATE *Controller)
// ****************************************************************** // ******************************************************************
if(dwFlags & DEVICE_FLAG_JOYSTICK) if(dwFlags & DEVICE_FLAG_JOYSTICK)
{ {
XTL::DIJOYSTATE JoyState = {0};
if(pDevice->GetDeviceState(sizeof(JoyState), &JoyState) != DI_OK)
continue;
if(dwFlags & DEVICE_FLAG_AXIS) if(dwFlags & DEVICE_FLAG_AXIS)
{ {
LONG *pdwAxis = (LONG*)((uint32)&JoyState + dwInfo); LONG *pdwAxis = (LONG*)((uint32)&JoyState + dwInfo);
@ -563,11 +583,6 @@ void XBController::ListenPoll(XTL::X_XINPUT_STATE *Controller)
// ****************************************************************** // ******************************************************************
else if(dwFlags & DEVICE_FLAG_KEYBOARD) else if(dwFlags & DEVICE_FLAG_KEYBOARD)
{ {
BYTE KeyboardState[256] = {0};
if(pDevice->GetDeviceState(sizeof(KeyboardState), &KeyboardState) != DI_OK)
continue;
BYTE bKey = KeyboardState[dwInfo]; BYTE bKey = KeyboardState[dwInfo];
if(bKey & 0x80) if(bKey & 0x80)
@ -580,11 +595,6 @@ void XBController::ListenPoll(XTL::X_XINPUT_STATE *Controller)
// ****************************************************************** // ******************************************************************
else if(dwFlags & DEVICE_FLAG_MOUSE) else if(dwFlags & DEVICE_FLAG_MOUSE)
{ {
XTL::DIMOUSESTATE2 MouseState = {0};
if(pDevice->GetDeviceState(sizeof(MouseState), &MouseState) != DI_OK)
continue;
if(dwFlags & DEVICE_FLAG_MOUSE_CLICK) if(dwFlags & DEVICE_FLAG_MOUSE_CLICK)
{ {
if(MouseState.rgbButtons[dwInfo] & 0x80) if(MouseState.rgbButtons[dwInfo] & 0x80)