@@ -112,15 +112,7 @@ extern "C" {
112
112
#ifndef SOKOL_UNREACHABLE
113
113
#define SOKOL_UNREACHABLE SOKOL_ASSERT(false)
114
114
#endif
115
- #if !defined(SOKOL_CALLOC ) || !defined(SOKOL_FREE )
116
- #include <stdlib.h>
117
- #endif
118
- #if !defined(SOKOL_CALLOC )
119
- #define SOKOL_CALLOC (n ,s ) calloc(n,s)
120
- #endif
121
- #if !defined(SOKOL_FREE )
122
- #define SOKOL_FREE (p ) free(p)
123
- #endif
115
+
124
116
#ifndef SOKOL_LOG
125
117
#ifdef SOKOL_DEBUG
126
118
#if defined(__ANDROID__ )
@@ -253,12 +245,84 @@ _SOKOL_PRIVATE void _sgamepad_record_state() {
253
245
254
246
#endif
255
247
256
- /*=== PUBLIC API FUNCTIONS ===================================================*/
257
- SOKOL_API_IMPL unsigned int sgamepad_get_max_supported_gamepads () {
258
- return SGAMEPAD_MAX_SUPPORTED_GAMEPADS ;
248
+ #if defined (_SAPP_WIN32 )
249
+
250
+ void * _glfw_calloc (size_t count , size_t size )
251
+ {
252
+ return calloc (count , size );
253
+ }
254
+
255
+ void * _glfw_realloc (void * block , size_t size )
256
+ {
257
+ return realloc (block , size );
259
258
}
260
259
261
- #if defined (_SAPP_WIN32 ) || defined(_SAPP_LINUX )
260
+ void _glfw_free (void * block )
261
+ {
262
+ free (block );
263
+ }
264
+
265
+ _GLFWlibrary _glfw = { GLFW_TRUE };
266
+
267
+ void _glfwInputError (int code , const char * format , ...)
268
+ {}
269
+
270
+ SOKOL_API_IMPL void sgamepad_init () {
271
+
272
+ _glfw .win32 .instance = GetModuleHandle (NULL );
273
+
274
+ _glfw .win32 .dinput8 .instance = _glfwPlatformLoadModule ("dinput8.dll" );
275
+ if (_glfw .win32 .dinput8 .instance )
276
+ {
277
+ _glfw .win32 .dinput8 .Create = (PFN_DirectInput8Create )
278
+ _glfwPlatformGetModuleSymbol (_glfw .win32 .dinput8 .instance , "DirectInput8Create" );
279
+ }
280
+
281
+ {
282
+ int i ;
283
+ const char * names [] =
284
+ {
285
+ "xinput1_4.dll" ,
286
+ "xinput1_3.dll" ,
287
+ "xinput9_1_0.dll" ,
288
+ "xinput1_2.dll" ,
289
+ "xinput1_1.dll" ,
290
+ NULL
291
+ };
292
+
293
+ for (i = 0 ; names [i ]; i ++ )
294
+ {
295
+ _glfw .win32 .xinput .instance = _glfwPlatformLoadModule (names [i ]);
296
+ if (_glfw .win32 .xinput .instance )
297
+ {
298
+ _glfw .win32 .xinput .GetCapabilities = (PFN_XInputGetCapabilities )
299
+ _glfwPlatformGetModuleSymbol (_glfw .win32 .xinput .instance , "XInputGetCapabilities" );
300
+ _glfw .win32 .xinput .GetState = (PFN_XInputGetState )
301
+ _glfwPlatformGetModuleSymbol (_glfw .win32 .xinput .instance , "XInputGetState" );
302
+
303
+ break ;
304
+ }
305
+ }
306
+ }
307
+
308
+ _glfw .platform = (_GLFWplatform )
309
+ {
310
+ .initJoysticks = _glfwInitJoysticksWin32 ,
311
+ .terminateJoysticks = _glfwTerminateJoysticksWin32 ,
312
+ .pollJoystick = _glfwPollJoystickWin32 ,
313
+ .getMappingName = _glfwGetMappingNameWin32 ,
314
+ .updateGamepadGUID = _glfwUpdateGamepadGUIDWin32 ,
315
+ };
316
+
317
+ _glfwInitGamepadMappings ();
318
+ }
319
+
320
+ SOKOL_API_IMPL void sgamepad_shutdown () {
321
+
322
+ _glfwTerminateJoysticksWin32 ();
323
+ }
324
+
325
+ #elif defined(_SAPP_LINUX )
262
326
263
327
SOKOL_API_IMPL void sgamepad_init () {
264
328
glfwInit ();
@@ -317,6 +381,11 @@ SOKOL_API_IMPL void sgamepad_shutdown() {
317
381
318
382
#endif
319
383
384
+ /*=== PUBLIC API FUNCTIONS ===================================================*/
385
+ SOKOL_API_IMPL unsigned int sgamepad_get_max_supported_gamepads () {
386
+ return SGAMEPAD_MAX_SUPPORTED_GAMEPADS ;
387
+ }
388
+
320
389
SOKOL_API_IMPL void sgamepad_record_state () {
321
390
memset (_sgamepad .gamepad_states , 0 , sizeof (_sgamepad .gamepad_states ));
322
391
_sgamepad_record_state ();
0 commit comments