| @ -0,0 +1,58 @@ | |||||
| raylib input system basically uses an event polling mechanism, centralized on raylib [core module](https://github.com/raysan5/raylib/blob/master/src/core.c). | |||||
| At the end of the game loop, `EndDrawing()` function is called. This function calls `SwapBuffers()` and `PollInputEvents()`, multiple input devices are scanned at that moment and states are reqistered. | |||||
| Depending on the platform, input events are managed using different mechanisms. | |||||
| Default supported input systems are: `KEYBOARD`, `MOUSE`, `GAMEPAD`, `TOUCH` | |||||
| PLATFORM_DESKTOP | |||||
| --------------------- | |||||
| On this platform GLFW3 library ([rglfw](https://github.com/raysan5/raylib/blob/master/src/rglfw.c)) is used for input management. Events polling is done using `glfwPollEvents()`. | |||||
| Input | Library | Details | |||||
| :---: | :---: | --- | |||||
| KEYBOARD | GLFW3 | Values are registered through callbacks `KeyCallback()`, `CharCallback()` | |||||
| MOUSE | GLFW3 | Values are registered through callbacks `MouseButtonCallback()`, `MouseCursorPosCallback()`, `ScrollCallback()` | |||||
| GAMEPAD | GLFW3 | Values registered by (no-callbacks): `glfwJoystickPresent()`, `glfwGetJoystickButtons()`, `glfwGetJoystickAxes()` *NOTE: Those functions do not require `glfwPollEvents()`* | |||||
| TOUCH | - | Not available by default. Mouse clicks are mapped to touch events using gestures API. | |||||
| PLATFORM_WEB | |||||
| -------------- | |||||
| Some of the inputs in this platform are directly using GLFW3 because the library has been partially [ported to emscripten](https://github.com/emscripten-core/emscripten/blob/incoming/src/library_glfw.js). Despite that, gamepad and touch inputs are directly managed using emscripten API. | |||||
| Input | Library | Details | |||||
| :---: | :---: | --- | |||||
| KEYBOARD | GLFW3 | Same as `PLATFOM_DESKTOP`, uses GLFW3 JS implementation | |||||
| MOUSE | GLFW3 | Same as `PLATFOM_DESKTOP`, uses GLFW3 JS implementation | |||||
| GAMEPAD | Emscripten | Using emscripten gamepad API: `EmscriptenGamepadCallback()` | |||||
| TOUCH | Emscripten | Using emscripten touch API: `EmscriptenTouchCallback()` | |||||
| PLATFORM_ANDROID | |||||
| ------------------ | |||||
| Android NDK provides its own events polling system: `ALooper_pollAll()`, called on `PollInputEvents()`. | |||||
| Using `AndroidInputCallback()`, all inputs can be later processed. Currently only some inputs are processed but additional inputs could be processed | |||||
| Input | Library | Details | |||||
| :---: | :---: | --- | |||||
| KEYBOARD | Android NDK | Keys registered on `AndroidInputCallback()` | |||||
| MOUSE | - | Mouse inputs are actually mapped with TOUCH input | |||||
| GAMEPAD | Android NDK | Support *partially* implemented on `AndroidInputCallback()` | |||||
| TOUCH | Android NDK | Touch points registered on `AndroidInputCallback()` | |||||
| PLATFORM_RPI | |||||
| ------------- | |||||
| Probably this platform inputs polling is the most complex one. Some input events are polled by multiple secondary threads. | |||||
| Keyboard polling is a special case, it can use directly `stdin` inputs to read keycodes. In that case, `stdin` is being reconfigured for ASCII chars reading and reseted at the end of the program... This approach presents several problems like a standard input lose if program is not closed properly but it does not require `X.org` libraries or superuser rights... Second option is being implemented to avoid `stdin` usage. | |||||
| Input | Library | Details | |||||
| :---: | :---: | --- | |||||
| KEYBOARD (1) | - | `stdin` is remapped to read keys using: `InitKeyboard()`, `ProcessKeyboard()`, `RestoreKeyboard()` | |||||
| KEYBOARD (2) | libevdev | Using standard `input_event` to read events from input device | |||||
| MOUSE | libevdev | **Threaded**: `InitMouse()` -> `EventThreadSpawn()` -> `EventThread()`, uses `input_event` | |||||
| GAMEPAD | joystick.h | **Threaded**: `InitGamepad()` -> `GamepadThread()`, uses `js_event` | |||||
| TOUCH | libevdev | *Share `MOUSE` implementation* | |||||
| Probably inputs could be further improved in all platforms, specially TOUCH inputs support and mapping with MOUSE. | |||||