From 730371aafb11cd6b7de06d7b42cd8c3e24ba7599 Mon Sep 17 00:00:00 2001 From: asdqwe Date: Mon, 27 Jan 2025 18:02:16 -0300 Subject: [PATCH 1/3] Add GetGamepadGUID for PLATFORM_DESKTOP_GLFW --- src/platforms/rcore_android.c | 7 +++++++ src/platforms/rcore_desktop_glfw.c | 6 ++++++ src/platforms/rcore_desktop_rgfw.c | 7 +++++++ src/platforms/rcore_desktop_sdl.c | 7 +++++++ src/platforms/rcore_drm.c | 7 +++++++ src/platforms/rcore_template.c | 7 +++++++ src/platforms/rcore_web.c | 11 +++++++++-- src/raylib.h | 1 + 8 files changed, 51 insertions(+), 2 deletions(-) diff --git a/src/platforms/rcore_android.c b/src/platforms/rcore_android.c index 96ea367dcafa..34233614294a 100644 --- a/src/platforms/rcore_android.c +++ b/src/platforms/rcore_android.c @@ -624,6 +624,13 @@ int SetGamepadMappings(const char *mappings) return 0; } +// Get gamepad GUID +const char *GetGamepadGUID(int gamepad) +{ + TRACELOG(LOG_WARNING, "GetGamepadGUID() not implemented on target platform"); + return ""; +} + // Set gamepad vibration void SetGamepadVibration(int gamepad, float leftMotor, float rightMotor, float duration) { diff --git a/src/platforms/rcore_desktop_glfw.c b/src/platforms/rcore_desktop_glfw.c index 9159b302af72..4ae29acecae0 100644 --- a/src/platforms/rcore_desktop_glfw.c +++ b/src/platforms/rcore_desktop_glfw.c @@ -1084,6 +1084,12 @@ int SetGamepadMappings(const char *mappings) return glfwUpdateGamepadMappings(mappings); } +// Get gamepad GUID +const char *GetGamepadGUID(int gamepad) +{ + return glfwGetJoystickGUID(gamepad); +} + // Set gamepad vibration void SetGamepadVibration(int gamepad, float leftMotor, float rightMotor, float duration) { diff --git a/src/platforms/rcore_desktop_rgfw.c b/src/platforms/rcore_desktop_rgfw.c index 710b05f393ef..69912e913b53 100644 --- a/src/platforms/rcore_desktop_rgfw.c +++ b/src/platforms/rcore_desktop_rgfw.c @@ -789,6 +789,13 @@ int SetGamepadMappings(const char *mappings) return 0; } +// Get gamepad GUID +const char *GetGamepadGUID(int gamepad) +{ + TRACELOG(LOG_WARNING, "GetGamepadGUID() not implemented on target platform"); + return ""; +} + // Set gamepad vibration void SetGamepadVibration(int gamepad, float leftMotor, float rightMotor, float duration) { diff --git a/src/platforms/rcore_desktop_sdl.c b/src/platforms/rcore_desktop_sdl.c index f248e2614338..3e33b4bee1a2 100644 --- a/src/platforms/rcore_desktop_sdl.c +++ b/src/platforms/rcore_desktop_sdl.c @@ -1236,6 +1236,13 @@ int SetGamepadMappings(const char *mappings) return SDL_GameControllerAddMapping(mappings); } +// Get gamepad GUID +const char *GetGamepadGUID(int gamepad) +{ + TRACELOG(LOG_WARNING, "GetGamepadGUID() not implemented on target platform"); + return ""; +} + // Set gamepad vibration void SetGamepadVibration(int gamepad, float leftMotor, float rightMotor, float duration) { diff --git a/src/platforms/rcore_drm.c b/src/platforms/rcore_drm.c index 36d255bc02c3..d6fa5f218e91 100644 --- a/src/platforms/rcore_drm.c +++ b/src/platforms/rcore_drm.c @@ -619,6 +619,13 @@ int SetGamepadMappings(const char *mappings) return 0; } +// Get gamepad GUID +const char *GetGamepadGUID(int gamepad) +{ + TRACELOG(LOG_WARNING, "GetGamepadGUID() not implemented on target platform"); + return ""; +} + // Set gamepad vibration void SetGamepadVibration(int gamepad, float leftMotor, float rightMotor, float duration) { diff --git a/src/platforms/rcore_template.c b/src/platforms/rcore_template.c index c532bf24f9cb..cc559823faa7 100644 --- a/src/platforms/rcore_template.c +++ b/src/platforms/rcore_template.c @@ -381,6 +381,13 @@ int SetGamepadMappings(const char *mappings) return 0; } +// Get gamepad GUID +const char *GetGamepadGUID(int gamepad) +{ + TRACELOG(LOG_WARNING, "GetGamepadGUID() not implemented on target platform"); + return ""; +} + // Set gamepad vibration void SetGamepadVibration(int gamepad, float leftMotor, float rightMotor, float duration) { diff --git a/src/platforms/rcore_web.c b/src/platforms/rcore_web.c index 07f6f79babcc..c2208f9d80cf 100644 --- a/src/platforms/rcore_web.c +++ b/src/platforms/rcore_web.c @@ -162,13 +162,13 @@ bool WindowShouldClose(void) // REF: https://emscripten.org/docs/porting/asyncify.html // WindowShouldClose() is not called on a web-ready raylib application if using emscripten_set_main_loop() - // and encapsulating one frame execution on a UpdateDrawFrame() function, + // and encapsulating one frame execution on a UpdateDrawFrame() function, // allowing the browser to manage execution asynchronously // Optionally we can manage the time we give-control-back-to-browser if required, // but it seems below line could generate stuttering on some browsers emscripten_sleep(12); - + return false; } @@ -914,6 +914,13 @@ int SetGamepadMappings(const char *mappings) return 0; } +// Get gamepad GUID +const char *GetGamepadGUID(int gamepad) +{ + TRACELOG(LOG_WARNING, "GetGamepadGUID() not implemented on target platform"); + return ""; +} + // Set gamepad vibration void SetGamepadVibration(int gamepad, float leftMotor, float rightMotor, float duration) { diff --git a/src/raylib.h b/src/raylib.h index b8428e7ac90b..65d1f04e6bff 100644 --- a/src/raylib.h +++ b/src/raylib.h @@ -1195,6 +1195,7 @@ RLAPI int GetGamepadButtonPressed(void); // Get the last ga RLAPI int GetGamepadAxisCount(int gamepad); // Get gamepad axis count for a gamepad RLAPI float GetGamepadAxisMovement(int gamepad, int axis); // Get axis movement value for a gamepad axis RLAPI int SetGamepadMappings(const char *mappings); // Set internal gamepad mappings (SDL_GameControllerDB) +RLAPI const char *GetGamepadGUID(int gamepad); // Get gamepad GUID RLAPI void SetGamepadVibration(int gamepad, float leftMotor, float rightMotor, float duration); // Set gamepad vibration for both motors (duration in seconds) // Input-related functions: mouse From d35bf33641624bf224563b95340118c43337134e Mon Sep 17 00:00:00 2001 From: asdqwe Date: Mon, 27 Jan 2025 18:38:02 -0300 Subject: [PATCH 2/3] Add GetGamepadGUID for PLATFORM_DESKTOP_SDL --- src/platforms/rcore_desktop_sdl.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/platforms/rcore_desktop_sdl.c b/src/platforms/rcore_desktop_sdl.c index 3e33b4bee1a2..bc43ac040abc 100644 --- a/src/platforms/rcore_desktop_sdl.c +++ b/src/platforms/rcore_desktop_sdl.c @@ -68,6 +68,10 @@ #define MAX_CLIPBOARD_BUFFER_LENGTH 1024 // Size of the clipboard buffer used on GetClipboardText() #endif +#ifndef MAX_JOYSTICKGUID_BUFFER_LENGTH + #define MAX_JOYSTICKGUID_BUFFER_LENGTH 64 // Size of the joystick GUID buffer used on GetGamepadGUID(), must be at least 33 bytes +#endif + #if ((defined(SDL_MAJOR_VERSION) && (SDL_MAJOR_VERSION == 3)) && (defined(SDL_MINOR_VERSION) && (SDL_MINOR_VERSION >= 1))) #ifndef PLATFORM_DESKTOP_SDL3 #define PLATFORM_DESKTOP_SDL3 @@ -1239,8 +1243,13 @@ int SetGamepadMappings(const char *mappings) // Get gamepad GUID const char *GetGamepadGUID(int gamepad) { - TRACELOG(LOG_WARNING, "GetGamepadGUID() not implemented on target platform"); - return ""; + static char buffer[MAX_JOYSTICKGUID_BUFFER_LENGTH] = { 0 }; + + SDL_JoystickGUID joystickGUID = SDL_JoystickGetGUID(SDL_GameControllerGetJoystick(platform.gamepad[0])); + + SDL_JoystickGetGUIDString(joystickGUID, buffer, MAX_JOYSTICKGUID_BUFFER_LENGTH -1); + + return buffer; } // Set gamepad vibration From d0b275d0e0b9c72f5af1bd257bc5c611e719384e Mon Sep 17 00:00:00 2001 From: asdqwe Date: Mon, 27 Jan 2025 21:52:26 -0300 Subject: [PATCH 3/3] Fix wrong parameter --- src/platforms/rcore_desktop_sdl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/platforms/rcore_desktop_sdl.c b/src/platforms/rcore_desktop_sdl.c index bc43ac040abc..c06c20bcee0a 100644 --- a/src/platforms/rcore_desktop_sdl.c +++ b/src/platforms/rcore_desktop_sdl.c @@ -1245,7 +1245,7 @@ const char *GetGamepadGUID(int gamepad) { static char buffer[MAX_JOYSTICKGUID_BUFFER_LENGTH] = { 0 }; - SDL_JoystickGUID joystickGUID = SDL_JoystickGetGUID(SDL_GameControllerGetJoystick(platform.gamepad[0])); + SDL_JoystickGUID joystickGUID = SDL_JoystickGetGUID(SDL_GameControllerGetJoystick(platform.gamepad[gamepad])); SDL_JoystickGetGUIDString(joystickGUID, buffer, MAX_JOYSTICKGUID_BUFFER_LENGTH -1);