Reworked XInput and DirectInput joystick code.
Now multiple XInput controllers map correctly to device indexes instead of grabbing the first available userid, and are completely separated out from DirectInput. Also, the hardcoded limitation on number of DirectInput devices is gone. I don't expect there to really ever be more than eight joysticks plugged into a machine, but it was a leftover limitation for a static array we didn't actually use anymore. Fixes Bugzilla #1984. (etc?) --HG-- extra : rebase_source : 103ce667c1cdd87a3691c9dd9eea2318bad908c8
This commit is contained in:
parent
17c90f1186
commit
6f21990987
2 changed files with 151 additions and 193 deletions
|
@ -851,9 +851,6 @@ SDL_GameControllerOpen(int device_index)
|
|||
SDL_GameController *gamecontroller;
|
||||
SDL_GameController *gamecontrollerlist;
|
||||
ControllerMapping_t *pSupportedController = NULL;
|
||||
#ifdef SDL_JOYSTICK_DINPUT
|
||||
SDL_bool bIsXinputDevice;
|
||||
#endif
|
||||
|
||||
if ((device_index < 0) || (device_index >= SDL_NumJoysticks())) {
|
||||
SDL_SetError("There are %d joysticks available", SDL_NumJoysticks());
|
||||
|
@ -886,11 +883,6 @@ SDL_GameControllerOpen(int device_index)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
#ifdef SDL_JOYSTICK_DINPUT
|
||||
/* check if we think we should open this device in XInput mode */
|
||||
bIsXinputDevice = SDL_SYS_IsXInputDeviceIndex(device_index);
|
||||
#endif
|
||||
|
||||
SDL_memset(gamecontroller, 0, (sizeof *gamecontroller));
|
||||
gamecontroller->joystick = SDL_JoystickOpen(device_index);
|
||||
if ( !gamecontroller->joystick ) {
|
||||
|
@ -898,19 +890,6 @@ SDL_GameControllerOpen(int device_index)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
#ifdef SDL_JOYSTICK_DINPUT
|
||||
if ( !SDL_SYS_IsXInputJoystick( gamecontroller->joystick ) && bIsXinputDevice )
|
||||
{
|
||||
/* we tried to open the controller in XInput mode and failed, so get the mapping again for the direct input variant if possible */
|
||||
SDL_JoystickGUID jGUID = SDL_JoystickGetDeviceGUID( device_index );
|
||||
pSupportedController = SDL_PrivateGetControllerMappingForGUID(&jGUID);
|
||||
if ( !pSupportedController ) {
|
||||
SDL_SetError("Failed to open device in XInput mode (%d)", device_index );
|
||||
return (NULL);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
SDL_PrivateLoadButtonMapping( &gamecontroller->mapping, pSupportedController->guid, pSupportedController->name, pSupportedController->mapping );
|
||||
|
||||
/* Add joystick to list */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue