mirror of
https://github.com/libsdl-org/SDL.git
synced 2026-02-15 08:13:13 +00:00
Poll for the initial controller state when using DirectInput
This fixes getting a deflected axis as the first buffered input reading on a generic USB controller (G-Shark GS-GP702) (cherry picked from commit70b0d33106) (cherry picked from commita9ac349846)
This commit is contained in:
@@ -855,6 +855,7 @@ int SDL_DINPUT_JoystickOpen(SDL_Joystick *joystick, JoyStick_DeviceData *joystic
|
||||
} else if (FAILED(result)) {
|
||||
return SetDIerror("IDirectInputDevice8::SetProperty", result);
|
||||
}
|
||||
joystick->hwdata->first_update = SDL_TRUE;
|
||||
|
||||
/* Poll and wait for initial device state to be populated */
|
||||
result = IDirectInputDevice8_Poll(joystick->hwdata->InputDevice);
|
||||
@@ -1130,7 +1131,14 @@ void SDL_DINPUT_JoystickUpdate(SDL_Joystick *joystick)
|
||||
IDirectInputDevice8_Poll(joystick->hwdata->InputDevice);
|
||||
}
|
||||
|
||||
if (joystick->hwdata->buffered) {
|
||||
if (joystick->hwdata->first_update) {
|
||||
/* Poll to get the initial state of the joystick */
|
||||
UpdateDINPUTJoystickState_Polled(joystick);
|
||||
joystick->hwdata->first_update = SDL_FALSE;
|
||||
return;
|
||||
}
|
||||
|
||||
if (joystick->hwdata->buffered ) {
|
||||
UpdateDINPUTJoystickState_Buffered(joystick);
|
||||
} else {
|
||||
UpdateDINPUTJoystickState_Polled(joystick);
|
||||
|
||||
@@ -77,6 +77,7 @@ struct joystick_hwdata
|
||||
LPDIRECTINPUTDEVICE8 InputDevice;
|
||||
DIDEVCAPS Capabilities;
|
||||
SDL_bool buffered;
|
||||
SDL_bool first_update;
|
||||
input_t Inputs[MAX_INPUTS];
|
||||
int NumInputs;
|
||||
int NumSliders;
|
||||
|
||||
Reference in New Issue
Block a user