Fixed SDL_HapticNewEffect() failing on various DirectInput devices.

main
Ryan C. Gordon 2014-03-18 17:16:28 -04:00
parent 2a2fb611d5
commit 18c9a4e96b
1 changed files with 18 additions and 1 deletions

View File

@ -507,8 +507,25 @@ DI_DeviceObjectCallback(LPCDIDEVICEOBJECTINSTANCE dev, LPVOID pvRef)
SDL_Haptic *haptic = (SDL_Haptic *) pvRef; SDL_Haptic *haptic = (SDL_Haptic *) pvRef;
if ((dev->dwType & DIDFT_AXIS) && (dev->dwFlags & DIDOI_FFACTUATOR)) { if ((dev->dwType & DIDFT_AXIS) && (dev->dwFlags & DIDOI_FFACTUATOR)) {
const GUID *guid = &dev->guidType;
DWORD offset = 0;
if (DI_GUIDIsSame(guid, &GUID_XAxis)) {
offset = DIJOFS_X;
} else if (DI_GUIDIsSame(guid, &GUID_YAxis)) {
offset = DIJOFS_Y;
} else if (DI_GUIDIsSame(guid, &GUID_ZAxis)) {
offset = DIJOFS_Z;
} else if (DI_GUIDIsSame(guid, &GUID_RxAxis)) {
offset = DIJOFS_RX;
} else if (DI_GUIDIsSame(guid, &GUID_RyAxis)) {
offset = DIJOFS_RY;
} else if (DI_GUIDIsSame(guid, &GUID_RzAxis)) {
offset = DIJOFS_RZ;
} else {
return DIENUM_CONTINUE; /* can't use this, go on. */
}
haptic->hwdata->axes[haptic->naxes] = dev->dwOfs; haptic->hwdata->axes[haptic->naxes] = offset;
haptic->naxes++; haptic->naxes++;
/* Currently using the artificial limit of 3 axes. */ /* Currently using the artificial limit of 3 axes. */