Index: src/hid/platform/Windows/OFGameController.m ================================================================== --- src/hid/platform/Windows/OFGameController.m +++ src/hid/platform/Windows/OFGameController.m @@ -43,10 +43,11 @@ }; static WINAPI DWORD (*XInputGetStateFuncPtr)(DWORD, XINPUT_STATE *); static WINAPI DWORD (*XInputGetCapabilitiesExFuncPtr)(DWORD, DWORD, DWORD, struct XInputCapabilitiesEx *); +static const char *XInputVersion; @implementation OFGameController @synthesize vendorID = _vendorID, productID = _productID; @synthesize leftAnalogStickPosition = _leftAnalogStickPosition; @synthesize rightAnalogStickPosition = _rightAnalogStickPosition; @@ -63,10 +64,21 @@ (WINAPI DWORD (*)(DWORD, XINPUT_STATE *)) GetProcAddress(module, "XInputGetState"); XInputGetCapabilitiesExFuncPtr = (WINAPI DWORD (*)(DWORD, DWORD, DWORD, struct XInputCapabilitiesEx *)) GetProcAddress(module, "XInputGetCapabilitiesEx"); + XInputVersion = "1.4"; + } else if ((module = LoadLibraryA("xinput1_3.dll")) != NULL) { + XInputGetStateFuncPtr = + (WINAPI DWORD (*)(DWORD, XINPUT_STATE *)) + GetProcAddress(module, "XInputGetState"); + XInputVersion = "1.3"; + } else if ((module = LoadLibraryA("xinput9_1_0.dll")) != NULL) { + XInputGetStateFuncPtr = + (WINAPI DWORD (*)(DWORD, XINPUT_STATE *)) + GetProcAddress(module, "XInputGetState"); + XInputVersion = "9.1.0"; } } + (OFArray OF_GENERIC(OFGameController *) *)controllers { @@ -211,11 +223,11 @@ (state.Gamepad.sThumbRY < 0 ? -INT16_MIN : INT16_MAX)); } - (OFString *)name { - return @"XInput 1.3"; + return [OFString stringWithFormat: @"XInput %s device", XInputVersion]; } - (OFSet OF_GENERIC(OFGameControllerButton) *)buttons { return [OFSet setWithObjects: