|
@@ -86,6 +86,8 @@
|
|
|
#include "GLFW/glfw3native.h" // Required for: glfwGetCocoaWindow()
|
|
|
#endif
|
|
|
|
|
|
+#include <stddef.h> // Required for: size_t
|
|
|
+
|
|
|
//----------------------------------------------------------------------------------
|
|
|
// Types and Structures Definition
|
|
|
//----------------------------------------------------------------------------------
|
|
@@ -127,6 +129,11 @@ static void MouseScrollCallback(GLFWwindow *window, double xoffset, double yoffs
|
|
|
static void CursorEnterCallback(GLFWwindow *window, int enter); // GLFW3 Cursor Enter Callback, cursor enters client area
|
|
|
static void JoystickCallback(int jid, int event); // GLFW3 Joystick Connected/Disconnected Callback
|
|
|
|
|
|
+// Wrappers used by glfwInitAllocator
|
|
|
+static void* AllocateWrapper(size_t size, void* user); // GLFW3 GLFWallocatefun, wrapps around RL_MALLOC macro
|
|
|
+static void* ReallocateWrapper(void* block, size_t size, void* user); // GLFW3 GLFWreallocatefun, wrapps around RL_MALLOC macro
|
|
|
+static void DeallocateWrapper(void* block, void* user); // GLFW3 GLFWdeallocatefun, wraps around RL_FREE macro
|
|
|
+
|
|
|
//----------------------------------------------------------------------------------
|
|
|
// Module Functions Declaration
|
|
|
//----------------------------------------------------------------------------------
|
|
@@ -1287,21 +1294,38 @@ static void SetDimensionsFromMonitor(GLFWmonitor *monitor)
|
|
|
if (CORE.Window.screen.height == 0) CORE.Window.screen.height = CORE.Window.display.height;
|
|
|
}
|
|
|
|
|
|
+// Function wrappers around RL_*alloc macros, used by glfwInitAllocator() inside of InitPlatform()
|
|
|
+// We need to provide these because GLFWallocator expects function pointers with specific signatures.
|
|
|
+// Similar wrappers exist in utils.c but we cannot reuse them here due to declaration mismatch.
|
|
|
+// https://www.glfw.org/docs/latest/intro_guide.html#init_allocator
|
|
|
+static void* AllocateWrapper(size_t size, void* user)
|
|
|
+{
|
|
|
+ (void)user;
|
|
|
+ return RL_MALLOC(size);
|
|
|
+}
|
|
|
+static void* ReallocateWrapper(void* block, size_t size, void* user)
|
|
|
+{
|
|
|
+ (void)user;
|
|
|
+ return RL_REALLOC(block, size);
|
|
|
+}
|
|
|
+static void DeallocateWrapper(void* block, void* user)
|
|
|
+{
|
|
|
+ (void)user;
|
|
|
+ RL_FREE(block);
|
|
|
+}
|
|
|
+
|
|
|
// Initialize platform: graphics, inputs and more
|
|
|
int InitPlatform(void)
|
|
|
{
|
|
|
glfwSetErrorCallback(ErrorCallback);
|
|
|
-/*
|
|
|
- // TODO: Setup GLFW custom allocators to match raylib ones
|
|
|
+
|
|
|
const GLFWallocator allocator = {
|
|
|
- .allocate = MemAlloc,
|
|
|
- .deallocate = MemFree,
|
|
|
- .reallocate = MemRealloc,
|
|
|
- .user = NULL
|
|
|
+ .allocate = AllocateWrapper,
|
|
|
+ .deallocate = DeallocateWrapper,
|
|
|
+ .reallocate = ReallocateWrapper,
|
|
|
+ .user = NULL, // RL_*ALLOC macros are not capable of handling user-provided data
|
|
|
};
|
|
|
-
|
|
|
glfwInitAllocator(&allocator);
|
|
|
-*/
|
|
|
|
|
|
#if defined(__APPLE__)
|
|
|
glfwInitHint(GLFW_COCOA_CHDIR_RESOURCES, GLFW_FALSE);
|