From 1bee2ea85005fd276fa93d3ddeb07d1451454d5e Mon Sep 17 00:00:00 2001 From: Hyblocker Date: Tue, 5 Nov 2024 01:38:23 +0100 Subject: [PATCH] (vendor): Remove glfw --- lib/glfw/COPYING.txt | 22 - lib/glfw/include/GLFW/glfw3.h | 6547 --------------------------- lib/glfw/include/GLFW/glfw3native.h | 663 --- lib/glfw/lib-vc2015/glfw3.lib | Bin 696108 -> 0 bytes 4 files changed, 7232 deletions(-) delete mode 100644 lib/glfw/COPYING.txt delete mode 100644 lib/glfw/include/GLFW/glfw3.h delete mode 100644 lib/glfw/include/GLFW/glfw3native.h delete mode 100644 lib/glfw/lib-vc2015/glfw3.lib diff --git a/lib/glfw/COPYING.txt b/lib/glfw/COPYING.txt deleted file mode 100644 index ad16462..0000000 --- a/lib/glfw/COPYING.txt +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2002-2006 Marcus Geelnard -Copyright (c) 2006-2016 Camilla Berglund - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would - be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not - be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source - distribution. - diff --git a/lib/glfw/include/GLFW/glfw3.h b/lib/glfw/include/GLFW/glfw3.h deleted file mode 100644 index 9c55ac9..0000000 --- a/lib/glfw/include/GLFW/glfw3.h +++ /dev/null @@ -1,6547 +0,0 @@ -/************************************************************************* - * GLFW 3.4 - www.glfw.org - * A library for OpenGL, window and input - *------------------------------------------------------------------------ - * Copyright (c) 2002-2006 Marcus Geelnard - * Copyright (c) 2006-2019 Camilla Löwy - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would - * be appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and must not - * be misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. - * - *************************************************************************/ - -#ifndef _glfw3_h_ -#define _glfw3_h_ - -#ifdef __cplusplus -extern "C" { -#endif - - -/************************************************************************* - * Doxygen documentation - *************************************************************************/ - -/*! @file glfw3.h - * @brief The header of the GLFW 3 API. - * - * This is the header file of the GLFW 3 API. It defines all its types and - * declares all its functions. - * - * For more information about how to use this file, see @ref build_include. - */ -/*! @defgroup context Context reference - * @brief Functions and types related to OpenGL and OpenGL ES contexts. - * - * This is the reference documentation for OpenGL and OpenGL ES context related - * functions. For more task-oriented information, see the @ref context_guide. - */ -/*! @defgroup vulkan Vulkan support reference - * @brief Functions and types related to Vulkan. - * - * This is the reference documentation for Vulkan related functions and types. - * For more task-oriented information, see the @ref vulkan_guide. - */ -/*! @defgroup init Initialization, version and error reference - * @brief Functions and types related to initialization and error handling. - * - * This is the reference documentation for initialization and termination of - * the library, version management and error handling. For more task-oriented - * information, see the @ref intro_guide. - */ -/*! @defgroup input Input reference - * @brief Functions and types related to input handling. - * - * This is the reference documentation for input related functions and types. - * For more task-oriented information, see the @ref input_guide. - */ -/*! @defgroup monitor Monitor reference - * @brief Functions and types related to monitors. - * - * This is the reference documentation for monitor related functions and types. - * For more task-oriented information, see the @ref monitor_guide. - */ -/*! @defgroup window Window reference - * @brief Functions and types related to windows. - * - * This is the reference documentation for window related functions and types, - * including creation, deletion and event polling. For more task-oriented - * information, see the @ref window_guide. - */ - - -/************************************************************************* - * Compiler- and platform-specific preprocessor work - *************************************************************************/ - -/* If we are we on Windows, we want a single define for it. - */ -#if !defined(_WIN32) && (defined(__WIN32__) || defined(WIN32) || defined(__MINGW32__)) - #define _WIN32 -#endif /* _WIN32 */ - -/* Include because most Windows GLU headers need wchar_t and - * the macOS OpenGL header blocks the definition of ptrdiff_t by glext.h. - * Include it unconditionally to avoid surprising side-effects. - */ -#include - -/* Include because it is needed by Vulkan and related functions. - * Include it unconditionally to avoid surprising side-effects. - */ -#include - -#if defined(GLFW_INCLUDE_VULKAN) - #include -#endif /* Vulkan header */ - -/* The Vulkan header may have indirectly included windows.h (because of - * VK_USE_PLATFORM_WIN32_KHR) so we offer our replacement symbols after it. - */ - -/* It is customary to use APIENTRY for OpenGL function pointer declarations on - * all platforms. Additionally, the Windows OpenGL header needs APIENTRY. - */ -#if !defined(APIENTRY) - #if defined(_WIN32) - #define APIENTRY __stdcall - #else - #define APIENTRY - #endif - #define GLFW_APIENTRY_DEFINED -#endif /* APIENTRY */ - -/* Some Windows OpenGL headers need this. - */ -#if !defined(WINGDIAPI) && defined(_WIN32) - #define WINGDIAPI __declspec(dllimport) - #define GLFW_WINGDIAPI_DEFINED -#endif /* WINGDIAPI */ - -/* Some Windows GLU headers need this. - */ -#if !defined(CALLBACK) && defined(_WIN32) - #define CALLBACK __stdcall - #define GLFW_CALLBACK_DEFINED -#endif /* CALLBACK */ - -/* Include the chosen OpenGL or OpenGL ES headers. - */ -#if defined(GLFW_INCLUDE_ES1) - - #include - #if defined(GLFW_INCLUDE_GLEXT) - #include - #endif - -#elif defined(GLFW_INCLUDE_ES2) - - #include - #if defined(GLFW_INCLUDE_GLEXT) - #include - #endif - -#elif defined(GLFW_INCLUDE_ES3) - - #include - #if defined(GLFW_INCLUDE_GLEXT) - #include - #endif - -#elif defined(GLFW_INCLUDE_ES31) - - #include - #if defined(GLFW_INCLUDE_GLEXT) - #include - #endif - -#elif defined(GLFW_INCLUDE_ES32) - - #include - #if defined(GLFW_INCLUDE_GLEXT) - #include - #endif - -#elif defined(GLFW_INCLUDE_GLCOREARB) - - #if defined(__APPLE__) - - #include - #if defined(GLFW_INCLUDE_GLEXT) - #include - #endif /*GLFW_INCLUDE_GLEXT*/ - - #else /*__APPLE__*/ - - #include - #if defined(GLFW_INCLUDE_GLEXT) - #include - #endif - - #endif /*__APPLE__*/ - -#elif defined(GLFW_INCLUDE_GLU) - - #if defined(__APPLE__) - - #if defined(GLFW_INCLUDE_GLU) - #include - #endif - - #else /*__APPLE__*/ - - #if defined(GLFW_INCLUDE_GLU) - #include - #endif - - #endif /*__APPLE__*/ - -#elif !defined(GLFW_INCLUDE_NONE) && \ - !defined(__gl_h_) && \ - !defined(__gles1_gl_h_) && \ - !defined(__gles2_gl2_h_) && \ - !defined(__gles2_gl3_h_) && \ - !defined(__gles2_gl31_h_) && \ - !defined(__gles2_gl32_h_) && \ - !defined(__gl_glcorearb_h_) && \ - !defined(__gl2_h_) /*legacy*/ && \ - !defined(__gl3_h_) /*legacy*/ && \ - !defined(__gl31_h_) /*legacy*/ && \ - !defined(__gl32_h_) /*legacy*/ && \ - !defined(__glcorearb_h_) /*legacy*/ && \ - !defined(__GL_H__) /*non-standard*/ && \ - !defined(__gltypes_h_) /*non-standard*/ && \ - !defined(__glee_h_) /*non-standard*/ - - #if defined(__APPLE__) - - #if !defined(GLFW_INCLUDE_GLEXT) - #define GL_GLEXT_LEGACY - #endif - #include - - #else /*__APPLE__*/ - - #include - #if defined(GLFW_INCLUDE_GLEXT) - #include - #endif - - #endif /*__APPLE__*/ - -#endif /* OpenGL and OpenGL ES headers */ - -#if defined(GLFW_DLL) && defined(_GLFW_BUILD_DLL) - /* GLFW_DLL must be defined by applications that are linking against the DLL - * version of the GLFW library. _GLFW_BUILD_DLL is defined by the GLFW - * configuration header when compiling the DLL version of the library. - */ - #error "You must not have both GLFW_DLL and _GLFW_BUILD_DLL defined" -#endif - -/* GLFWAPI is used to declare public API functions for export - * from the DLL / shared library / dynamic library. - */ -#if defined(_WIN32) && defined(_GLFW_BUILD_DLL) - /* We are building GLFW as a Win32 DLL */ - #define GLFWAPI __declspec(dllexport) -#elif defined(_WIN32) && defined(GLFW_DLL) - /* We are calling a GLFW Win32 DLL */ - #define GLFWAPI __declspec(dllimport) -#elif defined(__GNUC__) && defined(_GLFW_BUILD_DLL) - /* We are building GLFW as a Unix shared library */ - #define GLFWAPI __attribute__((visibility("default"))) -#else - #define GLFWAPI -#endif - - -/************************************************************************* - * GLFW API tokens - *************************************************************************/ - -/*! @name GLFW version macros - * @{ */ -/*! @brief The major version number of the GLFW header. - * - * The major version number of the GLFW header. This is incremented when the - * API is changed in non-compatible ways. - * @ingroup init - */ -#define GLFW_VERSION_MAJOR 3 -/*! @brief The minor version number of the GLFW header. - * - * The minor version number of the GLFW header. This is incremented when - * features are added to the API but it remains backward-compatible. - * @ingroup init - */ -#define GLFW_VERSION_MINOR 4 -/*! @brief The revision number of the GLFW header. - * - * The revision number of the GLFW header. This is incremented when a bug fix - * release is made that does not contain any API changes. - * @ingroup init - */ -#define GLFW_VERSION_REVISION 0 -/*! @} */ - -/*! @brief One. - * - * This is only semantic sugar for the number 1. You can instead use `1` or - * `true` or `_True` or `GL_TRUE` or `VK_TRUE` or anything else that is equal - * to one. - * - * @ingroup init - */ -#define GLFW_TRUE 1 -/*! @brief Zero. - * - * This is only semantic sugar for the number 0. You can instead use `0` or - * `false` or `_False` or `GL_FALSE` or `VK_FALSE` or anything else that is - * equal to zero. - * - * @ingroup init - */ -#define GLFW_FALSE 0 - -/*! @name Key and button actions - * @{ */ -/*! @brief The key or mouse button was released. - * - * The key or mouse button was released. - * - * @ingroup input - */ -#define GLFW_RELEASE 0 -/*! @brief The key or mouse button was pressed. - * - * The key or mouse button was pressed. - * - * @ingroup input - */ -#define GLFW_PRESS 1 -/*! @brief The key was held down until it repeated. - * - * The key was held down until it repeated. - * - * @ingroup input - */ -#define GLFW_REPEAT 2 -/*! @} */ - -/*! @defgroup hat_state Joystick hat states - * @brief Joystick hat states. - * - * See [joystick hat input](@ref joystick_hat) for how these are used. - * - * @ingroup input - * @{ */ -#define GLFW_HAT_CENTERED 0 -#define GLFW_HAT_UP 1 -#define GLFW_HAT_RIGHT 2 -#define GLFW_HAT_DOWN 4 -#define GLFW_HAT_LEFT 8 -#define GLFW_HAT_RIGHT_UP (GLFW_HAT_RIGHT | GLFW_HAT_UP) -#define GLFW_HAT_RIGHT_DOWN (GLFW_HAT_RIGHT | GLFW_HAT_DOWN) -#define GLFW_HAT_LEFT_UP (GLFW_HAT_LEFT | GLFW_HAT_UP) -#define GLFW_HAT_LEFT_DOWN (GLFW_HAT_LEFT | GLFW_HAT_DOWN) - -/*! @ingroup input - */ -#define GLFW_KEY_UNKNOWN -1 - -/*! @} */ - -/*! @defgroup keys Keyboard key tokens - * @brief Keyboard key tokens. - * - * See [key input](@ref input_key) for how these are used. - * - * These key codes are inspired by the _USB HID Usage Tables v1.12_ (p. 53-60), - * but re-arranged to map to 7-bit ASCII for printable keys (function keys are - * put in the 256+ range). - * - * The naming of the key codes follow these rules: - * - The US keyboard layout is used - * - Names of printable alphanumeric characters are used (e.g. "A", "R", - * "3", etc.) - * - For non-alphanumeric characters, Unicode:ish names are used (e.g. - * "COMMA", "LEFT_SQUARE_BRACKET", etc.). Note that some names do not - * correspond to the Unicode standard (usually for brevity) - * - Keys that lack a clear US mapping are named "WORLD_x" - * - For non-printable keys, custom names are used (e.g. "F4", - * "BACKSPACE", etc.) - * - * @ingroup input - * @{ - */ - -/* Printable keys */ -#define GLFW_KEY_SPACE 32 -#define GLFW_KEY_APOSTROPHE 39 /* ' */ -#define GLFW_KEY_COMMA 44 /* , */ -#define GLFW_KEY_MINUS 45 /* - */ -#define GLFW_KEY_PERIOD 46 /* . */ -#define GLFW_KEY_SLASH 47 /* / */ -#define GLFW_KEY_0 48 -#define GLFW_KEY_1 49 -#define GLFW_KEY_2 50 -#define GLFW_KEY_3 51 -#define GLFW_KEY_4 52 -#define GLFW_KEY_5 53 -#define GLFW_KEY_6 54 -#define GLFW_KEY_7 55 -#define GLFW_KEY_8 56 -#define GLFW_KEY_9 57 -#define GLFW_KEY_SEMICOLON 59 /* ; */ -#define GLFW_KEY_EQUAL 61 /* = */ -#define GLFW_KEY_A 65 -#define GLFW_KEY_B 66 -#define GLFW_KEY_C 67 -#define GLFW_KEY_D 68 -#define GLFW_KEY_E 69 -#define GLFW_KEY_F 70 -#define GLFW_KEY_G 71 -#define GLFW_KEY_H 72 -#define GLFW_KEY_I 73 -#define GLFW_KEY_J 74 -#define GLFW_KEY_K 75 -#define GLFW_KEY_L 76 -#define GLFW_KEY_M 77 -#define GLFW_KEY_N 78 -#define GLFW_KEY_O 79 -#define GLFW_KEY_P 80 -#define GLFW_KEY_Q 81 -#define GLFW_KEY_R 82 -#define GLFW_KEY_S 83 -#define GLFW_KEY_T 84 -#define GLFW_KEY_U 85 -#define GLFW_KEY_V 86 -#define GLFW_KEY_W 87 -#define GLFW_KEY_X 88 -#define GLFW_KEY_Y 89 -#define GLFW_KEY_Z 90 -#define GLFW_KEY_LEFT_BRACKET 91 /* [ */ -#define GLFW_KEY_BACKSLASH 92 /* \ */ -#define GLFW_KEY_RIGHT_BRACKET 93 /* ] */ -#define GLFW_KEY_GRAVE_ACCENT 96 /* ` */ -#define GLFW_KEY_WORLD_1 161 /* non-US #1 */ -#define GLFW_KEY_WORLD_2 162 /* non-US #2 */ - -/* Function keys */ -#define GLFW_KEY_ESCAPE 256 -#define GLFW_KEY_ENTER 257 -#define GLFW_KEY_TAB 258 -#define GLFW_KEY_BACKSPACE 259 -#define GLFW_KEY_INSERT 260 -#define GLFW_KEY_DELETE 261 -#define GLFW_KEY_RIGHT 262 -#define GLFW_KEY_LEFT 263 -#define GLFW_KEY_DOWN 264 -#define GLFW_KEY_UP 265 -#define GLFW_KEY_PAGE_UP 266 -#define GLFW_KEY_PAGE_DOWN 267 -#define GLFW_KEY_HOME 268 -#define GLFW_KEY_END 269 -#define GLFW_KEY_CAPS_LOCK 280 -#define GLFW_KEY_SCROLL_LOCK 281 -#define GLFW_KEY_NUM_LOCK 282 -#define GLFW_KEY_PRINT_SCREEN 283 -#define GLFW_KEY_PAUSE 284 -#define GLFW_KEY_F1 290 -#define GLFW_KEY_F2 291 -#define GLFW_KEY_F3 292 -#define GLFW_KEY_F4 293 -#define GLFW_KEY_F5 294 -#define GLFW_KEY_F6 295 -#define GLFW_KEY_F7 296 -#define GLFW_KEY_F8 297 -#define GLFW_KEY_F9 298 -#define GLFW_KEY_F10 299 -#define GLFW_KEY_F11 300 -#define GLFW_KEY_F12 301 -#define GLFW_KEY_F13 302 -#define GLFW_KEY_F14 303 -#define GLFW_KEY_F15 304 -#define GLFW_KEY_F16 305 -#define GLFW_KEY_F17 306 -#define GLFW_KEY_F18 307 -#define GLFW_KEY_F19 308 -#define GLFW_KEY_F20 309 -#define GLFW_KEY_F21 310 -#define GLFW_KEY_F22 311 -#define GLFW_KEY_F23 312 -#define GLFW_KEY_F24 313 -#define GLFW_KEY_F25 314 -#define GLFW_KEY_KP_0 320 -#define GLFW_KEY_KP_1 321 -#define GLFW_KEY_KP_2 322 -#define GLFW_KEY_KP_3 323 -#define GLFW_KEY_KP_4 324 -#define GLFW_KEY_KP_5 325 -#define GLFW_KEY_KP_6 326 -#define GLFW_KEY_KP_7 327 -#define GLFW_KEY_KP_8 328 -#define GLFW_KEY_KP_9 329 -#define GLFW_KEY_KP_DECIMAL 330 -#define GLFW_KEY_KP_DIVIDE 331 -#define GLFW_KEY_KP_MULTIPLY 332 -#define GLFW_KEY_KP_SUBTRACT 333 -#define GLFW_KEY_KP_ADD 334 -#define GLFW_KEY_KP_ENTER 335 -#define GLFW_KEY_KP_EQUAL 336 -#define GLFW_KEY_LEFT_SHIFT 340 -#define GLFW_KEY_LEFT_CONTROL 341 -#define GLFW_KEY_LEFT_ALT 342 -#define GLFW_KEY_LEFT_SUPER 343 -#define GLFW_KEY_RIGHT_SHIFT 344 -#define GLFW_KEY_RIGHT_CONTROL 345 -#define GLFW_KEY_RIGHT_ALT 346 -#define GLFW_KEY_RIGHT_SUPER 347 -#define GLFW_KEY_MENU 348 - -#define GLFW_KEY_LAST GLFW_KEY_MENU - -/*! @} */ - -/*! @defgroup mods Modifier key flags - * @brief Modifier key flags. - * - * See [key input](@ref input_key) for how these are used. - * - * @ingroup input - * @{ */ - -/*! @brief If this bit is set one or more Shift keys were held down. - * - * If this bit is set one or more Shift keys were held down. - */ -#define GLFW_MOD_SHIFT 0x0001 -/*! @brief If this bit is set one or more Control keys were held down. - * - * If this bit is set one or more Control keys were held down. - */ -#define GLFW_MOD_CONTROL 0x0002 -/*! @brief If this bit is set one or more Alt keys were held down. - * - * If this bit is set one or more Alt keys were held down. - */ -#define GLFW_MOD_ALT 0x0004 -/*! @brief If this bit is set one or more Super keys were held down. - * - * If this bit is set one or more Super keys were held down. - */ -#define GLFW_MOD_SUPER 0x0008 -/*! @brief If this bit is set the Caps Lock key is enabled. - * - * If this bit is set the Caps Lock key is enabled and the @ref - * GLFW_LOCK_KEY_MODS input mode is set. - */ -#define GLFW_MOD_CAPS_LOCK 0x0010 -/*! @brief If this bit is set the Num Lock key is enabled. - * - * If this bit is set the Num Lock key is enabled and the @ref - * GLFW_LOCK_KEY_MODS input mode is set. - */ -#define GLFW_MOD_NUM_LOCK 0x0020 - -/*! @} */ - -/*! @defgroup buttons Mouse buttons - * @brief Mouse button IDs. - * - * See [mouse button input](@ref input_mouse_button) for how these are used. - * - * @ingroup input - * @{ */ -#define GLFW_MOUSE_BUTTON_1 0 -#define GLFW_MOUSE_BUTTON_2 1 -#define GLFW_MOUSE_BUTTON_3 2 -#define GLFW_MOUSE_BUTTON_4 3 -#define GLFW_MOUSE_BUTTON_5 4 -#define GLFW_MOUSE_BUTTON_6 5 -#define GLFW_MOUSE_BUTTON_7 6 -#define GLFW_MOUSE_BUTTON_8 7 -#define GLFW_MOUSE_BUTTON_LAST GLFW_MOUSE_BUTTON_8 -#define GLFW_MOUSE_BUTTON_LEFT GLFW_MOUSE_BUTTON_1 -#define GLFW_MOUSE_BUTTON_RIGHT GLFW_MOUSE_BUTTON_2 -#define GLFW_MOUSE_BUTTON_MIDDLE GLFW_MOUSE_BUTTON_3 -/*! @} */ - -/*! @defgroup joysticks Joysticks - * @brief Joystick IDs. - * - * See [joystick input](@ref joystick) for how these are used. - * - * @ingroup input - * @{ */ -#define GLFW_JOYSTICK_1 0 -#define GLFW_JOYSTICK_2 1 -#define GLFW_JOYSTICK_3 2 -#define GLFW_JOYSTICK_4 3 -#define GLFW_JOYSTICK_5 4 -#define GLFW_JOYSTICK_6 5 -#define GLFW_JOYSTICK_7 6 -#define GLFW_JOYSTICK_8 7 -#define GLFW_JOYSTICK_9 8 -#define GLFW_JOYSTICK_10 9 -#define GLFW_JOYSTICK_11 10 -#define GLFW_JOYSTICK_12 11 -#define GLFW_JOYSTICK_13 12 -#define GLFW_JOYSTICK_14 13 -#define GLFW_JOYSTICK_15 14 -#define GLFW_JOYSTICK_16 15 -#define GLFW_JOYSTICK_LAST GLFW_JOYSTICK_16 -/*! @} */ - -/*! @defgroup gamepad_buttons Gamepad buttons - * @brief Gamepad buttons. - * - * See @ref gamepad for how these are used. - * - * @ingroup input - * @{ */ -#define GLFW_GAMEPAD_BUTTON_A 0 -#define GLFW_GAMEPAD_BUTTON_B 1 -#define GLFW_GAMEPAD_BUTTON_X 2 -#define GLFW_GAMEPAD_BUTTON_Y 3 -#define GLFW_GAMEPAD_BUTTON_LEFT_BUMPER 4 -#define GLFW_GAMEPAD_BUTTON_RIGHT_BUMPER 5 -#define GLFW_GAMEPAD_BUTTON_BACK 6 -#define GLFW_GAMEPAD_BUTTON_START 7 -#define GLFW_GAMEPAD_BUTTON_GUIDE 8 -#define GLFW_GAMEPAD_BUTTON_LEFT_THUMB 9 -#define GLFW_GAMEPAD_BUTTON_RIGHT_THUMB 10 -#define GLFW_GAMEPAD_BUTTON_DPAD_UP 11 -#define GLFW_GAMEPAD_BUTTON_DPAD_RIGHT 12 -#define GLFW_GAMEPAD_BUTTON_DPAD_DOWN 13 -#define GLFW_GAMEPAD_BUTTON_DPAD_LEFT 14 -#define GLFW_GAMEPAD_BUTTON_LAST GLFW_GAMEPAD_BUTTON_DPAD_LEFT - -#define GLFW_GAMEPAD_BUTTON_CROSS GLFW_GAMEPAD_BUTTON_A -#define GLFW_GAMEPAD_BUTTON_CIRCLE GLFW_GAMEPAD_BUTTON_B -#define GLFW_GAMEPAD_BUTTON_SQUARE GLFW_GAMEPAD_BUTTON_X -#define GLFW_GAMEPAD_BUTTON_TRIANGLE GLFW_GAMEPAD_BUTTON_Y -/*! @} */ - -/*! @defgroup gamepad_axes Gamepad axes - * @brief Gamepad axes. - * - * See @ref gamepad for how these are used. - * - * @ingroup input - * @{ */ -#define GLFW_GAMEPAD_AXIS_LEFT_X 0 -#define GLFW_GAMEPAD_AXIS_LEFT_Y 1 -#define GLFW_GAMEPAD_AXIS_RIGHT_X 2 -#define GLFW_GAMEPAD_AXIS_RIGHT_Y 3 -#define GLFW_GAMEPAD_AXIS_LEFT_TRIGGER 4 -#define GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER 5 -#define GLFW_GAMEPAD_AXIS_LAST GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER -/*! @} */ - -/*! @defgroup errors Error codes - * @brief Error codes. - * - * See [error handling](@ref error_handling) for how these are used. - * - * @ingroup init - * @{ */ -/*! @brief No error has occurred. - * - * No error has occurred. - * - * @analysis Yay. - */ -#define GLFW_NO_ERROR 0 -/*! @brief GLFW has not been initialized. - * - * This occurs if a GLFW function was called that must not be called unless the - * library is [initialized](@ref intro_init). - * - * @analysis Application programmer error. Initialize GLFW before calling any - * function that requires initialization. - */ -#define GLFW_NOT_INITIALIZED 0x00010001 -/*! @brief No context is current for this thread. - * - * This occurs if a GLFW function was called that needs and operates on the - * current OpenGL or OpenGL ES context but no context is current on the calling - * thread. One such function is @ref glfwSwapInterval. - * - * @analysis Application programmer error. Ensure a context is current before - * calling functions that require a current context. - */ -#define GLFW_NO_CURRENT_CONTEXT 0x00010002 -/*! @brief One of the arguments to the function was an invalid enum value. - * - * One of the arguments to the function was an invalid enum value, for example - * requesting @ref GLFW_RED_BITS with @ref glfwGetWindowAttrib. - * - * @analysis Application programmer error. Fix the offending call. - */ -#define GLFW_INVALID_ENUM 0x00010003 -/*! @brief One of the arguments to the function was an invalid value. - * - * One of the arguments to the function was an invalid value, for example - * requesting a non-existent OpenGL or OpenGL ES version like 2.7. - * - * Requesting a valid but unavailable OpenGL or OpenGL ES version will instead - * result in a @ref GLFW_VERSION_UNAVAILABLE error. - * - * @analysis Application programmer error. Fix the offending call. - */ -#define GLFW_INVALID_VALUE 0x00010004 -/*! @brief A memory allocation failed. - * - * A memory allocation failed. - * - * @analysis A bug in GLFW or the underlying operating system. Report the bug - * to our [issue tracker](https://github.com/glfw/glfw/issues). - */ -#define GLFW_OUT_OF_MEMORY 0x00010005 -/*! @brief GLFW could not find support for the requested API on the system. - * - * GLFW could not find support for the requested API on the system. - * - * @analysis The installed graphics driver does not support the requested - * API, or does not support it via the chosen context creation API. - * Below are a few examples. - * - * @par - * Some pre-installed Windows graphics drivers do not support OpenGL. AMD only - * supports OpenGL ES via EGL, while Nvidia and Intel only support it via - * a WGL or GLX extension. macOS does not provide OpenGL ES at all. The Mesa - * EGL, OpenGL and OpenGL ES libraries do not interface with the Nvidia binary - * driver. Older graphics drivers do not support Vulkan. - */ -#define GLFW_API_UNAVAILABLE 0x00010006 -/*! @brief The requested OpenGL or OpenGL ES version is not available. - * - * The requested OpenGL or OpenGL ES version (including any requested context - * or framebuffer hints) is not available on this machine. - * - * @analysis The machine does not support your requirements. If your - * application is sufficiently flexible, downgrade your requirements and try - * again. Otherwise, inform the user that their machine does not match your - * requirements. - * - * @par - * Future invalid OpenGL and OpenGL ES versions, for example OpenGL 4.8 if 5.0 - * comes out before the 4.x series gets that far, also fail with this error and - * not @ref GLFW_INVALID_VALUE, because GLFW cannot know what future versions - * will exist. - */ -#define GLFW_VERSION_UNAVAILABLE 0x00010007 -/*! @brief A platform-specific error occurred that does not match any of the - * more specific categories. - * - * A platform-specific error occurred that does not match any of the more - * specific categories. - * - * @analysis A bug or configuration error in GLFW, the underlying operating - * system or its drivers, or a lack of required resources. Report the issue to - * our [issue tracker](https://github.com/glfw/glfw/issues). - */ -#define GLFW_PLATFORM_ERROR 0x00010008 -/*! @brief The requested format is not supported or available. - * - * If emitted during window creation, the requested pixel format is not - * supported. - * - * If emitted when querying the clipboard, the contents of the clipboard could - * not be converted to the requested format. - * - * @analysis If emitted during window creation, one or more - * [hard constraints](@ref window_hints_hard) did not match any of the - * available pixel formats. If your application is sufficiently flexible, - * downgrade your requirements and try again. Otherwise, inform the user that - * their machine does not match your requirements. - * - * @par - * If emitted when querying the clipboard, ignore the error or report it to - * the user, as appropriate. - */ -#define GLFW_FORMAT_UNAVAILABLE 0x00010009 -/*! @brief The specified window does not have an OpenGL or OpenGL ES context. - * - * A window that does not have an OpenGL or OpenGL ES context was passed to - * a function that requires it to have one. - * - * @analysis Application programmer error. Fix the offending call. - */ -#define GLFW_NO_WINDOW_CONTEXT 0x0001000A -/*! @brief The specified cursor shape is not available. - * - * The specified standard cursor shape is not available, either because the - * current platform cursor theme does not provide it or because it is not - * available on the platform. - * - * @analysis Platform or system settings limitation. Pick another - * [standard cursor shape](@ref shapes) or create a - * [custom cursor](@ref cursor_custom). - */ -#define GLFW_CURSOR_UNAVAILABLE 0x0001000B -/*! @brief The requested feature is not provided by the platform. - * - * The requested feature is not provided by the platform, so GLFW is unable to - * implement it. The documentation for each function notes if it could emit - * this error. - * - * @analysis Platform or platform version limitation. The error can be ignored - * unless the feature is critical to the application. - * - * @par - * A function call that emits this error has no effect other than the error and - * updating any existing out parameters. - */ -#define GLFW_FEATURE_UNAVAILABLE 0x0001000C -/*! @brief The requested feature is not implemented for the platform. - * - * The requested feature has not yet been implemented in GLFW for this platform. - * - * @analysis An incomplete implementation of GLFW for this platform, hopefully - * fixed in a future release. The error can be ignored unless the feature is - * critical to the application. - * - * @par - * A function call that emits this error has no effect other than the error and - * updating any existing out parameters. - */ -#define GLFW_FEATURE_UNIMPLEMENTED 0x0001000D -/*! @brief Platform unavailable or no matching platform was found. - * - * If emitted during initialization, no matching platform was found. If the @ref - * GLFW_PLATFORM init hint was set to `GLFW_ANY_PLATFORM`, GLFW could not detect any of - * the platforms supported by this library binary, except for the Null platform. If the - * init hint was set to a specific platform, it is either not supported by this library - * binary or GLFW was not able to detect it. - * - * If emitted by a native access function, GLFW was initialized for a different platform - * than the function is for. - * - * @analysis Failure to detect any platform usually only happens on non-macOS Unix - * systems, either when no window system is running or the program was run from - * a terminal that does not have the necessary environment variables. Fall back to - * a different platform if possible or notify the user that no usable platform was - * detected. - * - * Failure to detect a specific platform may have the same cause as above or be because - * support for that platform was not compiled in. Call @ref glfwPlatformSupported to - * check whether a specific platform is supported by a library binary. - */ -#define GLFW_PLATFORM_UNAVAILABLE 0x0001000E -/*! @} */ - -/*! @addtogroup window - * @{ */ -/*! @brief Input focus window hint and attribute - * - * Input focus [window hint](@ref GLFW_FOCUSED_hint) or - * [window attribute](@ref GLFW_FOCUSED_attrib). - */ -#define GLFW_FOCUSED 0x00020001 -/*! @brief Window iconification window attribute - * - * Window iconification [window attribute](@ref GLFW_ICONIFIED_attrib). - */ -#define GLFW_ICONIFIED 0x00020002 -/*! @brief Window resize-ability window hint and attribute - * - * Window resize-ability [window hint](@ref GLFW_RESIZABLE_hint) and - * [window attribute](@ref GLFW_RESIZABLE_attrib). - */ -#define GLFW_RESIZABLE 0x00020003 -/*! @brief Window visibility window hint and attribute - * - * Window visibility [window hint](@ref GLFW_VISIBLE_hint) and - * [window attribute](@ref GLFW_VISIBLE_attrib). - */ -#define GLFW_VISIBLE 0x00020004 -/*! @brief Window decoration window hint and attribute - * - * Window decoration [window hint](@ref GLFW_DECORATED_hint) and - * [window attribute](@ref GLFW_DECORATED_attrib). - */ -#define GLFW_DECORATED 0x00020005 -/*! @brief Window auto-iconification window hint and attribute - * - * Window auto-iconification [window hint](@ref GLFW_AUTO_ICONIFY_hint) and - * [window attribute](@ref GLFW_AUTO_ICONIFY_attrib). - */ -#define GLFW_AUTO_ICONIFY 0x00020006 -/*! @brief Window decoration window hint and attribute - * - * Window decoration [window hint](@ref GLFW_FLOATING_hint) and - * [window attribute](@ref GLFW_FLOATING_attrib). - */ -#define GLFW_FLOATING 0x00020007 -/*! @brief Window maximization window hint and attribute - * - * Window maximization [window hint](@ref GLFW_MAXIMIZED_hint) and - * [window attribute](@ref GLFW_MAXIMIZED_attrib). - */ -#define GLFW_MAXIMIZED 0x00020008 -/*! @brief Cursor centering window hint - * - * Cursor centering [window hint](@ref GLFW_CENTER_CURSOR_hint). - */ -#define GLFW_CENTER_CURSOR 0x00020009 -/*! @brief Window framebuffer transparency hint and attribute - * - * Window framebuffer transparency - * [window hint](@ref GLFW_TRANSPARENT_FRAMEBUFFER_hint) and - * [window attribute](@ref GLFW_TRANSPARENT_FRAMEBUFFER_attrib). - */ -#define GLFW_TRANSPARENT_FRAMEBUFFER 0x0002000A -/*! @brief Mouse cursor hover window attribute. - * - * Mouse cursor hover [window attribute](@ref GLFW_HOVERED_attrib). - */ -#define GLFW_HOVERED 0x0002000B -/*! @brief Input focus on calling show window hint and attribute - * - * Input focus [window hint](@ref GLFW_FOCUS_ON_SHOW_hint) or - * [window attribute](@ref GLFW_FOCUS_ON_SHOW_attrib). - */ -#define GLFW_FOCUS_ON_SHOW 0x0002000C - -/*! @brief Mouse input transparency window hint and attribute - * - * Mouse input transparency [window hint](@ref GLFW_MOUSE_PASSTHROUGH_hint) or - * [window attribute](@ref GLFW_MOUSE_PASSTHROUGH_attrib). - */ -#define GLFW_MOUSE_PASSTHROUGH 0x0002000D - -/*! @brief Initial position x-coordinate window hint. - * - * Initial position x-coordinate [window hint](@ref GLFW_POSITION_X). - */ -#define GLFW_POSITION_X 0x0002000E - -/*! @brief Initial position y-coordinate window hint. - * - * Initial position y-coordinate [window hint](@ref GLFW_POSITION_Y). - */ -#define GLFW_POSITION_Y 0x0002000F - -/*! @brief Framebuffer bit depth hint. - * - * Framebuffer bit depth [hint](@ref GLFW_RED_BITS). - */ -#define GLFW_RED_BITS 0x00021001 -/*! @brief Framebuffer bit depth hint. - * - * Framebuffer bit depth [hint](@ref GLFW_GREEN_BITS). - */ -#define GLFW_GREEN_BITS 0x00021002 -/*! @brief Framebuffer bit depth hint. - * - * Framebuffer bit depth [hint](@ref GLFW_BLUE_BITS). - */ -#define GLFW_BLUE_BITS 0x00021003 -/*! @brief Framebuffer bit depth hint. - * - * Framebuffer bit depth [hint](@ref GLFW_ALPHA_BITS). - */ -#define GLFW_ALPHA_BITS 0x00021004 -/*! @brief Framebuffer bit depth hint. - * - * Framebuffer bit depth [hint](@ref GLFW_DEPTH_BITS). - */ -#define GLFW_DEPTH_BITS 0x00021005 -/*! @brief Framebuffer bit depth hint. - * - * Framebuffer bit depth [hint](@ref GLFW_STENCIL_BITS). - */ -#define GLFW_STENCIL_BITS 0x00021006 -/*! @brief Framebuffer bit depth hint. - * - * Framebuffer bit depth [hint](@ref GLFW_ACCUM_RED_BITS). - */ -#define GLFW_ACCUM_RED_BITS 0x00021007 -/*! @brief Framebuffer bit depth hint. - * - * Framebuffer bit depth [hint](@ref GLFW_ACCUM_GREEN_BITS). - */ -#define GLFW_ACCUM_GREEN_BITS 0x00021008 -/*! @brief Framebuffer bit depth hint. - * - * Framebuffer bit depth [hint](@ref GLFW_ACCUM_BLUE_BITS). - */ -#define GLFW_ACCUM_BLUE_BITS 0x00021009 -/*! @brief Framebuffer bit depth hint. - * - * Framebuffer bit depth [hint](@ref GLFW_ACCUM_ALPHA_BITS). - */ -#define GLFW_ACCUM_ALPHA_BITS 0x0002100A -/*! @brief Framebuffer auxiliary buffer hint. - * - * Framebuffer auxiliary buffer [hint](@ref GLFW_AUX_BUFFERS). - */ -#define GLFW_AUX_BUFFERS 0x0002100B -/*! @brief OpenGL stereoscopic rendering hint. - * - * OpenGL stereoscopic rendering [hint](@ref GLFW_STEREO). - */ -#define GLFW_STEREO 0x0002100C -/*! @brief Framebuffer MSAA samples hint. - * - * Framebuffer MSAA samples [hint](@ref GLFW_SAMPLES). - */ -#define GLFW_SAMPLES 0x0002100D -/*! @brief Framebuffer sRGB hint. - * - * Framebuffer sRGB [hint](@ref GLFW_SRGB_CAPABLE). - */ -#define GLFW_SRGB_CAPABLE 0x0002100E -/*! @brief Monitor refresh rate hint. - * - * Monitor refresh rate [hint](@ref GLFW_REFRESH_RATE). - */ -#define GLFW_REFRESH_RATE 0x0002100F -/*! @brief Framebuffer double buffering hint and attribute. - * - * Framebuffer double buffering [hint](@ref GLFW_DOUBLEBUFFER_hint) and - * [attribute](@ref GLFW_DOUBLEBUFFER_attrib). - */ -#define GLFW_DOUBLEBUFFER 0x00021010 - -/*! @brief Context client API hint and attribute. - * - * Context client API [hint](@ref GLFW_CLIENT_API_hint) and - * [attribute](@ref GLFW_CLIENT_API_attrib). - */ -#define GLFW_CLIENT_API 0x00022001 -/*! @brief Context client API major version hint and attribute. - * - * Context client API major version [hint](@ref GLFW_CONTEXT_VERSION_MAJOR_hint) - * and [attribute](@ref GLFW_CONTEXT_VERSION_MAJOR_attrib). - */ -#define GLFW_CONTEXT_VERSION_MAJOR 0x00022002 -/*! @brief Context client API minor version hint and attribute. - * - * Context client API minor version [hint](@ref GLFW_CONTEXT_VERSION_MINOR_hint) - * and [attribute](@ref GLFW_CONTEXT_VERSION_MINOR_attrib). - */ -#define GLFW_CONTEXT_VERSION_MINOR 0x00022003 -/*! @brief Context client API revision number attribute. - * - * Context client API revision number - * [attribute](@ref GLFW_CONTEXT_REVISION_attrib). - */ -#define GLFW_CONTEXT_REVISION 0x00022004 -/*! @brief Context robustness hint and attribute. - * - * Context client API revision number [hint](@ref GLFW_CONTEXT_ROBUSTNESS_hint) - * and [attribute](@ref GLFW_CONTEXT_ROBUSTNESS_attrib). - */ -#define GLFW_CONTEXT_ROBUSTNESS 0x00022005 -/*! @brief OpenGL forward-compatibility hint and attribute. - * - * OpenGL forward-compatibility [hint](@ref GLFW_OPENGL_FORWARD_COMPAT_hint) - * and [attribute](@ref GLFW_OPENGL_FORWARD_COMPAT_attrib). - */ -#define GLFW_OPENGL_FORWARD_COMPAT 0x00022006 -/*! @brief Debug mode context hint and attribute. - * - * Debug mode context [hint](@ref GLFW_CONTEXT_DEBUG_hint) and - * [attribute](@ref GLFW_CONTEXT_DEBUG_attrib). - */ -#define GLFW_CONTEXT_DEBUG 0x00022007 -/*! @brief Legacy name for compatibility. - * - * This is an alias for compatibility with earlier versions. - */ -#define GLFW_OPENGL_DEBUG_CONTEXT GLFW_CONTEXT_DEBUG -/*! @brief OpenGL profile hint and attribute. - * - * OpenGL profile [hint](@ref GLFW_OPENGL_PROFILE_hint) and - * [attribute](@ref GLFW_OPENGL_PROFILE_attrib). - */ -#define GLFW_OPENGL_PROFILE 0x00022008 -/*! @brief Context flush-on-release hint and attribute. - * - * Context flush-on-release [hint](@ref GLFW_CONTEXT_RELEASE_BEHAVIOR_hint) and - * [attribute](@ref GLFW_CONTEXT_RELEASE_BEHAVIOR_attrib). - */ -#define GLFW_CONTEXT_RELEASE_BEHAVIOR 0x00022009 -/*! @brief Context error suppression hint and attribute. - * - * Context error suppression [hint](@ref GLFW_CONTEXT_NO_ERROR_hint) and - * [attribute](@ref GLFW_CONTEXT_NO_ERROR_attrib). - */ -#define GLFW_CONTEXT_NO_ERROR 0x0002200A -/*! @brief Context creation API hint and attribute. - * - * Context creation API [hint](@ref GLFW_CONTEXT_CREATION_API_hint) and - * [attribute](@ref GLFW_CONTEXT_CREATION_API_attrib). - */ -#define GLFW_CONTEXT_CREATION_API 0x0002200B -/*! @brief Window content area scaling window - * [window hint](@ref GLFW_SCALE_TO_MONITOR). - */ -#define GLFW_SCALE_TO_MONITOR 0x0002200C -/*! @brief Window framebuffer scaling - * [window hint](@ref GLFW_SCALE_FRAMEBUFFER_hint). - */ -#define GLFW_SCALE_FRAMEBUFFER 0x0002200D -/*! @brief Legacy name for compatibility. - * - * This is an alias for the - * [GLFW_SCALE_FRAMEBUFFER](@ref GLFW_SCALE_FRAMEBUFFER_hint) window hint for - * compatibility with earlier versions. - */ -#define GLFW_COCOA_RETINA_FRAMEBUFFER 0x00023001 -/*! @brief macOS specific - * [window hint](@ref GLFW_COCOA_FRAME_NAME_hint). - */ -#define GLFW_COCOA_FRAME_NAME 0x00023002 -/*! @brief macOS specific - * [window hint](@ref GLFW_COCOA_GRAPHICS_SWITCHING_hint). - */ -#define GLFW_COCOA_GRAPHICS_SWITCHING 0x00023003 -/*! @brief X11 specific - * [window hint](@ref GLFW_X11_CLASS_NAME_hint). - */ -#define GLFW_X11_CLASS_NAME 0x00024001 -/*! @brief X11 specific - * [window hint](@ref GLFW_X11_CLASS_NAME_hint). - */ -#define GLFW_X11_INSTANCE_NAME 0x00024002 -#define GLFW_WIN32_KEYBOARD_MENU 0x00025001 -/*! @brief Win32 specific [window hint](@ref GLFW_WIN32_SHOWDEFAULT_hint). - */ -#define GLFW_WIN32_SHOWDEFAULT 0x00025002 -/*! @brief Wayland specific - * [window hint](@ref GLFW_WAYLAND_APP_ID_hint). - * - * Allows specification of the Wayland app_id. - */ -#define GLFW_WAYLAND_APP_ID 0x00026001 -/*! @} */ - -#define GLFW_NO_API 0 -#define GLFW_OPENGL_API 0x00030001 -#define GLFW_OPENGL_ES_API 0x00030002 - -#define GLFW_NO_ROBUSTNESS 0 -#define GLFW_NO_RESET_NOTIFICATION 0x00031001 -#define GLFW_LOSE_CONTEXT_ON_RESET 0x00031002 - -#define GLFW_OPENGL_ANY_PROFILE 0 -#define GLFW_OPENGL_CORE_PROFILE 0x00032001 -#define GLFW_OPENGL_COMPAT_PROFILE 0x00032002 - -#define GLFW_CURSOR 0x00033001 -#define GLFW_STICKY_KEYS 0x00033002 -#define GLFW_STICKY_MOUSE_BUTTONS 0x00033003 -#define GLFW_LOCK_KEY_MODS 0x00033004 -#define GLFW_RAW_MOUSE_MOTION 0x00033005 - -#define GLFW_CURSOR_NORMAL 0x00034001 -#define GLFW_CURSOR_HIDDEN 0x00034002 -#define GLFW_CURSOR_DISABLED 0x00034003 -#define GLFW_CURSOR_CAPTURED 0x00034004 - -#define GLFW_ANY_RELEASE_BEHAVIOR 0 -#define GLFW_RELEASE_BEHAVIOR_FLUSH 0x00035001 -#define GLFW_RELEASE_BEHAVIOR_NONE 0x00035002 - -#define GLFW_NATIVE_CONTEXT_API 0x00036001 -#define GLFW_EGL_CONTEXT_API 0x00036002 -#define GLFW_OSMESA_CONTEXT_API 0x00036003 - -#define GLFW_ANGLE_PLATFORM_TYPE_NONE 0x00037001 -#define GLFW_ANGLE_PLATFORM_TYPE_OPENGL 0x00037002 -#define GLFW_ANGLE_PLATFORM_TYPE_OPENGLES 0x00037003 -#define GLFW_ANGLE_PLATFORM_TYPE_D3D9 0x00037004 -#define GLFW_ANGLE_PLATFORM_TYPE_D3D11 0x00037005 -#define GLFW_ANGLE_PLATFORM_TYPE_VULKAN 0x00037007 -#define GLFW_ANGLE_PLATFORM_TYPE_METAL 0x00037008 - -#define GLFW_WAYLAND_PREFER_LIBDECOR 0x00038001 -#define GLFW_WAYLAND_DISABLE_LIBDECOR 0x00038002 - -#define GLFW_ANY_POSITION 0x80000000 - -/*! @defgroup shapes Standard cursor shapes - * @brief Standard system cursor shapes. - * - * These are the [standard cursor shapes](@ref cursor_standard) that can be - * requested from the platform (window system). - * - * @ingroup input - * @{ */ - -/*! @brief The regular arrow cursor shape. - * - * The regular arrow cursor shape. - */ -#define GLFW_ARROW_CURSOR 0x00036001 -/*! @brief The text input I-beam cursor shape. - * - * The text input I-beam cursor shape. - */ -#define GLFW_IBEAM_CURSOR 0x00036002 -/*! @brief The crosshair cursor shape. - * - * The crosshair cursor shape. - */ -#define GLFW_CROSSHAIR_CURSOR 0x00036003 -/*! @brief The pointing hand cursor shape. - * - * The pointing hand cursor shape. - */ -#define GLFW_POINTING_HAND_CURSOR 0x00036004 -/*! @brief The horizontal resize/move arrow shape. - * - * The horizontal resize/move arrow shape. This is usually a horizontal - * double-headed arrow. - */ -#define GLFW_RESIZE_EW_CURSOR 0x00036005 -/*! @brief The vertical resize/move arrow shape. - * - * The vertical resize/move shape. This is usually a vertical double-headed - * arrow. - */ -#define GLFW_RESIZE_NS_CURSOR 0x00036006 -/*! @brief The top-left to bottom-right diagonal resize/move arrow shape. - * - * The top-left to bottom-right diagonal resize/move shape. This is usually - * a diagonal double-headed arrow. - * - * @note @macos This shape is provided by a private system API and may fail - * with @ref GLFW_CURSOR_UNAVAILABLE in the future. - * - * @note @wayland This shape is provided by a newer standard not supported by - * all cursor themes. - * - * @note @x11 This shape is provided by a newer standard not supported by all - * cursor themes. - */ -#define GLFW_RESIZE_NWSE_CURSOR 0x00036007 -/*! @brief The top-right to bottom-left diagonal resize/move arrow shape. - * - * The top-right to bottom-left diagonal resize/move shape. This is usually - * a diagonal double-headed arrow. - * - * @note @macos This shape is provided by a private system API and may fail - * with @ref GLFW_CURSOR_UNAVAILABLE in the future. - * - * @note @wayland This shape is provided by a newer standard not supported by - * all cursor themes. - * - * @note @x11 This shape is provided by a newer standard not supported by all - * cursor themes. - */ -#define GLFW_RESIZE_NESW_CURSOR 0x00036008 -/*! @brief The omni-directional resize/move cursor shape. - * - * The omni-directional resize cursor/move shape. This is usually either - * a combined horizontal and vertical double-headed arrow or a grabbing hand. - */ -#define GLFW_RESIZE_ALL_CURSOR 0x00036009 -/*! @brief The operation-not-allowed shape. - * - * The operation-not-allowed shape. This is usually a circle with a diagonal - * line through it. - * - * @note @wayland This shape is provided by a newer standard not supported by - * all cursor themes. - * - * @note @x11 This shape is provided by a newer standard not supported by all - * cursor themes. - */ -#define GLFW_NOT_ALLOWED_CURSOR 0x0003600A -/*! @brief Legacy name for compatibility. - * - * This is an alias for compatibility with earlier versions. - */ -#define GLFW_HRESIZE_CURSOR GLFW_RESIZE_EW_CURSOR -/*! @brief Legacy name for compatibility. - * - * This is an alias for compatibility with earlier versions. - */ -#define GLFW_VRESIZE_CURSOR GLFW_RESIZE_NS_CURSOR -/*! @brief Legacy name for compatibility. - * - * This is an alias for compatibility with earlier versions. - */ -#define GLFW_HAND_CURSOR GLFW_POINTING_HAND_CURSOR -/*! @} */ - -#define GLFW_CONNECTED 0x00040001 -#define GLFW_DISCONNECTED 0x00040002 - -/*! @addtogroup init - * @{ */ -/*! @brief Joystick hat buttons init hint. - * - * Joystick hat buttons [init hint](@ref GLFW_JOYSTICK_HAT_BUTTONS). - */ -#define GLFW_JOYSTICK_HAT_BUTTONS 0x00050001 -/*! @brief ANGLE rendering backend init hint. - * - * ANGLE rendering backend [init hint](@ref GLFW_ANGLE_PLATFORM_TYPE_hint). - */ -#define GLFW_ANGLE_PLATFORM_TYPE 0x00050002 -/*! @brief Platform selection init hint. - * - * Platform selection [init hint](@ref GLFW_PLATFORM). - */ -#define GLFW_PLATFORM 0x00050003 -/*! @brief macOS specific init hint. - * - * macOS specific [init hint](@ref GLFW_COCOA_CHDIR_RESOURCES_hint). - */ -#define GLFW_COCOA_CHDIR_RESOURCES 0x00051001 -/*! @brief macOS specific init hint. - * - * macOS specific [init hint](@ref GLFW_COCOA_MENUBAR_hint). - */ -#define GLFW_COCOA_MENUBAR 0x00051002 -/*! @brief X11 specific init hint. - * - * X11 specific [init hint](@ref GLFW_X11_XCB_VULKAN_SURFACE_hint). - */ -#define GLFW_X11_XCB_VULKAN_SURFACE 0x00052001 -/*! @brief Wayland specific init hint. - * - * Wayland specific [init hint](@ref GLFW_WAYLAND_LIBDECOR_hint). - */ -#define GLFW_WAYLAND_LIBDECOR 0x00053001 -/*! @} */ - -/*! @addtogroup init - * @{ */ -/*! @brief Hint value that enables automatic platform selection. - * - * Hint value for @ref GLFW_PLATFORM that enables automatic platform selection. - */ -#define GLFW_ANY_PLATFORM 0x00060000 -#define GLFW_PLATFORM_WIN32 0x00060001 -#define GLFW_PLATFORM_COCOA 0x00060002 -#define GLFW_PLATFORM_WAYLAND 0x00060003 -#define GLFW_PLATFORM_X11 0x00060004 -#define GLFW_PLATFORM_NULL 0x00060005 -/*! @} */ - -#define GLFW_DONT_CARE -1 - - -/************************************************************************* - * GLFW API types - *************************************************************************/ - -/*! @brief Client API function pointer type. - * - * Generic function pointer used for returning client API function pointers - * without forcing a cast from a regular pointer. - * - * @sa @ref context_glext - * @sa @ref glfwGetProcAddress - * - * @since Added in version 3.0. - * - * @ingroup context - */ -typedef void (*GLFWglproc)(void); - -/*! @brief Vulkan API function pointer type. - * - * Generic function pointer used for returning Vulkan API function pointers - * without forcing a cast from a regular pointer. - * - * @sa @ref vulkan_proc - * @sa @ref glfwGetInstanceProcAddress - * - * @since Added in version 3.2. - * - * @ingroup vulkan - */ -typedef void (*GLFWvkproc)(void); - -/*! @brief Opaque monitor object. - * - * Opaque monitor object. - * - * @see @ref monitor_object - * - * @since Added in version 3.0. - * - * @ingroup monitor - */ -typedef struct GLFWmonitor GLFWmonitor; - -/*! @brief Opaque window object. - * - * Opaque window object. - * - * @see @ref window_object - * - * @since Added in version 3.0. - * - * @ingroup window - */ -typedef struct GLFWwindow GLFWwindow; - -/*! @brief Opaque cursor object. - * - * Opaque cursor object. - * - * @see @ref cursor_object - * - * @since Added in version 3.1. - * - * @ingroup input - */ -typedef struct GLFWcursor GLFWcursor; - -/*! @brief The function pointer type for memory allocation callbacks. - * - * This is the function pointer type for memory allocation callbacks. A memory - * allocation callback function has the following signature: - * @code - * void* function_name(size_t size, void* user) - * @endcode - * - * This function must return either a memory block at least `size` bytes long, - * or `NULL` if allocation failed. Note that not all parts of GLFW handle allocation - * failures gracefully yet. - * - * This function must support being called during @ref glfwInit but before the library is - * flagged as initialized, as well as during @ref glfwTerminate after the library is no - * longer flagged as initialized. - * - * Any memory allocated via this function will be deallocated via the same allocator - * during library termination or earlier. - * - * Any memory allocated via this function must be suitably aligned for any object type. - * If you are using C99 or earlier, this alignment is platform-dependent but will be the - * same as what `malloc` provides. If you are using C11 or later, this is the value of - * `alignof(max_align_t)`. - * - * The size will always be greater than zero. Allocations of size zero are filtered out - * before reaching the custom allocator. - * - * If this function returns `NULL`, GLFW will emit @ref GLFW_OUT_OF_MEMORY. - * - * This function must not call any GLFW function. - * - * @param[in] size The minimum size, in bytes, of the memory block. - * @param[in] user The user-defined pointer from the allocator. - * @return The address of the newly allocated memory block, or `NULL` if an - * error occurred. - * - * @pointer_lifetime The returned memory block must be valid at least until it - * is deallocated. - * - * @reentrancy This function should not call any GLFW function. - * - * @thread_safety This function must support being called from any thread that calls GLFW - * functions. - * - * @sa @ref init_allocator - * @sa @ref GLFWallocator - * - * @since Added in version 3.4. - * - * @ingroup init - */ -typedef void* (* GLFWallocatefun)(size_t size, void* user); - -/*! @brief The function pointer type for memory reallocation callbacks. - * - * This is the function pointer type for memory reallocation callbacks. - * A memory reallocation callback function has the following signature: - * @code - * void* function_name(void* block, size_t size, void* user) - * @endcode - * - * This function must return a memory block at least `size` bytes long, or - * `NULL` if allocation failed. Note that not all parts of GLFW handle allocation - * failures gracefully yet. - * - * This function must support being called during @ref glfwInit but before the library is - * flagged as initialized, as well as during @ref glfwTerminate after the library is no - * longer flagged as initialized. - * - * Any memory allocated via this function will be deallocated via the same allocator - * during library termination or earlier. - * - * Any memory allocated via this function must be suitably aligned for any object type. - * If you are using C99 or earlier, this alignment is platform-dependent but will be the - * same as what `realloc` provides. If you are using C11 or later, this is the value of - * `alignof(max_align_t)`. - * - * The block address will never be `NULL` and the size will always be greater than zero. - * Reallocations of a block to size zero are converted into deallocations before reaching - * the custom allocator. Reallocations of `NULL` to a non-zero size are converted into - * regular allocations before reaching the custom allocator. - * - * If this function returns `NULL`, GLFW will emit @ref GLFW_OUT_OF_MEMORY. - * - * This function must not call any GLFW function. - * - * @param[in] block The address of the memory block to reallocate. - * @param[in] size The new minimum size, in bytes, of the memory block. - * @param[in] user The user-defined pointer from the allocator. - * @return The address of the newly allocated or resized memory block, or - * `NULL` if an error occurred. - * - * @pointer_lifetime The returned memory block must be valid at least until it - * is deallocated. - * - * @reentrancy This function should not call any GLFW function. - * - * @thread_safety This function must support being called from any thread that calls GLFW - * functions. - * - * @sa @ref init_allocator - * @sa @ref GLFWallocator - * - * @since Added in version 3.4. - * - * @ingroup init - */ -typedef void* (* GLFWreallocatefun)(void* block, size_t size, void* user); - -/*! @brief The function pointer type for memory deallocation callbacks. - * - * This is the function pointer type for memory deallocation callbacks. - * A memory deallocation callback function has the following signature: - * @code - * void function_name(void* block, void* user) - * @endcode - * - * This function may deallocate the specified memory block. This memory block - * will have been allocated with the same allocator. - * - * This function must support being called during @ref glfwInit but before the library is - * flagged as initialized, as well as during @ref glfwTerminate after the library is no - * longer flagged as initialized. - * - * The block address will never be `NULL`. Deallocations of `NULL` are filtered out - * before reaching the custom allocator. - * - * If this function returns `NULL`, GLFW will emit @ref GLFW_OUT_OF_MEMORY. - * - * This function must not call any GLFW function. - * - * @param[in] block The address of the memory block to deallocate. - * @param[in] user The user-defined pointer from the allocator. - * - * @pointer_lifetime The specified memory block will not be accessed by GLFW - * after this function is called. - * - * @reentrancy This function should not call any GLFW function. - * - * @thread_safety This function must support being called from any thread that calls GLFW - * functions. - * - * @sa @ref init_allocator - * @sa @ref GLFWallocator - * - * @since Added in version 3.4. - * - * @ingroup init - */ -typedef void (* GLFWdeallocatefun)(void* block, void* user); - -/*! @brief The function pointer type for error callbacks. - * - * This is the function pointer type for error callbacks. An error callback - * function has the following signature: - * @code - * void callback_name(int error_code, const char* description) - * @endcode - * - * @param[in] error_code An [error code](@ref errors). Future releases may add - * more error codes. - * @param[in] description A UTF-8 encoded string describing the error. - * - * @pointer_lifetime The error description string is valid until the callback - * function returns. - * - * @sa @ref error_handling - * @sa @ref glfwSetErrorCallback - * - * @since Added in version 3.0. - * - * @ingroup init - */ -typedef void (* GLFWerrorfun)(int error_code, const char* description); - -/*! @brief The function pointer type for window position callbacks. - * - * This is the function pointer type for window position callbacks. A window - * position callback function has the following signature: - * @code - * void callback_name(GLFWwindow* window, int xpos, int ypos) - * @endcode - * - * @param[in] window The window that was moved. - * @param[in] xpos The new x-coordinate, in screen coordinates, of the - * upper-left corner of the content area of the window. - * @param[in] ypos The new y-coordinate, in screen coordinates, of the - * upper-left corner of the content area of the window. - * - * @sa @ref window_pos - * @sa @ref glfwSetWindowPosCallback - * - * @since Added in version 3.0. - * - * @ingroup window - */ -typedef void (* GLFWwindowposfun)(GLFWwindow* window, int xpos, int ypos); - -/*! @brief The function pointer type for window size callbacks. - * - * This is the function pointer type for window size callbacks. A window size - * callback function has the following signature: - * @code - * void callback_name(GLFWwindow* window, int width, int height) - * @endcode - * - * @param[in] window The window that was resized. - * @param[in] width The new width, in screen coordinates, of the window. - * @param[in] height The new height, in screen coordinates, of the window. - * - * @sa @ref window_size - * @sa @ref glfwSetWindowSizeCallback - * - * @since Added in version 1.0. - * @glfw3 Added window handle parameter. - * - * @ingroup window - */ -typedef void (* GLFWwindowsizefun)(GLFWwindow* window, int width, int height); - -/*! @brief The function pointer type for window close callbacks. - * - * This is the function pointer type for window close callbacks. A window - * close callback function has the following signature: - * @code - * void function_name(GLFWwindow* window) - * @endcode - * - * @param[in] window The window that the user attempted to close. - * - * @sa @ref window_close - * @sa @ref glfwSetWindowCloseCallback - * - * @since Added in version 2.5. - * @glfw3 Added window handle parameter. - * - * @ingroup window - */ -typedef void (* GLFWwindowclosefun)(GLFWwindow* window); - -/*! @brief The function pointer type for window content refresh callbacks. - * - * This is the function pointer type for window content refresh callbacks. - * A window content refresh callback function has the following signature: - * @code - * void function_name(GLFWwindow* window); - * @endcode - * - * @param[in] window The window whose content needs to be refreshed. - * - * @sa @ref window_refresh - * @sa @ref glfwSetWindowRefreshCallback - * - * @since Added in version 2.5. - * @glfw3 Added window handle parameter. - * - * @ingroup window - */ -typedef void (* GLFWwindowrefreshfun)(GLFWwindow* window); - -/*! @brief The function pointer type for window focus callbacks. - * - * This is the function pointer type for window focus callbacks. A window - * focus callback function has the following signature: - * @code - * void function_name(GLFWwindow* window, int focused) - * @endcode - * - * @param[in] window The window that gained or lost input focus. - * @param[in] focused `GLFW_TRUE` if the window was given input focus, or - * `GLFW_FALSE` if it lost it. - * - * @sa @ref window_focus - * @sa @ref glfwSetWindowFocusCallback - * - * @since Added in version 3.0. - * - * @ingroup window - */ -typedef void (* GLFWwindowfocusfun)(GLFWwindow* window, int focused); - -/*! @brief The function pointer type for window iconify callbacks. - * - * This is the function pointer type for window iconify callbacks. A window - * iconify callback function has the following signature: - * @code - * void function_name(GLFWwindow* window, int iconified) - * @endcode - * - * @param[in] window The window that was iconified or restored. - * @param[in] iconified `GLFW_TRUE` if the window was iconified, or - * `GLFW_FALSE` if it was restored. - * - * @sa @ref window_iconify - * @sa @ref glfwSetWindowIconifyCallback - * - * @since Added in version 3.0. - * - * @ingroup window - */ -typedef void (* GLFWwindowiconifyfun)(GLFWwindow* window, int iconified); - -/*! @brief The function pointer type for window maximize callbacks. - * - * This is the function pointer type for window maximize callbacks. A window - * maximize callback function has the following signature: - * @code - * void function_name(GLFWwindow* window, int maximized) - * @endcode - * - * @param[in] window The window that was maximized or restored. - * @param[in] maximized `GLFW_TRUE` if the window was maximized, or - * `GLFW_FALSE` if it was restored. - * - * @sa @ref window_maximize - * @sa glfwSetWindowMaximizeCallback - * - * @since Added in version 3.3. - * - * @ingroup window - */ -typedef void (* GLFWwindowmaximizefun)(GLFWwindow* window, int maximized); - -/*! @brief The function pointer type for framebuffer size callbacks. - * - * This is the function pointer type for framebuffer size callbacks. - * A framebuffer size callback function has the following signature: - * @code - * void function_name(GLFWwindow* window, int width, int height) - * @endcode - * - * @param[in] window The window whose framebuffer was resized. - * @param[in] width The new width, in pixels, of the framebuffer. - * @param[in] height The new height, in pixels, of the framebuffer. - * - * @sa @ref window_fbsize - * @sa @ref glfwSetFramebufferSizeCallback - * - * @since Added in version 3.0. - * - * @ingroup window - */ -typedef void (* GLFWframebuffersizefun)(GLFWwindow* window, int width, int height); - -/*! @brief The function pointer type for window content scale callbacks. - * - * This is the function pointer type for window content scale callbacks. - * A window content scale callback function has the following signature: - * @code - * void function_name(GLFWwindow* window, float xscale, float yscale) - * @endcode - * - * @param[in] window The window whose content scale changed. - * @param[in] xscale The new x-axis content scale of the window. - * @param[in] yscale The new y-axis content scale of the window. - * - * @sa @ref window_scale - * @sa @ref glfwSetWindowContentScaleCallback - * - * @since Added in version 3.3. - * - * @ingroup window - */ -typedef void (* GLFWwindowcontentscalefun)(GLFWwindow* window, float xscale, float yscale); - -/*! @brief The function pointer type for mouse button callbacks. - * - * This is the function pointer type for mouse button callback functions. - * A mouse button callback function has the following signature: - * @code - * void function_name(GLFWwindow* window, int button, int action, int mods) - * @endcode - * - * @param[in] window The window that received the event. - * @param[in] button The [mouse button](@ref buttons) that was pressed or - * released. - * @param[in] action One of `GLFW_PRESS` or `GLFW_RELEASE`. Future releases - * may add more actions. - * @param[in] mods Bit field describing which [modifier keys](@ref mods) were - * held down. - * - * @sa @ref input_mouse_button - * @sa @ref glfwSetMouseButtonCallback - * - * @since Added in version 1.0. - * @glfw3 Added window handle and modifier mask parameters. - * - * @ingroup input - */ -typedef void (* GLFWmousebuttonfun)(GLFWwindow* window, int button, int action, int mods); - -/*! @brief The function pointer type for cursor position callbacks. - * - * This is the function pointer type for cursor position callbacks. A cursor - * position callback function has the following signature: - * @code - * void function_name(GLFWwindow* window, double xpos, double ypos); - * @endcode - * - * @param[in] window The window that received the event. - * @param[in] xpos The new cursor x-coordinate, relative to the left edge of - * the content area. - * @param[in] ypos The new cursor y-coordinate, relative to the top edge of the - * content area. - * - * @sa @ref cursor_pos - * @sa @ref glfwSetCursorPosCallback - * - * @since Added in version 3.0. Replaces `GLFWmouseposfun`. - * - * @ingroup input - */ -typedef void (* GLFWcursorposfun)(GLFWwindow* window, double xpos, double ypos); - -/*! @brief The function pointer type for cursor enter/leave callbacks. - * - * This is the function pointer type for cursor enter/leave callbacks. - * A cursor enter/leave callback function has the following signature: - * @code - * void function_name(GLFWwindow* window, int entered) - * @endcode - * - * @param[in] window The window that received the event. - * @param[in] entered `GLFW_TRUE` if the cursor entered the window's content - * area, or `GLFW_FALSE` if it left it. - * - * @sa @ref cursor_enter - * @sa @ref glfwSetCursorEnterCallback - * - * @since Added in version 3.0. - * - * @ingroup input - */ -typedef void (* GLFWcursorenterfun)(GLFWwindow* window, int entered); - -/*! @brief The function pointer type for scroll callbacks. - * - * This is the function pointer type for scroll callbacks. A scroll callback - * function has the following signature: - * @code - * void function_name(GLFWwindow* window, double xoffset, double yoffset) - * @endcode - * - * @param[in] window The window that received the event. - * @param[in] xoffset The scroll offset along the x-axis. - * @param[in] yoffset The scroll offset along the y-axis. - * - * @sa @ref scrolling - * @sa @ref glfwSetScrollCallback - * - * @since Added in version 3.0. Replaces `GLFWmousewheelfun`. - * - * @ingroup input - */ -typedef void (* GLFWscrollfun)(GLFWwindow* window, double xoffset, double yoffset); - -/*! @brief The function pointer type for keyboard key callbacks. - * - * This is the function pointer type for keyboard key callbacks. A keyboard - * key callback function has the following signature: - * @code - * void function_name(GLFWwindow* window, int key, int scancode, int action, int mods) - * @endcode - * - * @param[in] window The window that received the event. - * @param[in] key The [keyboard key](@ref keys) that was pressed or released. - * @param[in] scancode The platform-specific scancode of the key. - * @param[in] action `GLFW_PRESS`, `GLFW_RELEASE` or `GLFW_REPEAT`. Future - * releases may add more actions. - * @param[in] mods Bit field describing which [modifier keys](@ref mods) were - * held down. - * - * @sa @ref input_key - * @sa @ref glfwSetKeyCallback - * - * @since Added in version 1.0. - * @glfw3 Added window handle, scancode and modifier mask parameters. - * - * @ingroup input - */ -typedef void (* GLFWkeyfun)(GLFWwindow* window, int key, int scancode, int action, int mods); - -/*! @brief The function pointer type for Unicode character callbacks. - * - * This is the function pointer type for Unicode character callbacks. - * A Unicode character callback function has the following signature: - * @code - * void function_name(GLFWwindow* window, unsigned int codepoint) - * @endcode - * - * @param[in] window The window that received the event. - * @param[in] codepoint The Unicode code point of the character. - * - * @sa @ref input_char - * @sa @ref glfwSetCharCallback - * - * @since Added in version 2.4. - * @glfw3 Added window handle parameter. - * - * @ingroup input - */ -typedef void (* GLFWcharfun)(GLFWwindow* window, unsigned int codepoint); - -/*! @brief The function pointer type for Unicode character with modifiers - * callbacks. - * - * This is the function pointer type for Unicode character with modifiers - * callbacks. It is called for each input character, regardless of what - * modifier keys are held down. A Unicode character with modifiers callback - * function has the following signature: - * @code - * void function_name(GLFWwindow* window, unsigned int codepoint, int mods) - * @endcode - * - * @param[in] window The window that received the event. - * @param[in] codepoint The Unicode code point of the character. - * @param[in] mods Bit field describing which [modifier keys](@ref mods) were - * held down. - * - * @sa @ref input_char - * @sa @ref glfwSetCharModsCallback - * - * @deprecated Scheduled for removal in version 4.0. - * - * @since Added in version 3.1. - * - * @ingroup input - */ -typedef void (* GLFWcharmodsfun)(GLFWwindow* window, unsigned int codepoint, int mods); - -/*! @brief The function pointer type for path drop callbacks. - * - * This is the function pointer type for path drop callbacks. A path drop - * callback function has the following signature: - * @code - * void function_name(GLFWwindow* window, int path_count, const char* paths[]) - * @endcode - * - * @param[in] window The window that received the event. - * @param[in] path_count The number of dropped paths. - * @param[in] paths The UTF-8 encoded file and/or directory path names. - * - * @pointer_lifetime The path array and its strings are valid until the - * callback function returns. - * - * @sa @ref path_drop - * @sa @ref glfwSetDropCallback - * - * @since Added in version 3.1. - * - * @ingroup input - */ -typedef void (* GLFWdropfun)(GLFWwindow* window, int path_count, const char* paths[]); - -/*! @brief The function pointer type for monitor configuration callbacks. - * - * This is the function pointer type for monitor configuration callbacks. - * A monitor callback function has the following signature: - * @code - * void function_name(GLFWmonitor* monitor, int event) - * @endcode - * - * @param[in] monitor The monitor that was connected or disconnected. - * @param[in] event One of `GLFW_CONNECTED` or `GLFW_DISCONNECTED`. Future - * releases may add more events. - * - * @sa @ref monitor_event - * @sa @ref glfwSetMonitorCallback - * - * @since Added in version 3.0. - * - * @ingroup monitor - */ -typedef void (* GLFWmonitorfun)(GLFWmonitor* monitor, int event); - -/*! @brief The function pointer type for joystick configuration callbacks. - * - * This is the function pointer type for joystick configuration callbacks. - * A joystick configuration callback function has the following signature: - * @code - * void function_name(int jid, int event) - * @endcode - * - * @param[in] jid The joystick that was connected or disconnected. - * @param[in] event One of `GLFW_CONNECTED` or `GLFW_DISCONNECTED`. Future - * releases may add more events. - * - * @sa @ref joystick_event - * @sa @ref glfwSetJoystickCallback - * - * @since Added in version 3.2. - * - * @ingroup input - */ -typedef void (* GLFWjoystickfun)(int jid, int event); - -/*! @brief Video mode type. - * - * This describes a single video mode. - * - * @sa @ref monitor_modes - * @sa @ref glfwGetVideoMode - * @sa @ref glfwGetVideoModes - * - * @since Added in version 1.0. - * @glfw3 Added refresh rate member. - * - * @ingroup monitor - */ -typedef struct GLFWvidmode -{ - /*! The width, in screen coordinates, of the video mode. - */ - int width; - /*! The height, in screen coordinates, of the video mode. - */ - int height; - /*! The bit depth of the red channel of the video mode. - */ - int redBits; - /*! The bit depth of the green channel of the video mode. - */ - int greenBits; - /*! The bit depth of the blue channel of the video mode. - */ - int blueBits; - /*! The refresh rate, in Hz, of the video mode. - */ - int refreshRate; -} GLFWvidmode; - -/*! @brief Gamma ramp. - * - * This describes the gamma ramp for a monitor. - * - * @sa @ref monitor_gamma - * @sa @ref glfwGetGammaRamp - * @sa @ref glfwSetGammaRamp - * - * @since Added in version 3.0. - * - * @ingroup monitor - */ -typedef struct GLFWgammaramp -{ - /*! An array of value describing the response of the red channel. - */ - unsigned short* red; - /*! An array of value describing the response of the green channel. - */ - unsigned short* green; - /*! An array of value describing the response of the blue channel. - */ - unsigned short* blue; - /*! The number of elements in each array. - */ - unsigned int size; -} GLFWgammaramp; - -/*! @brief Image data. - * - * This describes a single 2D image. See the documentation for each related - * function what the expected pixel format is. - * - * @sa @ref cursor_custom - * @sa @ref window_icon - * - * @since Added in version 2.1. - * @glfw3 Removed format and bytes-per-pixel members. - * - * @ingroup window - */ -typedef struct GLFWimage -{ - /*! The width, in pixels, of this image. - */ - int width; - /*! The height, in pixels, of this image. - */ - int height; - /*! The pixel data of this image, arranged left-to-right, top-to-bottom. - */ - unsigned char* pixels; -} GLFWimage; - -/*! @brief Gamepad input state - * - * This describes the input state of a gamepad. - * - * @sa @ref gamepad - * @sa @ref glfwGetGamepadState - * - * @since Added in version 3.3. - * - * @ingroup input - */ -typedef struct GLFWgamepadstate -{ - /*! The states of each [gamepad button](@ref gamepad_buttons), `GLFW_PRESS` - * or `GLFW_RELEASE`. - */ - unsigned char buttons[15]; - /*! The states of each [gamepad axis](@ref gamepad_axes), in the range -1.0 - * to 1.0 inclusive. - */ - float axes[6]; -} GLFWgamepadstate; - -/*! @brief Custom heap memory allocator. - * - * This describes a custom heap memory allocator for GLFW. To set an allocator, pass it - * to @ref glfwInitAllocator before initializing the library. - * - * @sa @ref init_allocator - * @sa @ref glfwInitAllocator - * - * @since Added in version 3.4. - * - * @ingroup init - */ -typedef struct GLFWallocator -{ - /*! The memory allocation function. See @ref GLFWallocatefun for details about - * allocation function. - */ - GLFWallocatefun allocate; - /*! The memory reallocation function. See @ref GLFWreallocatefun for details about - * reallocation function. - */ - GLFWreallocatefun reallocate; - /*! The memory deallocation function. See @ref GLFWdeallocatefun for details about - * deallocation function. - */ - GLFWdeallocatefun deallocate; - /*! The user pointer for this custom allocator. This value will be passed to the - * allocator functions. - */ - void* user; -} GLFWallocator; - - -/************************************************************************* - * GLFW API functions - *************************************************************************/ - -/*! @brief Initializes the GLFW library. - * - * This function initializes the GLFW library. Before most GLFW functions can - * be used, GLFW must be initialized, and before an application terminates GLFW - * should be terminated in order to free any resources allocated during or - * after initialization. - * - * If this function fails, it calls @ref glfwTerminate before returning. If it - * succeeds, you should call @ref glfwTerminate before the application exits. - * - * Additional calls to this function after successful initialization but before - * termination will return `GLFW_TRUE` immediately. - * - * The @ref GLFW_PLATFORM init hint controls which platforms are considered during - * initialization. This also depends on which platforms the library was compiled to - * support. - * - * @return `GLFW_TRUE` if successful, or `GLFW_FALSE` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_PLATFORM_UNAVAILABLE and @ref - * GLFW_PLATFORM_ERROR. - * - * @remark @macos This function will change the current directory of the - * application to the `Contents/Resources` subdirectory of the application's - * bundle, if present. This can be disabled with the @ref - * GLFW_COCOA_CHDIR_RESOURCES init hint. - * - * @remark @macos This function will create the main menu and dock icon for the - * application. If GLFW finds a `MainMenu.nib` it is loaded and assumed to - * contain a menu bar. Otherwise a minimal menu bar is created manually with - * common commands like Hide, Quit and About. The About entry opens a minimal - * about dialog with information from the application's bundle. The menu bar - * and dock icon can be disabled entirely with the @ref GLFW_COCOA_MENUBAR init - * hint. - * - * @remark __Wayland, X11:__ If the library was compiled with support for both - * Wayland and X11, and the @ref GLFW_PLATFORM init hint is set to - * `GLFW_ANY_PLATFORM`, the `XDG_SESSION_TYPE` environment variable affects - * which platform is picked. If the environment variable is not set, or is set - * to something other than `wayland` or `x11`, the regular detection mechanism - * will be used instead. - * - * @remark @x11 This function will set the `LC_CTYPE` category of the - * application locale according to the current environment if that category is - * still "C". This is because the "C" locale breaks Unicode text input. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref intro_init - * @sa @ref glfwInitHint - * @sa @ref glfwInitAllocator - * @sa @ref glfwTerminate - * - * @since Added in version 1.0. - * - * @ingroup init - */ -GLFWAPI int glfwInit(void); - -/*! @brief Terminates the GLFW library. - * - * This function destroys all remaining windows and cursors, restores any - * modified gamma ramps and frees any other allocated resources. Once this - * function is called, you must again call @ref glfwInit successfully before - * you will be able to use most GLFW functions. - * - * If GLFW has been successfully initialized, this function should be called - * before the application exits. If initialization fails, there is no need to - * call this function, as it is called by @ref glfwInit before it returns - * failure. - * - * This function has no effect if GLFW is not initialized. - * - * @errors Possible errors include @ref GLFW_PLATFORM_ERROR. - * - * @remark This function may be called before @ref glfwInit. - * - * @warning The contexts of any remaining windows must not be current on any - * other thread when this function is called. - * - * @reentrancy This function must not be called from a callback. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref intro_init - * @sa @ref glfwInit - * - * @since Added in version 1.0. - * - * @ingroup init - */ -GLFWAPI void glfwTerminate(void); - -/*! @brief Sets the specified init hint to the desired value. - * - * This function sets hints for the next initialization of GLFW. - * - * The values you set hints to are never reset by GLFW, but they only take - * effect during initialization. Once GLFW has been initialized, any values - * you set will be ignored until the library is terminated and initialized - * again. - * - * Some hints are platform specific. These may be set on any platform but they - * will only affect their specific platform. Other platforms will ignore them. - * Setting these hints requires no platform specific headers or functions. - * - * @param[in] hint The [init hint](@ref init_hints) to set. - * @param[in] value The new value of the init hint. - * - * @errors Possible errors include @ref GLFW_INVALID_ENUM and @ref - * GLFW_INVALID_VALUE. - * - * @remarks This function may be called before @ref glfwInit. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa init_hints - * @sa glfwInit - * - * @since Added in version 3.3. - * - * @ingroup init - */ -GLFWAPI void glfwInitHint(int hint, int value); - -/*! @brief Sets the init allocator to the desired value. - * - * To use the default allocator, call this function with a `NULL` argument. - * - * If you specify an allocator struct, every member must be a valid function - * pointer. If any member is `NULL`, this function will emit @ref - * GLFW_INVALID_VALUE and the init allocator will be unchanged. - * - * The functions in the allocator must fulfil a number of requirements. See the - * documentation for @ref GLFWallocatefun, @ref GLFWreallocatefun and @ref - * GLFWdeallocatefun for details. - * - * @param[in] allocator The allocator to use at the next initialization, or - * `NULL` to use the default one. - * - * @errors Possible errors include @ref GLFW_INVALID_VALUE. - * - * @pointer_lifetime The specified allocator is copied before this function - * returns. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref init_allocator - * @sa @ref glfwInit - * - * @since Added in version 3.4. - * - * @ingroup init - */ -GLFWAPI void glfwInitAllocator(const GLFWallocator* allocator); - -#if defined(VK_VERSION_1_0) - -/*! @brief Sets the desired Vulkan `vkGetInstanceProcAddr` function. - * - * This function sets the `vkGetInstanceProcAddr` function that GLFW will use for all - * Vulkan related entry point queries. - * - * This feature is mostly useful on macOS, if your copy of the Vulkan loader is in - * a location where GLFW cannot find it through dynamic loading, or if you are still - * using the static library version of the loader. - * - * If set to `NULL`, GLFW will try to load the Vulkan loader dynamically by its standard - * name and get this function from there. This is the default behavior. - * - * The standard name of the loader is `vulkan-1.dll` on Windows, `libvulkan.so.1` on - * Linux and other Unix-like systems and `libvulkan.1.dylib` on macOS. If your code is - * also loading it via these names then you probably don't need to use this function. - * - * The function address you set is never reset by GLFW, but it only takes effect during - * initialization. Once GLFW has been initialized, any updates will be ignored until the - * library is terminated and initialized again. - * - * @param[in] loader The address of the function to use, or `NULL`. - * - * @par Loader function signature - * @code - * PFN_vkVoidFunction vkGetInstanceProcAddr(VkInstance instance, const char* name) - * @endcode - * For more information about this function, see the - * [Vulkan Registry](https://www.khronos.org/registry/vulkan/). - * - * @errors None. - * - * @remark This function may be called before @ref glfwInit. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref vulkan_loader - * @sa @ref glfwInit - * - * @since Added in version 3.4. - * - * @ingroup init - */ -GLFWAPI void glfwInitVulkanLoader(PFN_vkGetInstanceProcAddr loader); - -#endif /*VK_VERSION_1_0*/ - -/*! @brief Retrieves the version of the GLFW library. - * - * This function retrieves the major, minor and revision numbers of the GLFW - * library. It is intended for when you are using GLFW as a shared library and - * want to ensure that you are using the minimum required version. - * - * Any or all of the version arguments may be `NULL`. - * - * @param[out] major Where to store the major version number, or `NULL`. - * @param[out] minor Where to store the minor version number, or `NULL`. - * @param[out] rev Where to store the revision number, or `NULL`. - * - * @errors None. - * - * @remark This function may be called before @ref glfwInit. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref intro_version - * @sa @ref glfwGetVersionString - * - * @since Added in version 1.0. - * - * @ingroup init - */ -GLFWAPI void glfwGetVersion(int* major, int* minor, int* rev); - -/*! @brief Returns a string describing the compile-time configuration. - * - * This function returns the compile-time generated - * [version string](@ref intro_version_string) of the GLFW library binary. It describes - * the version, platforms, compiler and any platform or operating system specific - * compile-time options. It should not be confused with the OpenGL or OpenGL ES version - * string, queried with `glGetString`. - * - * __Do not use the version string__ to parse the GLFW library version. The - * @ref glfwGetVersion function provides the version of the running library - * binary in numerical format. - * - * __Do not use the version string__ to parse what platforms are supported. The @ref - * glfwPlatformSupported function lets you query platform support. - * - * @return The ASCII encoded GLFW version string. - * - * @errors None. - * - * @remark This function may be called before @ref glfwInit. - * - * @pointer_lifetime The returned string is static and compile-time generated. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref intro_version - * @sa @ref glfwGetVersion - * - * @since Added in version 3.0. - * - * @ingroup init - */ -GLFWAPI const char* glfwGetVersionString(void); - -/*! @brief Returns and clears the last error for the calling thread. - * - * This function returns and clears the [error code](@ref errors) of the last - * error that occurred on the calling thread, and optionally a UTF-8 encoded - * human-readable description of it. If no error has occurred since the last - * call, it returns @ref GLFW_NO_ERROR (zero) and the description pointer is - * set to `NULL`. - * - * @param[in] description Where to store the error description pointer, or `NULL`. - * @return The last error code for the calling thread, or @ref GLFW_NO_ERROR - * (zero). - * - * @errors None. - * - * @pointer_lifetime The returned string is allocated and freed by GLFW. You - * should not free it yourself. It is guaranteed to be valid only until the - * next error occurs or the library is terminated. - * - * @remark This function may be called before @ref glfwInit. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref error_handling - * @sa @ref glfwSetErrorCallback - * - * @since Added in version 3.3. - * - * @ingroup init - */ -GLFWAPI int glfwGetError(const char** description); - -/*! @brief Sets the error callback. - * - * This function sets the error callback, which is called with an error code - * and a human-readable description each time a GLFW error occurs. - * - * The error code is set before the callback is called. Calling @ref - * glfwGetError from the error callback will return the same value as the error - * code argument. - * - * The error callback is called on the thread where the error occurred. If you - * are using GLFW from multiple threads, your error callback needs to be - * written accordingly. - * - * Because the description string may have been generated specifically for that - * error, it is not guaranteed to be valid after the callback has returned. If - * you wish to use it after the callback returns, you need to make a copy. - * - * Once set, the error callback remains set even after the library has been - * terminated. - * - * @param[in] callback The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set. - * - * @callback_signature - * @code - * void callback_name(int error_code, const char* description) - * @endcode - * For more information about the callback parameters, see the - * [callback pointer type](@ref GLFWerrorfun). - * - * @errors None. - * - * @remark This function may be called before @ref glfwInit. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref error_handling - * @sa @ref glfwGetError - * - * @since Added in version 3.0. - * - * @ingroup init - */ -GLFWAPI GLFWerrorfun glfwSetErrorCallback(GLFWerrorfun callback); - -/*! @brief Returns the currently selected platform. - * - * This function returns the platform that was selected during initialization. The - * returned value will be one of `GLFW_PLATFORM_WIN32`, `GLFW_PLATFORM_COCOA`, - * `GLFW_PLATFORM_WAYLAND`, `GLFW_PLATFORM_X11` or `GLFW_PLATFORM_NULL`. - * - * @return The currently selected platform, or zero if an error occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref platform - * @sa @ref glfwPlatformSupported - * - * @since Added in version 3.4. - * - * @ingroup init - */ -GLFWAPI int glfwGetPlatform(void); - -/*! @brief Returns whether the library includes support for the specified platform. - * - * This function returns whether the library was compiled with support for the specified - * platform. The platform must be one of `GLFW_PLATFORM_WIN32`, `GLFW_PLATFORM_COCOA`, - * `GLFW_PLATFORM_WAYLAND`, `GLFW_PLATFORM_X11` or `GLFW_PLATFORM_NULL`. - * - * @param[in] platform The platform to query. - * @return `GLFW_TRUE` if the platform is supported, or `GLFW_FALSE` otherwise. - * - * @errors Possible errors include @ref GLFW_INVALID_ENUM. - * - * @remark This function may be called before @ref glfwInit. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref platform - * @sa @ref glfwGetPlatform - * - * @since Added in version 3.4. - * - * @ingroup init - */ -GLFWAPI int glfwPlatformSupported(int platform); - -/*! @brief Returns the currently connected monitors. - * - * This function returns an array of handles for all currently connected - * monitors. The primary monitor is always first in the returned array. If no - * monitors were found, this function returns `NULL`. - * - * @param[out] count Where to store the number of monitors in the returned - * array. This is set to zero if an error occurred. - * @return An array of monitor handles, or `NULL` if no monitors were found or - * if an [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @pointer_lifetime The returned array is allocated and freed by GLFW. You - * should not free it yourself. It is guaranteed to be valid only until the - * monitor configuration changes or the library is terminated. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref monitor_monitors - * @sa @ref monitor_event - * @sa @ref glfwGetPrimaryMonitor - * - * @since Added in version 3.0. - * - * @ingroup monitor - */ -GLFWAPI GLFWmonitor** glfwGetMonitors(int* count); - -/*! @brief Returns the primary monitor. - * - * This function returns the primary monitor. This is usually the monitor - * where elements like the task bar or global menu bar are located. - * - * @return The primary monitor, or `NULL` if no monitors were found or if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @remark The primary monitor is always first in the array returned by @ref - * glfwGetMonitors. - * - * @sa @ref monitor_monitors - * @sa @ref glfwGetMonitors - * - * @since Added in version 3.0. - * - * @ingroup monitor - */ -GLFWAPI GLFWmonitor* glfwGetPrimaryMonitor(void); - -/*! @brief Returns the position of the monitor's viewport on the virtual screen. - * - * This function returns the position, in screen coordinates, of the upper-left - * corner of the specified monitor. - * - * Any or all of the position arguments may be `NULL`. If an error occurs, all - * non-`NULL` position arguments will be set to zero. - * - * @param[in] monitor The monitor to query. - * @param[out] xpos Where to store the monitor x-coordinate, or `NULL`. - * @param[out] ypos Where to store the monitor y-coordinate, or `NULL`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref monitor_properties - * - * @since Added in version 3.0. - * - * @ingroup monitor - */ -GLFWAPI void glfwGetMonitorPos(GLFWmonitor* monitor, int* xpos, int* ypos); - -/*! @brief Retrieves the work area of the monitor. - * - * This function returns the position, in screen coordinates, of the upper-left - * corner of the work area of the specified monitor along with the work area - * size in screen coordinates. The work area is defined as the area of the - * monitor not occluded by the window system task bar where present. If no - * task bar exists then the work area is the monitor resolution in screen - * coordinates. - * - * Any or all of the position and size arguments may be `NULL`. If an error - * occurs, all non-`NULL` position and size arguments will be set to zero. - * - * @param[in] monitor The monitor to query. - * @param[out] xpos Where to store the monitor x-coordinate, or `NULL`. - * @param[out] ypos Where to store the monitor y-coordinate, or `NULL`. - * @param[out] width Where to store the monitor width, or `NULL`. - * @param[out] height Where to store the monitor height, or `NULL`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref monitor_workarea - * - * @since Added in version 3.3. - * - * @ingroup monitor - */ -GLFWAPI void glfwGetMonitorWorkarea(GLFWmonitor* monitor, int* xpos, int* ypos, int* width, int* height); - -/*! @brief Returns the physical size of the monitor. - * - * This function returns the size, in millimetres, of the display area of the - * specified monitor. - * - * Some platforms do not provide accurate monitor size information, either - * because the monitor [EDID][] data is incorrect or because the driver does - * not report it accurately. - * - * [EDID]: https://en.wikipedia.org/wiki/Extended_display_identification_data - * - * Any or all of the size arguments may be `NULL`. If an error occurs, all - * non-`NULL` size arguments will be set to zero. - * - * @param[in] monitor The monitor to query. - * @param[out] widthMM Where to store the width, in millimetres, of the - * monitor's display area, or `NULL`. - * @param[out] heightMM Where to store the height, in millimetres, of the - * monitor's display area, or `NULL`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @remark @win32 On Windows 8 and earlier the physical size is calculated from - * the current resolution and system DPI instead of querying the monitor EDID data. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref monitor_properties - * - * @since Added in version 3.0. - * - * @ingroup monitor - */ -GLFWAPI void glfwGetMonitorPhysicalSize(GLFWmonitor* monitor, int* widthMM, int* heightMM); - -/*! @brief Retrieves the content scale for the specified monitor. - * - * This function retrieves the content scale for the specified monitor. The - * content scale is the ratio between the current DPI and the platform's - * default DPI. This is especially important for text and any UI elements. If - * the pixel dimensions of your UI scaled by this look appropriate on your - * machine then it should appear at a reasonable size on other machines - * regardless of their DPI and scaling settings. This relies on the system DPI - * and scaling settings being somewhat correct. - * - * The content scale may depend on both the monitor resolution and pixel - * density and on user settings. It may be very different from the raw DPI - * calculated from the physical size and current resolution. - * - * @param[in] monitor The monitor to query. - * @param[out] xscale Where to store the x-axis content scale, or `NULL`. - * @param[out] yscale Where to store the y-axis content scale, or `NULL`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @remark @wayland Fractional scaling information is not yet available for - * monitors, so this function only returns integer content scales. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref monitor_scale - * @sa @ref glfwGetWindowContentScale - * - * @since Added in version 3.3. - * - * @ingroup monitor - */ -GLFWAPI void glfwGetMonitorContentScale(GLFWmonitor* monitor, float* xscale, float* yscale); - -/*! @brief Returns the name of the specified monitor. - * - * This function returns a human-readable name, encoded as UTF-8, of the - * specified monitor. The name typically reflects the make and model of the - * monitor and is not guaranteed to be unique among the connected monitors. - * - * @param[in] monitor The monitor to query. - * @return The UTF-8 encoded name of the monitor, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @pointer_lifetime The returned string is allocated and freed by GLFW. You - * should not free it yourself. It is valid until the specified monitor is - * disconnected or the library is terminated. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref monitor_properties - * - * @since Added in version 3.0. - * - * @ingroup monitor - */ -GLFWAPI const char* glfwGetMonitorName(GLFWmonitor* monitor); - -/*! @brief Sets the user pointer of the specified monitor. - * - * This function sets the user-defined pointer of the specified monitor. The - * current value is retained until the monitor is disconnected. The initial - * value is `NULL`. - * - * This function may be called from the monitor callback, even for a monitor - * that is being disconnected. - * - * @param[in] monitor The monitor whose pointer to set. - * @param[in] pointer The new value. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @sa @ref monitor_userptr - * @sa @ref glfwGetMonitorUserPointer - * - * @since Added in version 3.3. - * - * @ingroup monitor - */ -GLFWAPI void glfwSetMonitorUserPointer(GLFWmonitor* monitor, void* pointer); - -/*! @brief Returns the user pointer of the specified monitor. - * - * This function returns the current value of the user-defined pointer of the - * specified monitor. The initial value is `NULL`. - * - * This function may be called from the monitor callback, even for a monitor - * that is being disconnected. - * - * @param[in] monitor The monitor whose pointer to return. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @sa @ref monitor_userptr - * @sa @ref glfwSetMonitorUserPointer - * - * @since Added in version 3.3. - * - * @ingroup monitor - */ -GLFWAPI void* glfwGetMonitorUserPointer(GLFWmonitor* monitor); - -/*! @brief Sets the monitor configuration callback. - * - * This function sets the monitor configuration callback, or removes the - * currently set callback. This is called when a monitor is connected to or - * disconnected from the system. - * - * @param[in] callback The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @callback_signature - * @code - * void function_name(GLFWmonitor* monitor, int event) - * @endcode - * For more information about the callback parameters, see the - * [function pointer type](@ref GLFWmonitorfun). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref monitor_event - * - * @since Added in version 3.0. - * - * @ingroup monitor - */ -GLFWAPI GLFWmonitorfun glfwSetMonitorCallback(GLFWmonitorfun callback); - -/*! @brief Returns the available video modes for the specified monitor. - * - * This function returns an array of all video modes supported by the specified - * monitor. The returned array is sorted in ascending order, first by color - * bit depth (the sum of all channel depths), then by resolution area (the - * product of width and height), then resolution width and finally by refresh - * rate. - * - * @param[in] monitor The monitor to query. - * @param[out] count Where to store the number of video modes in the returned - * array. This is set to zero if an error occurred. - * @return An array of video modes, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @pointer_lifetime The returned array is allocated and freed by GLFW. You - * should not free it yourself. It is valid until the specified monitor is - * disconnected, this function is called again for that monitor or the library - * is terminated. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref monitor_modes - * @sa @ref glfwGetVideoMode - * - * @since Added in version 1.0. - * @glfw3 Changed to return an array of modes for a specific monitor. - * - * @ingroup monitor - */ -GLFWAPI const GLFWvidmode* glfwGetVideoModes(GLFWmonitor* monitor, int* count); - -/*! @brief Returns the current mode of the specified monitor. - * - * This function returns the current video mode of the specified monitor. If - * you have created a full screen window for that monitor, the return value - * will depend on whether that window is iconified. - * - * @param[in] monitor The monitor to query. - * @return The current mode of the monitor, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @pointer_lifetime The returned array is allocated and freed by GLFW. You - * should not free it yourself. It is valid until the specified monitor is - * disconnected or the library is terminated. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref monitor_modes - * @sa @ref glfwGetVideoModes - * - * @since Added in version 3.0. Replaces `glfwGetDesktopMode`. - * - * @ingroup monitor - */ -GLFWAPI const GLFWvidmode* glfwGetVideoMode(GLFWmonitor* monitor); - -/*! @brief Generates a gamma ramp and sets it for the specified monitor. - * - * This function generates an appropriately sized gamma ramp from the specified - * exponent and then calls @ref glfwSetGammaRamp with it. The value must be - * a finite number greater than zero. - * - * The software controlled gamma ramp is applied _in addition_ to the hardware - * gamma correction, which today is usually an approximation of sRGB gamma. - * This means that setting a perfectly linear ramp, or gamma 1.0, will produce - * the default (usually sRGB-like) behavior. - * - * For gamma correct rendering with OpenGL or OpenGL ES, see the @ref - * GLFW_SRGB_CAPABLE hint. - * - * @param[in] monitor The monitor whose gamma ramp to set. - * @param[in] gamma The desired exponent. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref GLFW_INVALID_VALUE, - * @ref GLFW_PLATFORM_ERROR and @ref GLFW_FEATURE_UNAVAILABLE (see remarks). - * - * @remark @wayland Gamma handling is a privileged protocol, this function - * will thus never be implemented and emits @ref GLFW_FEATURE_UNAVAILABLE. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref monitor_gamma - * - * @since Added in version 3.0. - * - * @ingroup monitor - */ -GLFWAPI void glfwSetGamma(GLFWmonitor* monitor, float gamma); - -/*! @brief Returns the current gamma ramp for the specified monitor. - * - * This function returns the current gamma ramp of the specified monitor. - * - * @param[in] monitor The monitor to query. - * @return The current gamma ramp, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref GLFW_PLATFORM_ERROR - * and @ref GLFW_FEATURE_UNAVAILABLE (see remarks). - * - * @remark @wayland Gamma handling is a privileged protocol, this function - * will thus never be implemented and emits @ref GLFW_FEATURE_UNAVAILABLE while - * returning `NULL`. - * - * @pointer_lifetime The returned structure and its arrays are allocated and - * freed by GLFW. You should not free them yourself. They are valid until the - * specified monitor is disconnected, this function is called again for that - * monitor or the library is terminated. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref monitor_gamma - * - * @since Added in version 3.0. - * - * @ingroup monitor - */ -GLFWAPI const GLFWgammaramp* glfwGetGammaRamp(GLFWmonitor* monitor); - -/*! @brief Sets the current gamma ramp for the specified monitor. - * - * This function sets the current gamma ramp for the specified monitor. The - * original gamma ramp for that monitor is saved by GLFW the first time this - * function is called and is restored by @ref glfwTerminate. - * - * The software controlled gamma ramp is applied _in addition_ to the hardware - * gamma correction, which today is usually an approximation of sRGB gamma. - * This means that setting a perfectly linear ramp, or gamma 1.0, will produce - * the default (usually sRGB-like) behavior. - * - * For gamma correct rendering with OpenGL or OpenGL ES, see the @ref - * GLFW_SRGB_CAPABLE hint. - * - * @param[in] monitor The monitor whose gamma ramp to set. - * @param[in] ramp The gamma ramp to use. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref GLFW_PLATFORM_ERROR - * and @ref GLFW_FEATURE_UNAVAILABLE (see remarks). - * - * @remark The size of the specified gamma ramp should match the size of the - * current ramp for that monitor. - * - * @remark @win32 The gamma ramp size must be 256. - * - * @remark @wayland Gamma handling is a privileged protocol, this function - * will thus never be implemented and emits @ref GLFW_FEATURE_UNAVAILABLE. - * - * @pointer_lifetime The specified gamma ramp is copied before this function - * returns. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref monitor_gamma - * - * @since Added in version 3.0. - * - * @ingroup monitor - */ -GLFWAPI void glfwSetGammaRamp(GLFWmonitor* monitor, const GLFWgammaramp* ramp); - -/*! @brief Resets all window hints to their default values. - * - * This function resets all window hints to their - * [default values](@ref window_hints_values). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_hints - * @sa @ref glfwWindowHint - * @sa @ref glfwWindowHintString - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI void glfwDefaultWindowHints(void); - -/*! @brief Sets the specified window hint to the desired value. - * - * This function sets hints for the next call to @ref glfwCreateWindow. The - * hints, once set, retain their values until changed by a call to this - * function or @ref glfwDefaultWindowHints, or until the library is terminated. - * - * Only integer value hints can be set with this function. String value hints - * are set with @ref glfwWindowHintString. - * - * This function does not check whether the specified hint values are valid. - * If you set hints to invalid values this will instead be reported by the next - * call to @ref glfwCreateWindow. - * - * Some hints are platform specific. These may be set on any platform but they - * will only affect their specific platform. Other platforms will ignore them. - * Setting these hints requires no platform specific headers or functions. - * - * @param[in] hint The [window hint](@ref window_hints) to set. - * @param[in] value The new value of the window hint. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_INVALID_ENUM. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_hints - * @sa @ref glfwWindowHintString - * @sa @ref glfwDefaultWindowHints - * - * @since Added in version 3.0. Replaces `glfwOpenWindowHint`. - * - * @ingroup window - */ -GLFWAPI void glfwWindowHint(int hint, int value); - -/*! @brief Sets the specified window hint to the desired value. - * - * This function sets hints for the next call to @ref glfwCreateWindow. The - * hints, once set, retain their values until changed by a call to this - * function or @ref glfwDefaultWindowHints, or until the library is terminated. - * - * Only string type hints can be set with this function. Integer value hints - * are set with @ref glfwWindowHint. - * - * This function does not check whether the specified hint values are valid. - * If you set hints to invalid values this will instead be reported by the next - * call to @ref glfwCreateWindow. - * - * Some hints are platform specific. These may be set on any platform but they - * will only affect their specific platform. Other platforms will ignore them. - * Setting these hints requires no platform specific headers or functions. - * - * @param[in] hint The [window hint](@ref window_hints) to set. - * @param[in] value The new value of the window hint. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_INVALID_ENUM. - * - * @pointer_lifetime The specified string is copied before this function - * returns. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_hints - * @sa @ref glfwWindowHint - * @sa @ref glfwDefaultWindowHints - * - * @since Added in version 3.3. - * - * @ingroup window - */ -GLFWAPI void glfwWindowHintString(int hint, const char* value); - -/*! @brief Creates a window and its associated context. - * - * This function creates a window and its associated OpenGL or OpenGL ES - * context. Most of the options controlling how the window and its context - * should be created are specified with [window hints](@ref window_hints). - * - * Successful creation does not change which context is current. Before you - * can use the newly created context, you need to - * [make it current](@ref context_current). For information about the `share` - * parameter, see @ref context_sharing. - * - * The created window, framebuffer and context may differ from what you - * requested, as not all parameters and hints are - * [hard constraints](@ref window_hints_hard). This includes the size of the - * window, especially for full screen windows. To query the actual attributes - * of the created window, framebuffer and context, see @ref - * glfwGetWindowAttrib, @ref glfwGetWindowSize and @ref glfwGetFramebufferSize. - * - * To create a full screen window, you need to specify the monitor the window - * will cover. If no monitor is specified, the window will be windowed mode. - * Unless you have a way for the user to choose a specific monitor, it is - * recommended that you pick the primary monitor. For more information on how - * to query connected monitors, see @ref monitor_monitors. - * - * For full screen windows, the specified size becomes the resolution of the - * window's _desired video mode_. As long as a full screen window is not - * iconified, the supported video mode most closely matching the desired video - * mode is set for the specified monitor. For more information about full - * screen windows, including the creation of so called _windowed full screen_ - * or _borderless full screen_ windows, see @ref window_windowed_full_screen. - * - * Once you have created the window, you can switch it between windowed and - * full screen mode with @ref glfwSetWindowMonitor. This will not affect its - * OpenGL or OpenGL ES context. - * - * By default, newly created windows use the placement recommended by the - * window system. To create the window at a specific position, set the @ref - * GLFW_POSITION_X and @ref GLFW_POSITION_Y window hints before creation. To - * restore the default behavior, set either or both hints back to - * `GLFW_ANY_POSITION`. - * - * As long as at least one full screen window is not iconified, the screensaver - * is prohibited from starting. - * - * Window systems put limits on window sizes. Very large or very small window - * dimensions may be overridden by the window system on creation. Check the - * actual [size](@ref window_size) after creation. - * - * The [swap interval](@ref buffer_swap) is not set during window creation and - * the initial value may vary depending on driver settings and defaults. - * - * @param[in] width The desired width, in screen coordinates, of the window. - * This must be greater than zero. - * @param[in] height The desired height, in screen coordinates, of the window. - * This must be greater than zero. - * @param[in] title The initial, UTF-8 encoded window title. - * @param[in] monitor The monitor to use for full screen mode, or `NULL` for - * windowed mode. - * @param[in] share The window whose context to share resources with, or `NULL` - * to not share resources. - * @return The handle of the created window, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_ENUM, @ref GLFW_INVALID_VALUE, @ref GLFW_API_UNAVAILABLE, @ref - * GLFW_VERSION_UNAVAILABLE, @ref GLFW_FORMAT_UNAVAILABLE, @ref - * GLFW_NO_WINDOW_CONTEXT and @ref GLFW_PLATFORM_ERROR. - * - * @remark @win32 Window creation will fail if the Microsoft GDI software - * OpenGL implementation is the only one available. - * - * @remark @win32 If the executable has an icon resource named `GLFW_ICON,` it - * will be set as the initial icon for the window. If no such icon is present, - * the `IDI_APPLICATION` icon will be used instead. To set a different icon, - * see @ref glfwSetWindowIcon. - * - * @remark @win32 The context to share resources with must not be current on - * any other thread. - * - * @remark @macos The OS only supports core profile contexts for OpenGL - * versions 3.2 and later. Before creating an OpenGL context of version 3.2 or - * later you must set the [GLFW_OPENGL_PROFILE](@ref GLFW_OPENGL_PROFILE_hint) - * hint accordingly. OpenGL 3.0 and 3.1 contexts are not supported at all - * on macOS. - * - * @remark @macos The GLFW window has no icon, as it is not a document - * window, but the dock icon will be the same as the application bundle's icon. - * For more information on bundles, see the - * [Bundle Programming Guide][bundle-guide] in the Mac Developer Library. - * - * [bundle-guide]: https://developer.apple.com/library/mac/documentation/CoreFoundation/Conceptual/CFBundles/ - * - * @remark @macos On OS X 10.10 and later the window frame will not be rendered - * at full resolution on Retina displays unless the - * [GLFW_SCALE_FRAMEBUFFER](@ref GLFW_SCALE_FRAMEBUFFER_hint) - * hint is `GLFW_TRUE` and the `NSHighResolutionCapable` key is enabled in the - * application bundle's `Info.plist`. For more information, see - * [High Resolution Guidelines for OS X][hidpi-guide] in the Mac Developer - * Library. The GLFW test and example programs use a custom `Info.plist` - * template for this, which can be found as `CMake/Info.plist.in` in the source - * tree. - * - * [hidpi-guide]: https://developer.apple.com/library/mac/documentation/GraphicsAnimation/Conceptual/HighResolutionOSX/Explained/Explained.html - * - * @remark @macos When activating frame autosaving with - * [GLFW_COCOA_FRAME_NAME](@ref GLFW_COCOA_FRAME_NAME_hint), the specified - * window size and position may be overridden by previously saved values. - * - * @remark @wayland GLFW uses [libdecor][] where available to create its window - * decorations. This in turn uses server-side XDG decorations where available - * and provides high quality client-side decorations on compositors like GNOME. - * If both XDG decorations and libdecor are unavailable, GLFW falls back to - * a very simple set of window decorations that only support moving, resizing - * and the window manager's right-click menu. - * - * [libdecor]: https://gitlab.freedesktop.org/libdecor/libdecor - * - * @remark @x11 Some window managers will not respect the placement of - * initially hidden windows. - * - * @remark @x11 Due to the asynchronous nature of X11, it may take a moment for - * a window to reach its requested state. This means you may not be able to - * query the final size, position or other attributes directly after window - * creation. - * - * @remark @x11 The class part of the `WM_CLASS` window property will by - * default be set to the window title passed to this function. The instance - * part will use the contents of the `RESOURCE_NAME` environment variable, if - * present and not empty, or fall back to the window title. Set the - * [GLFW_X11_CLASS_NAME](@ref GLFW_X11_CLASS_NAME_hint) and - * [GLFW_X11_INSTANCE_NAME](@ref GLFW_X11_INSTANCE_NAME_hint) window hints to - * override this. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_creation - * @sa @ref glfwDestroyWindow - * - * @since Added in version 3.0. Replaces `glfwOpenWindow`. - * - * @ingroup window - */ -GLFWAPI GLFWwindow* glfwCreateWindow(int width, int height, const char* title, GLFWmonitor* monitor, GLFWwindow* share); - -/*! @brief Destroys the specified window and its context. - * - * This function destroys the specified window and its context. On calling - * this function, no further callbacks will be called for that window. - * - * If the context of the specified window is current on the main thread, it is - * detached before being destroyed. - * - * @param[in] window The window to destroy. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @note The context of the specified window must not be current on any other - * thread when this function is called. - * - * @reentrancy This function must not be called from a callback. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_creation - * @sa @ref glfwCreateWindow - * - * @since Added in version 3.0. Replaces `glfwCloseWindow`. - * - * @ingroup window - */ -GLFWAPI void glfwDestroyWindow(GLFWwindow* window); - -/*! @brief Checks the close flag of the specified window. - * - * This function returns the value of the close flag of the specified window. - * - * @param[in] window The window to query. - * @return The value of the close flag. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @sa @ref window_close - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI int glfwWindowShouldClose(GLFWwindow* window); - -/*! @brief Sets the close flag of the specified window. - * - * This function sets the value of the close flag of the specified window. - * This can be used to override the user's attempt to close the window, or - * to signal that it should be closed. - * - * @param[in] window The window whose flag to change. - * @param[in] value The new value. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @sa @ref window_close - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI void glfwSetWindowShouldClose(GLFWwindow* window, int value); - -/*! @brief Returns the title of the specified window. - * - * This function returns the window title, encoded as UTF-8, of the specified - * window. This is the title set previously by @ref glfwCreateWindow - * or @ref glfwSetWindowTitle. - * - * @param[in] window The window to query. - * @return The UTF-8 encoded window title, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @remark The returned title is currently a copy of the title last set by @ref - * glfwCreateWindow or @ref glfwSetWindowTitle. It does not include any - * additional text which may be appended by the platform or another program. - * - * @pointer_lifetime The returned string is allocated and freed by GLFW. You - * should not free it yourself. It is valid until the next call to @ref - * glfwGetWindowTitle or @ref glfwSetWindowTitle, or until the library is - * terminated. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_title - * @sa @ref glfwSetWindowTitle - * - * @since Added in version 3.4. - * - * @ingroup window - */ -GLFWAPI const char* glfwGetWindowTitle(GLFWwindow* window); - -/*! @brief Sets the title of the specified window. - * - * This function sets the window title, encoded as UTF-8, of the specified - * window. - * - * @param[in] window The window whose title to change. - * @param[in] title The UTF-8 encoded window title. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @remark @macos The window title will not be updated until the next time you - * process events. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_title - * @sa @ref glfwGetWindowTitle - * - * @since Added in version 1.0. - * @glfw3 Added window handle parameter. - * - * @ingroup window - */ -GLFWAPI void glfwSetWindowTitle(GLFWwindow* window, const char* title); - -/*! @brief Sets the icon for the specified window. - * - * This function sets the icon of the specified window. If passed an array of - * candidate images, those of or closest to the sizes desired by the system are - * selected. If no images are specified, the window reverts to its default - * icon. - * - * The pixels are 32-bit, little-endian, non-premultiplied RGBA, i.e. eight - * bits per channel with the red channel first. They are arranged canonically - * as packed sequential rows, starting from the top-left corner. - * - * The desired image sizes varies depending on platform and system settings. - * The selected images will be rescaled as needed. Good sizes include 16x16, - * 32x32 and 48x48. - * - * @param[in] window The window whose icon to set. - * @param[in] count The number of images in the specified array, or zero to - * revert to the default window icon. - * @param[in] images The images to create the icon from. This is ignored if - * count is zero. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_VALUE, @ref GLFW_PLATFORM_ERROR and @ref - * GLFW_FEATURE_UNAVAILABLE (see remarks). - * - * @pointer_lifetime The specified image data is copied before this function - * returns. - * - * @remark @macos Regular windows do not have icons on macOS. This function - * will emit @ref GLFW_FEATURE_UNAVAILABLE. The dock icon will be the same as - * the application bundle's icon. For more information on bundles, see the - * [Bundle Programming Guide][bundle-guide] in the Mac Developer Library. - * - * [bundle-guide]: https://developer.apple.com/library/mac/documentation/CoreFoundation/Conceptual/CFBundles/ - * - * @remark @wayland There is no existing protocol to change an icon, the - * window will thus inherit the one defined in the application's desktop file. - * This function will emit @ref GLFW_FEATURE_UNAVAILABLE. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_icon - * - * @since Added in version 3.2. - * - * @ingroup window - */ -GLFWAPI void glfwSetWindowIcon(GLFWwindow* window, int count, const GLFWimage* images); - -/*! @brief Retrieves the position of the content area of the specified window. - * - * This function retrieves the position, in screen coordinates, of the - * upper-left corner of the content area of the specified window. - * - * Any or all of the position arguments may be `NULL`. If an error occurs, all - * non-`NULL` position arguments will be set to zero. - * - * @param[in] window The window to query. - * @param[out] xpos Where to store the x-coordinate of the upper-left corner of - * the content area, or `NULL`. - * @param[out] ypos Where to store the y-coordinate of the upper-left corner of - * the content area, or `NULL`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_PLATFORM_ERROR and @ref GLFW_FEATURE_UNAVAILABLE (see remarks). - * - * @remark @wayland There is no way for an application to retrieve the global - * position of its windows. This function will emit @ref - * GLFW_FEATURE_UNAVAILABLE. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_pos - * @sa @ref glfwSetWindowPos - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI void glfwGetWindowPos(GLFWwindow* window, int* xpos, int* ypos); - -/*! @brief Sets the position of the content area of the specified window. - * - * This function sets the position, in screen coordinates, of the upper-left - * corner of the content area of the specified windowed mode window. If the - * window is a full screen window, this function does nothing. - * - * __Do not use this function__ to move an already visible window unless you - * have very good reasons for doing so, as it will confuse and annoy the user. - * - * The window manager may put limits on what positions are allowed. GLFW - * cannot and should not override these limits. - * - * @param[in] window The window to query. - * @param[in] xpos The x-coordinate of the upper-left corner of the content area. - * @param[in] ypos The y-coordinate of the upper-left corner of the content area. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_PLATFORM_ERROR and @ref GLFW_FEATURE_UNAVAILABLE (see remarks). - * - * @remark @wayland There is no way for an application to set the global - * position of its windows. This function will emit @ref - * GLFW_FEATURE_UNAVAILABLE. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_pos - * @sa @ref glfwGetWindowPos - * - * @since Added in version 1.0. - * @glfw3 Added window handle parameter. - * - * @ingroup window - */ -GLFWAPI void glfwSetWindowPos(GLFWwindow* window, int xpos, int ypos); - -/*! @brief Retrieves the size of the content area of the specified window. - * - * This function retrieves the size, in screen coordinates, of the content area - * of the specified window. If you wish to retrieve the size of the - * framebuffer of the window in pixels, see @ref glfwGetFramebufferSize. - * - * Any or all of the size arguments may be `NULL`. If an error occurs, all - * non-`NULL` size arguments will be set to zero. - * - * @param[in] window The window whose size to retrieve. - * @param[out] width Where to store the width, in screen coordinates, of the - * content area, or `NULL`. - * @param[out] height Where to store the height, in screen coordinates, of the - * content area, or `NULL`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_size - * @sa @ref glfwSetWindowSize - * - * @since Added in version 1.0. - * @glfw3 Added window handle parameter. - * - * @ingroup window - */ -GLFWAPI void glfwGetWindowSize(GLFWwindow* window, int* width, int* height); - -/*! @brief Sets the size limits of the specified window. - * - * This function sets the size limits of the content area of the specified - * window. If the window is full screen, the size limits only take effect - * once it is made windowed. If the window is not resizable, this function - * does nothing. - * - * The size limits are applied immediately to a windowed mode window and may - * cause it to be resized. - * - * The maximum dimensions must be greater than or equal to the minimum - * dimensions and all must be greater than or equal to zero. - * - * @param[in] window The window to set limits for. - * @param[in] minwidth The minimum width, in screen coordinates, of the content - * area, or `GLFW_DONT_CARE`. - * @param[in] minheight The minimum height, in screen coordinates, of the - * content area, or `GLFW_DONT_CARE`. - * @param[in] maxwidth The maximum width, in screen coordinates, of the content - * area, or `GLFW_DONT_CARE`. - * @param[in] maxheight The maximum height, in screen coordinates, of the - * content area, or `GLFW_DONT_CARE`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR. - * - * @remark If you set size limits and an aspect ratio that conflict, the - * results are undefined. - * - * @remark @wayland The size limits will not be applied until the window is - * actually resized, either by the user or by the compositor. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_sizelimits - * @sa @ref glfwSetWindowAspectRatio - * - * @since Added in version 3.2. - * - * @ingroup window - */ -GLFWAPI void glfwSetWindowSizeLimits(GLFWwindow* window, int minwidth, int minheight, int maxwidth, int maxheight); - -/*! @brief Sets the aspect ratio of the specified window. - * - * This function sets the required aspect ratio of the content area of the - * specified window. If the window is full screen, the aspect ratio only takes - * effect once it is made windowed. If the window is not resizable, this - * function does nothing. - * - * The aspect ratio is specified as a numerator and a denominator and both - * values must be greater than zero. For example, the common 16:9 aspect ratio - * is specified as 16 and 9, respectively. - * - * If the numerator and denominator is set to `GLFW_DONT_CARE` then the aspect - * ratio limit is disabled. - * - * The aspect ratio is applied immediately to a windowed mode window and may - * cause it to be resized. - * - * @param[in] window The window to set limits for. - * @param[in] numer The numerator of the desired aspect ratio, or - * `GLFW_DONT_CARE`. - * @param[in] denom The denominator of the desired aspect ratio, or - * `GLFW_DONT_CARE`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR. - * - * @remark If you set size limits and an aspect ratio that conflict, the - * results are undefined. - * - * @remark @wayland The aspect ratio will not be applied until the window is - * actually resized, either by the user or by the compositor. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_sizelimits - * @sa @ref glfwSetWindowSizeLimits - * - * @since Added in version 3.2. - * - * @ingroup window - */ -GLFWAPI void glfwSetWindowAspectRatio(GLFWwindow* window, int numer, int denom); - -/*! @brief Sets the size of the content area of the specified window. - * - * This function sets the size, in screen coordinates, of the content area of - * the specified window. - * - * For full screen windows, this function updates the resolution of its desired - * video mode and switches to the video mode closest to it, without affecting - * the window's context. As the context is unaffected, the bit depths of the - * framebuffer remain unchanged. - * - * If you wish to update the refresh rate of the desired video mode in addition - * to its resolution, see @ref glfwSetWindowMonitor. - * - * The window manager may put limits on what sizes are allowed. GLFW cannot - * and should not override these limits. - * - * @param[in] window The window to resize. - * @param[in] width The desired width, in screen coordinates, of the window - * content area. - * @param[in] height The desired height, in screen coordinates, of the window - * content area. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_size - * @sa @ref glfwGetWindowSize - * @sa @ref glfwSetWindowMonitor - * - * @since Added in version 1.0. - * @glfw3 Added window handle parameter. - * - * @ingroup window - */ -GLFWAPI void glfwSetWindowSize(GLFWwindow* window, int width, int height); - -/*! @brief Retrieves the size of the framebuffer of the specified window. - * - * This function retrieves the size, in pixels, of the framebuffer of the - * specified window. If you wish to retrieve the size of the window in screen - * coordinates, see @ref glfwGetWindowSize. - * - * Any or all of the size arguments may be `NULL`. If an error occurs, all - * non-`NULL` size arguments will be set to zero. - * - * @param[in] window The window whose framebuffer to query. - * @param[out] width Where to store the width, in pixels, of the framebuffer, - * or `NULL`. - * @param[out] height Where to store the height, in pixels, of the framebuffer, - * or `NULL`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_fbsize - * @sa @ref glfwSetFramebufferSizeCallback - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI void glfwGetFramebufferSize(GLFWwindow* window, int* width, int* height); - -/*! @brief Retrieves the size of the frame of the window. - * - * This function retrieves the size, in screen coordinates, of each edge of the - * frame of the specified window. This size includes the title bar, if the - * window has one. The size of the frame may vary depending on the - * [window-related hints](@ref window_hints_wnd) used to create it. - * - * Because this function retrieves the size of each window frame edge and not - * the offset along a particular coordinate axis, the retrieved values will - * always be zero or positive. - * - * Any or all of the size arguments may be `NULL`. If an error occurs, all - * non-`NULL` size arguments will be set to zero. - * - * @param[in] window The window whose frame size to query. - * @param[out] left Where to store the size, in screen coordinates, of the left - * edge of the window frame, or `NULL`. - * @param[out] top Where to store the size, in screen coordinates, of the top - * edge of the window frame, or `NULL`. - * @param[out] right Where to store the size, in screen coordinates, of the - * right edge of the window frame, or `NULL`. - * @param[out] bottom Where to store the size, in screen coordinates, of the - * bottom edge of the window frame, or `NULL`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_size - * - * @since Added in version 3.1. - * - * @ingroup window - */ -GLFWAPI void glfwGetWindowFrameSize(GLFWwindow* window, int* left, int* top, int* right, int* bottom); - -/*! @brief Retrieves the content scale for the specified window. - * - * This function retrieves the content scale for the specified window. The - * content scale is the ratio between the current DPI and the platform's - * default DPI. This is especially important for text and any UI elements. If - * the pixel dimensions of your UI scaled by this look appropriate on your - * machine then it should appear at a reasonable size on other machines - * regardless of their DPI and scaling settings. This relies on the system DPI - * and scaling settings being somewhat correct. - * - * On platforms where each monitors can have its own content scale, the window - * content scale will depend on which monitor the system considers the window - * to be on. - * - * @param[in] window The window to query. - * @param[out] xscale Where to store the x-axis content scale, or `NULL`. - * @param[out] yscale Where to store the y-axis content scale, or `NULL`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_scale - * @sa @ref glfwSetWindowContentScaleCallback - * @sa @ref glfwGetMonitorContentScale - * - * @since Added in version 3.3. - * - * @ingroup window - */ -GLFWAPI void glfwGetWindowContentScale(GLFWwindow* window, float* xscale, float* yscale); - -/*! @brief Returns the opacity of the whole window. - * - * This function returns the opacity of the window, including any decorations. - * - * The opacity (or alpha) value is a positive finite number between zero and - * one, where zero is fully transparent and one is fully opaque. If the system - * does not support whole window transparency, this function always returns one. - * - * The initial opacity value for newly created windows is one. - * - * @param[in] window The window to query. - * @return The opacity value of the specified window. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_transparency - * @sa @ref glfwSetWindowOpacity - * - * @since Added in version 3.3. - * - * @ingroup window - */ -GLFWAPI float glfwGetWindowOpacity(GLFWwindow* window); - -/*! @brief Sets the opacity of the whole window. - * - * This function sets the opacity of the window, including any decorations. - * - * The opacity (or alpha) value is a positive finite number between zero and - * one, where zero is fully transparent and one is fully opaque. - * - * The initial opacity value for newly created windows is one. - * - * A window created with framebuffer transparency may not use whole window - * transparency. The results of doing this are undefined. - * - * @param[in] window The window to set the opacity for. - * @param[in] opacity The desired opacity of the specified window. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_PLATFORM_ERROR and @ref GLFW_FEATURE_UNAVAILABLE (see remarks). - * - * @remark @wayland There is no way to set an opacity factor for a window. - * This function will emit @ref GLFW_FEATURE_UNAVAILABLE. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_transparency - * @sa @ref glfwGetWindowOpacity - * - * @since Added in version 3.3. - * - * @ingroup window - */ -GLFWAPI void glfwSetWindowOpacity(GLFWwindow* window, float opacity); - -/*! @brief Iconifies the specified window. - * - * This function iconifies (minimizes) the specified window if it was - * previously restored. If the window is already iconified, this function does - * nothing. - * - * If the specified window is a full screen window, GLFW restores the original - * video mode of the monitor. The window's desired video mode is set again - * when the window is restored. - * - * @param[in] window The window to iconify. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @remark @wayland Once a window is iconified, @ref glfwRestoreWindow won’t - * be able to restore it. This is a design decision of the xdg-shell - * protocol. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_iconify - * @sa @ref glfwRestoreWindow - * @sa @ref glfwMaximizeWindow - * - * @since Added in version 2.1. - * @glfw3 Added window handle parameter. - * - * @ingroup window - */ -GLFWAPI void glfwIconifyWindow(GLFWwindow* window); - -/*! @brief Restores the specified window. - * - * This function restores the specified window if it was previously iconified - * (minimized) or maximized. If the window is already restored, this function - * does nothing. - * - * If the specified window is an iconified full screen window, its desired - * video mode is set again for its monitor when the window is restored. - * - * @param[in] window The window to restore. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_iconify - * @sa @ref glfwIconifyWindow - * @sa @ref glfwMaximizeWindow - * - * @since Added in version 2.1. - * @glfw3 Added window handle parameter. - * - * @ingroup window - */ -GLFWAPI void glfwRestoreWindow(GLFWwindow* window); - -/*! @brief Maximizes the specified window. - * - * This function maximizes the specified window if it was previously not - * maximized. If the window is already maximized, this function does nothing. - * - * If the specified window is a full screen window, this function does nothing. - * - * @param[in] window The window to maximize. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @par Thread Safety - * This function may only be called from the main thread. - * - * @sa @ref window_iconify - * @sa @ref glfwIconifyWindow - * @sa @ref glfwRestoreWindow - * - * @since Added in GLFW 3.2. - * - * @ingroup window - */ -GLFWAPI void glfwMaximizeWindow(GLFWwindow* window); - -/*! @brief Makes the specified window visible. - * - * This function makes the specified window visible if it was previously - * hidden. If the window is already visible or is in full screen mode, this - * function does nothing. - * - * By default, windowed mode windows are focused when shown - * Set the [GLFW_FOCUS_ON_SHOW](@ref GLFW_FOCUS_ON_SHOW_hint) window hint - * to change this behavior for all newly created windows, or change the - * behavior for an existing window with @ref glfwSetWindowAttrib. - * - * @param[in] window The window to make visible. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @remark @wayland Because Wayland wants every frame of the desktop to be - * complete, this function does not immediately make the window visible. - * Instead it will become visible the next time the window framebuffer is - * updated after this call. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_hide - * @sa @ref glfwHideWindow - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI void glfwShowWindow(GLFWwindow* window); - -/*! @brief Hides the specified window. - * - * This function hides the specified window if it was previously visible. If - * the window is already hidden or is in full screen mode, this function does - * nothing. - * - * @param[in] window The window to hide. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_hide - * @sa @ref glfwShowWindow - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI void glfwHideWindow(GLFWwindow* window); - -/*! @brief Brings the specified window to front and sets input focus. - * - * This function brings the specified window to front and sets input focus. - * The window should already be visible and not iconified. - * - * By default, both windowed and full screen mode windows are focused when - * initially created. Set the [GLFW_FOCUSED](@ref GLFW_FOCUSED_hint) to - * disable this behavior. - * - * Also by default, windowed mode windows are focused when shown - * with @ref glfwShowWindow. Set the - * [GLFW_FOCUS_ON_SHOW](@ref GLFW_FOCUS_ON_SHOW_hint) to disable this behavior. - * - * __Do not use this function__ to steal focus from other applications unless - * you are certain that is what the user wants. Focus stealing can be - * extremely disruptive. - * - * For a less disruptive way of getting the user's attention, see - * [attention requests](@ref window_attention). - * - * @param[in] window The window to give input focus. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @remark @wayland The compositor will likely ignore focus requests unless - * another window created by the same application already has input focus. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_focus - * @sa @ref window_attention - * - * @since Added in version 3.2. - * - * @ingroup window - */ -GLFWAPI void glfwFocusWindow(GLFWwindow* window); - -/*! @brief Requests user attention to the specified window. - * - * This function requests user attention to the specified window. On - * platforms where this is not supported, attention is requested to the - * application as a whole. - * - * Once the user has given attention, usually by focusing the window or - * application, the system will end the request automatically. - * - * @param[in] window The window to request attention to. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @remark @macos Attention is requested to the application as a whole, not the - * specific window. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_attention - * - * @since Added in version 3.3. - * - * @ingroup window - */ -GLFWAPI void glfwRequestWindowAttention(GLFWwindow* window); - -/*! @brief Returns the monitor that the window uses for full screen mode. - * - * This function returns the handle of the monitor that the specified window is - * in full screen on. - * - * @param[in] window The window to query. - * @return The monitor, or `NULL` if the window is in windowed mode or an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_monitor - * @sa @ref glfwSetWindowMonitor - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI GLFWmonitor* glfwGetWindowMonitor(GLFWwindow* window); - -/*! @brief Sets the mode, monitor, video mode and placement of a window. - * - * This function sets the monitor that the window uses for full screen mode or, - * if the monitor is `NULL`, makes it windowed mode. - * - * When setting a monitor, this function updates the width, height and refresh - * rate of the desired video mode and switches to the video mode closest to it. - * The window position is ignored when setting a monitor. - * - * When the monitor is `NULL`, the position, width and height are used to - * place the window content area. The refresh rate is ignored when no monitor - * is specified. - * - * If you only wish to update the resolution of a full screen window or the - * size of a windowed mode window, see @ref glfwSetWindowSize. - * - * When a window transitions from full screen to windowed mode, this function - * restores any previous window settings such as whether it is decorated, - * floating, resizable, has size or aspect ratio limits, etc. - * - * @param[in] window The window whose monitor, size or video mode to set. - * @param[in] monitor The desired monitor, or `NULL` to set windowed mode. - * @param[in] xpos The desired x-coordinate of the upper-left corner of the - * content area. - * @param[in] ypos The desired y-coordinate of the upper-left corner of the - * content area. - * @param[in] width The desired with, in screen coordinates, of the content - * area or video mode. - * @param[in] height The desired height, in screen coordinates, of the content - * area or video mode. - * @param[in] refreshRate The desired refresh rate, in Hz, of the video mode, - * or `GLFW_DONT_CARE`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @remark The OpenGL or OpenGL ES context will not be destroyed or otherwise - * affected by any resizing or mode switching, although you may need to update - * your viewport if the framebuffer size has changed. - * - * @remark @wayland The desired window position is ignored, as there is no way - * for an application to set this property. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_monitor - * @sa @ref window_full_screen - * @sa @ref glfwGetWindowMonitor - * @sa @ref glfwSetWindowSize - * - * @since Added in version 3.2. - * - * @ingroup window - */ -GLFWAPI void glfwSetWindowMonitor(GLFWwindow* window, GLFWmonitor* monitor, int xpos, int ypos, int width, int height, int refreshRate); - -/*! @brief Returns an attribute of the specified window. - * - * This function returns the value of an attribute of the specified window or - * its OpenGL or OpenGL ES context. - * - * @param[in] window The window to query. - * @param[in] attrib The [window attribute](@ref window_attribs) whose value to - * return. - * @return The value of the attribute, or zero if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. - * - * @remark Framebuffer related hints are not window attributes. See @ref - * window_attribs_fb for more information. - * - * @remark Zero is a valid value for many window and context related - * attributes so you cannot use a return value of zero as an indication of - * errors. However, this function should not fail as long as it is passed - * valid arguments and the library has been [initialized](@ref intro_init). - * - * @remark @wayland The Wayland protocol provides no way to check whether a - * window is iconfied, so @ref GLFW_ICONIFIED always returns `GLFW_FALSE`. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_attribs - * @sa @ref glfwSetWindowAttrib - * - * @since Added in version 3.0. Replaces `glfwGetWindowParam` and - * `glfwGetGLVersion`. - * - * @ingroup window - */ -GLFWAPI int glfwGetWindowAttrib(GLFWwindow* window, int attrib); - -/*! @brief Sets an attribute of the specified window. - * - * This function sets the value of an attribute of the specified window. - * - * The supported attributes are [GLFW_DECORATED](@ref GLFW_DECORATED_attrib), - * [GLFW_RESIZABLE](@ref GLFW_RESIZABLE_attrib), - * [GLFW_FLOATING](@ref GLFW_FLOATING_attrib), - * [GLFW_AUTO_ICONIFY](@ref GLFW_AUTO_ICONIFY_attrib) and - * [GLFW_FOCUS_ON_SHOW](@ref GLFW_FOCUS_ON_SHOW_attrib). - * [GLFW_MOUSE_PASSTHROUGH](@ref GLFW_MOUSE_PASSTHROUGH_attrib) - * - * Some of these attributes are ignored for full screen windows. The new - * value will take effect if the window is later made windowed. - * - * Some of these attributes are ignored for windowed mode windows. The new - * value will take effect if the window is later made full screen. - * - * @param[in] window The window to set the attribute for. - * @param[in] attrib A supported window attribute. - * @param[in] value `GLFW_TRUE` or `GLFW_FALSE`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_ENUM, @ref GLFW_INVALID_VALUE, @ref GLFW_PLATFORM_ERROR and @ref - * GLFW_FEATURE_UNAVAILABLE (see remarks). - * - * @remark Calling @ref glfwGetWindowAttrib will always return the latest - * value, even if that value is ignored by the current mode of the window. - * - * @remark @wayland The [GLFW_FLOATING](@ref GLFW_FLOATING_attrib) window attribute is - * not supported. Setting this will emit @ref GLFW_FEATURE_UNAVAILABLE. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_attribs - * @sa @ref glfwGetWindowAttrib - * - * @since Added in version 3.3. - * - * @ingroup window - */ -GLFWAPI void glfwSetWindowAttrib(GLFWwindow* window, int attrib, int value); - -/*! @brief Sets the user pointer of the specified window. - * - * This function sets the user-defined pointer of the specified window. The - * current value is retained until the window is destroyed. The initial value - * is `NULL`. - * - * @param[in] window The window whose pointer to set. - * @param[in] pointer The new value. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @sa @ref window_userptr - * @sa @ref glfwGetWindowUserPointer - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI void glfwSetWindowUserPointer(GLFWwindow* window, void* pointer); - -/*! @brief Returns the user pointer of the specified window. - * - * This function returns the current value of the user-defined pointer of the - * specified window. The initial value is `NULL`. - * - * @param[in] window The window whose pointer to return. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @sa @ref window_userptr - * @sa @ref glfwSetWindowUserPointer - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI void* glfwGetWindowUserPointer(GLFWwindow* window); - -/*! @brief Sets the position callback for the specified window. - * - * This function sets the position callback of the specified window, which is - * called when the window is moved. The callback is provided with the - * position, in screen coordinates, of the upper-left corner of the content - * area of the window. - * - * @param[in] window The window whose callback to set. - * @param[in] callback The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @callback_signature - * @code - * void function_name(GLFWwindow* window, int xpos, int ypos) - * @endcode - * For more information about the callback parameters, see the - * [function pointer type](@ref GLFWwindowposfun). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @remark @wayland This callback will never be called, as there is no way for - * an application to know its global position. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_pos - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI GLFWwindowposfun glfwSetWindowPosCallback(GLFWwindow* window, GLFWwindowposfun callback); - -/*! @brief Sets the size callback for the specified window. - * - * This function sets the size callback of the specified window, which is - * called when the window is resized. The callback is provided with the size, - * in screen coordinates, of the content area of the window. - * - * @param[in] window The window whose callback to set. - * @param[in] callback The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @callback_signature - * @code - * void function_name(GLFWwindow* window, int width, int height) - * @endcode - * For more information about the callback parameters, see the - * [function pointer type](@ref GLFWwindowsizefun). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_size - * - * @since Added in version 1.0. - * @glfw3 Added window handle parameter and return value. - * - * @ingroup window - */ -GLFWAPI GLFWwindowsizefun glfwSetWindowSizeCallback(GLFWwindow* window, GLFWwindowsizefun callback); - -/*! @brief Sets the close callback for the specified window. - * - * This function sets the close callback of the specified window, which is - * called when the user attempts to close the window, for example by clicking - * the close widget in the title bar. - * - * The close flag is set before this callback is called, but you can modify it - * at any time with @ref glfwSetWindowShouldClose. - * - * The close callback is not triggered by @ref glfwDestroyWindow. - * - * @param[in] window The window whose callback to set. - * @param[in] callback The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @callback_signature - * @code - * void function_name(GLFWwindow* window) - * @endcode - * For more information about the callback parameters, see the - * [function pointer type](@ref GLFWwindowclosefun). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @remark @macos Selecting Quit from the application menu will trigger the - * close callback for all windows. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_close - * - * @since Added in version 2.5. - * @glfw3 Added window handle parameter and return value. - * - * @ingroup window - */ -GLFWAPI GLFWwindowclosefun glfwSetWindowCloseCallback(GLFWwindow* window, GLFWwindowclosefun callback); - -/*! @brief Sets the refresh callback for the specified window. - * - * This function sets the refresh callback of the specified window, which is - * called when the content area of the window needs to be redrawn, for example - * if the window has been exposed after having been covered by another window. - * - * On compositing window systems such as Aero, Compiz, Aqua or Wayland, where - * the window contents are saved off-screen, this callback may be called only - * very infrequently or never at all. - * - * @param[in] window The window whose callback to set. - * @param[in] callback The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @callback_signature - * @code - * void function_name(GLFWwindow* window); - * @endcode - * For more information about the callback parameters, see the - * [function pointer type](@ref GLFWwindowrefreshfun). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_refresh - * - * @since Added in version 2.5. - * @glfw3 Added window handle parameter and return value. - * - * @ingroup window - */ -GLFWAPI GLFWwindowrefreshfun glfwSetWindowRefreshCallback(GLFWwindow* window, GLFWwindowrefreshfun callback); - -/*! @brief Sets the focus callback for the specified window. - * - * This function sets the focus callback of the specified window, which is - * called when the window gains or loses input focus. - * - * After the focus callback is called for a window that lost input focus, - * synthetic key and mouse button release events will be generated for all such - * that had been pressed. For more information, see @ref glfwSetKeyCallback - * and @ref glfwSetMouseButtonCallback. - * - * @param[in] window The window whose callback to set. - * @param[in] callback The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @callback_signature - * @code - * void function_name(GLFWwindow* window, int focused) - * @endcode - * For more information about the callback parameters, see the - * [function pointer type](@ref GLFWwindowfocusfun). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_focus - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI GLFWwindowfocusfun glfwSetWindowFocusCallback(GLFWwindow* window, GLFWwindowfocusfun callback); - -/*! @brief Sets the iconify callback for the specified window. - * - * This function sets the iconification callback of the specified window, which - * is called when the window is iconified or restored. - * - * @param[in] window The window whose callback to set. - * @param[in] callback The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @callback_signature - * @code - * void function_name(GLFWwindow* window, int iconified) - * @endcode - * For more information about the callback parameters, see the - * [function pointer type](@ref GLFWwindowiconifyfun). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_iconify - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI GLFWwindowiconifyfun glfwSetWindowIconifyCallback(GLFWwindow* window, GLFWwindowiconifyfun callback); - -/*! @brief Sets the maximize callback for the specified window. - * - * This function sets the maximization callback of the specified window, which - * is called when the window is maximized or restored. - * - * @param[in] window The window whose callback to set. - * @param[in] callback The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @callback_signature - * @code - * void function_name(GLFWwindow* window, int maximized) - * @endcode - * For more information about the callback parameters, see the - * [function pointer type](@ref GLFWwindowmaximizefun). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_maximize - * - * @since Added in version 3.3. - * - * @ingroup window - */ -GLFWAPI GLFWwindowmaximizefun glfwSetWindowMaximizeCallback(GLFWwindow* window, GLFWwindowmaximizefun callback); - -/*! @brief Sets the framebuffer resize callback for the specified window. - * - * This function sets the framebuffer resize callback of the specified window, - * which is called when the framebuffer of the specified window is resized. - * - * @param[in] window The window whose callback to set. - * @param[in] callback The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @callback_signature - * @code - * void function_name(GLFWwindow* window, int width, int height) - * @endcode - * For more information about the callback parameters, see the - * [function pointer type](@ref GLFWframebuffersizefun). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_fbsize - * - * @since Added in version 3.0. - * - * @ingroup window - */ -GLFWAPI GLFWframebuffersizefun glfwSetFramebufferSizeCallback(GLFWwindow* window, GLFWframebuffersizefun callback); - -/*! @brief Sets the window content scale callback for the specified window. - * - * This function sets the window content scale callback of the specified window, - * which is called when the content scale of the specified window changes. - * - * @param[in] window The window whose callback to set. - * @param[in] callback The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @callback_signature - * @code - * void function_name(GLFWwindow* window, float xscale, float yscale) - * @endcode - * For more information about the callback parameters, see the - * [function pointer type](@ref GLFWwindowcontentscalefun). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref window_scale - * @sa @ref glfwGetWindowContentScale - * - * @since Added in version 3.3. - * - * @ingroup window - */ -GLFWAPI GLFWwindowcontentscalefun glfwSetWindowContentScaleCallback(GLFWwindow* window, GLFWwindowcontentscalefun callback); - -/*! @brief Processes all pending events. - * - * This function processes only those events that are already in the event - * queue and then returns immediately. Processing events will cause the window - * and input callbacks associated with those events to be called. - * - * On some platforms, a window move, resize or menu operation will cause event - * processing to block. This is due to how event processing is designed on - * those platforms. You can use the - * [window refresh callback](@ref window_refresh) to redraw the contents of - * your window when necessary during such operations. - * - * Do not assume that callbacks you set will _only_ be called in response to - * event processing functions like this one. While it is necessary to poll for - * events, window systems that require GLFW to register callbacks of its own - * can pass events to GLFW in response to many window system function calls. - * GLFW will pass those events on to the application callbacks before - * returning. - * - * Event processing is not required for joystick input to work. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @reentrancy This function must not be called from a callback. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref events - * @sa @ref glfwWaitEvents - * @sa @ref glfwWaitEventsTimeout - * - * @since Added in version 1.0. - * - * @ingroup window - */ -GLFWAPI void glfwPollEvents(void); - -/*! @brief Waits until events are queued and processes them. - * - * This function puts the calling thread to sleep until at least one event is - * available in the event queue. Once one or more events are available, - * it behaves exactly like @ref glfwPollEvents, i.e. the events in the queue - * are processed and the function then returns immediately. Processing events - * will cause the window and input callbacks associated with those events to be - * called. - * - * Since not all events are associated with callbacks, this function may return - * without a callback having been called even if you are monitoring all - * callbacks. - * - * On some platforms, a window move, resize or menu operation will cause event - * processing to block. This is due to how event processing is designed on - * those platforms. You can use the - * [window refresh callback](@ref window_refresh) to redraw the contents of - * your window when necessary during such operations. - * - * Do not assume that callbacks you set will _only_ be called in response to - * event processing functions like this one. While it is necessary to poll for - * events, window systems that require GLFW to register callbacks of its own - * can pass events to GLFW in response to many window system function calls. - * GLFW will pass those events on to the application callbacks before - * returning. - * - * Event processing is not required for joystick input to work. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @reentrancy This function must not be called from a callback. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref events - * @sa @ref glfwPollEvents - * @sa @ref glfwWaitEventsTimeout - * - * @since Added in version 2.5. - * - * @ingroup window - */ -GLFWAPI void glfwWaitEvents(void); - -/*! @brief Waits with timeout until events are queued and processes them. - * - * This function puts the calling thread to sleep until at least one event is - * available in the event queue, or until the specified timeout is reached. If - * one or more events are available, it behaves exactly like @ref - * glfwPollEvents, i.e. the events in the queue are processed and the function - * then returns immediately. Processing events will cause the window and input - * callbacks associated with those events to be called. - * - * The timeout value must be a positive finite number. - * - * Since not all events are associated with callbacks, this function may return - * without a callback having been called even if you are monitoring all - * callbacks. - * - * On some platforms, a window move, resize or menu operation will cause event - * processing to block. This is due to how event processing is designed on - * those platforms. You can use the - * [window refresh callback](@ref window_refresh) to redraw the contents of - * your window when necessary during such operations. - * - * Do not assume that callbacks you set will _only_ be called in response to - * event processing functions like this one. While it is necessary to poll for - * events, window systems that require GLFW to register callbacks of its own - * can pass events to GLFW in response to many window system function calls. - * GLFW will pass those events on to the application callbacks before - * returning. - * - * Event processing is not required for joystick input to work. - * - * @param[in] timeout The maximum amount of time, in seconds, to wait. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR. - * - * @reentrancy This function must not be called from a callback. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref events - * @sa @ref glfwPollEvents - * @sa @ref glfwWaitEvents - * - * @since Added in version 3.2. - * - * @ingroup window - */ -GLFWAPI void glfwWaitEventsTimeout(double timeout); - -/*! @brief Posts an empty event to the event queue. - * - * This function posts an empty event from the current thread to the event - * queue, causing @ref glfwWaitEvents or @ref glfwWaitEventsTimeout to return. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref events - * @sa @ref glfwWaitEvents - * @sa @ref glfwWaitEventsTimeout - * - * @since Added in version 3.1. - * - * @ingroup window - */ -GLFWAPI void glfwPostEmptyEvent(void); - -/*! @brief Returns the value of an input option for the specified window. - * - * This function returns the value of an input option for the specified window. - * The mode must be one of @ref GLFW_CURSOR, @ref GLFW_STICKY_KEYS, - * @ref GLFW_STICKY_MOUSE_BUTTONS, @ref GLFW_LOCK_KEY_MODS or - * @ref GLFW_RAW_MOUSE_MOTION. - * - * @param[in] window The window to query. - * @param[in] mode One of `GLFW_CURSOR`, `GLFW_STICKY_KEYS`, - * `GLFW_STICKY_MOUSE_BUTTONS`, `GLFW_LOCK_KEY_MODS` or - * `GLFW_RAW_MOUSE_MOTION`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_INVALID_ENUM. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref glfwSetInputMode - * - * @since Added in version 3.0. - * - * @ingroup input - */ -GLFWAPI int glfwGetInputMode(GLFWwindow* window, int mode); - -/*! @brief Sets an input option for the specified window. - * - * This function sets an input mode option for the specified window. The mode - * must be one of @ref GLFW_CURSOR, @ref GLFW_STICKY_KEYS, - * @ref GLFW_STICKY_MOUSE_BUTTONS, @ref GLFW_LOCK_KEY_MODS or - * @ref GLFW_RAW_MOUSE_MOTION. - * - * If the mode is `GLFW_CURSOR`, the value must be one of the following cursor - * modes: - * - `GLFW_CURSOR_NORMAL` makes the cursor visible and behaving normally. - * - `GLFW_CURSOR_HIDDEN` makes the cursor invisible when it is over the - * content area of the window but does not restrict the cursor from leaving. - * - `GLFW_CURSOR_DISABLED` hides and grabs the cursor, providing virtual - * and unlimited cursor movement. This is useful for implementing for - * example 3D camera controls. - * - `GLFW_CURSOR_CAPTURED` makes the cursor visible and confines it to the - * content area of the window. - * - * If the mode is `GLFW_STICKY_KEYS`, the value must be either `GLFW_TRUE` to - * enable sticky keys, or `GLFW_FALSE` to disable it. If sticky keys are - * enabled, a key press will ensure that @ref glfwGetKey returns `GLFW_PRESS` - * the next time it is called even if the key had been released before the - * call. This is useful when you are only interested in whether keys have been - * pressed but not when or in which order. - * - * If the mode is `GLFW_STICKY_MOUSE_BUTTONS`, the value must be either - * `GLFW_TRUE` to enable sticky mouse buttons, or `GLFW_FALSE` to disable it. - * If sticky mouse buttons are enabled, a mouse button press will ensure that - * @ref glfwGetMouseButton returns `GLFW_PRESS` the next time it is called even - * if the mouse button had been released before the call. This is useful when - * you are only interested in whether mouse buttons have been pressed but not - * when or in which order. - * - * If the mode is `GLFW_LOCK_KEY_MODS`, the value must be either `GLFW_TRUE` to - * enable lock key modifier bits, or `GLFW_FALSE` to disable them. If enabled, - * callbacks that receive modifier bits will also have the @ref - * GLFW_MOD_CAPS_LOCK bit set when the event was generated with Caps Lock on, - * and the @ref GLFW_MOD_NUM_LOCK bit when Num Lock was on. - * - * If the mode is `GLFW_RAW_MOUSE_MOTION`, the value must be either `GLFW_TRUE` - * to enable raw (unscaled and unaccelerated) mouse motion when the cursor is - * disabled, or `GLFW_FALSE` to disable it. If raw motion is not supported, - * attempting to set this will emit @ref GLFW_FEATURE_UNAVAILABLE. Call @ref - * glfwRawMouseMotionSupported to check for support. - * - * @param[in] window The window whose input mode to set. - * @param[in] mode One of `GLFW_CURSOR`, `GLFW_STICKY_KEYS`, - * `GLFW_STICKY_MOUSE_BUTTONS`, `GLFW_LOCK_KEY_MODS` or - * `GLFW_RAW_MOUSE_MOTION`. - * @param[in] value The new value of the specified input mode. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_ENUM, @ref GLFW_PLATFORM_ERROR and @ref - * GLFW_FEATURE_UNAVAILABLE (see above). - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref glfwGetInputMode - * - * @since Added in version 3.0. Replaces `glfwEnable` and `glfwDisable`. - * - * @ingroup input - */ -GLFWAPI void glfwSetInputMode(GLFWwindow* window, int mode, int value); - -/*! @brief Returns whether raw mouse motion is supported. - * - * This function returns whether raw mouse motion is supported on the current - * system. This status does not change after GLFW has been initialized so you - * only need to check this once. If you attempt to enable raw motion on - * a system that does not support it, @ref GLFW_PLATFORM_ERROR will be emitted. - * - * Raw mouse motion is closer to the actual motion of the mouse across - * a surface. It is not affected by the scaling and acceleration applied to - * the motion of the desktop cursor. That processing is suitable for a cursor - * while raw motion is better for controlling for example a 3D camera. Because - * of this, raw mouse motion is only provided when the cursor is disabled. - * - * @return `GLFW_TRUE` if raw mouse motion is supported on the current machine, - * or `GLFW_FALSE` otherwise. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref raw_mouse_motion - * @sa @ref glfwSetInputMode - * - * @since Added in version 3.3. - * - * @ingroup input - */ -GLFWAPI int glfwRawMouseMotionSupported(void); - -/*! @brief Returns the layout-specific name of the specified printable key. - * - * This function returns the name of the specified printable key, encoded as - * UTF-8. This is typically the character that key would produce without any - * modifier keys, intended for displaying key bindings to the user. For dead - * keys, it is typically the diacritic it would add to a character. - * - * __Do not use this function__ for [text input](@ref input_char). You will - * break text input for many languages even if it happens to work for yours. - * - * If the key is `GLFW_KEY_UNKNOWN`, the scancode is used to identify the key, - * otherwise the scancode is ignored. If you specify a non-printable key, or - * `GLFW_KEY_UNKNOWN` and a scancode that maps to a non-printable key, this - * function returns `NULL` but does not emit an error. - * - * This behavior allows you to always pass in the arguments in the - * [key callback](@ref input_key) without modification. - * - * The printable keys are: - * - `GLFW_KEY_APOSTROPHE` - * - `GLFW_KEY_COMMA` - * - `GLFW_KEY_MINUS` - * - `GLFW_KEY_PERIOD` - * - `GLFW_KEY_SLASH` - * - `GLFW_KEY_SEMICOLON` - * - `GLFW_KEY_EQUAL` - * - `GLFW_KEY_LEFT_BRACKET` - * - `GLFW_KEY_RIGHT_BRACKET` - * - `GLFW_KEY_BACKSLASH` - * - `GLFW_KEY_WORLD_1` - * - `GLFW_KEY_WORLD_2` - * - `GLFW_KEY_0` to `GLFW_KEY_9` - * - `GLFW_KEY_A` to `GLFW_KEY_Z` - * - `GLFW_KEY_KP_0` to `GLFW_KEY_KP_9` - * - `GLFW_KEY_KP_DECIMAL` - * - `GLFW_KEY_KP_DIVIDE` - * - `GLFW_KEY_KP_MULTIPLY` - * - `GLFW_KEY_KP_SUBTRACT` - * - `GLFW_KEY_KP_ADD` - * - `GLFW_KEY_KP_EQUAL` - * - * Names for printable keys depend on keyboard layout, while names for - * non-printable keys are the same across layouts but depend on the application - * language and should be localized along with other user interface text. - * - * @param[in] key The key to query, or `GLFW_KEY_UNKNOWN`. - * @param[in] scancode The scancode of the key to query. - * @return The UTF-8 encoded, layout-specific name of the key, or `NULL`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_VALUE, @ref GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. - * - * @remark The contents of the returned string may change when a keyboard - * layout change event is received. - * - * @pointer_lifetime The returned string is allocated and freed by GLFW. You - * should not free it yourself. It is valid until the library is terminated. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref input_key_name - * - * @since Added in version 3.2. - * - * @ingroup input - */ -GLFWAPI const char* glfwGetKeyName(int key, int scancode); - -/*! @brief Returns the platform-specific scancode of the specified key. - * - * This function returns the platform-specific scancode of the specified key. - * - * If the specified [key token](@ref keys) corresponds to a physical key not - * supported on the current platform then this method will return `-1`. - * Calling this function with anything other than a key token will return `-1` - * and generate a @ref GLFW_INVALID_ENUM error. - * - * @param[in] key Any [key token](@ref keys). - * @return The platform-specific scancode for the key, or `-1` if the key is - * not supported on the current platform or an [error](@ref error_handling) - * occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_INVALID_ENUM. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref input_key - * - * @since Added in version 3.3. - * - * @ingroup input - */ -GLFWAPI int glfwGetKeyScancode(int key); - -/*! @brief Returns the last reported state of a keyboard key for the specified - * window. - * - * This function returns the last state reported for the specified key to the - * specified window. The returned state is one of `GLFW_PRESS` or - * `GLFW_RELEASE`. The action `GLFW_REPEAT` is only reported to the key callback. - * - * If the @ref GLFW_STICKY_KEYS input mode is enabled, this function returns - * `GLFW_PRESS` the first time you call it for a key that was pressed, even if - * that key has already been released. - * - * The key functions deal with physical keys, with [key tokens](@ref keys) - * named after their use on the standard US keyboard layout. If you want to - * input text, use the Unicode character callback instead. - * - * The [modifier key bit masks](@ref mods) are not key tokens and cannot be - * used with this function. - * - * __Do not use this function__ to implement [text input](@ref input_char). - * - * @param[in] window The desired window. - * @param[in] key The desired [keyboard key](@ref keys). `GLFW_KEY_UNKNOWN` is - * not a valid key for this function. - * @return One of `GLFW_PRESS` or `GLFW_RELEASE`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_INVALID_ENUM. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref input_key - * - * @since Added in version 1.0. - * @glfw3 Added window handle parameter. - * - * @ingroup input - */ -GLFWAPI int glfwGetKey(GLFWwindow* window, int key); - -/*! @brief Returns the last reported state of a mouse button for the specified - * window. - * - * This function returns the last state reported for the specified mouse button - * to the specified window. The returned state is one of `GLFW_PRESS` or - * `GLFW_RELEASE`. - * - * If the @ref GLFW_STICKY_MOUSE_BUTTONS input mode is enabled, this function - * returns `GLFW_PRESS` the first time you call it for a mouse button that was - * pressed, even if that mouse button has already been released. - * - * @param[in] window The desired window. - * @param[in] button The desired [mouse button](@ref buttons). - * @return One of `GLFW_PRESS` or `GLFW_RELEASE`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_INVALID_ENUM. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref input_mouse_button - * - * @since Added in version 1.0. - * @glfw3 Added window handle parameter. - * - * @ingroup input - */ -GLFWAPI int glfwGetMouseButton(GLFWwindow* window, int button); - -/*! @brief Retrieves the position of the cursor relative to the content area of - * the window. - * - * This function returns the position of the cursor, in screen coordinates, - * relative to the upper-left corner of the content area of the specified - * window. - * - * If the cursor is disabled (with `GLFW_CURSOR_DISABLED`) then the cursor - * position is unbounded and limited only by the minimum and maximum values of - * a `double`. - * - * The coordinate can be converted to their integer equivalents with the - * `floor` function. Casting directly to an integer type works for positive - * coordinates, but fails for negative ones. - * - * Any or all of the position arguments may be `NULL`. If an error occurs, all - * non-`NULL` position arguments will be set to zero. - * - * @param[in] window The desired window. - * @param[out] xpos Where to store the cursor x-coordinate, relative to the - * left edge of the content area, or `NULL`. - * @param[out] ypos Where to store the cursor y-coordinate, relative to the to - * top edge of the content area, or `NULL`. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref cursor_pos - * @sa @ref glfwSetCursorPos - * - * @since Added in version 3.0. Replaces `glfwGetMousePos`. - * - * @ingroup input - */ -GLFWAPI void glfwGetCursorPos(GLFWwindow* window, double* xpos, double* ypos); - -/*! @brief Sets the position of the cursor, relative to the content area of the - * window. - * - * This function sets the position, in screen coordinates, of the cursor - * relative to the upper-left corner of the content area of the specified - * window. The window must have input focus. If the window does not have - * input focus when this function is called, it fails silently. - * - * __Do not use this function__ to implement things like camera controls. GLFW - * already provides the `GLFW_CURSOR_DISABLED` cursor mode that hides the - * cursor, transparently re-centers it and provides unconstrained cursor - * motion. See @ref glfwSetInputMode for more information. - * - * If the cursor mode is `GLFW_CURSOR_DISABLED` then the cursor position is - * unconstrained and limited only by the minimum and maximum values of - * a `double`. - * - * @param[in] window The desired window. - * @param[in] xpos The desired x-coordinate, relative to the left edge of the - * content area. - * @param[in] ypos The desired y-coordinate, relative to the top edge of the - * content area. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_PLATFORM_ERROR and @ref GLFW_FEATURE_UNAVAILABLE (see remarks). - * - * @remark @wayland This function will only work when the cursor mode is - * `GLFW_CURSOR_DISABLED`, otherwise it will emit @ref GLFW_FEATURE_UNAVAILABLE. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref cursor_pos - * @sa @ref glfwGetCursorPos - * - * @since Added in version 3.0. Replaces `glfwSetMousePos`. - * - * @ingroup input - */ -GLFWAPI void glfwSetCursorPos(GLFWwindow* window, double xpos, double ypos); - -/*! @brief Creates a custom cursor. - * - * Creates a new custom cursor image that can be set for a window with @ref - * glfwSetCursor. The cursor can be destroyed with @ref glfwDestroyCursor. - * Any remaining cursors are destroyed by @ref glfwTerminate. - * - * The pixels are 32-bit, little-endian, non-premultiplied RGBA, i.e. eight - * bits per channel with the red channel first. They are arranged canonically - * as packed sequential rows, starting from the top-left corner. - * - * The cursor hotspot is specified in pixels, relative to the upper-left corner - * of the cursor image. Like all other coordinate systems in GLFW, the X-axis - * points to the right and the Y-axis points down. - * - * @param[in] image The desired cursor image. - * @param[in] xhot The desired x-coordinate, in pixels, of the cursor hotspot. - * @param[in] yhot The desired y-coordinate, in pixels, of the cursor hotspot. - * @return The handle of the created cursor, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_VALUE and @ref GLFW_PLATFORM_ERROR. - * - * @pointer_lifetime The specified image data is copied before this function - * returns. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref cursor_object - * @sa @ref glfwDestroyCursor - * @sa @ref glfwCreateStandardCursor - * - * @since Added in version 3.1. - * - * @ingroup input - */ -GLFWAPI GLFWcursor* glfwCreateCursor(const GLFWimage* image, int xhot, int yhot); - -/*! @brief Creates a cursor with a standard shape. - * - * Returns a cursor with a standard shape, that can be set for a window with - * @ref glfwSetCursor. The images for these cursors come from the system - * cursor theme and their exact appearance will vary between platforms. - * - * Most of these shapes are guaranteed to exist on every supported platform but - * a few may not be present. See the table below for details. - * - * Cursor shape | Windows | macOS | X11 | Wayland - * ------------------------------ | ------- | ----- | ------ | ------- - * @ref GLFW_ARROW_CURSOR | Yes | Yes | Yes | Yes - * @ref GLFW_IBEAM_CURSOR | Yes | Yes | Yes | Yes - * @ref GLFW_CROSSHAIR_CURSOR | Yes | Yes | Yes | Yes - * @ref GLFW_POINTING_HAND_CURSOR | Yes | Yes | Yes | Yes - * @ref GLFW_RESIZE_EW_CURSOR | Yes | Yes | Yes | Yes - * @ref GLFW_RESIZE_NS_CURSOR | Yes | Yes | Yes | Yes - * @ref GLFW_RESIZE_NWSE_CURSOR | Yes | Yes1 | Maybe2 | Maybe2 - * @ref GLFW_RESIZE_NESW_CURSOR | Yes | Yes1 | Maybe2 | Maybe2 - * @ref GLFW_RESIZE_ALL_CURSOR | Yes | Yes | Yes | Yes - * @ref GLFW_NOT_ALLOWED_CURSOR | Yes | Yes | Maybe2 | Maybe2 - * - * 1) This uses a private system API and may fail in the future. - * - * 2) This uses a newer standard that not all cursor themes support. - * - * If the requested shape is not available, this function emits a @ref - * GLFW_CURSOR_UNAVAILABLE error and returns `NULL`. - * - * @param[in] shape One of the [standard shapes](@ref shapes). - * @return A new cursor ready to use or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_ENUM, @ref GLFW_CURSOR_UNAVAILABLE and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref cursor_standard - * @sa @ref glfwCreateCursor - * - * @since Added in version 3.1. - * - * @ingroup input - */ -GLFWAPI GLFWcursor* glfwCreateStandardCursor(int shape); - -/*! @brief Destroys a cursor. - * - * This function destroys a cursor previously created with @ref - * glfwCreateCursor. Any remaining cursors will be destroyed by @ref - * glfwTerminate. - * - * If the specified cursor is current for any window, that window will be - * reverted to the default cursor. This does not affect the cursor mode. - * - * @param[in] cursor The cursor object to destroy. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @reentrancy This function must not be called from a callback. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref cursor_object - * @sa @ref glfwCreateCursor - * - * @since Added in version 3.1. - * - * @ingroup input - */ -GLFWAPI void glfwDestroyCursor(GLFWcursor* cursor); - -/*! @brief Sets the cursor for the window. - * - * This function sets the cursor image to be used when the cursor is over the - * content area of the specified window. The set cursor will only be visible - * when the [cursor mode](@ref cursor_mode) of the window is - * `GLFW_CURSOR_NORMAL`. - * - * On some platforms, the set cursor may not be visible unless the window also - * has input focus. - * - * @param[in] window The window to set the cursor for. - * @param[in] cursor The cursor to set, or `NULL` to switch back to the default - * arrow cursor. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref cursor_object - * - * @since Added in version 3.1. - * - * @ingroup input - */ -GLFWAPI void glfwSetCursor(GLFWwindow* window, GLFWcursor* cursor); - -/*! @brief Sets the key callback. - * - * This function sets the key callback of the specified window, which is called - * when a key is pressed, repeated or released. - * - * The key functions deal with physical keys, with layout independent - * [key tokens](@ref keys) named after their values in the standard US keyboard - * layout. If you want to input text, use the - * [character callback](@ref glfwSetCharCallback) instead. - * - * When a window loses input focus, it will generate synthetic key release - * events for all pressed keys with associated key tokens. You can tell these - * events from user-generated events by the fact that the synthetic ones are - * generated after the focus loss event has been processed, i.e. after the - * [window focus callback](@ref glfwSetWindowFocusCallback) has been called. - * - * The scancode of a key is specific to that platform or sometimes even to that - * machine. Scancodes are intended to allow users to bind keys that don't have - * a GLFW key token. Such keys have `key` set to `GLFW_KEY_UNKNOWN`, their - * state is not saved and so it cannot be queried with @ref glfwGetKey. - * - * Sometimes GLFW needs to generate synthetic key events, in which case the - * scancode may be zero. - * - * @param[in] window The window whose callback to set. - * @param[in] callback The new key callback, or `NULL` to remove the currently - * set callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @callback_signature - * @code - * void function_name(GLFWwindow* window, int key, int scancode, int action, int mods) - * @endcode - * For more information about the callback parameters, see the - * [function pointer type](@ref GLFWkeyfun). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref input_key - * - * @since Added in version 1.0. - * @glfw3 Added window handle parameter and return value. - * - * @ingroup input - */ -GLFWAPI GLFWkeyfun glfwSetKeyCallback(GLFWwindow* window, GLFWkeyfun callback); - -/*! @brief Sets the Unicode character callback. - * - * This function sets the character callback of the specified window, which is - * called when a Unicode character is input. - * - * The character callback is intended for Unicode text input. As it deals with - * characters, it is keyboard layout dependent, whereas the - * [key callback](@ref glfwSetKeyCallback) is not. Characters do not map 1:1 - * to physical keys, as a key may produce zero, one or more characters. If you - * want to know whether a specific physical key was pressed or released, see - * the key callback instead. - * - * The character callback behaves as system text input normally does and will - * not be called if modifier keys are held down that would prevent normal text - * input on that platform, for example a Super (Command) key on macOS or Alt key - * on Windows. - * - * @param[in] window The window whose callback to set. - * @param[in] callback The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @callback_signature - * @code - * void function_name(GLFWwindow* window, unsigned int codepoint) - * @endcode - * For more information about the callback parameters, see the - * [function pointer type](@ref GLFWcharfun). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref input_char - * - * @since Added in version 2.4. - * @glfw3 Added window handle parameter and return value. - * - * @ingroup input - */ -GLFWAPI GLFWcharfun glfwSetCharCallback(GLFWwindow* window, GLFWcharfun callback); - -/*! @brief Sets the Unicode character with modifiers callback. - * - * This function sets the character with modifiers callback of the specified - * window, which is called when a Unicode character is input regardless of what - * modifier keys are used. - * - * The character with modifiers callback is intended for implementing custom - * Unicode character input. For regular Unicode text input, see the - * [character callback](@ref glfwSetCharCallback). Like the character - * callback, the character with modifiers callback deals with characters and is - * keyboard layout dependent. Characters do not map 1:1 to physical keys, as - * a key may produce zero, one or more characters. If you want to know whether - * a specific physical key was pressed or released, see the - * [key callback](@ref glfwSetKeyCallback) instead. - * - * @param[in] window The window whose callback to set. - * @param[in] callback The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or an - * [error](@ref error_handling) occurred. - * - * @callback_signature - * @code - * void function_name(GLFWwindow* window, unsigned int codepoint, int mods) - * @endcode - * For more information about the callback parameters, see the - * [function pointer type](@ref GLFWcharmodsfun). - * - * @deprecated Scheduled for removal in version 4.0. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref input_char - * - * @since Added in version 3.1. - * - * @ingroup input - */ -GLFWAPI GLFWcharmodsfun glfwSetCharModsCallback(GLFWwindow* window, GLFWcharmodsfun callback); - -/*! @brief Sets the mouse button callback. - * - * This function sets the mouse button callback of the specified window, which - * is called when a mouse button is pressed or released. - * - * When a window loses input focus, it will generate synthetic mouse button - * release events for all pressed mouse buttons. You can tell these events - * from user-generated events by the fact that the synthetic ones are generated - * after the focus loss event has been processed, i.e. after the - * [window focus callback](@ref glfwSetWindowFocusCallback) has been called. - * - * @param[in] window The window whose callback to set. - * @param[in] callback The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @callback_signature - * @code - * void function_name(GLFWwindow* window, int button, int action, int mods) - * @endcode - * For more information about the callback parameters, see the - * [function pointer type](@ref GLFWmousebuttonfun). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref input_mouse_button - * - * @since Added in version 1.0. - * @glfw3 Added window handle parameter and return value. - * - * @ingroup input - */ -GLFWAPI GLFWmousebuttonfun glfwSetMouseButtonCallback(GLFWwindow* window, GLFWmousebuttonfun callback); - -/*! @brief Sets the cursor position callback. - * - * This function sets the cursor position callback of the specified window, - * which is called when the cursor is moved. The callback is provided with the - * position, in screen coordinates, relative to the upper-left corner of the - * content area of the window. - * - * @param[in] window The window whose callback to set. - * @param[in] callback The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @callback_signature - * @code - * void function_name(GLFWwindow* window, double xpos, double ypos); - * @endcode - * For more information about the callback parameters, see the - * [function pointer type](@ref GLFWcursorposfun). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref cursor_pos - * - * @since Added in version 3.0. Replaces `glfwSetMousePosCallback`. - * - * @ingroup input - */ -GLFWAPI GLFWcursorposfun glfwSetCursorPosCallback(GLFWwindow* window, GLFWcursorposfun callback); - -/*! @brief Sets the cursor enter/leave callback. - * - * This function sets the cursor boundary crossing callback of the specified - * window, which is called when the cursor enters or leaves the content area of - * the window. - * - * @param[in] window The window whose callback to set. - * @param[in] callback The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @callback_signature - * @code - * void function_name(GLFWwindow* window, int entered) - * @endcode - * For more information about the callback parameters, see the - * [function pointer type](@ref GLFWcursorenterfun). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref cursor_enter - * - * @since Added in version 3.0. - * - * @ingroup input - */ -GLFWAPI GLFWcursorenterfun glfwSetCursorEnterCallback(GLFWwindow* window, GLFWcursorenterfun callback); - -/*! @brief Sets the scroll callback. - * - * This function sets the scroll callback of the specified window, which is - * called when a scrolling device is used, such as a mouse wheel or scrolling - * area of a touchpad. - * - * The scroll callback receives all scrolling input, like that from a mouse - * wheel or a touchpad scrolling area. - * - * @param[in] window The window whose callback to set. - * @param[in] callback The new scroll callback, or `NULL` to remove the - * currently set callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @callback_signature - * @code - * void function_name(GLFWwindow* window, double xoffset, double yoffset) - * @endcode - * For more information about the callback parameters, see the - * [function pointer type](@ref GLFWscrollfun). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref scrolling - * - * @since Added in version 3.0. Replaces `glfwSetMouseWheelCallback`. - * - * @ingroup input - */ -GLFWAPI GLFWscrollfun glfwSetScrollCallback(GLFWwindow* window, GLFWscrollfun callback); - -/*! @brief Sets the path drop callback. - * - * This function sets the path drop callback of the specified window, which is - * called when one or more dragged paths are dropped on the window. - * - * Because the path array and its strings may have been generated specifically - * for that event, they are not guaranteed to be valid after the callback has - * returned. If you wish to use them after the callback returns, you need to - * make a deep copy. - * - * @param[in] window The window whose callback to set. - * @param[in] callback The new file drop callback, or `NULL` to remove the - * currently set callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @callback_signature - * @code - * void function_name(GLFWwindow* window, int path_count, const char* paths[]) - * @endcode - * For more information about the callback parameters, see the - * [function pointer type](@ref GLFWdropfun). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref path_drop - * - * @since Added in version 3.1. - * - * @ingroup input - */ -GLFWAPI GLFWdropfun glfwSetDropCallback(GLFWwindow* window, GLFWdropfun callback); - -/*! @brief Returns whether the specified joystick is present. - * - * This function returns whether the specified joystick is present. - * - * There is no need to call this function before other functions that accept - * a joystick ID, as they all check for presence before performing any other - * work. - * - * @param[in] jid The [joystick](@ref joysticks) to query. - * @return `GLFW_TRUE` if the joystick is present, or `GLFW_FALSE` otherwise. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref joystick - * - * @since Added in version 3.0. Replaces `glfwGetJoystickParam`. - * - * @ingroup input - */ -GLFWAPI int glfwJoystickPresent(int jid); - -/*! @brief Returns the values of all axes of the specified joystick. - * - * This function returns the values of all axes of the specified joystick. - * Each element in the array is a value between -1.0 and 1.0. - * - * If the specified joystick is not present this function will return `NULL` - * but will not generate an error. This can be used instead of first calling - * @ref glfwJoystickPresent. - * - * @param[in] jid The [joystick](@ref joysticks) to query. - * @param[out] count Where to store the number of axis values in the returned - * array. This is set to zero if the joystick is not present or an error - * occurred. - * @return An array of axis values, or `NULL` if the joystick is not present or - * an [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. - * - * @pointer_lifetime The returned array is allocated and freed by GLFW. You - * should not free it yourself. It is valid until the specified joystick is - * disconnected or the library is terminated. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref joystick_axis - * - * @since Added in version 3.0. Replaces `glfwGetJoystickPos`. - * - * @ingroup input - */ -GLFWAPI const float* glfwGetJoystickAxes(int jid, int* count); - -/*! @brief Returns the state of all buttons of the specified joystick. - * - * This function returns the state of all buttons of the specified joystick. - * Each element in the array is either `GLFW_PRESS` or `GLFW_RELEASE`. - * - * For backward compatibility with earlier versions that did not have @ref - * glfwGetJoystickHats, the button array also includes all hats, each - * represented as four buttons. The hats are in the same order as returned by - * __glfwGetJoystickHats__ and are in the order _up_, _right_, _down_ and - * _left_. To disable these extra buttons, set the @ref - * GLFW_JOYSTICK_HAT_BUTTONS init hint before initialization. - * - * If the specified joystick is not present this function will return `NULL` - * but will not generate an error. This can be used instead of first calling - * @ref glfwJoystickPresent. - * - * @param[in] jid The [joystick](@ref joysticks) to query. - * @param[out] count Where to store the number of button states in the returned - * array. This is set to zero if the joystick is not present or an error - * occurred. - * @return An array of button states, or `NULL` if the joystick is not present - * or an [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. - * - * @pointer_lifetime The returned array is allocated and freed by GLFW. You - * should not free it yourself. It is valid until the specified joystick is - * disconnected or the library is terminated. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref joystick_button - * - * @since Added in version 2.2. - * @glfw3 Changed to return a dynamic array. - * - * @ingroup input - */ -GLFWAPI const unsigned char* glfwGetJoystickButtons(int jid, int* count); - -/*! @brief Returns the state of all hats of the specified joystick. - * - * This function returns the state of all hats of the specified joystick. - * Each element in the array is one of the following values: - * - * Name | Value - * ---- | ----- - * `GLFW_HAT_CENTERED` | 0 - * `GLFW_HAT_UP` | 1 - * `GLFW_HAT_RIGHT` | 2 - * `GLFW_HAT_DOWN` | 4 - * `GLFW_HAT_LEFT` | 8 - * `GLFW_HAT_RIGHT_UP` | `GLFW_HAT_RIGHT` \| `GLFW_HAT_UP` - * `GLFW_HAT_RIGHT_DOWN` | `GLFW_HAT_RIGHT` \| `GLFW_HAT_DOWN` - * `GLFW_HAT_LEFT_UP` | `GLFW_HAT_LEFT` \| `GLFW_HAT_UP` - * `GLFW_HAT_LEFT_DOWN` | `GLFW_HAT_LEFT` \| `GLFW_HAT_DOWN` - * - * The diagonal directions are bitwise combinations of the primary (up, right, - * down and left) directions and you can test for these individually by ANDing - * it with the corresponding direction. - * - * @code - * if (hats[2] & GLFW_HAT_RIGHT) - * { - * // State of hat 2 could be right-up, right or right-down - * } - * @endcode - * - * If the specified joystick is not present this function will return `NULL` - * but will not generate an error. This can be used instead of first calling - * @ref glfwJoystickPresent. - * - * @param[in] jid The [joystick](@ref joysticks) to query. - * @param[out] count Where to store the number of hat states in the returned - * array. This is set to zero if the joystick is not present or an error - * occurred. - * @return An array of hat states, or `NULL` if the joystick is not present - * or an [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. - * - * @pointer_lifetime The returned array is allocated and freed by GLFW. You - * should not free it yourself. It is valid until the specified joystick is - * disconnected, this function is called again for that joystick or the library - * is terminated. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref joystick_hat - * - * @since Added in version 3.3. - * - * @ingroup input - */ -GLFWAPI const unsigned char* glfwGetJoystickHats(int jid, int* count); - -/*! @brief Returns the name of the specified joystick. - * - * This function returns the name, encoded as UTF-8, of the specified joystick. - * The returned string is allocated and freed by GLFW. You should not free it - * yourself. - * - * If the specified joystick is not present this function will return `NULL` - * but will not generate an error. This can be used instead of first calling - * @ref glfwJoystickPresent. - * - * @param[in] jid The [joystick](@ref joysticks) to query. - * @return The UTF-8 encoded name of the joystick, or `NULL` if the joystick - * is not present or an [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. - * - * @pointer_lifetime The returned string is allocated and freed by GLFW. You - * should not free it yourself. It is valid until the specified joystick is - * disconnected or the library is terminated. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref joystick_name - * - * @since Added in version 3.0. - * - * @ingroup input - */ -GLFWAPI const char* glfwGetJoystickName(int jid); - -/*! @brief Returns the SDL compatible GUID of the specified joystick. - * - * This function returns the SDL compatible GUID, as a UTF-8 encoded - * hexadecimal string, of the specified joystick. The returned string is - * allocated and freed by GLFW. You should not free it yourself. - * - * The GUID is what connects a joystick to a gamepad mapping. A connected - * joystick will always have a GUID even if there is no gamepad mapping - * assigned to it. - * - * If the specified joystick is not present this function will return `NULL` - * but will not generate an error. This can be used instead of first calling - * @ref glfwJoystickPresent. - * - * The GUID uses the format introduced in SDL 2.0.5. This GUID tries to - * uniquely identify the make and model of a joystick but does not identify - * a specific unit, e.g. all wired Xbox 360 controllers will have the same - * GUID on that platform. The GUID for a unit may vary between platforms - * depending on what hardware information the platform specific APIs provide. - * - * @param[in] jid The [joystick](@ref joysticks) to query. - * @return The UTF-8 encoded GUID of the joystick, or `NULL` if the joystick - * is not present or an [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_INVALID_ENUM and @ref GLFW_PLATFORM_ERROR. - * - * @pointer_lifetime The returned string is allocated and freed by GLFW. You - * should not free it yourself. It is valid until the specified joystick is - * disconnected or the library is terminated. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref gamepad - * - * @since Added in version 3.3. - * - * @ingroup input - */ -GLFWAPI const char* glfwGetJoystickGUID(int jid); - -/*! @brief Sets the user pointer of the specified joystick. - * - * This function sets the user-defined pointer of the specified joystick. The - * current value is retained until the joystick is disconnected. The initial - * value is `NULL`. - * - * This function may be called from the joystick callback, even for a joystick - * that is being disconnected. - * - * @param[in] jid The joystick whose pointer to set. - * @param[in] pointer The new value. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @sa @ref joystick_userptr - * @sa @ref glfwGetJoystickUserPointer - * - * @since Added in version 3.3. - * - * @ingroup input - */ -GLFWAPI void glfwSetJoystickUserPointer(int jid, void* pointer); - -/*! @brief Returns the user pointer of the specified joystick. - * - * This function returns the current value of the user-defined pointer of the - * specified joystick. The initial value is `NULL`. - * - * This function may be called from the joystick callback, even for a joystick - * that is being disconnected. - * - * @param[in] jid The joystick whose pointer to return. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @sa @ref joystick_userptr - * @sa @ref glfwSetJoystickUserPointer - * - * @since Added in version 3.3. - * - * @ingroup input - */ -GLFWAPI void* glfwGetJoystickUserPointer(int jid); - -/*! @brief Returns whether the specified joystick has a gamepad mapping. - * - * This function returns whether the specified joystick is both present and has - * a gamepad mapping. - * - * If the specified joystick is present but does not have a gamepad mapping - * this function will return `GLFW_FALSE` but will not generate an error. Call - * @ref glfwJoystickPresent to check if a joystick is present regardless of - * whether it has a mapping. - * - * @param[in] jid The [joystick](@ref joysticks) to query. - * @return `GLFW_TRUE` if a joystick is both present and has a gamepad mapping, - * or `GLFW_FALSE` otherwise. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_INVALID_ENUM. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref gamepad - * @sa @ref glfwGetGamepadState - * - * @since Added in version 3.3. - * - * @ingroup input - */ -GLFWAPI int glfwJoystickIsGamepad(int jid); - -/*! @brief Sets the joystick configuration callback. - * - * This function sets the joystick configuration callback, or removes the - * currently set callback. This is called when a joystick is connected to or - * disconnected from the system. - * - * For joystick connection and disconnection events to be delivered on all - * platforms, you need to call one of the [event processing](@ref events) - * functions. Joystick disconnection may also be detected and the callback - * called by joystick functions. The function will then return whatever it - * returns if the joystick is not present. - * - * @param[in] callback The new callback, or `NULL` to remove the currently set - * callback. - * @return The previously set callback, or `NULL` if no callback was set or the - * library had not been [initialized](@ref intro_init). - * - * @callback_signature - * @code - * void function_name(int jid, int event) - * @endcode - * For more information about the callback parameters, see the - * [function pointer type](@ref GLFWjoystickfun). - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref joystick_event - * - * @since Added in version 3.2. - * - * @ingroup input - */ -GLFWAPI GLFWjoystickfun glfwSetJoystickCallback(GLFWjoystickfun callback); - -/*! @brief Adds the specified SDL_GameControllerDB gamepad mappings. - * - * This function parses the specified ASCII encoded string and updates the - * internal list with any gamepad mappings it finds. This string may - * contain either a single gamepad mapping or many mappings separated by - * newlines. The parser supports the full format of the `gamecontrollerdb.txt` - * source file including empty lines and comments. - * - * See @ref gamepad_mapping for a description of the format. - * - * If there is already a gamepad mapping for a given GUID in the internal list, - * it will be replaced by the one passed to this function. If the library is - * terminated and re-initialized the internal list will revert to the built-in - * default. - * - * @param[in] string The string containing the gamepad mappings. - * @return `GLFW_TRUE` if successful, or `GLFW_FALSE` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_INVALID_VALUE. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref gamepad - * @sa @ref glfwJoystickIsGamepad - * @sa @ref glfwGetGamepadName - * - * @since Added in version 3.3. - * - * @ingroup input - */ -GLFWAPI int glfwUpdateGamepadMappings(const char* string); - -/*! @brief Returns the human-readable gamepad name for the specified joystick. - * - * This function returns the human-readable name of the gamepad from the - * gamepad mapping assigned to the specified joystick. - * - * If the specified joystick is not present or does not have a gamepad mapping - * this function will return `NULL` but will not generate an error. Call - * @ref glfwJoystickPresent to check whether it is present regardless of - * whether it has a mapping. - * - * @param[in] jid The [joystick](@ref joysticks) to query. - * @return The UTF-8 encoded name of the gamepad, or `NULL` if the - * joystick is not present, does not have a mapping or an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref GLFW_INVALID_ENUM. - * - * @pointer_lifetime The returned string is allocated and freed by GLFW. You - * should not free it yourself. It is valid until the specified joystick is - * disconnected, the gamepad mappings are updated or the library is terminated. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref gamepad - * @sa @ref glfwJoystickIsGamepad - * - * @since Added in version 3.3. - * - * @ingroup input - */ -GLFWAPI const char* glfwGetGamepadName(int jid); - -/*! @brief Retrieves the state of the specified joystick remapped as a gamepad. - * - * This function retrieves the state of the specified joystick remapped to - * an Xbox-like gamepad. - * - * If the specified joystick is not present or does not have a gamepad mapping - * this function will return `GLFW_FALSE` but will not generate an error. Call - * @ref glfwJoystickPresent to check whether it is present regardless of - * whether it has a mapping. - * - * The Guide button may not be available for input as it is often hooked by the - * system or the Steam client. - * - * Not all devices have all the buttons or axes provided by @ref - * GLFWgamepadstate. Unavailable buttons and axes will always report - * `GLFW_RELEASE` and 0.0 respectively. - * - * @param[in] jid The [joystick](@ref joysticks) to query. - * @param[out] state The gamepad input state of the joystick. - * @return `GLFW_TRUE` if successful, or `GLFW_FALSE` if no joystick is - * connected, it has no gamepad mapping or an [error](@ref error_handling) - * occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_INVALID_ENUM. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref gamepad - * @sa @ref glfwUpdateGamepadMappings - * @sa @ref glfwJoystickIsGamepad - * - * @since Added in version 3.3. - * - * @ingroup input - */ -GLFWAPI int glfwGetGamepadState(int jid, GLFWgamepadstate* state); - -/*! @brief Sets the clipboard to the specified string. - * - * This function sets the system clipboard to the specified, UTF-8 encoded - * string. - * - * @param[in] window Deprecated. Any valid window or `NULL`. - * @param[in] string A UTF-8 encoded string. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_ERROR. - * - * @remark @win32 The clipboard on Windows has a single global lock for reading and - * writing. GLFW tries to acquire it a few times, which is almost always enough. If it - * cannot acquire the lock then this function emits @ref GLFW_PLATFORM_ERROR and returns. - * It is safe to try this multiple times. - * - * @pointer_lifetime The specified string is copied before this function - * returns. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref clipboard - * @sa @ref glfwGetClipboardString - * - * @since Added in version 3.0. - * - * @ingroup input - */ -GLFWAPI void glfwSetClipboardString(GLFWwindow* window, const char* string); - -/*! @brief Returns the contents of the clipboard as a string. - * - * This function returns the contents of the system clipboard, if it contains - * or is convertible to a UTF-8 encoded string. If the clipboard is empty or - * if its contents cannot be converted, `NULL` is returned and a @ref - * GLFW_FORMAT_UNAVAILABLE error is generated. - * - * @param[in] window Deprecated. Any valid window or `NULL`. - * @return The contents of the clipboard as a UTF-8 encoded string, or `NULL` - * if an [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_FORMAT_UNAVAILABLE and @ref GLFW_PLATFORM_ERROR. - * - * @remark @win32 The clipboard on Windows has a single global lock for reading and - * writing. GLFW tries to acquire it a few times, which is almost always enough. If it - * cannot acquire the lock then this function emits @ref GLFW_PLATFORM_ERROR and returns. - * It is safe to try this multiple times. - * - * @pointer_lifetime The returned string is allocated and freed by GLFW. You - * should not free it yourself. It is valid until the next call to @ref - * glfwGetClipboardString or @ref glfwSetClipboardString, or until the library - * is terminated. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref clipboard - * @sa @ref glfwSetClipboardString - * - * @since Added in version 3.0. - * - * @ingroup input - */ -GLFWAPI const char* glfwGetClipboardString(GLFWwindow* window); - -/*! @brief Returns the GLFW time. - * - * This function returns the current GLFW time, in seconds. Unless the time - * has been set using @ref glfwSetTime it measures time elapsed since GLFW was - * initialized. - * - * This function and @ref glfwSetTime are helper functions on top of @ref - * glfwGetTimerFrequency and @ref glfwGetTimerValue. - * - * The resolution of the timer is system dependent, but is usually on the order - * of a few micro- or nanoseconds. It uses the highest-resolution monotonic - * time source on each operating system. - * - * @return The current time, in seconds, or zero if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. Reading and - * writing of the internal base time is not atomic, so it needs to be - * externally synchronized with calls to @ref glfwSetTime. - * - * @sa @ref time - * - * @since Added in version 1.0. - * - * @ingroup input - */ -GLFWAPI double glfwGetTime(void); - -/*! @brief Sets the GLFW time. - * - * This function sets the current GLFW time, in seconds. The value must be - * a positive finite number less than or equal to 18446744073.0, which is - * approximately 584.5 years. - * - * This function and @ref glfwGetTime are helper functions on top of @ref - * glfwGetTimerFrequency and @ref glfwGetTimerValue. - * - * @param[in] time The new value, in seconds. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_INVALID_VALUE. - * - * @remark The upper limit of GLFW time is calculated as - * floor((264 - 1) / 109) and is due to implementations - * storing nanoseconds in 64 bits. The limit may be increased in the future. - * - * @thread_safety This function may be called from any thread. Reading and - * writing of the internal base time is not atomic, so it needs to be - * externally synchronized with calls to @ref glfwGetTime. - * - * @sa @ref time - * - * @since Added in version 2.2. - * - * @ingroup input - */ -GLFWAPI void glfwSetTime(double time); - -/*! @brief Returns the current value of the raw timer. - * - * This function returns the current value of the raw timer, measured in - * 1 / frequency seconds. To get the frequency, call @ref - * glfwGetTimerFrequency. - * - * @return The value of the timer, or zero if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref time - * @sa @ref glfwGetTimerFrequency - * - * @since Added in version 3.2. - * - * @ingroup input - */ -GLFWAPI uint64_t glfwGetTimerValue(void); - -/*! @brief Returns the frequency, in Hz, of the raw timer. - * - * This function returns the frequency, in Hz, of the raw timer. - * - * @return The frequency of the timer, in Hz, or zero if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref time - * @sa @ref glfwGetTimerValue - * - * @since Added in version 3.2. - * - * @ingroup input - */ -GLFWAPI uint64_t glfwGetTimerFrequency(void); - -/*! @brief Makes the context of the specified window current for the calling - * thread. - * - * This function makes the OpenGL or OpenGL ES context of the specified window - * current on the calling thread. It can also detach the current context from - * the calling thread without making a new one current by passing in `NULL`. - * - * A context must only be made current on a single thread at a time and each - * thread can have only a single current context at a time. Making a context - * current detaches any previously current context on the calling thread. - * - * When moving a context between threads, you must detach it (make it - * non-current) on the old thread before making it current on the new one. - * - * By default, making a context non-current implicitly forces a pipeline flush. - * On machines that support `GL_KHR_context_flush_control`, you can control - * whether a context performs this flush by setting the - * [GLFW_CONTEXT_RELEASE_BEHAVIOR](@ref GLFW_CONTEXT_RELEASE_BEHAVIOR_hint) - * hint. - * - * The specified window must have an OpenGL or OpenGL ES context. Specifying - * a window without a context will generate a @ref GLFW_NO_WINDOW_CONTEXT - * error. - * - * @param[in] window The window whose context to make current, or `NULL` to - * detach the current context. - * - * @remarks If the previously current context was created via a different - * context creation API than the one passed to this function, GLFW will still - * detach the previous one from its API before making the new one current. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_NO_WINDOW_CONTEXT and @ref GLFW_PLATFORM_ERROR. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref context_current - * @sa @ref glfwGetCurrentContext - * - * @since Added in version 3.0. - * - * @ingroup context - */ -GLFWAPI void glfwMakeContextCurrent(GLFWwindow* window); - -/*! @brief Returns the window whose context is current on the calling thread. - * - * This function returns the window whose OpenGL or OpenGL ES context is - * current on the calling thread. - * - * @return The window whose context is current, or `NULL` if no window's - * context is current. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref context_current - * @sa @ref glfwMakeContextCurrent - * - * @since Added in version 3.0. - * - * @ingroup context - */ -GLFWAPI GLFWwindow* glfwGetCurrentContext(void); - -/*! @brief Swaps the front and back buffers of the specified window. - * - * This function swaps the front and back buffers of the specified window when - * rendering with OpenGL or OpenGL ES. If the swap interval is greater than - * zero, the GPU driver waits the specified number of screen updates before - * swapping the buffers. - * - * The specified window must have an OpenGL or OpenGL ES context. Specifying - * a window without a context will generate a @ref GLFW_NO_WINDOW_CONTEXT - * error. - * - * This function does not apply to Vulkan. If you are rendering with Vulkan, - * see `vkQueuePresentKHR` instead. - * - * @param[in] window The window whose buffers to swap. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_NO_WINDOW_CONTEXT and @ref GLFW_PLATFORM_ERROR. - * - * @remark __EGL:__ The context of the specified window must be current on the - * calling thread. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref buffer_swap - * @sa @ref glfwSwapInterval - * - * @since Added in version 1.0. - * @glfw3 Added window handle parameter. - * - * @ingroup window - */ -GLFWAPI void glfwSwapBuffers(GLFWwindow* window); - -/*! @brief Sets the swap interval for the current context. - * - * This function sets the swap interval for the current OpenGL or OpenGL ES - * context, i.e. the number of screen updates to wait from the time @ref - * glfwSwapBuffers was called before swapping the buffers and returning. This - * is sometimes called _vertical synchronization_, _vertical retrace - * synchronization_ or just _vsync_. - * - * A context that supports either of the `WGL_EXT_swap_control_tear` and - * `GLX_EXT_swap_control_tear` extensions also accepts _negative_ swap - * intervals, which allows the driver to swap immediately even if a frame - * arrives a little bit late. You can check for these extensions with @ref - * glfwExtensionSupported. - * - * A context must be current on the calling thread. Calling this function - * without a current context will cause a @ref GLFW_NO_CURRENT_CONTEXT error. - * - * This function does not apply to Vulkan. If you are rendering with Vulkan, - * see the present mode of your swapchain instead. - * - * @param[in] interval The minimum number of screen updates to wait for - * until the buffers are swapped by @ref glfwSwapBuffers. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_NO_CURRENT_CONTEXT and @ref GLFW_PLATFORM_ERROR. - * - * @remark This function is not called during context creation, leaving the - * swap interval set to whatever is the default for that API. This is done - * because some swap interval extensions used by GLFW do not allow the swap - * interval to be reset to zero once it has been set to a non-zero value. - * - * @remark Some GPU drivers do not honor the requested swap interval, either - * because of a user setting that overrides the application's request or due to - * bugs in the driver. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref buffer_swap - * @sa @ref glfwSwapBuffers - * - * @since Added in version 1.0. - * - * @ingroup context - */ -GLFWAPI void glfwSwapInterval(int interval); - -/*! @brief Returns whether the specified extension is available. - * - * This function returns whether the specified - * [API extension](@ref context_glext) is supported by the current OpenGL or - * OpenGL ES context. It searches both for client API extension and context - * creation API extensions. - * - * A context must be current on the calling thread. Calling this function - * without a current context will cause a @ref GLFW_NO_CURRENT_CONTEXT error. - * - * As this functions retrieves and searches one or more extension strings each - * call, it is recommended that you cache its results if it is going to be used - * frequently. The extension strings will not change during the lifetime of - * a context, so there is no danger in doing this. - * - * This function does not apply to Vulkan. If you are using Vulkan, see @ref - * glfwGetRequiredInstanceExtensions, `vkEnumerateInstanceExtensionProperties` - * and `vkEnumerateDeviceExtensionProperties` instead. - * - * @param[in] extension The ASCII encoded name of the extension. - * @return `GLFW_TRUE` if the extension is available, or `GLFW_FALSE` - * otherwise. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_NO_CURRENT_CONTEXT, @ref GLFW_INVALID_VALUE and @ref - * GLFW_PLATFORM_ERROR. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref context_glext - * @sa @ref glfwGetProcAddress - * - * @since Added in version 1.0. - * - * @ingroup context - */ -GLFWAPI int glfwExtensionSupported(const char* extension); - -/*! @brief Returns the address of the specified function for the current - * context. - * - * This function returns the address of the specified OpenGL or OpenGL ES - * [core or extension function](@ref context_glext), if it is supported - * by the current context. - * - * A context must be current on the calling thread. Calling this function - * without a current context will cause a @ref GLFW_NO_CURRENT_CONTEXT error. - * - * This function does not apply to Vulkan. If you are rendering with Vulkan, - * see @ref glfwGetInstanceProcAddress, `vkGetInstanceProcAddr` and - * `vkGetDeviceProcAddr` instead. - * - * @param[in] procname The ASCII encoded name of the function. - * @return The address of the function, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_NO_CURRENT_CONTEXT and @ref GLFW_PLATFORM_ERROR. - * - * @remark The address of a given function is not guaranteed to be the same - * between contexts. - * - * @remark This function may return a non-`NULL` address despite the - * associated version or extension not being available. Always check the - * context version or extension string first. - * - * @pointer_lifetime The returned function pointer is valid until the context - * is destroyed or the library is terminated. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref context_glext - * @sa @ref glfwExtensionSupported - * - * @since Added in version 1.0. - * - * @ingroup context - */ -GLFWAPI GLFWglproc glfwGetProcAddress(const char* procname); - -/*! @brief Returns whether the Vulkan loader and an ICD have been found. - * - * This function returns whether the Vulkan loader and any minimally functional - * ICD have been found. - * - * The availability of a Vulkan loader and even an ICD does not by itself guarantee that - * surface creation or even instance creation is possible. Call @ref - * glfwGetRequiredInstanceExtensions to check whether the extensions necessary for Vulkan - * surface creation are available and @ref glfwGetPhysicalDevicePresentationSupport to - * check whether a queue family of a physical device supports image presentation. - * - * @return `GLFW_TRUE` if Vulkan is minimally available, or `GLFW_FALSE` - * otherwise. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref vulkan_support - * - * @since Added in version 3.2. - * - * @ingroup vulkan - */ -GLFWAPI int glfwVulkanSupported(void); - -/*! @brief Returns the Vulkan instance extensions required by GLFW. - * - * This function returns an array of names of Vulkan instance extensions required - * by GLFW for creating Vulkan surfaces for GLFW windows. If successful, the - * list will always contain `VK_KHR_surface`, so if you don't require any - * additional extensions you can pass this list directly to the - * `VkInstanceCreateInfo` struct. - * - * If Vulkan is not available on the machine, this function returns `NULL` and - * generates a @ref GLFW_API_UNAVAILABLE error. Call @ref glfwVulkanSupported - * to check whether Vulkan is at least minimally available. - * - * If Vulkan is available but no set of extensions allowing window surface - * creation was found, this function returns `NULL`. You may still use Vulkan - * for off-screen rendering and compute work. - * - * @param[out] count Where to store the number of extensions in the returned - * array. This is set to zero if an error occurred. - * @return An array of ASCII encoded extension names, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_API_UNAVAILABLE. - * - * @remark Additional extensions may be required by future versions of GLFW. - * You should check if any extensions you wish to enable are already in the - * returned array, as it is an error to specify an extension more than once in - * the `VkInstanceCreateInfo` struct. - * - * @pointer_lifetime The returned array is allocated and freed by GLFW. You - * should not free it yourself. It is guaranteed to be valid only until the - * library is terminated. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref vulkan_ext - * @sa @ref glfwCreateWindowSurface - * - * @since Added in version 3.2. - * - * @ingroup vulkan - */ -GLFWAPI const char** glfwGetRequiredInstanceExtensions(uint32_t* count); - -#if defined(VK_VERSION_1_0) - -/*! @brief Returns the address of the specified Vulkan instance function. - * - * This function returns the address of the specified Vulkan core or extension - * function for the specified instance. If instance is set to `NULL` it can - * return any function exported from the Vulkan loader, including at least the - * following functions: - * - * - `vkEnumerateInstanceExtensionProperties` - * - `vkEnumerateInstanceLayerProperties` - * - `vkCreateInstance` - * - `vkGetInstanceProcAddr` - * - * If Vulkan is not available on the machine, this function returns `NULL` and - * generates a @ref GLFW_API_UNAVAILABLE error. Call @ref glfwVulkanSupported - * to check whether Vulkan is at least minimally available. - * - * This function is equivalent to calling `vkGetInstanceProcAddr` with - * a platform-specific query of the Vulkan loader as a fallback. - * - * @param[in] instance The Vulkan instance to query, or `NULL` to retrieve - * functions related to instance creation. - * @param[in] procname The ASCII encoded name of the function. - * @return The address of the function, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_API_UNAVAILABLE. - * - * @pointer_lifetime The returned function pointer is valid until the library - * is terminated. - * - * @thread_safety This function may be called from any thread. - * - * @sa @ref vulkan_proc - * - * @since Added in version 3.2. - * - * @ingroup vulkan - */ -GLFWAPI GLFWvkproc glfwGetInstanceProcAddress(VkInstance instance, const char* procname); - -/*! @brief Returns whether the specified queue family can present images. - * - * This function returns whether the specified queue family of the specified - * physical device supports presentation to the platform GLFW was built for. - * - * If Vulkan or the required window surface creation instance extensions are - * not available on the machine, or if the specified instance was not created - * with the required extensions, this function returns `GLFW_FALSE` and - * generates a @ref GLFW_API_UNAVAILABLE error. Call @ref glfwVulkanSupported - * to check whether Vulkan is at least minimally available and @ref - * glfwGetRequiredInstanceExtensions to check what instance extensions are - * required. - * - * @param[in] instance The instance that the physical device belongs to. - * @param[in] device The physical device that the queue family belongs to. - * @param[in] queuefamily The index of the queue family to query. - * @return `GLFW_TRUE` if the queue family supports presentation, or - * `GLFW_FALSE` otherwise. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_API_UNAVAILABLE and @ref GLFW_PLATFORM_ERROR. - * - * @remark @macos This function currently always returns `GLFW_TRUE`, as the - * `VK_MVK_macos_surface` and `VK_EXT_metal_surface` extensions do not provide - * a `vkGetPhysicalDevice*PresentationSupport` type function. - * - * @thread_safety This function may be called from any thread. For - * synchronization details of Vulkan objects, see the Vulkan specification. - * - * @sa @ref vulkan_present - * - * @since Added in version 3.2. - * - * @ingroup vulkan - */ -GLFWAPI int glfwGetPhysicalDevicePresentationSupport(VkInstance instance, VkPhysicalDevice device, uint32_t queuefamily); - -/*! @brief Creates a Vulkan surface for the specified window. - * - * This function creates a Vulkan surface for the specified window. - * - * If the Vulkan loader or at least one minimally functional ICD were not found, - * this function returns `VK_ERROR_INITIALIZATION_FAILED` and generates a @ref - * GLFW_API_UNAVAILABLE error. Call @ref glfwVulkanSupported to check whether - * Vulkan is at least minimally available. - * - * If the required window surface creation instance extensions are not - * available or if the specified instance was not created with these extensions - * enabled, this function returns `VK_ERROR_EXTENSION_NOT_PRESENT` and - * generates a @ref GLFW_API_UNAVAILABLE error. Call @ref - * glfwGetRequiredInstanceExtensions to check what instance extensions are - * required. - * - * The window surface cannot be shared with another API so the window must - * have been created with the [client api hint](@ref GLFW_CLIENT_API_attrib) - * set to `GLFW_NO_API` otherwise it generates a @ref GLFW_INVALID_VALUE error - * and returns `VK_ERROR_NATIVE_WINDOW_IN_USE_KHR`. - * - * The window surface must be destroyed before the specified Vulkan instance. - * It is the responsibility of the caller to destroy the window surface. GLFW - * does not destroy it for you. Call `vkDestroySurfaceKHR` to destroy the - * surface. - * - * @param[in] instance The Vulkan instance to create the surface in. - * @param[in] window The window to create the surface for. - * @param[in] allocator The allocator to use, or `NULL` to use the default - * allocator. - * @param[out] surface Where to store the handle of the surface. This is set - * to `VK_NULL_HANDLE` if an error occurred. - * @return `VK_SUCCESS` if successful, or a Vulkan error code if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_API_UNAVAILABLE, @ref GLFW_PLATFORM_ERROR and @ref GLFW_INVALID_VALUE - * - * @remark If an error occurs before the creation call is made, GLFW returns - * the Vulkan error code most appropriate for the error. Appropriate use of - * @ref glfwVulkanSupported and @ref glfwGetRequiredInstanceExtensions should - * eliminate almost all occurrences of these errors. - * - * @remark @macos GLFW prefers the `VK_EXT_metal_surface` extension, with the - * `VK_MVK_macos_surface` extension as a fallback. The name of the selected - * extension, if any, is included in the array returned by @ref - * glfwGetRequiredInstanceExtensions. - * - * @remark @macos This function creates and sets a `CAMetalLayer` instance for - * the window content view, which is required for MoltenVK to function. - * - * @remark @x11 By default GLFW prefers the `VK_KHR_xcb_surface` extension, - * with the `VK_KHR_xlib_surface` extension as a fallback. You can make - * `VK_KHR_xlib_surface` the preferred extension by setting the - * [GLFW_X11_XCB_VULKAN_SURFACE](@ref GLFW_X11_XCB_VULKAN_SURFACE_hint) init - * hint. The name of the selected extension, if any, is included in the array - * returned by @ref glfwGetRequiredInstanceExtensions. - * - * @thread_safety This function may be called from any thread. For - * synchronization details of Vulkan objects, see the Vulkan specification. - * - * @sa @ref vulkan_surface - * @sa @ref glfwGetRequiredInstanceExtensions - * - * @since Added in version 3.2. - * - * @ingroup vulkan - */ -GLFWAPI VkResult glfwCreateWindowSurface(VkInstance instance, GLFWwindow* window, const VkAllocationCallbacks* allocator, VkSurfaceKHR* surface); - -#endif /*VK_VERSION_1_0*/ - - -/************************************************************************* - * Global definition cleanup - *************************************************************************/ - -/* ------------------- BEGIN SYSTEM/COMPILER SPECIFIC -------------------- */ - -#ifdef GLFW_WINGDIAPI_DEFINED - #undef WINGDIAPI - #undef GLFW_WINGDIAPI_DEFINED -#endif - -#ifdef GLFW_CALLBACK_DEFINED - #undef CALLBACK - #undef GLFW_CALLBACK_DEFINED -#endif - -/* Some OpenGL related headers need GLAPIENTRY, but it is unconditionally - * defined by some gl.h variants (OpenBSD) so define it after if needed. - */ -#ifndef GLAPIENTRY - #define GLAPIENTRY APIENTRY - #define GLFW_GLAPIENTRY_DEFINED -#endif - -/* -------------------- END SYSTEM/COMPILER SPECIFIC --------------------- */ - - -#ifdef __cplusplus -} -#endif - -#endif /* _glfw3_h_ */ - diff --git a/lib/glfw/include/GLFW/glfw3native.h b/lib/glfw/include/GLFW/glfw3native.h deleted file mode 100644 index 92f0d32..0000000 --- a/lib/glfw/include/GLFW/glfw3native.h +++ /dev/null @@ -1,663 +0,0 @@ -/************************************************************************* - * GLFW 3.4 - www.glfw.org - * A library for OpenGL, window and input - *------------------------------------------------------------------------ - * Copyright (c) 2002-2006 Marcus Geelnard - * Copyright (c) 2006-2018 Camilla Löwy - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would - * be appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and must not - * be misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. - * - *************************************************************************/ - -#ifndef _glfw3_native_h_ -#define _glfw3_native_h_ - -#ifdef __cplusplus -extern "C" { -#endif - - -/************************************************************************* - * Doxygen documentation - *************************************************************************/ - -/*! @file glfw3native.h - * @brief The header of the native access functions. - * - * This is the header file of the native access functions. See @ref native for - * more information. - */ -/*! @defgroup native Native access - * @brief Functions related to accessing native handles. - * - * **By using the native access functions you assert that you know what you're - * doing and how to fix problems caused by using them. If you don't, you - * shouldn't be using them.** - * - * Before the inclusion of @ref glfw3native.h, you may define zero or more - * window system API macro and zero or more context creation API macros. - * - * The chosen backends must match those the library was compiled for. Failure - * to do this will cause a link-time error. - * - * The available window API macros are: - * * `GLFW_EXPOSE_NATIVE_WIN32` - * * `GLFW_EXPOSE_NATIVE_COCOA` - * * `GLFW_EXPOSE_NATIVE_X11` - * * `GLFW_EXPOSE_NATIVE_WAYLAND` - * - * The available context API macros are: - * * `GLFW_EXPOSE_NATIVE_WGL` - * * `GLFW_EXPOSE_NATIVE_NSGL` - * * `GLFW_EXPOSE_NATIVE_GLX` - * * `GLFW_EXPOSE_NATIVE_EGL` - * * `GLFW_EXPOSE_NATIVE_OSMESA` - * - * These macros select which of the native access functions that are declared - * and which platform-specific headers to include. It is then up your (by - * definition platform-specific) code to handle which of these should be - * defined. - * - * If you do not want the platform-specific headers to be included, define - * `GLFW_NATIVE_INCLUDE_NONE` before including the @ref glfw3native.h header. - * - * @code - * #define GLFW_EXPOSE_NATIVE_WIN32 - * #define GLFW_EXPOSE_NATIVE_WGL - * #define GLFW_NATIVE_INCLUDE_NONE - * #include - * @endcode - */ - - -/************************************************************************* - * System headers and types - *************************************************************************/ - -#if !defined(GLFW_NATIVE_INCLUDE_NONE) - - #if defined(GLFW_EXPOSE_NATIVE_WIN32) || defined(GLFW_EXPOSE_NATIVE_WGL) - /* This is a workaround for the fact that glfw3.h needs to export APIENTRY (for - * example to allow applications to correctly declare a GL_KHR_debug callback) - * but windows.h assumes no one will define APIENTRY before it does - */ - #if defined(GLFW_APIENTRY_DEFINED) - #undef APIENTRY - #undef GLFW_APIENTRY_DEFINED - #endif - #include - #endif - - #if defined(GLFW_EXPOSE_NATIVE_COCOA) || defined(GLFW_EXPOSE_NATIVE_NSGL) - #if defined(__OBJC__) - #import - #else - #include - #include - #endif - #endif - - #if defined(GLFW_EXPOSE_NATIVE_X11) || defined(GLFW_EXPOSE_NATIVE_GLX) - #include - #include - #endif - - #if defined(GLFW_EXPOSE_NATIVE_WAYLAND) - #include - #endif - - #if defined(GLFW_EXPOSE_NATIVE_WGL) - /* WGL is declared by windows.h */ - #endif - #if defined(GLFW_EXPOSE_NATIVE_NSGL) - /* NSGL is declared by Cocoa.h */ - #endif - #if defined(GLFW_EXPOSE_NATIVE_GLX) - /* This is a workaround for the fact that glfw3.h defines GLAPIENTRY because by - * default it also acts as an OpenGL header - * However, glx.h will include gl.h, which will define it unconditionally - */ - #if defined(GLFW_GLAPIENTRY_DEFINED) - #undef GLAPIENTRY - #undef GLFW_GLAPIENTRY_DEFINED - #endif - #include - #endif - #if defined(GLFW_EXPOSE_NATIVE_EGL) - #include - #endif - #if defined(GLFW_EXPOSE_NATIVE_OSMESA) - /* This is a workaround for the fact that glfw3.h defines GLAPIENTRY because by - * default it also acts as an OpenGL header - * However, osmesa.h will include gl.h, which will define it unconditionally - */ - #if defined(GLFW_GLAPIENTRY_DEFINED) - #undef GLAPIENTRY - #undef GLFW_GLAPIENTRY_DEFINED - #endif - #include - #endif - -#endif /*GLFW_NATIVE_INCLUDE_NONE*/ - - -/************************************************************************* - * Functions - *************************************************************************/ - -#if defined(GLFW_EXPOSE_NATIVE_WIN32) -/*! @brief Returns the adapter device name of the specified monitor. - * - * @return The UTF-8 encoded adapter device name (for example `\\.\DISPLAY1`) - * of the specified monitor, or `NULL` if an [error](@ref error_handling) - * occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_UNAVAILABLE. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.1. - * - * @ingroup native - */ -GLFWAPI const char* glfwGetWin32Adapter(GLFWmonitor* monitor); - -/*! @brief Returns the display device name of the specified monitor. - * - * @return The UTF-8 encoded display device name (for example - * `\\.\DISPLAY1\Monitor0`) of the specified monitor, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_UNAVAILABLE. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.1. - * - * @ingroup native - */ -GLFWAPI const char* glfwGetWin32Monitor(GLFWmonitor* monitor); - -/*! @brief Returns the `HWND` of the specified window. - * - * @return The `HWND` of the specified window, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_UNAVAILABLE. - * - * @remark The `HDC` associated with the window can be queried with the - * [GetDC](https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getdc) - * function. - * @code - * HDC dc = GetDC(glfwGetWin32Window(window)); - * @endcode - * This DC is private and does not need to be released. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.0. - * - * @ingroup native - */ -GLFWAPI HWND glfwGetWin32Window(GLFWwindow* window); -#endif - -#if defined(GLFW_EXPOSE_NATIVE_WGL) -/*! @brief Returns the `HGLRC` of the specified window. - * - * @return The `HGLRC` of the specified window, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_PLATFORM_UNAVAILABLE and @ref GLFW_NO_WINDOW_CONTEXT. - * - * @remark The `HDC` associated with the window can be queried with the - * [GetDC](https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getdc) - * function. - * @code - * HDC dc = GetDC(glfwGetWin32Window(window)); - * @endcode - * This DC is private and does not need to be released. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.0. - * - * @ingroup native - */ -GLFWAPI HGLRC glfwGetWGLContext(GLFWwindow* window); -#endif - -#if defined(GLFW_EXPOSE_NATIVE_COCOA) -/*! @brief Returns the `CGDirectDisplayID` of the specified monitor. - * - * @return The `CGDirectDisplayID` of the specified monitor, or - * `kCGNullDirectDisplay` if an [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_UNAVAILABLE. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.1. - * - * @ingroup native - */ -GLFWAPI CGDirectDisplayID glfwGetCocoaMonitor(GLFWmonitor* monitor); - -/*! @brief Returns the `NSWindow` of the specified window. - * - * @return The `NSWindow` of the specified window, or `nil` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_UNAVAILABLE. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.0. - * - * @ingroup native - */ -GLFWAPI id glfwGetCocoaWindow(GLFWwindow* window); - -/*! @brief Returns the `NSView` of the specified window. - * - * @return The `NSView` of the specified window, or `nil` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_UNAVAILABLE. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.4. - * - * @ingroup native - */ -GLFWAPI id glfwGetCocoaView(GLFWwindow* window); -#endif - -#if defined(GLFW_EXPOSE_NATIVE_NSGL) -/*! @brief Returns the `NSOpenGLContext` of the specified window. - * - * @return The `NSOpenGLContext` of the specified window, or `nil` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_PLATFORM_UNAVAILABLE and @ref GLFW_NO_WINDOW_CONTEXT. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.0. - * - * @ingroup native - */ -GLFWAPI id glfwGetNSGLContext(GLFWwindow* window); -#endif - -#if defined(GLFW_EXPOSE_NATIVE_X11) -/*! @brief Returns the `Display` used by GLFW. - * - * @return The `Display` used by GLFW, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_UNAVAILABLE. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.0. - * - * @ingroup native - */ -GLFWAPI Display* glfwGetX11Display(void); - -/*! @brief Returns the `RRCrtc` of the specified monitor. - * - * @return The `RRCrtc` of the specified monitor, or `None` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_UNAVAILABLE. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.1. - * - * @ingroup native - */ -GLFWAPI RRCrtc glfwGetX11Adapter(GLFWmonitor* monitor); - -/*! @brief Returns the `RROutput` of the specified monitor. - * - * @return The `RROutput` of the specified monitor, or `None` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_UNAVAILABLE. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.1. - * - * @ingroup native - */ -GLFWAPI RROutput glfwGetX11Monitor(GLFWmonitor* monitor); - -/*! @brief Returns the `Window` of the specified window. - * - * @return The `Window` of the specified window, or `None` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_UNAVAILABLE. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.0. - * - * @ingroup native - */ -GLFWAPI Window glfwGetX11Window(GLFWwindow* window); - -/*! @brief Sets the current primary selection to the specified string. - * - * @param[in] string A UTF-8 encoded string. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_PLATFORM_UNAVAILABLE and @ref GLFW_PLATFORM_ERROR. - * - * @pointer_lifetime The specified string is copied before this function - * returns. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref clipboard - * @sa glfwGetX11SelectionString - * @sa glfwSetClipboardString - * - * @since Added in version 3.3. - * - * @ingroup native - */ -GLFWAPI void glfwSetX11SelectionString(const char* string); - -/*! @brief Returns the contents of the current primary selection as a string. - * - * If the selection is empty or if its contents cannot be converted, `NULL` - * is returned and a @ref GLFW_FORMAT_UNAVAILABLE error is generated. - * - * @return The contents of the selection as a UTF-8 encoded string, or `NULL` - * if an [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_PLATFORM_UNAVAILABLE and @ref GLFW_PLATFORM_ERROR. - * - * @pointer_lifetime The returned string is allocated and freed by GLFW. You - * should not free it yourself. It is valid until the next call to @ref - * glfwGetX11SelectionString or @ref glfwSetX11SelectionString, or until the - * library is terminated. - * - * @thread_safety This function must only be called from the main thread. - * - * @sa @ref clipboard - * @sa glfwSetX11SelectionString - * @sa glfwGetClipboardString - * - * @since Added in version 3.3. - * - * @ingroup native - */ -GLFWAPI const char* glfwGetX11SelectionString(void); -#endif - -#if defined(GLFW_EXPOSE_NATIVE_GLX) -/*! @brief Returns the `GLXContext` of the specified window. - * - * @return The `GLXContext` of the specified window, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_NO_WINDOW_CONTEXT and @ref GLFW_PLATFORM_UNAVAILABLE. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.0. - * - * @ingroup native - */ -GLFWAPI GLXContext glfwGetGLXContext(GLFWwindow* window); - -/*! @brief Returns the `GLXWindow` of the specified window. - * - * @return The `GLXWindow` of the specified window, or `None` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED, @ref - * GLFW_NO_WINDOW_CONTEXT and @ref GLFW_PLATFORM_UNAVAILABLE. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.2. - * - * @ingroup native - */ -GLFWAPI GLXWindow glfwGetGLXWindow(GLFWwindow* window); -#endif - -#if defined(GLFW_EXPOSE_NATIVE_WAYLAND) -/*! @brief Returns the `struct wl_display*` used by GLFW. - * - * @return The `struct wl_display*` used by GLFW, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_UNAVAILABLE. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.2. - * - * @ingroup native - */ -GLFWAPI struct wl_display* glfwGetWaylandDisplay(void); - -/*! @brief Returns the `struct wl_output*` of the specified monitor. - * - * @return The `struct wl_output*` of the specified monitor, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_UNAVAILABLE. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.2. - * - * @ingroup native - */ -GLFWAPI struct wl_output* glfwGetWaylandMonitor(GLFWmonitor* monitor); - -/*! @brief Returns the main `struct wl_surface*` of the specified window. - * - * @return The main `struct wl_surface*` of the specified window, or `NULL` if - * an [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_PLATFORM_UNAVAILABLE. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.2. - * - * @ingroup native - */ -GLFWAPI struct wl_surface* glfwGetWaylandWindow(GLFWwindow* window); -#endif - -#if defined(GLFW_EXPOSE_NATIVE_EGL) -/*! @brief Returns the `EGLDisplay` used by GLFW. - * - * @return The `EGLDisplay` used by GLFW, or `EGL_NO_DISPLAY` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED. - * - * @remark Because EGL is initialized on demand, this function will return - * `EGL_NO_DISPLAY` until the first context has been created via EGL. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.0. - * - * @ingroup native - */ -GLFWAPI EGLDisplay glfwGetEGLDisplay(void); - -/*! @brief Returns the `EGLContext` of the specified window. - * - * @return The `EGLContext` of the specified window, or `EGL_NO_CONTEXT` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_NO_WINDOW_CONTEXT. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.0. - * - * @ingroup native - */ -GLFWAPI EGLContext glfwGetEGLContext(GLFWwindow* window); - -/*! @brief Returns the `EGLSurface` of the specified window. - * - * @return The `EGLSurface` of the specified window, or `EGL_NO_SURFACE` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_NO_WINDOW_CONTEXT. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.0. - * - * @ingroup native - */ -GLFWAPI EGLSurface glfwGetEGLSurface(GLFWwindow* window); -#endif - -#if defined(GLFW_EXPOSE_NATIVE_OSMESA) -/*! @brief Retrieves the color buffer associated with the specified window. - * - * @param[in] window The window whose color buffer to retrieve. - * @param[out] width Where to store the width of the color buffer, or `NULL`. - * @param[out] height Where to store the height of the color buffer, or `NULL`. - * @param[out] format Where to store the OSMesa pixel format of the color - * buffer, or `NULL`. - * @param[out] buffer Where to store the address of the color buffer, or - * `NULL`. - * @return `GLFW_TRUE` if successful, or `GLFW_FALSE` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_NO_WINDOW_CONTEXT. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.3. - * - * @ingroup native - */ -GLFWAPI int glfwGetOSMesaColorBuffer(GLFWwindow* window, int* width, int* height, int* format, void** buffer); - -/*! @brief Retrieves the depth buffer associated with the specified window. - * - * @param[in] window The window whose depth buffer to retrieve. - * @param[out] width Where to store the width of the depth buffer, or `NULL`. - * @param[out] height Where to store the height of the depth buffer, or `NULL`. - * @param[out] bytesPerValue Where to store the number of bytes per depth - * buffer element, or `NULL`. - * @param[out] buffer Where to store the address of the depth buffer, or - * `NULL`. - * @return `GLFW_TRUE` if successful, or `GLFW_FALSE` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_NO_WINDOW_CONTEXT. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.3. - * - * @ingroup native - */ -GLFWAPI int glfwGetOSMesaDepthBuffer(GLFWwindow* window, int* width, int* height, int* bytesPerValue, void** buffer); - -/*! @brief Returns the `OSMesaContext` of the specified window. - * - * @return The `OSMesaContext` of the specified window, or `NULL` if an - * [error](@ref error_handling) occurred. - * - * @errors Possible errors include @ref GLFW_NOT_INITIALIZED and @ref - * GLFW_NO_WINDOW_CONTEXT. - * - * @thread_safety This function may be called from any thread. Access is not - * synchronized. - * - * @since Added in version 3.3. - * - * @ingroup native - */ -GLFWAPI OSMesaContext glfwGetOSMesaContext(GLFWwindow* window); -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* _glfw3_native_h_ */ - diff --git a/lib/glfw/lib-vc2015/glfw3.lib b/lib/glfw/lib-vc2015/glfw3.lib deleted file mode 100644 index 59c7b6e43aade50cdd5e99d22ebbce2856370110..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 696108 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
    l;XcOCIV9fLl-m^wNDKs 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