|
|
@ -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 |