From 18c9a4e96b5c95432fb2399c9c622dc7be2ac610 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Tue, 18 Mar 2014 17:16:28 -0400 Subject: [PATCH] Fixed SDL_HapticNewEffect() failing on various DirectInput devices. --- src/haptic/windows/SDL_syshaptic.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/haptic/windows/SDL_syshaptic.c b/src/haptic/windows/SDL_syshaptic.c index 1a59e1c76e809..b320e9ddb07ae 100644 --- a/src/haptic/windows/SDL_syshaptic.c +++ b/src/haptic/windows/SDL_syshaptic.c @@ -507,8 +507,25 @@ DI_DeviceObjectCallback(LPCDIDEVICEOBJECTINSTANCE dev, LPVOID pvRef) SDL_Haptic *haptic = (SDL_Haptic *) pvRef; 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++; /* Currently using the artificial limit of 3 axes. */