DirectInputSystem's initial state wasn't being initialized properly, which would sometimes result in invalid input values until keyboard or mouse was successfully acquired

This commit is contained in:
Nik Henson 2012-02-27 20:32:15 +00:00
parent 69610ef8dd
commit f9c3b9b5f8

View file

@ -321,7 +321,7 @@ static BOOL CALLBACK DI8EnumDevicesCallback(LPCDIDEVICEINSTANCE instance, LPVOID
// Keep track of all joystick device GUIDs // Keep track of all joystick device GUIDs
DIJoyInfo info; DIJoyInfo info;
memset(&info, 0, sizeof(DIJoyInfo)); memset(&info, 0, sizeof(info));
info.guid = instance->guidInstance; info.guid = instance->guidInstance;
// If XInput is enabled, see if device is an XInput device // If XInput is enabled, see if device is an XInput device
info.isXInput = diDevsContext->useXInput && IsXInputDevice(instance->guidProduct); info.isXInput = diDevsContext->useXInput && IsXInputDevice(instance->guidProduct);
@ -447,9 +447,9 @@ CDirectInputSystem::CDirectInputSystem(bool useRawInput, bool useXInput) :
m_xiGetCapabilitiesPtr(NULL), m_xiGetStatePtr(NULL), m_xiSetStatePtr(NULL), m_di8(NULL), m_di8Keyboard(NULL), m_di8Mouse(NULL) m_xiGetCapabilitiesPtr(NULL), m_xiGetStatePtr(NULL), m_xiSetStatePtr(NULL), m_di8(NULL), m_di8Keyboard(NULL), m_di8Mouse(NULL)
{ {
// Reset initial states // Reset initial states
memset(&m_combRawMseState, 0, sizeof(RawMseState)); memset(&m_combRawMseState, 0, sizeof(m_combRawMseState));
memset(&m_diKeyState, 0, sizeof(LPDIRECTINPUTDEVICE8)); memset(&m_diKeyState, 0, sizeof(m_diKeyState));
memset(&m_diMseState, 0, sizeof(LPDIRECTINPUTDEVICE8)); memset(&m_diMseState, 0, sizeof(m_diMseState));
} }
CDirectInputSystem::~CDirectInputSystem() CDirectInputSystem::~CDirectInputSystem()
@ -663,7 +663,7 @@ void CDirectInputSystem::OpenKeyboardsAndMice()
m_mseDetails.push_back(mseDetails); m_mseDetails.push_back(mseDetails);
RawMseState mseState; RawMseState mseState;
memset(&mseState, 0, sizeof(RawMseState)); memset(&mseState, 0, sizeof(mseState));
m_rawMseStates.push_back(mseState); m_rawMseStates.push_back(mseState);
} }
} }
@ -1176,7 +1176,7 @@ void CDirectInputSystem::OpenJoysticks()
// Enumerate axes // Enumerate axes
DIEnumObjsContext diObjsContext; DIEnumObjsContext diObjsContext;
memset(&diObjsContext, 0, sizeof(DIEnumObjsContext)); memset(&diObjsContext, 0, sizeof(diObjsContext));
diObjsContext.joyDetails = &joyDetails; diObjsContext.joyDetails = &joyDetails;
if (FAILED(hr = joystick->EnumObjects(DI8EnumObjectsCallback, &diObjsContext, DIDFT_ALL))) if (FAILED(hr = joystick->EnumObjects(DI8EnumObjectsCallback, &diObjsContext, DIDFT_ALL)))
{ {
@ -1290,7 +1290,7 @@ void CDirectInputSystem::OpenJoysticks()
// Create initial blank joystick state // Create initial blank joystick state
DIJOYSTATE2 joyState; DIJOYSTATE2 joyState;
memset(&joyState, 0, sizeof(DIJOYSTATE2)); memset(&joyState, 0, sizeof(joyState));
for (int povNum = 0; povNum < 4; povNum++) for (int povNum = 0; povNum < 4; povNum++)
joyState.rgdwPOV[povNum] = -1; joyState.rgdwPOV[povNum] = -1;
@ -1332,7 +1332,7 @@ void CDirectInputSystem::PollJoysticks()
{ {
// Use XInput to query joystick // Use XInput to query joystick
XINPUT_STATE xState; XINPUT_STATE xState;
memset(&xState, 0, sizeof(XINPUT_STATE)); memset(&xState, 0, sizeof(xState));
if (FAILED(hr = m_xiGetStatePtr(it->xInputNum, &xState))) if (FAILED(hr = m_xiGetStatePtr(it->xInputNum, &xState)))
{ {
memset(pJoyState, 0, sizeof(DIJOYSTATE2)); memset(pJoyState, 0, sizeof(DIJOYSTATE2));