@@ -78,6 +78,8 @@ extern "C" {
78
78
79
79
SOKOL_API_DECL void sgamepad_init ();
80
80
81
+ SOKOL_API_DECL void sgamepad_shutdown ();
82
+
81
83
SOKOL_API_DECL void sgamepad_record_state ();
82
84
83
85
SOKOL_API_DECL void sgamepad_get_gamepad_state (unsigned int index , sgamepad_gamepad_state * pstate );
@@ -186,14 +188,13 @@ _SOKOL_PRIVATE void _sgamepad_generate_analog_stick_state(float x_value, float y
186
188
/*== PLATFORM SPECIFIC INCLUDES AND DEFINES ==================================*/
187
189
#if defined (_SAPP_WIN32 ) || defined(_SAPP_APPLE ) || defined(_SAPP_LINUX )
188
190
#include <GLFW/glfw3.h>
191
+ #define SGAMEPAD_MAX_SUPPORTED_GAMEPADS 4
189
192
#else
190
193
#define SGAMEPAD_MAX_SUPPORTED_GAMEPADS 0
191
194
#endif
192
195
193
- #define SGAMEPAD_MAX_SUPPORTED_GAMEPADS 4
194
-
195
196
typedef struct sgamepad {
196
- sgamepad_gamepad_state gamepad_states [SGAMEPAD_MAX_SUPPORTED_GAMEPADS ];
197
+ sgamepad_gamepad_state gamepad_states [4 ];
197
198
} sgamepad ;
198
199
199
200
_SOKOL_PRIVATE sgamepad _sgamepad = {0 };
@@ -251,13 +252,65 @@ SOKOL_API_IMPL unsigned int sgamepad_get_max_supported_gamepads() {
251
252
return SGAMEPAD_MAX_SUPPORTED_GAMEPADS ;
252
253
}
253
254
254
- SOKOL_API_IMPL void sgamepad_init () {
255
+ #if defined ( _SAPP_WIN32 ) || defined( _SAPP_LINUX )
255
256
256
- #if defined ( _SAPP_WIN32 ) || defined( _SAPP_APPLE ) || defined( _SAPP_LINUX )
257
+ SOKOL_API_IMPL void sgamepad_init () {
257
258
glfwInit ();
258
- #endif
259
259
}
260
260
261
+ SOKOL_API_IMPL void sgamepad_shutdown () {
262
+
263
+ glfwTerminate ();
264
+ }
265
+
266
+ #elif defined(_SAPP_APPLE )
267
+
268
+ static void * _glfw_calloc (size_t count , size_t size )
269
+ {
270
+ return calloc (count , size );
271
+ }
272
+
273
+ static void * _glfw_realloc (void * block , size_t size )
274
+ {
275
+ return realloc (block , size );
276
+ }
277
+
278
+ static void _glfw_free (void * block )
279
+ {
280
+ free (block );
281
+ }
282
+
283
+ #define _GLFW_COCOA
284
+ #include "cocoa_joystick.m"
285
+ #include "cocoa_time.c"
286
+ #include "input.c"
287
+
288
+ _GLFWlibrary _glfw = { GLFW_TRUE };
289
+
290
+ void _glfwInputError (int code , const char * format , ...)
291
+ {}
292
+
293
+ SOKOL_API_IMPL void sgamepad_init () {
294
+
295
+ _glfw .platform = (_GLFWplatform )
296
+ {
297
+ .initJoysticks = _glfwInitJoysticksCocoa ,
298
+ .terminateJoysticks = _glfwTerminateJoysticksCocoa ,
299
+ .pollJoystick = _glfwPollJoystickCocoa ,
300
+ .getMappingName = _glfwGetMappingNameCocoa ,
301
+ .updateGamepadGUID = _glfwUpdateGamepadGUIDCocoa ,
302
+ };
303
+
304
+ _glfwInitGamepadMappings ();
305
+ }
306
+
307
+ SOKOL_API_IMPL void sgamepad_shutdown () {
308
+
309
+ _glfwTerminateJoysticksCocoa ();
310
+ }
311
+
312
+ #endif
313
+
261
314
SOKOL_API_IMPL void sgamepad_record_state () {
262
315
memset (_sgamepad .gamepad_states , 0 , sizeof (_sgamepad .gamepad_states ));
263
316
_sgamepad_record_state ();
0 commit comments