mirror of
https://github.com/raysan5/raylib.git
synced 2025-12-25 10:22:33 -05:00
Created raylib GLFW dependency (markdown)
79
raylib-GLFW-dependency.md
Normal file
79
raylib-GLFW-dependency.md
Normal file
@ -0,0 +1,79 @@
|
||||
raylib uses [GLFW library](https://github.com/glfw/glfw) for several platforms Window/Input events management:
|
||||
|
||||
- `PLATFORM_DESKTOP` (Windows, Linux, macOS)
|
||||
- `PLATFORM_WEB` (Html5) ([Emscripten JS implementation (limited)](https://github.com/emscripten-core/emscripten/blob/master/src/library_glfw.js))
|
||||
|
||||
GLFW is used only on [core](https://github.com/raysan5/raylib/blob/master/src/core.c) module.
|
||||
|
||||
In case someone could be interested in replacing GLFW for a custom platform-specific implementation, here it is a list with the functions currently used (raylib 3.0):
|
||||
|
||||
```c
|
||||
// GLFW: Device init/close
|
||||
glfwInit();
|
||||
glfwInitHint(GLFW_COCOA_CHDIR_RESOURCES, GLFW_FALSE);
|
||||
glfwDefaultWindowHints();
|
||||
glfwWindowHint(GLFW_SCALE_TO_MONITOR, GLFW_TRUE);
|
||||
glfwCreateWindow(CORE.Window.display.width, CORE.Window.display.height, CORE.Window.title, glfwGetPrimaryMonitor(), NULL);
|
||||
glfwDestroyWindow(CORE.Window.handle);
|
||||
glfwWindowShouldClose(CORE.Window.handle);
|
||||
glfwSetWindowShouldClose(CORE.Window.handle, GLFW_TRUE);
|
||||
glfwMakeContextCurrent(CORE.Window.handle);
|
||||
glfwGetFramebufferSize(CORE.Window.handle, &fbWidth, &fbHeight);
|
||||
glfwWaitEvents();
|
||||
glfwPollEvents();
|
||||
glfwSwapInterval(1);
|
||||
glfwSwapBuffers(CORE.Window.handle);
|
||||
glfwTerminate();
|
||||
|
||||
// GLFW: Window/Monitor management
|
||||
glfwGetWindowPos(CORE.Window.handle, &CORE.Window.position.x, &CORE.Window.position.y);
|
||||
glfwGetWindowAttrib(CORE.Window.handle, GLFW_VISIBLE) == GL_FALSE);
|
||||
glfwSetWindowTitle(CORE.Window.handle, title);
|
||||
glfwSetWindowPos(CORE.Window.handle, x, y);
|
||||
glfwGetPrimaryMonitor();
|
||||
glfwGetMonitors(&monitorCount);
|
||||
glfwGetMonitorName(monitors[monitor]));
|
||||
glfwGetMonitorPhysicalSize(monitors[monitor], &physicalWidth, NULL);
|
||||
glfwSetWindowMonitor(CORE.Window.handle, monitors[monitor], 0, 0, mode->width, mode->height, mode->refreshRate);
|
||||
glfwSetWindowSizeLimits(CORE.Window.handle, width, height, mode->width, mode->height);
|
||||
glfwSetWindowSize(CORE.Window.handle, width, height);
|
||||
glfwGetVideoMode(monitor);
|
||||
glfwShowWindow(CORE.Window.handle);
|
||||
glfwHideWindow(CORE.Window.handle);
|
||||
glfwGetWin32Window(CORE.Window.handle);
|
||||
glfwGetX11Window(window);
|
||||
glfwGetCocoaWindow(window);
|
||||
|
||||
// GLFW: Misc functionality
|
||||
glfwGetProcAddress();
|
||||
glfwGetClipboardString(CORE.Window.handle);
|
||||
glfwSetClipboardString(CORE.Window.handle, text);
|
||||
glfwGetTime();
|
||||
|
||||
// GLFW: Callbacks (Window/Input events)
|
||||
glfwSetErrorCallback(ErrorCallback);
|
||||
glfwSetWindowSizeCallback(CORE.Window.handle, WindowSizeCallback);
|
||||
glfwSetWindowIconifyCallback(CORE.Window.handle, WindowIconifyCallback);
|
||||
glfwSetWindowFocusCallback(CORE.Window.handle, WindowFocusCallback);
|
||||
glfwSetCursorEnterCallback(CORE.Window.handle, CursorEnterCallback);
|
||||
glfwSetCursorPosCallback(CORE.Window.handle, MouseCursorPosCallback);
|
||||
glfwSetMouseButtonCallback(CORE.Window.handle, MouseButtonCallback);
|
||||
glfwSetScrollCallback(CORE.Window.handle, ScrollCallback);
|
||||
glfwSetKeyCallback(CORE.Window.handle, KeyCallback);
|
||||
glfwSetCharCallback(CORE.Window.handle, CharCallback);
|
||||
glfwSetDropCallback(CORE.Window.handle, WindowDropCallback);
|
||||
|
||||
// GLFW: Input management
|
||||
// NOTE: Most inputs (keyboard/mouse) are managed through callbacks
|
||||
glfwJoystickPresent(i);
|
||||
glfwGetJoystickName(gamepad);
|
||||
glfwGetGamepadState(i, &state);
|
||||
glfwSetInputMode(CORE.Window.handle, GLFW_CURSOR, GLFW_CURSOR_NORMAL);
|
||||
glfwSetCursorPos(CORE.Window.handle, CORE.Input.Mouse.position.x, CORE.Input.Mouse.position.y);
|
||||
```
|
||||
|
||||
GLFW is NOT used on the following platforms, where custom implementations are used to manage Window/Inputs:
|
||||
|
||||
- `PLATFORM_ANDROID`-> Uses `native_app_glue` Android NDK module
|
||||
- `PLATFORM_RPI`(native, no desktop) -> Uses `EGL`, `evdev` and standard system libraries directly
|
||||
- `PLATFORM_UWP`-> Uses UWP provided libraries
|
||||
Reference in New Issue
Block a user