From 6b89db74702b5a482c548af52d1a790742030a52 Mon Sep 17 00:00:00 2001 From: CrackedPixel <5776225+CrackedPixel@users.noreply.github.com> Date: Thu, 19 Feb 2026 19:15:16 -0600 Subject: [PATCH] updates for mac-arm64 --- src/Makefile | 57 +++++++++++++++++- src/platforms/rcore_desktop_rgfw.c | 96 ++++++++++++++++++++---------- 2 files changed, 120 insertions(+), 33 deletions(-) diff --git a/src/Makefile b/src/Makefile index 459b79f83..9baf931dc 100644 --- a/src/Makefile +++ b/src/Makefile @@ -115,6 +115,11 @@ USE_EXTERNAL_GLFW ?= FALSE GLFW_LINUX_ENABLE_WAYLAND ?= FALSE GLFW_LINUX_ENABLE_X11 ?= TRUE +# Enable support for X11 by default on Linux when using GLFW +# NOTE: Wayland is disabled by default, only enable if you are sure +RGFW_LINUX_ENABLE_WAYLAND ?= FALSE +RGFW_LINUX_ENABLE_X11 ?= TRUE + # PLATFORM_DESKTOP_SDL: It requires SDL library to be provided externally # WARNING: Library is not included in raylib, it MUST be configured by users SDL_INCLUDE_PATH ?= $(RAYLIB_SRC_PATH)/external/SDL2/include @@ -319,6 +324,17 @@ ifeq ($(TARGET_PLATFORM),PLATFORM_ANDROID) # It seems from Android NDK r22 onwards we need to use llvm-ar AR = $(ANDROID_TOOLCHAIN)/bin/llvm-ar endif +ifeq ($(TARGET_PLATFORM),PLATFORM_DESKTOP_RGFW) + ifeq ($(PLATFORM_OS),OSX) + # OSX default compiler + CC = clang + GLFW_OSX = -x objective-c + endif + ifeq ($(PLATFORM_OS),BSD) + # FreeBSD, OpenBSD, NetBSD, DragonFly default compiler + CC = clang + endif +endif # Define compiler flags: CFLAGS #------------------------------------------------------------------------------------------------ @@ -472,6 +488,38 @@ ifeq ($(TARGET_PLATFORM),PLATFORM_DESKTOP_GLFW) endif endif endif +ifeq ($(TARGET_PLATFORM),PLATFORM_DESKTOP_RGFW) + ifeq ($(PLATFORM_OS), LINUX) + ifeq ($(RGFW_LINUX_ENABLE_X11),TRUE) + CFLAGS += -DRGFW_X11 -DRGFW_UNIX + endif + ifeq ($(RGFW_LINUX_ENABLE_WAYLAND),TRUE) + CFLAGS += -DRGFW_WAYLAND -DRGFW_UNIX -DEGLAPIENTRY= + LDFLAGS += $(shell pkg-config wayland-client wayland-cursor wayland-egl xkbcommon --libs) + + WL_PROTOCOLS_DIR := external/RGFW/deps/wayland + + wl_generate = \ + $(eval protocol=$(1)) \ + $(eval basename=$(2)) \ + $(shell wayland-scanner client-header $(protocol) $(RAYLIB_SRC_PATH)/$(basename).h) \ + $(shell wayland-scanner private-code $(protocol) $(RAYLIB_SRC_PATH)/$(basename)-code.h) + + $(call wl_generate, $(WL_PROTOCOLS_DIR)/xdg-shell.xml, xdg-shell) + $(call wl_generate, $(WL_PROTOCOLS_DIR)/xdg-toplevel-icon-v1.xml, xdg-toplevel-icon-v1) + $(call wl_generate, $(WL_PROTOCOLS_DIR)/wayland.xml, wayland-client-protocol) + $(call wl_generate, $(WL_PROTOCOLS_DIR)/xdg-decoration-unstable-v1.xml, xdg-decoration-unstable-v1) + $(call wl_generate, $(WL_PROTOCOLS_DIR)/viewporter.xml, viewporter-client-protocol) + $(call wl_generate, $(WL_PROTOCOLS_DIR)/relative-pointer-unstable-v1.xml, relative-pointer-unstable-v1) + $(call wl_generate, $(WL_PROTOCOLS_DIR)/pointer-constraints-unstable-v1.xml, pointer-constraints-unstable-v1) + $(call wl_generate, $(WL_PROTOCOLS_DIR)/fractional-scale-v1.xml, fractional-scale-v1) + $(call wl_generate, $(WL_PROTOCOLS_DIR)/xdg-activation-v1.xml, xdg-activation-v1) + $(call wl_generate, $(WL_PROTOCOLS_DIR)/idle-inhibit-unstable-v1.xml, idle-inhibit-unstable-v1) + $(call wl_generate, $(WL_PROTOCOLS_DIR)/xdg-output-unstable-v1.xml, xdg-output-unstable-v1) + $(call wl_generate, $(WL_PROTOCOLS_DIR)/pointer-warp-v1.xml, pointer-warp-v1) + endif + endif +endif CFLAGS += $(CUSTOM_CFLAGS) @@ -618,7 +666,12 @@ ifeq ($(TARGET_PLATFORM),PLATFORM_DESKTOP_RGFW) ifeq ($(PLATFORM_OS),LINUX) # Libraries for Debian GNU/Linux desktop compipling # NOTE: Required packages: libegl1-mesa-dev - LDLIBS = -lGL -lX11 -lXrandr -lXinerama -lXi -lXcursor -lm -lpthread -ldl -lrt + ifeq ($(RGFW_LINUX_ENABLE_X11),TRUE) + LDLIBS = -lGL -lX11 -lXrandr -lXinerama -lXi -lXcursor -lm -lpthread -ldl -lrt + endif + ifeq ($(RGFW_LINUX_ENABLE_WAYLAND),TRUE) + LDLIBS += -lEGL $(shell pkg-config --libs wayland-client wayland-cursor wayland-egl xkbcommon --libs) + endif # Explicit link to libc ifeq ($(RAYLIB_LIBTYPE),SHARED) @@ -631,7 +684,7 @@ ifeq ($(TARGET_PLATFORM),PLATFORM_DESKTOP_RGFW) ifeq ($(PLATFORM_OS),OSX) # Libraries for Debian MacOS desktop compiling # NOTE: Required packages: libegl1-mesa-dev - LDLIBS += -lm -framework Foundation -framework AppKit -framework IOKit -framework OpenGL -framework CoreVideo + LDLIBS = -lm -framework Foundation -framework AppKit -framework IOKit -framework OpenGL -framework CoreVideo endif endif ifeq ($(TARGET_PLATFORM),PLATFORM_DRM) diff --git a/src/platforms/rcore_desktop_rgfw.c b/src/platforms/rcore_desktop_rgfw.c index f997a5ceb..08eccec4e 100644 --- a/src/platforms/rcore_desktop_rgfw.c +++ b/src/platforms/rcore_desktop_rgfw.c @@ -45,10 +45,26 @@ * **********************************************************************************************/ -// minigamepad used for gamepad support -#define MG_MAX_GAMEPADS MAX_GAMEPADS // copy raylibs define into minigamepad -#define MG_IMPLEMENTATION -#include "../external/minigamepad.h" +#if defined(_WIN32) || defined(_WIN64) + #define BI_ALPHABITFIELDS 4 + #define LoadImage LoadImageA + + // Temporarily rename conflicting symbols + #define CloseWindow CloseWindowWin32 + #define Rectangle RectangleWin32 + #define ShowCursor ShowCursorWin32 + + #define WIN32_LEAN_AND_MEAN + #include + + // Restore for raylib/RGFW + #undef CloseWindow + #undef Rectangle + #undef ShowCursor + #undef LoadImage + + #include "../external/fix_win32_compatibility.h" +#endif #if defined(PLATFORM_WEB_RGFW) #define RGFW_NO_GL_HEADER @@ -76,8 +92,6 @@ double get_time_seconds(void); #define ShowCursor __imp_ShowCursor #define _APISETSTRING_ - #undef MAX_PATH - #if defined(__cplusplus) extern "C" { #endif @@ -91,13 +105,28 @@ extern "C" { #if defined(__APPLE__) #define Point NSPOINT #define Size NSSIZE + + #ifdef GetColor + #undef GetColor + #endif + #define GetColor GetColor_osx + #ifdef EventType + #undef EventType + #endif + #define EventType EventType_osx #endif +// minigamepad used for gamepad support +#define MG_MAX_GAMEPADS MAX_GAMEPADS // copy raylibs define into minigamepad +#define MG_IMPLEMENTATION +#include "../external/RGFW/deps/minigamepad.h" + #define RGFW_ALLOC RL_MALLOC #define RGFW_FREE RL_FREE #define RGFW_CALLOC RL_CALLOC +#define RGFW_INT_DEFINED 1 // to avoid issues with minigamepad+RGFW definitions -#include "../external/RGFW.h" +#include "../external/RGFW/RGFW.h" #if defined(_WIN32) || defined(_WIN64) #undef DrawText @@ -105,8 +134,10 @@ extern "C" { #undef CloseWindow #undef Rectangle - #undef MAX_PATH - #define MAX_PATH 1025 + #ifdef MAX_PATH + #undef MAX_PATH + #define MAX_PATH 1025 + #endif #endif #if defined(__APPLE__) @@ -756,8 +787,10 @@ void *GetWindowHandle(void) { if (platform.window == NULL) return NULL; -#ifdef RGFW_WASM +#if defined(RGFW_WASM) return (void *)&platform.window->src.ctx; +#elif defined(RGFW_WAYLAND) + return (void *)platform.window->src.surface; #else return (void *)platform.window->src.window; #endif @@ -1317,29 +1350,30 @@ void PollInputEvents(void) } } break; case MG_EVENT_AXIS_MOVE: - int axis = mg_axisConvertTable[gamepad_event.axis]; + { + int axis = mg_axisConvertTable[gamepad_event.axis]; - switch (axis) { - case GAMEPAD_AXIS_LEFT_X: - case GAMEPAD_AXIS_LEFT_Y: - case GAMEPAD_AXIS_RIGHT_X: - case GAMEPAD_AXIS_RIGHT_Y: - CORE.Input.Gamepad.axisState[gamepadIndex][axis] = platform.minigamepad.gamepads[gamepadIndex].axes[gamepad_event.axis].value; - break; - case GAMEPAD_AXIS_LEFT_TRIGGER: - case GAMEPAD_AXIS_RIGHT_TRIGGER: - CORE.Input.Gamepad.axisState[gamepadIndex][axis] = platform.minigamepad.gamepads[gamepadIndex].axes[gamepad_event.axis].value; + switch (axis) { + case GAMEPAD_AXIS_LEFT_X: + case GAMEPAD_AXIS_LEFT_Y: + case GAMEPAD_AXIS_RIGHT_X: + case GAMEPAD_AXIS_RIGHT_Y: + CORE.Input.Gamepad.axisState[gamepadIndex][axis] = platform.minigamepad.gamepads[gamepadIndex].axes[gamepad_event.axis].value; + break; + case GAMEPAD_AXIS_LEFT_TRIGGER: + case GAMEPAD_AXIS_RIGHT_TRIGGER: + CORE.Input.Gamepad.axisState[gamepadIndex][axis] = platform.minigamepad.gamepads[gamepadIndex].axes[gamepad_event.axis].value; - /* trigger button press when axis is all the way */ - int button = (axis == GAMEPAD_AXIS_LEFT_TRIGGER) ? GAMEPAD_BUTTON_LEFT_TRIGGER_2 : GAMEPAD_BUTTON_RIGHT_TRIGGER_2; - int pressed = (platform.minigamepad.gamepads[gamepadIndex].axes[gamepad_event.axis].value >= 1.0f); + /* trigger button press when axis is all the way */ + int button = (axis == GAMEPAD_AXIS_LEFT_TRIGGER) ? GAMEPAD_BUTTON_LEFT_TRIGGER_2 : GAMEPAD_BUTTON_RIGHT_TRIGGER_2; + int pressed = (platform.minigamepad.gamepads[gamepadIndex].axes[gamepad_event.axis].value >= 1.0f); - CORE.Input.Gamepad.currentButtonState[gamepadIndex][button] = pressed; - if (pressed) CORE.Input.Gamepad.lastButtonPressed = button; - else if (CORE.Input.Gamepad.lastButtonPressed == button) CORE.Input.Gamepad.lastButtonPressed = 0; - break; - } - break; + CORE.Input.Gamepad.currentButtonState[gamepadIndex][button] = pressed; + if (pressed) CORE.Input.Gamepad.lastButtonPressed = button; + else if (CORE.Input.Gamepad.lastButtonPressed == button) CORE.Input.Gamepad.lastButtonPressed = 0; + break; + } + } break; case MG_EVENT_GAMEPAD_CONNECT: CORE.Input.Gamepad.ready[gamepadIndex] = true; CORE.Input.Gamepad.axisState[gamepadIndex][GAMEPAD_AXIS_LEFT_TRIGGER] = -1.0f; @@ -1486,7 +1520,7 @@ int InitPlatform(void) //---------------------------------------------------------------------------- #if defined(RGFW_WAYLAND) - if (RGFW_useWaylandBool) TRACELOG(LOG_INFO, "PLATFORM: DESKTOP (RGFW - Wayland): Initialized successfully"); + if (RGFW_usingWayland()) TRACELOG(LOG_INFO, "PLATFORM: DESKTOP (RGFW - Wayland): Initialized successfully"); else TRACELOG(LOG_INFO, "PLATFORM: DESKTOP (RGFW - X11 (fallback)): Initialized successfully"); #elif defined(RGFW_X11) #if defined(__APPLE__)