Skip to content

Commit 8ec8653

Browse files
committed
use only input module from glfw on mac
1 parent 6bce505 commit 8ec8653

File tree

3 files changed

+65
-8
lines changed

3 files changed

+65
-8
lines changed

cmake/sokol.cmake

+5-2
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,17 @@ if(APPLE)
2929

3030
target_link_libraries(sokol PRIVATE
3131
"-framework Cocoa"
32+
"-framework IOKit"
3233
"-framework QuartzCore"
3334
"-framework Metal"
3435
"-framework MetalKit"
3536
"-framework AudioToolbox"
36-
"-framework GameController"
37-
glfw
3837
)
3938

39+
target_include_directories(sokol PRIVATE
40+
${THIRDPARTY_DIR}/glfw/src
41+
${THIRDPARTY_DIR}/glfw/include)
42+
4043
elseif(LINUX)
4144
target_link_libraries(sokol PRIVATE X11 GL Xi Xcursor m dl asound glfw)
4245
elseif(WIN32)

src/system/sokol/main.c

+1
Original file line numberDiff line numberDiff line change
@@ -687,6 +687,7 @@ static void cleanup(void *userdata)
687687

688688
free(app);
689689

690+
sgamepad_shutdown();
690691
sgl_shutdown();
691692
sg_shutdown();
692693
saudio_shutdown();

src/system/sokol/sokol_gamepad.h

+59-6
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ extern "C" {
7878

7979
SOKOL_API_DECL void sgamepad_init();
8080

81+
SOKOL_API_DECL void sgamepad_shutdown();
82+
8183
SOKOL_API_DECL void sgamepad_record_state();
8284

8385
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
186188
/*== PLATFORM SPECIFIC INCLUDES AND DEFINES ==================================*/
187189
#if defined (_SAPP_WIN32) || defined(_SAPP_APPLE) || defined(_SAPP_LINUX)
188190
#include <GLFW/glfw3.h>
191+
#define SGAMEPAD_MAX_SUPPORTED_GAMEPADS 4
189192
#else
190193
#define SGAMEPAD_MAX_SUPPORTED_GAMEPADS 0
191194
#endif
192195

193-
#define SGAMEPAD_MAX_SUPPORTED_GAMEPADS 4
194-
195196
typedef struct sgamepad {
196-
sgamepad_gamepad_state gamepad_states[SGAMEPAD_MAX_SUPPORTED_GAMEPADS];
197+
sgamepad_gamepad_state gamepad_states[4];
197198
} sgamepad;
198199

199200
_SOKOL_PRIVATE sgamepad _sgamepad = {0};
@@ -251,13 +252,65 @@ SOKOL_API_IMPL unsigned int sgamepad_get_max_supported_gamepads() {
251252
return SGAMEPAD_MAX_SUPPORTED_GAMEPADS;
252253
}
253254

254-
SOKOL_API_IMPL void sgamepad_init() {
255+
#if defined (_SAPP_WIN32) || defined(_SAPP_LINUX)
255256

256-
#if defined (_SAPP_WIN32) || defined(_SAPP_APPLE) || defined(_SAPP_LINUX)
257+
SOKOL_API_IMPL void sgamepad_init() {
257258
glfwInit();
258-
#endif
259259
}
260260

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+
261314
SOKOL_API_IMPL void sgamepad_record_state() {
262315
memset(_sgamepad.gamepad_states, 0, sizeof(_sgamepad.gamepad_states));
263316
_sgamepad_record_state();

0 commit comments

Comments
 (0)