Merge pull request #1265 from PatrickvL/DInputDevicePolling
DInput : Poll each device only once (instead of per object)
This commit is contained in:
commit
21e1c87970
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue