21 #include "../../SDL_internal.h"
28 XInputGetState_t SDL_XInputGetState =
NULL;
29 XInputSetState_t SDL_XInputSetState =
NULL;
30 XInputGetCapabilities_t SDL_XInputGetCapabilities =
NULL;
31 XInputGetBatteryInformation_t SDL_XInputGetBatteryInformation =
NULL;
32 DWORD SDL_XInputVersion = 0;
34 static HANDLE s_pXInputDLL = 0;
35 static int s_XInputDLLRefCount = 0;
41 WIN_LoadXInputDLL(
void)
55 SDL_XInputGetState = (XInputGetState_t)XInputGetState;
56 SDL_XInputSetState = (XInputSetState_t)XInputSetState;
57 SDL_XInputGetCapabilities = (XInputGetCapabilities_t)XInputGetCapabilities;
58 SDL_XInputGetBatteryInformation = (XInputGetBatteryInformation_t)XInputGetBatteryInformation;
61 SDL_XInputVersion = (1 << 16) | 4;
67 WIN_UnloadXInputDLL(
void)
74 WIN_LoadXInputDLL(
void)
80 s_XInputDLLRefCount++;
88 version = (1 << 16) | 4;
89 s_pXInputDLL = LoadLibrary(L
"XInput1_4.dll");
91 version = (1 << 16) | 3;
92 s_pXInputDLL = LoadLibrary(L
"XInput1_3.dll");
95 s_pXInputDLL = LoadLibrary(L
"bin\\XInput1_3.dll");
99 s_pXInputDLL = LoadLibrary(L
"XInput9_1_0.dll");
106 SDL_XInputVersion = version;
107 s_XInputDLLRefCount = 1;
110 SDL_XInputGetState = (XInputGetState_t)GetProcAddress((HMODULE)s_pXInputDLL, (LPCSTR)100);
111 if (!SDL_XInputGetState) {
112 SDL_XInputGetState = (XInputGetState_t)GetProcAddress((HMODULE)s_pXInputDLL,
"XInputGetState");
114 SDL_XInputSetState = (XInputSetState_t)GetProcAddress((HMODULE)s_pXInputDLL,
"XInputSetState");
115 SDL_XInputGetCapabilities = (XInputGetCapabilities_t)GetProcAddress((HMODULE)s_pXInputDLL,
"XInputGetCapabilities");
116 SDL_XInputGetBatteryInformation = (XInputGetBatteryInformation_t)GetProcAddress( (HMODULE)s_pXInputDLL,
"XInputGetBatteryInformation" );
117 if (!SDL_XInputGetState || !SDL_XInputSetState || !SDL_XInputGetCapabilities) {
118 WIN_UnloadXInputDLL();
126 WIN_UnloadXInputDLL(
void)
130 if (--s_XInputDLLRefCount == 0) {
131 FreeLibrary(s_pXInputDLL);
#define SDL_assert(condition)