From e9ea3f50bfeb2effd760df2ee1b9ada21c6599ba Mon Sep 17 00:00:00 2001 From: Ray Date: Sat, 24 Jan 2015 14:40:39 +0100 Subject: [PATCH] Updated GLFW to version 3.1 --- external/glfw3/glfw3.dll | Bin 172569 -> 187203 bytes external/glfw3/include/GLFW/glfw3.h | 1984 ++++++++++++++++----- external/glfw3/include/GLFW/glfw3native.h | 212 ++- external/glfw3/lib/win32/libglfw3.a | Bin 83006 -> 89824 bytes external/glfw3/lib/win32/libglfw3dll.a | Bin 48318 -> 54834 bytes 5 files changed, 1729 insertions(+), 467 deletions(-) diff --git a/external/glfw3/glfw3.dll b/external/glfw3/glfw3.dll index 5941d1a0aff6088a7b5d79a8c99de9f63f9cded5..13aa21eb9c6aae03515881b48e1382ed81aeb133 100644 GIT binary patch literal 187203 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 a_8CT;co@=YxPncOgOWfnx9?Ohp!mPsK@?p8 literal 172569 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 C)NC;T diff --git a/external/glfw3/include/GLFW/glfw3.h b/external/glfw3/include/GLFW/glfw3.h index c54abde8..89414491 100644 --- a/external/glfw3/include/GLFW/glfw3.h +++ b/external/glfw3/include/GLFW/glfw3.h @@ -1,7 +1,6 @@ /************************************************************************* - * GLFW - An OpenGL library - * API version: 3.0 - * WWW: http://www.glfw.org/ + * GLFW 3.1 - www.glfw.org + * A library for OpenGL, window and input *------------------------------------------------------------------------ * Copyright (c) 2002-2006 Marcus Geelnard * Copyright (c) 2006-2010 Camilla Berglund @@ -39,27 +38,32 @@ extern "C" { * Doxygen documentation *************************************************************************/ -/*! @defgroup clipboard Clipboard support - */ /*! @defgroup context Context handling + * + * This is the reference documentation for context related functions. For more + * information, see the @ref context. */ -/*! @defgroup error Error handling - */ -/*! @defgroup gamma Gamma ramp support - */ -/*! @defgroup init Initialization and version information +/*! @defgroup init Initialization, version and errors + * + * This is the reference documentation for initialization and termination of + * the library, version management and error handling. For more information, + * see the @ref intro. */ /*! @defgroup input Input handling + * + * This is the reference documentation for input related functions and types. + * For more information, see the @ref input. */ /*! @defgroup monitor Monitor handling - */ -/*! @defgroup time Time input + * + * This is the reference documentation for monitor related functions and types. + * For more information, see the @ref monitor. */ /*! @defgroup window Window handling * - * This is the reference documentation for the window handling API, including - * creation, deletion and event polling. For more information, see the - * [article on window handling](@ref window). + * This is the reference documentation for window related functions and types, + * including creation, deletion and event polling. For more information, see + * the @ref window. */ @@ -131,74 +135,94 @@ extern "C" { #define GLFW_CALLBACK_DEFINED #endif /* CALLBACK */ -/* Most variants on Windows need wchar_t */ -#if defined(_WIN32) +/* Most GL/glu.h variants on Windows need wchar_t + * OpenGL/gl.h blocks the definition of ptrdiff_t by glext.h on OS X */ +#if !defined(GLFW_INCLUDE_NONE) #include #endif - -/* ---------------- GLFW related system specific defines ----------------- */ +/* Include the chosen client API headers. + */ +#if defined(__APPLE_CC__) + #if defined(GLFW_INCLUDE_GLCOREARB) + #include + #if defined(GLFW_INCLUDE_GLEXT) + #include + #endif + #elif !defined(GLFW_INCLUDE_NONE) + #if !defined(GLFW_INCLUDE_GLEXT) + #define GL_GLEXT_LEGACY + #endif + #include + #endif + #if defined(GLFW_INCLUDE_GLU) + #include + #endif +#else + #if defined(GLFW_INCLUDE_GLCOREARB) + #include + #elif 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_NONE) + #include + #if defined(GLFW_INCLUDE_GLEXT) + #include + #endif + #endif + #if defined(GLFW_INCLUDE_GLU) + #include + #endif +#endif #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 a Win32 DLL */ + /* We are building GLFW as a Win32 DLL */ #define GLFWAPI __declspec(dllexport) - #elif defined(_WIN32) && defined(GLFW_DLL) - - /* We are calling a Win32 DLL */ + /* We are calling GLFW as a Win32 DLL */ #if defined(__LCC__) #define GLFWAPI extern #else #define GLFWAPI __declspec(dllimport) #endif - #elif defined(__GNUC__) && defined(_GLFW_BUILD_DLL) - + /* We are building GLFW as a shared / dynamic library */ #define GLFWAPI __attribute__((visibility("default"))) - #else - - /* We are either building/calling a static lib or we are non-win32 */ + /* We are building or calling GLFW as a static library */ #define GLFWAPI - #endif /* -------------------- END SYSTEM/COMPILER SPECIFIC --------------------- */ -/* Include the chosen client API headers. - */ -#if defined(__APPLE_CC__) - #if defined(GLFW_INCLUDE_GLCOREARB) - #include - #elif !defined(GLFW_INCLUDE_NONE) - #define GL_GLEXT_LEGACY - #include - #endif - #if defined(GLFW_INCLUDE_GLU) - #include - #endif -#else - #if defined(GLFW_INCLUDE_GLCOREARB) - #include - #elif defined(GLFW_INCLUDE_ES1) - #include - #elif defined(GLFW_INCLUDE_ES2) - #include - #elif defined(GLFW_INCLUDE_ES3) - #include - #elif !defined(GLFW_INCLUDE_NONE) - #include - #endif - #if defined(GLFW_INCLUDE_GLU) - #include - #endif -#endif - /************************************************************************* * GLFW API tokens @@ -218,27 +242,36 @@ extern "C" { * backward-compatible. * @ingroup init */ -#define GLFW_VERSION_MINOR 0 +#define GLFW_VERSION_MINOR 1 /*! @brief The revision number of the GLFW library. * * This is incremented when a bug fix release is made that does not contain any * API changes. * @ingroup init */ -#define GLFW_VERSION_REVISION 1 +#define GLFW_VERSION_REVISION 0 /*! @} */ /*! @name Key and button actions * @{ */ -/*! @brief The key or button was released. +/*! @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 button was pressed. +/*! @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 @@ -246,20 +279,22 @@ extern "C" { /*! @defgroup keys Keyboard keys * - * 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 alpha-numeric 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.) + * 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 alpha-numeric 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 * @{ @@ -396,6 +431,9 @@ extern "C" { /*! @} */ /*! @defgroup mods Modifier key flags + * + * See [key input](@ref input_key) for how these are used. + * * @ingroup input * @{ */ @@ -415,6 +453,9 @@ extern "C" { /*! @} */ /*! @defgroup buttons Mouse buttons + * + * See [mouse button input](@ref input_mouse_button) for how these are used. + * * @ingroup input * @{ */ #define GLFW_MOUSE_BUTTON_1 0 @@ -432,6 +473,9 @@ extern "C" { /*! @} */ /*! @defgroup joysticks Joysticks + * + * See [joystick input](@ref joystick) for how these are used. + * * @ingroup input * @{ */ #define GLFW_JOYSTICK_1 0 @@ -454,36 +498,128 @@ extern "C" { /*! @} */ /*! @defgroup errors Error codes - * @ingroup error + * + * See [error handling](@ref error_handling) for how these are used. + * + * @ingroup init * @{ */ /*! @brief GLFW has not been initialized. + * + * This occurs if a GLFW function was called that may not be called unless the + * library is [initialized](@ref intro_init). + * + * @par 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. + * + * @par 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 enum parameters for the function was given an invalid - * enum. +/*! @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 [GLFW_RED_BITS](@ref window_hints_fb) with @ref + * glfwGetWindowAttrib. + * + * @par Analysis + * Application programmer error. Fix the offending call. */ #define GLFW_INVALID_ENUM 0x00010003 -/*! @brief One of the parameters for the function was given an invalid value. +/*! @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. + * + * @par Analysis + * Application programmer error. Fix the offending call. */ #define GLFW_INVALID_VALUE 0x00010004 /*! @brief A memory allocation failed. + * + * A memory allocation failed. + * + * @par 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 client API on the * system. + * + * GLFW could not find support for the requested client API on the system. + * + * @par Analysis + * The installed graphics driver does not support the requested client API, or + * does not support it via the chosen context creation backend. 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 supports it via + * a WGL or GLX extension. OS X does not provide OpenGL ES at all. The Mesa + * EGL, OpenGL and OpenGL ES libraries do not interface with the Nvidia binary + * driver. */ #define GLFW_API_UNAVAILABLE 0x00010006 -/*! @brief The requested client API version is not available. +/*! @brief The requested OpenGL or OpenGL ES version is not available. + * + * The requested OpenGL or OpenGL ES version (including any requested profile + * or context option) is not available on this machine. + * + * @par 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. + * + * @par 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_PLATFORM_ERROR 0x00010008 -/*! @brief The clipboard did not contain data in the requested format. +/*! @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. + * + * @par 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 /*! @} */ @@ -493,6 +629,8 @@ extern "C" { #define GLFW_RESIZABLE 0x00020003 #define GLFW_VISIBLE 0x00020004 #define GLFW_DECORATED 0x00020005 +#define GLFW_AUTO_ICONIFY 0x00020006 +#define GLFW_FLOATING 0x00020007 #define GLFW_RED_BITS 0x00021001 #define GLFW_GREEN_BITS 0x00021002 @@ -509,6 +647,7 @@ extern "C" { #define GLFW_SAMPLES 0x0002100D #define GLFW_SRGB_CAPABLE 0x0002100E #define GLFW_REFRESH_RATE 0x0002100F +#define GLFW_DOUBLEBUFFER 0x00021010 #define GLFW_CLIENT_API 0x00022001 #define GLFW_CONTEXT_VERSION_MAJOR 0x00022002 @@ -518,6 +657,7 @@ extern "C" { #define GLFW_OPENGL_FORWARD_COMPAT 0x00022006 #define GLFW_OPENGL_DEBUG_CONTEXT 0x00022007 #define GLFW_OPENGL_PROFILE 0x00022008 +#define GLFW_CONTEXT_RELEASE_BEHAVIOR 0x00022009 #define GLFW_OPENGL_API 0x00030001 #define GLFW_OPENGL_ES_API 0x00030002 @@ -538,9 +678,54 @@ extern "C" { #define GLFW_CURSOR_HIDDEN 0x00034002 #define GLFW_CURSOR_DISABLED 0x00034003 +#define GLFW_ANY_RELEASE_BEHAVIOR 0 +#define GLFW_RELEASE_BEHAVIOR_FLUSH 0x00035001 +#define GLFW_RELEASE_BEHAVIOR_NONE 0x00035002 + +/*! @defgroup shapes Standard cursor shapes + * + * See [standard cursor creation](@ref cursor_standard) for how these are used. + * + * @ingroup input + * @{ */ + +/*! @brief The regular arrow cursor shape. + * + * The regular arrow cursor. + */ +#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 shape. + * + * The crosshair shape. + */ +#define GLFW_CROSSHAIR_CURSOR 0x00036003 +/*! @brief The hand shape. + * + * The hand shape. + */ +#define GLFW_HAND_CURSOR 0x00036004 +/*! @brief The horizontal resize arrow shape. + * + * The horizontal resize arrow shape. + */ +#define GLFW_HRESIZE_CURSOR 0x00036005 +/*! @brief The vertical resize arrow shape. + * + * The vertical resize arrow shape. + */ +#define GLFW_VRESIZE_CURSOR 0x00036006 +/*! @} */ + #define GLFW_CONNECTED 0x00040001 #define GLFW_DISCONNECTED 0x00040002 +#define GLFW_DONT_CARE -1 + /************************************************************************* * GLFW API types @@ -571,6 +756,14 @@ typedef struct GLFWmonitor GLFWmonitor; */ typedef struct GLFWwindow GLFWwindow; +/*! @brief Opaque cursor object. + * + * Opaque cursor object. + * + * @ingroup cursor + */ +typedef struct GLFWcursor GLFWcursor; + /*! @brief The function signature for error callbacks. * * This is the function signature for error callback functions. @@ -580,7 +773,7 @@ typedef struct GLFWwindow GLFWwindow; * * @sa glfwSetErrorCallback * - * @ingroup error + * @ingroup init */ typedef void (* GLFWerrorfun)(int,const char*); @@ -588,7 +781,7 @@ typedef void (* GLFWerrorfun)(int,const char*); * * This is the function signature for window position callback functions. * - * @param[in] window The window that the user moved. + * @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 client area of the window. * @param[in] ypos The new y-coordinate, in screen coordinates, of the @@ -604,7 +797,7 @@ typedef void (* GLFWwindowposfun)(GLFWwindow*,int,int); * * This is the function signature for window size callback functions. * - * @param[in] window The window that the user resized. + * @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. * @@ -642,9 +835,9 @@ typedef void (* GLFWwindowrefreshfun)(GLFWwindow*); * * This is the function signature for window focus callback functions. * - * @param[in] window The window that was focused or defocused. - * @param[in] focused `GL_TRUE` if the window was focused, or `GL_FALSE` if - * it was defocused. + * @param[in] window The window that gained or lost input focus. + * @param[in] focused `GL_TRUE` if the window was given input focus, or + * `GL_FALSE` if it lost it. * * @sa glfwSetWindowFocusCallback * @@ -704,8 +897,8 @@ typedef void (* GLFWmousebuttonfun)(GLFWwindow*,int,int,int); * This is the function signature for cursor position callback functions. * * @param[in] window The window that received the event. - * @param[in] xpos The new x-coordinate of the cursor. - * @param[in] ypos The new y-coordinate of the cursor. + * @param[in] xpos The new x-coordinate, in screen coordinates, of the cursor. + * @param[in] ypos The new y-coordinate, in screen coordinates, of the cursor. * * @sa glfwSetCursorPosCallback * @@ -748,7 +941,7 @@ typedef void (* GLFWscrollfun)(GLFWwindow*,double,double); * @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 system-specific scancode of the key. - * @param[in] action @ref GLFW_PRESS, @ref GLFW_RELEASE or @ref GLFW_REPEAT. + * @param[in] action `GLFW_PRESS`, `GLFW_RELEASE` or `GLFW_REPEAT`. * @param[in] mods Bit field describing which [modifier keys](@ref mods) were * held down. * @@ -763,7 +956,7 @@ typedef void (* GLFWkeyfun)(GLFWwindow*,int,int,int,int); * This is the function signature for Unicode character callback functions. * * @param[in] window The window that received the event. - * @param[in] character The Unicode code point of the character. + * @param[in] codepoint The Unicode code point of the character. * * @sa glfwSetCharCallback * @@ -771,6 +964,38 @@ typedef void (* GLFWkeyfun)(GLFWwindow*,int,int,int,int); */ typedef void (* GLFWcharfun)(GLFWwindow*,unsigned int); +/*! @brief The function signature for Unicode character with modifiers + * callbacks. + * + * This is the function signature for Unicode character with modifiers callback + * functions. It is called for each input character, regardless of what + * modifier keys are held down. + * + * @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 glfwSetCharModsCallback + * + * @ingroup input + */ +typedef void (* GLFWcharmodsfun)(GLFWwindow*,unsigned int,int); + +/*! @brief The function signature for file drop callbacks. + * + * This is the function signature for file drop callbacks. + * + * @param[in] window The window that received the event. + * @param[in] count The number of dropped files. + * @param[in] names The UTF-8 encoded path names of the dropped files. + * + * @sa glfwSetDropCallback + * + * @ingroup input + */ +typedef void (* GLFWdropfun)(GLFWwindow*,int,const char**); + /*! @brief The function signature for monitor configuration callbacks. * * This is the function signature for monitor configuration callback functions. @@ -790,7 +1015,7 @@ typedef void (* GLFWmonitorfun)(GLFWmonitor*,int); * * @ingroup monitor */ -typedef struct +typedef struct GLFWvidmode { /*! The width, in screen coordinates, of the video mode. */ @@ -818,9 +1043,9 @@ typedef struct * * @sa glfwGetGammaRamp glfwSetGammaRamp * - * @ingroup gamma + * @ingroup monitor */ -typedef struct +typedef struct GLFWgammaramp { /*! An array of value describing the response of the red channel. */ @@ -836,6 +1061,21 @@ typedef struct unsigned int size; } GLFWgammaramp; +/*! @brief Image data. + */ +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; + /************************************************************************* * GLFW API functions @@ -844,56 +1084,70 @@ typedef struct /*! @brief Initializes the GLFW library. * * This function initializes the GLFW library. Before most GLFW functions can - * be used, GLFW must be initialized, and before a program terminates GLFW + * 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 program exits. + * succeeds, you should call @ref glfwTerminate before the application exits. * * Additional calls to this function after successful initialization but before - * termination will succeed but will do nothing. - * - * @return `GL_TRUE` if successful, or `GL_FALSE` if an error occurred. + * termination will return `GL_TRUE` immediately. * - * @par New in GLFW 3 - * This function no longer registers @ref glfwTerminate with `atexit`. + * @return `GL_TRUE` if successful, or `GL_FALSE` if an + * [error](@ref error_handling) occurred. * - * @note This function may only be called from the main thread. + * @remarks __OS X:__ 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 a + * [compile-time option](@ref compile_options_osx). * - * @note This function may take several seconds to complete on some systems, - * while on other systems it may take only a fraction of a second to complete. + * @remarks __X11:__ If the `LC_CTYPE` category of the current locale is set to + * `"C"` then the environment's locale will be applied to that category. This + * is done because character input will not function when `LC_CTYPE` is set to + * `"C"`. If another locale was set before this function was called, it will + * be left untouched. * - * @note **Mac OS X:** This function will change the current directory of the - * application to the `Contents/Resources` subdirectory of the application's - * bundle, if present. + * @par Thread Safety + * This function may only be called from the main thread. * + * @sa @ref intro_init * @sa glfwTerminate * + * @since Added in GLFW 1.0. + * * @ingroup init */ GLFWAPI int glfwInit(void); /*! @brief Terminates the GLFW library. * - * This function destroys all remaining windows, frees any allocated resources - * and sets the library to an uninitialized state. Once this is called, you - * must again call @ref glfwInit successfully before you will be able to use - * most GLFW functions. + * 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 program exits. If initialization fails, there is no need to call - * this function, as it is called by @ref glfwInit before it returns failure. + * 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. * * @remarks This function may be called before @ref glfwInit. * - * @note This function may only be called from the main thread. - * * @warning No window's context may be current on another thread when this * function is called. * + * @par Reentrancy + * This function may not be called from a callback. + * + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref intro_init * @sa glfwInit * + * @since Added in GLFW 1.0. + * * @ingroup init */ GLFWAPI void glfwTerminate(void); @@ -904,46 +1158,55 @@ GLFWAPI void glfwTerminate(void); * 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`. This function always + * succeeds. + * * @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`. * * @remarks This function may be called before @ref glfwInit. * - * @remarks This function may be called from any thread. + * @par Thread Safety + * This function may be called from any thread. * + * @sa @ref intro_version * @sa glfwGetVersionString * + * @since Added in GLFW 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 a static string generated at compile-time according to - * which configuration macros were defined. This is intended for use when - * submitting bug reports, to allow developers to see which code paths are - * enabled in a binary. - * - * The format of the string is as follows: - * - The version of GLFW - * - The name of the window system API - * - The name of the context creation API - * - Any additional options or APIs + * This function returns the compile-time generated + * [version string](@ref intro_version_string) of the GLFW library binary. It + * describes the version, platform, compiler and any platform-specific + * compile-time options. * - * For example, when compiling GLFW 3.0 with MinGW using the Win32 and WGL - * back ends, the version string may look something like this: + * __Do not use the version string__ to parse the GLFW library version. The + * @ref glfwGetVersion function already provides the version of the running + * library binary. * - * 3.0.0 Win32 WGL MinGW + * This function always succeeds. * * @return The GLFW version string. * * @remarks This function may be called before @ref glfwInit. * - * @remarks This function may be called from any thread. + * @par Pointer Lifetime + * The returned string is static and compile-time generated. * + * @par Thread Safety + * This function may be called from any thread. + * + * @sa @ref intro_version * @sa glfwGetVersion * + * @since Added in GLFW 3.0. + * * @ingroup init */ GLFWAPI const char* glfwGetVersionString(void); @@ -953,23 +1216,31 @@ GLFWAPI const char* glfwGetVersionString(void); * 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 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] cbfun 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 occurred. + * @return The previously set callback, or `NULL` if no callback was set. * * @remarks This function may be called before @ref glfwInit. * - * @note The error callback is called by the thread where the error was - * generated. If you are using GLFW from multiple threads, your error callback - * needs to be written accordingly. + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref error_handling * - * @note Because the description string provided to the callback 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 that, you need - * to make your own copy of it before returning. + * @since Added in GLFW 3.0. * - * @ingroup error + * @ingroup init */ GLFWAPI GLFWerrorfun glfwSetErrorCallback(GLFWerrorfun cbfun); @@ -978,19 +1249,25 @@ GLFWAPI GLFWerrorfun glfwSetErrorCallback(GLFWerrorfun cbfun); * This function returns an array of handles for all currently connected * monitors. * - * @param[out] count Where to store the size of the returned array. This is - * set to zero if an error occurred. - * @return An array of monitor handles, or `NULL` if an error occurred. + * @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 an + * [error](@ref error_handling) occurred. * - * @note The returned array is allocated and freed by GLFW. You should not - * free it yourself. + * @par 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. * - * @note The returned array is valid only until the monitor configuration - * changes. See @ref glfwSetMonitorCallback to receive notifications of - * configuration changes. + * @par Thread Safety + * This function may only be called from the main thread. * + * @sa @ref monitor_monitors + * @sa @ref monitor_event * @sa glfwGetPrimaryMonitor * + * @since Added in GLFW 3.0. + * * @ingroup monitor */ GLFWAPI GLFWmonitor** glfwGetMonitors(int* count); @@ -1000,10 +1277,17 @@ GLFWAPI GLFWmonitor** glfwGetMonitors(int* count); * This function returns the primary monitor. This is usually the monitor * where elements like the Windows task bar or the OS X menu bar is located. * - * @return The primary monitor, or `NULL` if an error occurred. + * @return The primary monitor, or `NULL` if an [error](@ref error_handling) + * occurred. + * + * @par Thread Safety + * This function may only be called from the main thread. * + * @sa @ref monitor_monitors * @sa glfwGetMonitors * + * @since Added in GLFW 3.0. + * * @ingroup monitor */ GLFWAPI GLFWmonitor* glfwGetPrimaryMonitor(void); @@ -1013,10 +1297,20 @@ GLFWAPI GLFWmonitor* glfwGetPrimaryMonitor(void); * 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`. * + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref monitor_properties + * + * @since Added in GLFW 3.0. + * * @ingroup monitor */ GLFWAPI void glfwGetMonitorPos(GLFWmonitor* monitor, int* xpos, int* ypos); @@ -1026,31 +1320,55 @@ GLFWAPI void glfwGetMonitorPos(GLFWmonitor* monitor, int* xpos, int* ypos); * This function returns the size, in millimetres, of the display area of the * specified monitor. * + * Some systems do not provide accurate monitor size information, either + * because the monitor + * [EDID](https://en.wikipedia.org/wiki/Extended_display_identification_data) + * data is incorrect or because the driver does not report it accurately. + * + * 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] width Where to store the width, in mm, of the monitor's display - * area, or `NULL`. - * @param[out] height Where to store the height, in mm, of the monitor's - * display area, or `NULL`. + * @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`. + * + * @remarks __Windows:__ The OS calculates the returned physical size from the + * current resolution and system DPI instead of querying the monitor EDID data. + * + * @par Thread Safety + * This function may only be called from the main thread. * - * @note Some operating systems do not provide accurate information, either - * because the monitor's EDID data is incorrect, or because the driver does not - * report it accurately. + * @sa @ref monitor_properties + * + * @since Added in GLFW 3.0. * * @ingroup monitor */ -GLFWAPI void glfwGetMonitorPhysicalSize(GLFWmonitor* monitor, int* width, int* height); +GLFWAPI void glfwGetMonitorPhysicalSize(GLFWmonitor* monitor, int* widthMM, int* heightMM); /*! @brief Returns the name of the specified monitor. * * This function returns a human-readable name, encoded as UTF-8, of the - * specified monitor. + * 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 - * occurred. + * @return The UTF-8 encoded name of the monitor, or `NULL` if an + * [error](@ref error_handling) occurred. + * + * @par 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. * - * @note The returned string is allocated and freed by GLFW. You should not - * free it yourself. + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref monitor_properties + * + * @since Added in GLFW 3.0. * * @ingroup monitor */ @@ -1064,12 +1382,19 @@ GLFWAPI const char* glfwGetMonitorName(GLFWmonitor* monitor); * * @param[in] cbfun 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 occurred. + * @return The previously set callback, or `NULL` if no callback was set or the + * library had not been [initialized](@ref intro_init). * - * @bug **X11:** This callback is not yet called on monitor configuration + * @bug __X11:__ This callback is not yet called on monitor configuration * changes. * + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref monitor_event + * + * @since Added in GLFW 3.0. + * * @ingroup monitor */ GLFWAPI GLFWmonitorfun glfwSetMonitorCallback(GLFWmonitorfun cbfun); @@ -1084,16 +1409,25 @@ GLFWAPI GLFWmonitorfun glfwSetMonitorCallback(GLFWmonitorfun cbfun); * @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 occurred. + * @return An array of video modes, or `NULL` if an + * [error](@ref error_handling) occurred. * - * @note The returned array is allocated and freed by GLFW. You should not - * free it yourself. + * @par 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. * - * @note The returned array is valid only until this function is called again - * for the specified monitor. + * @par Thread Safety + * This function may only be called from the main thread. * + * @sa @ref monitor_modes * @sa glfwGetVideoMode * + * @since Added in GLFW 1.0. + * + * @par + * __GLFW 3:__ Changed to return an array of modes for a specific monitor. + * * @ingroup monitor */ GLFWAPI const GLFWvidmode* glfwGetVideoModes(GLFWmonitor* monitor, int* count); @@ -1101,17 +1435,26 @@ 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 are using a full screen window, the return value will therefore depend - * on whether it is focused. + * 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 occurred. + * @return The current mode of the monitor, or `NULL` if an + * [error](@ref error_handling) occurred. + * + * @par 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. * - * @note The returned struct is allocated and freed by GLFW. You should not - * free it yourself. + * @par Thread Safety + * This function may only be called from the main thread. * + * @sa @ref monitor_modes * @sa glfwGetVideoModes * + * @since Added in GLFW 3.0. Replaces `glfwGetDesktopMode`. + * * @ingroup monitor */ GLFWAPI const GLFWvidmode* glfwGetVideoMode(GLFWmonitor* monitor); @@ -1124,34 +1467,64 @@ GLFWAPI const GLFWvidmode* glfwGetVideoMode(GLFWmonitor* monitor); * @param[in] monitor The monitor whose gamma ramp to set. * @param[in] gamma The desired exponent. * - * @ingroup gamma + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref monitor_gamma + * + * @since Added in GLFW 3.0. + * + * @ingroup monitor */ GLFWAPI void glfwSetGamma(GLFWmonitor* monitor, float gamma); -/*! @brief Retrieves the current gamma ramp for the specified monitor. +/*! @brief Returns the current gamma ramp for the specified monitor. * - * This function retrieves the current gamma ramp of 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 occurred. + * @return The current gamma ramp, or `NULL` if an + * [error](@ref error_handling) occurred. + * + * @par 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. * - * @note The value arrays of the returned ramp are allocated and freed by GLFW. - * You should not free them yourself. + * @par Thread Safety + * This function may only be called from the main thread. * - * @ingroup gamma + * @sa @ref monitor_gamma + * + * @since Added in GLFW 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. + * 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. * * @param[in] monitor The monitor whose gamma ramp to set. * @param[in] ramp The gamma ramp to use. * * @note Gamma ramp sizes other than 256 are not supported by all hardware. * - * @ingroup gamma + * @par Pointer Lifetime + * The specified gamma ramp is copied before this function returns. + * + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref monitor_gamma + * + * @since Added in GLFW 3.0. + * + * @ingroup monitor */ GLFWAPI void glfwSetGammaRamp(GLFWmonitor* monitor, const GLFWgammaramp* ramp); @@ -1160,10 +1533,14 @@ GLFWAPI void glfwSetGammaRamp(GLFWmonitor* monitor, const GLFWgammaramp* ramp); * This function resets all window hints to their * [default values](@ref window_hints_values). * - * @note This function may only be called from the main thread. + * @par Thread Safety + * This function may only be called from the main thread. * + * @sa @ref window_hints * @sa glfwWindowHint * + * @since Added in GLFW 3.0. + * * @ingroup window */ GLFWAPI void glfwDefaultWindowHints(void); @@ -1173,46 +1550,70 @@ GLFWAPI void glfwDefaultWindowHints(void); * This function sets hints for the next call to @ref glfwCreateWindow. The * hints, once set, retain their values until changed by a call to @ref * glfwWindowHint or @ref glfwDefaultWindowHints, or until the library is - * terminated with @ref glfwTerminate. + * terminated. * * @param[in] target The [window hint](@ref window_hints) to set. * @param[in] hint The new value of the window hint. * - * @par New in GLFW 3 - * Hints are no longer reset to their default values on window creation. To - * set default hint values, use @ref glfwDefaultWindowHints. - * - * @note This function may only be called from the main thread. + * @par Thread Safety + * This function may only be called from the main thread. * + * @sa @ref window_hints * @sa glfwDefaultWindowHints * + * @since Added in GLFW 3.0. Replaces `glfwOpenWindowHint`. + * * @ingroup window */ GLFWAPI void glfwWindowHint(int target, int hint); /*! @brief Creates a window and its associated context. * - * This function creates a window and its associated context. Most of the - * options controlling how the window and its context should be created are - * specified through @ref glfwWindowHint. + * 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 using @ref - * glfwMakeContextCurrent. + * 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. * - * Note that the created window and context may differ from what you requested, - * as not all parameters and hints are + * 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 retrieve the actual - * attributes of the created window and context, use queries like @ref + * window, especially for full screen windows. To query the actual attributes + * of the created window, framebuffer and context, use queries like @ref * glfwGetWindowAttrib and @ref glfwGetWindowSize. * - * To create the window at a specific position, make it initially invisible - * using the `GLFW_VISIBLE` window hint, set its position and then show it. - * - * If a fullscreen window is active, the screensaver is prohibited from + * To create a full screen window, you need to specify the monitor the window + * will cover. If no monitor is specified, windowed mode will be used. 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 has input + * focus, 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. + * + * By default, newly created windows use the placement recommended by the + * window system. To create the window at a specific position, make it + * initially invisible using the [GLFW_VISIBLE](@ref window_hints_wnd) window + * hint, set its [position](@ref window_pos) and then [show](@ref window_hide) + * it. + * + * If a full screen window has input focus, 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. @@ -1222,23 +1623,47 @@ GLFWAPI void glfwWindowHint(int target, int hint); * 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 occurred. + * @return The handle of the created window, or `NULL` if an + * [error](@ref error_handling) occurred. * - * @remarks **Windows:** If the executable has an icon resource named + * @remarks __Windows:__ Window creation will fail if the Microsoft GDI + * software OpenGL implementation is the only one available. + * + * @remarks __Windows:__ If the executable has an icon resource named * `GLFW_ICON,` it will be set as the icon for the window. If no such icon is * present, the `IDI_WINLOGO` icon will be used instead. * - * @remarks **Mac OS X:** The GLFW window has no icon, as it is not a document + * @remarks __Windows:__ The context to share resources with may not be current + * on any other thread. + * + * @remarks __OS X:__ 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. - * Also, the first time a window is opened the menu bar is populated with - * common commands like Hide, Quit and About. The (minimal) about dialog uses - * information from the application's bundle. For more information on bundles, - * see the Bundle Programming Guide provided by Apple. + * For more information on bundles, see the + * [Bundle Programming Guide](https://developer.apple.com/library/mac/documentation/CoreFoundation/Conceptual/CFBundles/) + * in the Mac Developer Library. * - * @note This function may only be called from the main thread. + * @remarks __OS X:__ The first time a window is created the menu bar is + * populated 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 can be disabled with a + * [compile-time option](@ref compile_options_osx). * + * @remarks __X11:__ There is no mechanism for setting the window icon yet. + * + * @remarks __X11:__ Some window managers will not respect the placement of + * initially hidden windows. + * + * @par Reentrancy + * This function may not be called from a callback. + * + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref window_creation * @sa glfwDestroyWindow * + * @since Added in GLFW 3.0. Replaces `glfwOpenWindow`. + * * @ingroup window */ GLFWAPI GLFWwindow* glfwCreateWindow(int width, int height, const char* title, GLFWmonitor* monitor, GLFWwindow* share); @@ -1248,19 +1673,25 @@ GLFWAPI GLFWwindow* glfwCreateWindow(int width, int height, const char* title, G * This function destroys the specified window and its context. On calling * this function, no further callbacks will be called for that window. * - * @param[in] window The window to destroy. + * If the context of the specified window is current on the main thread, it is + * detached before being destroyed. * - * @note This function may only be called from the main thread. + * @param[in] window The window to destroy. * - * @note This function may not be called from a callback. + * @note The context of the specified window must not be current on any other + * thread when this function is called. * - * @note If the window's context is current on the main thread, it is - * detached before being destroyed. + * @par Reentrancy + * This function may not be called from a callback. * - * @warning The window's context must not be current on any other thread. + * @par Thread Safety + * This function may only be called from the main thread. * + * @sa @ref window_creation * @sa glfwCreateWindow * + * @since Added in GLFW 3.0. Replaces `glfwCloseWindow`. + * * @ingroup window */ GLFWAPI void glfwDestroyWindow(GLFWwindow* window); @@ -1272,6 +1703,13 @@ GLFWAPI void glfwDestroyWindow(GLFWwindow* window); * @param[in] window The window to query. * @return The value of the close flag. * + * @par Thread Safety + * This function may be called from any thread. Access is not synchronized. + * + * @sa @ref window_close + * + * @since Added in GLFW 3.0. + * * @ingroup window */ GLFWAPI int glfwWindowShouldClose(GLFWwindow* window); @@ -1285,6 +1723,13 @@ GLFWAPI int glfwWindowShouldClose(GLFWwindow* window); * @param[in] window The window whose flag to change. * @param[in] value The new value. * + * @par Thread Safety + * This function may be called from any thread. Access is not synchronized. + * + * @sa @ref window_close + * + * @since Added in GLFW 3.0. + * * @ingroup window */ GLFWAPI void glfwSetWindowShouldClose(GLFWwindow* window, int value); @@ -1297,7 +1742,15 @@ GLFWAPI void glfwSetWindowShouldClose(GLFWwindow* window, int value); * @param[in] window The window whose title to change. * @param[in] title The UTF-8 encoded window title. * - * @note This function may only be called from the main thread. + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref window_title + * + * @since Added in GLFW 1.0. + * + * @par + * __GLFW 3:__ Added window handle parameter. * * @ingroup window */ @@ -1308,14 +1761,23 @@ GLFWAPI void glfwSetWindowTitle(GLFWwindow* window, const char* title); * This function retrieves the position, in screen coordinates, of the * upper-left corner of the client 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 client area, or `NULL`. * @param[out] ypos Where to store the y-coordinate of the upper-left corner of * the client area, or `NULL`. * + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref window_pos * @sa glfwSetWindowPos * + * @since Added in GLFW 3.0. + * * @ingroup window */ GLFWAPI void glfwGetWindowPos(GLFWwindow* window, int* xpos, int* ypos); @@ -1323,30 +1785,29 @@ GLFWAPI void glfwGetWindowPos(GLFWwindow* window, int* xpos, int* ypos); /*! @brief Sets the position of the client area of the specified window. * * This function sets the position, in screen coordinates, of the upper-left - * corner of the client area of the window. + * corner of the client area of the specified windowed mode window. If the + * window is a full screen window, this function does nothing. * - * If the specified 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. * - * If you wish to set an initial window position you should create a hidden - * window (using @ref glfwWindowHint and `GLFW_VISIBLE`), set its position and - * then show it. + * 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 client area. * @param[in] ypos The y-coordinate of the upper-left corner of the client area. * - * @note It is very rarely a good idea to move an already visible window, as it - * will confuse and annoy the user. + * @par Thread Safety + * This function may only be called from the main thread. * - * @note This function may only be called from the main thread. - * - * @note The window manager may put limits on what positions are allowed. + * @sa @ref window_pos + * @sa glfwGetWindowPos * - * @bug **X11:** Some window managers ignore the set position of hidden (i.e. - * unmapped) windows, instead placing them where it thinks is appropriate once - * they are shown. + * @since Added in GLFW 1.0. * - * @sa glfwGetWindowPos + * @par + * __GLFW 3:__ Added window handle parameter. * * @ingroup window */ @@ -1355,7 +1816,11 @@ GLFWAPI void glfwSetWindowPos(GLFWwindow* window, int xpos, int ypos); /*! @brief Retrieves the size of the client area of the specified window. * * This function retrieves the size, in screen coordinates, of the client area - * of the specified window. + * 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 @@ -1363,8 +1828,17 @@ GLFWAPI void glfwSetWindowPos(GLFWwindow* window, int xpos, int ypos); * @param[out] height Where to store the height, in screen coordinates, of the * client area, or `NULL`. * + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref window_size * @sa glfwSetWindowSize * + * @since Added in GLFW 1.0. + * + * @par + * __GLFW 3:__ Added window handle parameter. + * * @ingroup window */ GLFWAPI void glfwGetWindowSize(GLFWwindow* window, int* width, int* height); @@ -1379,16 +1853,24 @@ GLFWAPI void glfwGetWindowSize(GLFWwindow* window, int* width, int* height); * the context is unaffected, the bit depths of the framebuffer remain * unchanged. * + * 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 of the specified window. * @param[in] height The desired height of the specified window. * - * @note This function may only be called from the main thread. - * - * @note The window manager may put limits on what window sizes are allowed. + * @par Thread Safety + * This function may only be called from the main thread. * + * @sa @ref window_size * @sa glfwGetWindowSize * + * @since Added in GLFW 1.0. + * + * @par + * __GLFW 3:__ Added window handle parameter. + * * @ingroup window */ GLFWAPI void glfwSetWindowSize(GLFWwindow* window, int width, int height); @@ -1396,7 +1878,11 @@ 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. + * 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, @@ -1404,74 +1890,140 @@ GLFWAPI void glfwSetWindowSize(GLFWwindow* window, int width, int height); * @param[out] height Where to store the height, in pixels, of the framebuffer, * or `NULL`. * + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref window_fbsize * @sa glfwSetFramebufferSizeCallback * + * @since Added in GLFW 3.0. + * * @ingroup window */ GLFWAPI void glfwGetFramebufferSize(GLFWwindow* window, int* width, int* height); -/*! @brief Iconifies the specified window. +/*! @brief Retrieves the size of the frame of the window. * - * This function iconifies/minimizes the specified window, if it was previously - * restored. If it is a full screen window, the original monitor resolution is - * restored until the window is restored. If the window is already iconified, - * this function does nothing. + * 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. * - * @param[in] window The window to iconify. + * 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. * - * @note This function may only be called from the main thread. + * Any or all of the size arguments may be `NULL`. If an error occurs, all + * non-`NULL` size arguments will be set to zero. * - * @sa glfwRestoreWindow + * @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`. + * + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref window_size + * + * @since Added in GLFW 3.1. * * @ingroup window */ -GLFWAPI void glfwIconifyWindow(GLFWwindow* window); +GLFWAPI void glfwGetWindowFrameSize(GLFWwindow* window, int* left, int* top, int* right, int* bottom); -/*! @brief Restores the specified window. +/*! @brief Iconifies the specified window. * - * This function restores the specified window, if it was previously - * iconified/minimized. If it is a full screen window, the resolution chosen - * for the window is restored on the selected monitor. If the window is - * already restored, this function does nothing. + * This function iconifies (minimizes) the specified window if it was + * previously restored. If the window is already iconified, this function does + * nothing. * - * @param[in] window The window to restore. + * If the specified window is a full screen window, the original monitor + * resolution is restored until the window is restored. * - * @note This function may only be called from the main thread. + * @param[in] window The window to iconify. * + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref window_iconify + * @sa glfwRestoreWindow + * + * @since Added in GLFW 2.1. + * + * @par + * __GLFW 3:__ 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). If the window is already restored, this function does nothing. + * + * If the specified window is a full screen window, the resolution chosen for + * the window is restored on the selected monitor. + * + * @param[in] window The window to restore. + * + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref window_iconify * @sa glfwIconifyWindow * + * @since Added in GLFW 2.1. + * + * @par + * __GLFW 3:__ Added window handle parameter. + * * @ingroup window */ GLFWAPI void glfwRestoreWindow(GLFWwindow* window); /*! @brief Makes the specified window visible. * - * This function makes the specified window visible, if it was previously + * 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. * * @param[in] window The window to make visible. * - * @note This function may only be called from the main thread. + * @par Thread Safety + * This function may only be called from the main thread. * + * @sa @ref window_hide * @sa glfwHideWindow * + * @since Added in GLFW 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 + * 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. * - * @note This function may only be called from the main thread. + * @par Thread Safety + * This function may only be called from the main thread. * + * @sa @ref window_hide * @sa glfwShowWindow * + * @since Added in GLFW 3.0. + * * @ingroup window */ GLFWAPI void glfwHideWindow(GLFWwindow* window); @@ -1482,7 +2034,15 @@ GLFWAPI void glfwHideWindow(GLFWwindow* window); * in full screen on. * * @param[in] window The window to query. - * @return The monitor, or `NULL` if the window is in windowed mode. + * @return The monitor, or `NULL` if the window is in windowed mode or an error + * occurred. + * + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref window_monitor + * + * @since Added in GLFW 3.0. * * @ingroup window */ @@ -1490,13 +2050,22 @@ GLFWAPI GLFWmonitor* glfwGetWindowMonitor(GLFWwindow* window); /*! @brief Returns an attribute of the specified window. * - * This function returns an attribute of the specified window. There are many - * attributes, some related to the window and others to its context. + * 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 occurred. + * @return The value of the attribute, or zero if an + * [error](@ref error_handling) occurred. + * + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref window_attribs + * + * @since Added in GLFW 3.0. Replaces `glfwGetWindowParam` and + * `glfwGetGLVersion`. * * @ingroup window */ @@ -1511,8 +2080,14 @@ GLFWAPI int glfwGetWindowAttrib(GLFWwindow* window, int attrib); * @param[in] window The window whose pointer to set. * @param[in] pointer The new value. * + * @par Thread Safety + * This function may be called from any thread. Access is not synchronized. + * + * @sa @ref window_userptr * @sa glfwGetWindowUserPointer * + * @since Added in GLFW 3.0. + * * @ingroup window */ GLFWAPI void glfwSetWindowUserPointer(GLFWwindow* window, void* pointer); @@ -1524,8 +2099,14 @@ GLFWAPI void glfwSetWindowUserPointer(GLFWwindow* window, void* pointer); * * @param[in] window The window whose pointer to return. * + * @par Thread Safety + * This function may be called from any thread. Access is not synchronized. + * + * @sa @ref window_userptr * @sa glfwSetWindowUserPointer * + * @since Added in GLFW 3.0. + * * @ingroup window */ GLFWAPI void* glfwGetWindowUserPointer(GLFWwindow* window); @@ -1539,8 +2120,15 @@ GLFWAPI void* glfwGetWindowUserPointer(GLFWwindow* window); * @param[in] window The window whose callback to set. * @param[in] cbfun 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 occurred. + * @return The previously set callback, or `NULL` if no callback was set or the + * library had not been [initialized](@ref intro_init). + * + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref window_pos + * + * @since Added in GLFW 3.0. * * @ingroup window */ @@ -1555,8 +2143,18 @@ GLFWAPI GLFWwindowposfun glfwSetWindowPosCallback(GLFWwindow* window, GLFWwindow * @param[in] window The window whose callback to set. * @param[in] cbfun 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 occurred. + * @return The previously set callback, or `NULL` if no callback was set or the + * library had not been [initialized](@ref intro_init). + * + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref window_size + * + * @since Added in GLFW 1.0. + * + * @par + * __GLFW 3:__ Added window handle parameter. Updated callback signature. * * @ingroup window */ @@ -1576,12 +2174,22 @@ GLFWAPI GLFWwindowsizefun glfwSetWindowSizeCallback(GLFWwindow* window, GLFWwind * @param[in] window The window whose callback to set. * @param[in] cbfun 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 occurred. + * @return The previously set callback, or `NULL` if no callback was set or the + * library had not been [initialized](@ref intro_init). * - * @remarks **Mac OS X:** Selecting Quit from the application menu will + * @remarks __OS X:__ Selecting Quit from the application menu will * trigger the close callback for all windows. * + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref window_close + * + * @since Added in GLFW 2.5. + * + * @par + * __GLFW 3:__ Added window handle parameter. Updated callback signature. + * * @ingroup window */ GLFWAPI GLFWwindowclosefun glfwSetWindowCloseCallback(GLFWwindow* window, GLFWwindowclosefun cbfun); @@ -1599,12 +2207,18 @@ GLFWAPI GLFWwindowclosefun glfwSetWindowCloseCallback(GLFWwindow* window, GLFWwi * @param[in] window The window whose callback to set. * @param[in] cbfun 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 occurred. + * @return The previously set callback, or `NULL` if no callback was set or the + * library had not been [initialized](@ref intro_init). * - * @note On compositing window systems such as Aero, Compiz or Aqua, where the - * window contents are saved off-screen, this callback may be called only very - * infrequently or never at all. + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref window_refresh + * + * @since Added in GLFW 2.5. + * + * @par + * __GLFW 3:__ Added window handle parameter. Updated callback signature. * * @ingroup window */ @@ -1613,18 +2227,25 @@ GLFWAPI GLFWwindowrefreshfun glfwSetWindowRefreshCallback(GLFWwindow* window, GL /*! @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 focus. + * called when the window gains or loses input focus. * - * After the focus callback is called for a window that lost 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. + * 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] cbfun 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 occurred. + * @return The previously set callback, or `NULL` if no callback was set or the + * library had not been [initialized](@ref intro_init). + * + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref window_focus + * + * @since Added in GLFW 3.0. * * @ingroup window */ @@ -1638,8 +2259,15 @@ GLFWAPI GLFWwindowfocusfun glfwSetWindowFocusCallback(GLFWwindow* window, GLFWwi * @param[in] window The window whose callback to set. * @param[in] cbfun 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 occurred. + * @return The previously set callback, or `NULL` if no callback was set or the + * library had not been [initialized](@ref intro_init). + * + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref window_iconify + * + * @since Added in GLFW 3.0. * * @ingroup window */ @@ -1653,8 +2281,15 @@ GLFWAPI GLFWwindowiconifyfun glfwSetWindowIconifyCallback(GLFWwindow* window, GL * @param[in] window The window whose callback to set. * @param[in] cbfun 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 occurred. + * @return The previously set callback, or `NULL` if no callback was set or the + * library had not been [initialized](@ref intro_init). + * + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref window_fbsize + * + * @since Added in GLFW 3.0. * * @ingroup window */ @@ -1662,99 +2297,164 @@ GLFWAPI GLFWframebuffersizefun glfwSetFramebufferSizeCallback(GLFWwindow* window /*! @brief Processes all pending events. * - * This function processes only those events that have already been received - * and then returns immediately. Processing events will cause the window and - * input callbacks associated with those events to be called. + * 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. * - * This function is not required for joystick input to work. + * 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. * - * @par New in GLFW 3 - * This function is no longer called by @ref glfwSwapBuffers. You need to call - * it or @ref glfwWaitEvents yourself. + * On some platforms, certain events are sent directly to the application + * without going through the event queue, causing callbacks to be called + * outside of a call to one of the event processing functions. * - * @note This function may only be called from the main thread. + * Event processing is not required for joystick input to work. * - * @note This function may not be called from a callback. + * @par Reentrancy + * This function may not be called from a callback. * - * @note On some platforms, certain callbacks may be called outside of a call - * to one of the event processing functions. + * @par Thread Safety + * This function may only be called from the main thread. * + * @sa @ref events * @sa glfwWaitEvents * + * @since Added in GLFW 1.0. + * * @ingroup window */ GLFWAPI void glfwPollEvents(void); -/*! @brief Waits until events are pending and processes them. +/*! @brief Waits until events are queued and processes them. * - * This function puts the calling thread to sleep until at least one event has - * been received. Once one or more events have been recevied, it behaves as if - * @ref glfwPollEvents was called, i.e. the events are processed and the - * function then returns immediately. Processing events will cause the window - * and input callbacks associated with those events to be called. + * 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. * - * This function is not required for joystick input to work. + * 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. + * + * On some platforms, certain callbacks may be called outside of a call to one + * of the event processing functions. * - * @note This function may only be called from the main thread. + * If no windows exist, this function returns immediately. For synchronization + * of threads in applications that do not create windows, use your threading + * library of choice. * - * @note This function may not be called from a callback. + * Event processing is not required for joystick input to work. * - * @note On some platforms, certain callbacks may be called outside of a call - * to one of the event processing functions. + * @par Reentrancy + * This function may not be called from a callback. * + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref events * @sa glfwPollEvents * + * @since Added in GLFW 2.5. + * * @ingroup window */ GLFWAPI void glfwWaitEvents(void); +/*! @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 to return. + * + * If no windows exist, this function returns immediately. For synchronization + * of threads in applications that do not create windows, use your threading + * library of choice. + * + * @par Thread Safety + * This function may be called from any thread. + * + * @sa @ref events + * @sa glfwWaitEvents + * + * @since Added in GLFW 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 `GLFW_CURSOR`, `GLFW_STICKY_KEYS` or + * `GLFW_STICKY_MOUSE_BUTTONS`. * * @param[in] window The window to query. * @param[in] mode One of `GLFW_CURSOR`, `GLFW_STICKY_KEYS` or * `GLFW_STICKY_MOUSE_BUTTONS`. * + * @par Thread Safety + * This function may only be called from the main thread. + * * @sa glfwSetInputMode * + * @since Added in GLFW 3.0. + * * @ingroup input */ GLFWAPI int glfwGetInputMode(GLFWwindow* window, int mode); /*! @brief Sets an input option for the specified window. - * @param[in] window The window whose input mode to set. - * @param[in] mode One of `GLFW_CURSOR`, `GLFW_STICKY_KEYS` or + * + * This function sets an input mode option for the specified window. The mode + * must be one of `GLFW_CURSOR`, `GLFW_STICKY_KEYS` or * `GLFW_STICKY_MOUSE_BUTTONS`. - * @param[in] value The new value of the specified input mode. * - * If `mode` is `GLFW_CURSOR`, the value must be one of the supported input + * 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 client - * area of the window. - * - `GLFW_CURSOR_DISABLED` disables the cursor and removes any limitations on - * cursor movement. + * 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. * - * If `mode` is `GLFW_STICKY_KEYS`, the value must be either `GL_TRUE` to + * If the mode is `GLFW_STICKY_KEYS`, the value must be either `GL_TRUE` to * enable sticky keys, or `GL_FALSE` to disable it. If sticky keys are - * enabled, a key press will ensure that @ref glfwGetKey returns @ref - * 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 `mode` is `GLFW_STICKY_MOUSE_BUTTONS`, the value must be either `GL_TRUE` - * to enable sticky mouse buttons, or `GL_FALSE` to disable it. If sticky - * mouse buttons are enabled, a mouse button press will ensure that @ref - * glfwGetMouseButton returns @ref 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. + * 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 + * `GL_TRUE` to enable sticky mouse buttons, or `GL_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. + * + * @param[in] window The window whose input mode to set. + * @param[in] mode One of `GLFW_CURSOR`, `GLFW_STICKY_KEYS` or + * `GLFW_STICKY_MOUSE_BUTTONS`. + * @param[in] value The new value of the specified input mode. + * + * @par Thread Safety + * This function may only be called from the main thread. * * @sa glfwGetInputMode * + * @since Added in GLFW 3.0. Replaces `glfwEnable` and `glfwDisable`. + * * @ingroup input */ GLFWAPI void glfwSetInputMode(GLFWwindow* window, int mode, int value); @@ -1764,22 +2464,34 @@ GLFWAPI void glfwSetInputMode(GLFWwindow* window, int mode, int value); * * 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 higher-level state `GLFW_REPEAT` is only reported to + * `GLFW_RELEASE`. The higher-level action `GLFW_REPEAT` is only reported to * the key callback. * * If the `GLFW_STICKY_KEYS` input mode is enabled, this function returns - * `GLFW_PRESS` the first time you call this function after a key has been - * pressed, even if the key has already been released. + * `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. + * * @param[in] window The desired window. - * @param[in] key The desired [keyboard key](@ref keys). + * @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`. * - * @note `GLFW_KEY_UNKNOWN` is not a valid key for this function. + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref input_key + * + * @since Added in GLFW 1.0. + * + * @par + * __GLFW 3:__ Added window handle parameter. * * @ingroup input */ @@ -1789,25 +2501,37 @@ GLFWAPI int glfwGetKey(GLFWwindow* window, int key); * window. * * This function returns the last state reported for the specified mouse button - * to the specified window. + * to the specified window. The returned state is one of `GLFW_PRESS` or + * `GLFW_RELEASE`. * * If the `GLFW_STICKY_MOUSE_BUTTONS` input mode is enabled, this function - * returns `GLFW_PRESS` the first time you call this function after a mouse - * button has been pressed, even if the mouse button has already been released. + * `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`. * + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref input_mouse_button + * + * @since Added in GLFW 1.0. + * + * @par + * __GLFW 3:__ Added window handle parameter. + * * @ingroup input */ GLFWAPI int glfwGetMouseButton(GLFWwindow* window, int button); -/*! @brief Retrieves the last reported cursor position, relative to the client - * area of the window. +/*! @brief Retrieves the position of the cursor relative to the client area of + * the window. * - * This function returns the last reported position of the cursor to the - * specified window. + * This function returns the position of the cursor, in screen coordinates, + * relative to the upper-left corner of the client 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 @@ -1817,43 +2541,182 @@ GLFWAPI int glfwGetMouseButton(GLFWwindow* window, int button); * `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 client area, or `NULL`. * @param[out] ypos Where to store the cursor y-coordinate, relative to the to * top edge of the client area, or `NULL`. * + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref cursor_pos * @sa glfwSetCursorPos * + * @since Added in GLFW 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 client area of the window. +/*! @brief Sets the position of the cursor, relative to the client area of the + * window. * - * This function sets the position of the cursor. The specified window must be - * focused. If the window does not have focus when this function is called, it - * fails silently. + * This function sets the position, in screen coordinates, of the cursor + * relative to the upper-left corner of the client 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. * - * 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 + * __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 - * client area, or `NULL`. + * client area. * @param[in] ypos The desired y-coordinate, relative to the top edge of the - * client area, or `NULL`. + * client area. * + * @remarks __X11:__ Due to the asynchronous nature of a modern X desktop, it + * may take a moment for the window focus event to arrive. This means you will + * not be able to set the cursor position directly after window creation. + * + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref cursor_pos * @sa glfwGetCursorPos * + * @since Added in GLFW 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 RGBA, i.e. eight bits per channel. 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. + * + * @par Pointer Lifetime + * The specified image data is copied before this function returns. + * + * @par Reentrancy + * This function may not be called from a callback. + * + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref cursor_object + * @sa glfwDestroyCursor + * @sa glfwCreateStandardCursor + * + * @since Added in GLFW 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](@ref shapes), that can be set for + * a window with @ref glfwSetCursor. + * + * @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. + * + * @par Reentrancy + * This function may not be called from a callback. + * + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref cursor_object + * @sa glfwCreateCursor + * + * @since Added in GLFW 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. + * + * @param[in] cursor The cursor object to destroy. + * + * @par Reentrancy + * This function may not be called from a callback. + * + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref cursor_object + * @sa glfwCreateCursor + * + * @since Added in GLFW 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 + * client 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. + * + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref cursor_object + * + * @since Added in GLFW 3.1. + * + * @ingroup input + */ +GLFWAPI void glfwSetCursor(GLFWwindow* window, GLFWcursor* cursor); + /*! @brief Sets the key callback. * - * This function sets the key callback of the specific window, which is called + * 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 @@ -1861,16 +2724,16 @@ GLFWAPI void glfwSetCursorPos(GLFWwindow* window, double xpos, double ypos); * layout. If you want to input text, use the * [character callback](@ref glfwSetCharCallback) instead. * - * When a window loses focus, it will generate synthetic key release events - * for all pressed keys. You can tell these events from user-generated events - * by the fact that the synthetic ones are generated after the window has lost - * focus, i.e. `GLFW_FOCUSED` will be false and the focus callback will have - * already been called. + * When a window loses input focus, it will generate synthetic key release + * events for all pressed keys. 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 retrieved with @ref glfwGetKey. + * 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. @@ -1878,8 +2741,18 @@ GLFWAPI void glfwSetCursorPos(GLFWwindow* window, double xpos, double ypos); * @param[in] window The window whose callback to set. * @param[in] cbfun 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 an - * error occurred. + * @return The previously set callback, or `NULL` if no callback was set or the + * library had not been [initialized](@ref intro_init). + * + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref input_key + * + * @since Added in GLFW 1.0. + * + * @par + * __GLFW 3:__ Added window handle parameter. Updated callback signature. * * @ingroup input */ @@ -1887,11 +2760,56 @@ GLFWAPI GLFWkeyfun glfwSetKeyCallback(GLFWwindow* window, GLFWkeyfun cbfun); /*! @brief Sets the Unicode character callback. * - * This function sets the character callback of the specific window, which is + * 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 text input. If you want to know - * whether a specific key was pressed or released, use the + * 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 OS X or Alt key + * on Windows. There is a + * [character with modifiers callback](@ref glfwSetCharModsCallback) that + * receives these events. + * + * @param[in] window The window whose callback to set. + * @param[in] cbfun 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). + * + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref input_char + * + * @since Added in GLFW 2.4. + * + * @par + * __GLFW 3:__ Added window handle parameter. Updated callback signature. + * + * @ingroup input + */ +GLFWAPI GLFWcharfun glfwSetCharCallback(GLFWwindow* window, GLFWcharfun cbfun); + +/*! @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. @@ -1900,26 +2818,43 @@ GLFWAPI GLFWkeyfun glfwSetKeyCallback(GLFWwindow* window, GLFWkeyfun cbfun); * @return The previously set callback, or `NULL` if no callback was set or an * error occurred. * + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref input_char + * + * @since Added in GLFW 3.1. + * * @ingroup input */ -GLFWAPI GLFWcharfun glfwSetCharCallback(GLFWwindow* window, GLFWcharfun cbfun); +GLFWAPI GLFWcharmodsfun glfwSetCharModsCallback(GLFWwindow* window, GLFWcharmodsfun cbfun); /*! @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 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 window has lost focus, i.e. `GLFW_FOCUSED` will be false and the - * focus callback will have already been called. + * 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] cbfun 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 occurred. + * @return The previously set callback, or `NULL` if no callback was set or the + * library had not been [initialized](@ref intro_init). + * + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref input_mouse_button + * + * @since Added in GLFW 1.0. + * + * @par + * __GLFW 3:__ Added window handle parameter. Updated callback signature. * * @ingroup input */ @@ -1929,13 +2864,21 @@ GLFWAPI GLFWmousebuttonfun glfwSetMouseButtonCallback(GLFWwindow* window, GLFWmo * * 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 relative to the upper-left corner of the client area of the window. + * position, in screen coordinates, relative to the upper-left corner of the + * client area of the window. * * @param[in] window The window whose callback to set. * @param[in] cbfun 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 occurred. + * @return The previously set callback, or `NULL` if no callback was set or the + * library had not been [initialized](@ref intro_init). + * + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref cursor_pos + * + * @since Added in GLFW 3.0. Replaces `glfwSetMousePosCallback`. * * @ingroup input */ @@ -1950,8 +2893,15 @@ GLFWAPI GLFWcursorposfun glfwSetCursorPosCallback(GLFWwindow* window, GLFWcursor * @param[in] window The window whose callback to set. * @param[in] cbfun 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 occurred. + * @return The previously set callback, or `NULL` if no callback was set or the + * library had not been [initialized](@ref intro_init). + * + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref cursor_enter + * + * @since Added in GLFW 3.0. * * @ingroup input */ @@ -1969,20 +2919,61 @@ GLFWAPI GLFWcursorenterfun glfwSetCursorEnterCallback(GLFWwindow* window, GLFWcu * @param[in] window The window whose callback to set. * @param[in] cbfun 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 an - * error occurred. + * @return The previously set callback, or `NULL` if no callback was set or the + * library had not been [initialized](@ref intro_init). + * + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref scrolling + * + * @since Added in GLFW 3.0. Replaces `glfwSetMouseWheelCallback`. * * @ingroup input */ GLFWAPI GLFWscrollfun glfwSetScrollCallback(GLFWwindow* window, GLFWscrollfun cbfun); +/*! @brief Sets the file drop callback. + * + * This function sets the file drop callback of the specified window, which is + * called when one or more dragged files 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] cbfun 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). + * + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref path_drop + * + * @since Added in GLFW 3.1. + * + * @ingroup input + */ +GLFWAPI GLFWdropfun glfwSetDropCallback(GLFWwindow* window, GLFWdropfun cbfun); + /*! @brief Returns whether the specified joystick is present. * * This function returns whether the specified joystick is present. * - * @param[in] joy The joystick to query. + * @param[in] joy The [joystick](@ref joysticks) to query. * @return `GL_TRUE` if the joystick is present, or `GL_FALSE` otherwise. * + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref joystick + * + * @since Added in GLFW 3.0. Replaces `glfwGetJoystickParam`. + * * @ingroup input */ GLFWAPI int glfwJoystickPresent(int joy); @@ -1990,17 +2981,24 @@ GLFWAPI int glfwJoystickPresent(int joy); /*! @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. * - * @param[in] joy The joystick to query. - * @param[out] count Where to store the size of the returned array. This is - * set to zero if an error occurred. + * @param[in] joy 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 an error occurred. * @return An array of axis values, or `NULL` if the joystick is not present. * - * @note The returned array is allocated and freed by GLFW. You should not - * free it yourself. + * @par 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. + * + * @par Thread Safety + * This function may only be called from the main thread. * - * @note The returned array is valid only until the next call to @ref - * glfwGetJoystickAxes for that joystick. + * @sa @ref joystick_axis + * + * @since Added in GLFW 3.0. Replaces `glfwGetJoystickPos`. * * @ingroup input */ @@ -2009,17 +3007,27 @@ GLFWAPI const float* glfwGetJoystickAxes(int joy, 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`. * - * @param[in] joy The joystick to query. - * @param[out] count Where to store the size of the returned array. This is - * set to zero if an error occurred. + * @param[in] joy 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 an error occurred. * @return An array of button states, or `NULL` if the joystick is not present. * - * @note The returned array is allocated and freed by GLFW. You should not - * free it yourself. + * @par 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. + * + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref joystick_button * - * @note The returned array is valid only until the next call to @ref - * glfwGetJoystickButtons for that joystick. + * @since Added in GLFW 2.2. + * + * @par + * __GLFW 3:__ Changed to return a dynamic array. * * @ingroup input */ @@ -2028,16 +3036,24 @@ GLFWAPI const unsigned char* glfwGetJoystickButtons(int joy, 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. * - * @param[in] joy The joystick to query. + * @param[in] joy The [joystick](@ref joysticks) to query. * @return The UTF-8 encoded name of the joystick, or `NULL` if the joystick * is not present. * - * @note The returned string is allocated and freed by GLFW. You should not - * free it yourself. + * @par 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, this + * function is called again for that joystick or the library is terminated. + * + * @par Thread Safety + * This function may only be called from the main thread. * - * @note The returned string is valid only until the next call to @ref - * glfwGetJoystickName for that joystick. + * @sa @ref joystick_name + * + * @since Added in GLFW 3.0. * * @ingroup input */ @@ -2046,40 +3062,50 @@ GLFWAPI const char* glfwGetJoystickName(int joy); /*! @brief Sets the clipboard to the specified string. * * This function sets the system clipboard to the specified, UTF-8 encoded - * string. The string is copied before returning, so you don't have to retain - * it afterwards. + * string. * * @param[in] window The window that will own the clipboard contents. * @param[in] string A UTF-8 encoded string. * - * @note This function may only be called from the main thread. + * @par Pointer Lifetime + * The specified string is copied before this function returns. + * + * @par Thread Safety + * This function may only be called from the main thread. * + * @sa @ref clipboard * @sa glfwGetClipboardString * - * @ingroup clipboard + * @since Added in GLFW 3.0. + * + * @ingroup input */ GLFWAPI void glfwSetClipboardString(GLFWwindow* window, const char* string); -/*! @brief Retrieves the contents of the clipboard as a 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. * * @param[in] window The window that will request the clipboard contents. * @return The contents of the clipboard as a UTF-8 encoded string, or `NULL` - * if an error occurred. - * - * @note This function may only be called from the main thread. + * if an [error](@ref error_handling) occurred. * - * @note The returned string is allocated and freed by GLFW. You should not - * free it yourself. + * @par 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. * - * @note The returned string is valid only until the next call to @ref - * glfwGetClipboardString or @ref glfwSetClipboardString. + * @par Thread Safety + * This function may only be called from the main thread. * + * @sa @ref clipboard * @sa glfwSetClipboardString * - * @ingroup clipboard + * @since Added in GLFW 3.0. + * + * @ingroup input */ GLFWAPI const char* glfwGetClipboardString(GLFWwindow* window); @@ -2089,15 +3115,21 @@ GLFWAPI const char* glfwGetClipboardString(GLFWwindow* window); * been set using @ref glfwSetTime, the timer measures time elapsed since GLFW * was initialized. * - * @return The current value, in seconds, or zero if an error occurred. + * 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 supported platform. * - * @remarks This function may be called from secondary threads. + * @return The current value, in seconds, or zero if an + * [error](@ref error_handling) occurred. * - * @note 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 supported platform. + * @par Thread Safety + * This function may be called from any thread. Access is not synchronized. * - * @ingroup time + * @sa @ref time + * + * @since Added in GLFW 1.0. + * + * @ingroup input */ GLFWAPI double glfwGetTime(void); @@ -2108,44 +3140,61 @@ GLFWAPI double glfwGetTime(void); * * @param[in] time The new value, in seconds. * - * @note 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 supported platform. + * @par Thread Safety + * This function may only be called from the main thread. + * + * @sa @ref time * - * @ingroup time + * @since Added in GLFW 2.2. + * + * @ingroup input */ GLFWAPI void glfwSetTime(double time); /*! @brief Makes the context of the specified window current for the calling * thread. * - * This function makes the context of the specified window current on the - * calling thread. A context can only be made current on a single thread at - * a time and each thread can have only a single current context at a time. + * This function makes the OpenGL or OpenGL ES context of the specified window + * current on the calling thread. A context can only be made current on + * a single thread at a time and each thread can have only a single current + * context at a time. + * + * 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 window_hints_ctx) window hint. * * @param[in] window The window whose context to make current, or `NULL` to * detach the current context. * - * @remarks This function may be called from secondary threads. + * @par Thread Safety + * This function may be called from any thread. * + * @sa @ref context_current * @sa glfwGetCurrentContext * + * @since Added in GLFW 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 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. * - * @remarks This function may be called from secondary threads. + * @par Thread Safety + * This function may be called from any thread. * + * @sa @ref context_current * @sa glfwMakeContextCurrent * + * @since Added in GLFW 3.0. + * * @ingroup context */ GLFWAPI GLFWwindow* glfwGetCurrentContext(void); @@ -2158,24 +3207,28 @@ GLFWAPI GLFWwindow* glfwGetCurrentContext(void); * * @param[in] window The window whose buffers to swap. * - * @remarks This function may be called from secondary threads. - * - * @par New in GLFW 3 - * This function no longer calls @ref glfwPollEvents. You need to call it or - * @ref glfwWaitEvents yourself. + * @par Thread Safety + * This function may be called from any thread. * + * @sa @ref buffer_swap * @sa glfwSwapInterval * - * @ingroup context + * @since Added in GLFW 1.0. + * + * @par + * __GLFW 3:__ 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 context, i.e. the - * number of screen updates to wait before swapping the buffers of a window and - * returning from @ref glfwSwapBuffers. This is sometimes called 'vertical - * synchronization', 'vertical retrace synchronization' or 'vsync'. + * 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_. * * Contexts that support either of the `WGL_EXT_swap_control_tear` and * `GLX_EXT_swap_control_tear` extensions also accept negative swap intervals, @@ -2184,17 +3237,29 @@ GLFWAPI void glfwSwapBuffers(GLFWwindow* window); * glfwExtensionSupported. For more information about swap tearing, see the * extension specifications. * + * 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. + * * @param[in] interval The minimum number of screen updates to wait for * until the buffers are swapped by @ref glfwSwapBuffers. * - * @remarks This function may be called from secondary threads. + * @note This function is not called during window creation, leaving the swap + * interval set to whatever is the default on that platform. 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. * * @note Some GPU drivers do not honor the requested swap interval, either * because of user settings that override the request or due to bugs in the * driver. * + * @par Thread Safety + * This function may be called from any thread. + * + * @sa @ref buffer_swap * @sa glfwSwapBuffers * + * @since Added in GLFW 1.0. + * * @ingroup context */ GLFWAPI void glfwSwapInterval(int interval); @@ -2202,19 +3267,28 @@ GLFWAPI void glfwSwapInterval(int interval); /*! @brief Returns whether the specified extension is available. * * This function returns whether the specified - * [OpenGL or context creation API extension](@ref context_glext) is supported - * by the current context. For example, on Windows both the OpenGL and WGL - * extension strings are checked. + * [API extension](@ref context_glext) is supported by the current OpenGL or + * OpenGL ES context. It searches both for OpenGL and OpenGL ES extension and + * platform-specific 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. * * @param[in] extension The ASCII encoded name of the extension. * @return `GL_TRUE` if the extension is available, or `GL_FALSE` otherwise. * - * @remarks This function may be called from secondary threads. + * @par Thread Safety + * This function may be called from any thread. * - * @note As this functions searches one or more extension strings on each call, - * it is recommended that you cache its results if it's 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. + * @sa @ref context_glext + * @sa glfwGetProcAddress + * + * @since Added in GLFW 1.0. * * @ingroup context */ @@ -2227,15 +3301,27 @@ GLFWAPI int glfwExtensionSupported(const char* extension); * [client API 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. + * * @param[in] procname The ASCII encoded name of the function. * @return The address of the function, or `NULL` if the function is - * unavailable. + * unavailable or an [error](@ref error_handling) occurred. + * + * @note The addresses of a given function is not guaranteed to be the same + * between contexts. + * + * @par Pointer Lifetime + * The returned function pointer is valid until the context is destroyed or the + * library is terminated. + * + * @par Thread Safety + * This function may be called from any thread. * - * @remarks This function may be called from secondary threads. + * @sa @ref context_glext + * @sa glfwExtensionSupported * - * @note The addresses of these functions are not guaranteed to be the same for - * all contexts, especially if they use different client APIs or even different - * context creation hints. + * @since Added in GLFW 1.0. * * @ingroup context */ diff --git a/external/glfw3/include/GLFW/glfw3native.h b/external/glfw3/include/GLFW/glfw3native.h index d570f587..b3ce7482 100644 --- a/external/glfw3/include/GLFW/glfw3native.h +++ b/external/glfw3/include/GLFW/glfw3native.h @@ -1,5 +1,5 @@ /************************************************************************* - * GLFW 3.0 - www.glfw.org + * GLFW 3.1 - www.glfw.org * A library for OpenGL, window and input *------------------------------------------------------------------------ * Copyright (c) 2002-2006 Marcus Geelnard @@ -40,13 +40,13 @@ extern "C" { /*! @defgroup native Native access * - * **By using the native API, you assert that you know what you're doing and - * how to fix problems caused by using it. If you don't, you shouldn't be - * using it.** + * **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 must define exactly one - * window API macro and exactly one context API macro. Failure to do this - * will cause a compile-time error. + * window system API macro and exactly one context creation API macro. Failure + * to do this will cause a compile-time error. * * The available window API macros are: * * `GLFW_EXPOSE_NATIVE_WIN32` @@ -71,8 +71,13 @@ extern "C" { *************************************************************************/ #if defined(GLFW_EXPOSE_NATIVE_WIN32) + // This is a workaround for the fact that glfw3.h needs to export APIENTRY (for + // example to allow applications to correctly declare a GL_ARB_debug_output + // callback) but windows.h assumes no one will define APIENTRY before it does + #undef APIENTRY #include #elif defined(GLFW_EXPOSE_NATIVE_COCOA) + #include #if defined(__OBJC__) #import #else @@ -80,8 +85,9 @@ extern "C" { #endif #elif defined(GLFW_EXPOSE_NATIVE_X11) #include + #include #else - #error "No window API specified" + #error "No window API selected" #endif #if defined(GLFW_EXPOSE_NATIVE_WGL) @@ -93,7 +99,7 @@ extern "C" { #elif defined(GLFW_EXPOSE_NATIVE_EGL) #include #else - #error "No context API specified" + #error "No context API selected" #endif @@ -102,8 +108,49 @@ extern "C" { *************************************************************************/ #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. + * + * @par Thread Safety + * This function may be called from any thread. Access is not synchronized. + * + * @par History + * Added in GLFW 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. + * + * @par Thread Safety + * This function may be called from any thread. Access is not synchronized. + * + * @par History + * Added in GLFW 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. + * + * @return The `HWND` of the specified window, or `NULL` if an + * [error](@ref error_handling) occurred. + * + * @par Thread Safety + * This function may be called from any thread. Access is not synchronized. + * + * @par History + * Added in GLFW 3.0. + * * @ingroup native */ GLFWAPI HWND glfwGetWin32Window(GLFWwindow* window); @@ -111,15 +158,48 @@ GLFWAPI HWND glfwGetWin32Window(GLFWwindow* window); #if defined(GLFW_EXPOSE_NATIVE_WGL) /*! @brief Returns the `HGLRC` of the specified window. - * @return The `HGLRC` of the specified window. + * + * @return The `HGLRC` of the specified window, or `NULL` if an + * [error](@ref error_handling) occurred. + * + * @par Thread Safety + * This function may be called from any thread. Access is not synchronized. + * + * @par History + * Added in GLFW 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. + * + * @par Thread Safety + * This function may be called from any thread. Access is not synchronized. + * + * @par History + * Added in GLFW 3.1. + * + * @ingroup native + */ +GLFWAPI CGDirectDisplayID glfwGetCocoaMonitor(GLFWmonitor* monitor); + /*! @brief Returns the `NSWindow` of the specified window. - * @return The `NSWindow` of the specified window. + * + * @return The `NSWindow` of the specified window, or `nil` if an + * [error](@ref error_handling) occurred. + * + * @par Thread Safety + * This function may be called from any thread. Access is not synchronized. + * + * @par History + * Added in GLFW 3.0. + * * @ingroup native */ GLFWAPI id glfwGetCocoaWindow(GLFWwindow* window); @@ -127,7 +207,16 @@ GLFWAPI id glfwGetCocoaWindow(GLFWwindow* window); #if defined(GLFW_EXPOSE_NATIVE_NSGL) /*! @brief Returns the `NSOpenGLContext` of the specified window. - * @return The `NSOpenGLContext` of the specified window. + * + * @return The `NSOpenGLContext` of the specified window, or `nil` if an + * [error](@ref error_handling) occurred. + * + * @par Thread Safety + * This function may be called from any thread. Access is not synchronized. + * + * @par History + * Added in GLFW 3.0. + * * @ingroup native */ GLFWAPI id glfwGetNSGLContext(GLFWwindow* window); @@ -135,12 +224,61 @@ GLFWAPI id glfwGetNSGLContext(GLFWwindow* window); #if defined(GLFW_EXPOSE_NATIVE_X11) /*! @brief Returns the `Display` used by GLFW. - * @return The `Display` used by GLFW. + * + * @return The `Display` used by GLFW, or `NULL` if an + * [error](@ref error_handling) occurred. + * + * @par Thread Safety + * This function may be called from any thread. Access is not synchronized. + * + * @par History + * Added in GLFW 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. + * + * @par Thread Safety + * This function may be called from any thread. Access is not synchronized. + * + * @par History + * Added in GLFW 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. + * + * @par Thread Safety + * This function may be called from any thread. Access is not synchronized. + * + * @par History + * Added in GLFW 3.1. + * + * @ingroup native + */ +GLFWAPI RROutput glfwGetX11Monitor(GLFWmonitor* monitor); + /*! @brief Returns the `Window` of the specified window. - * @return The `Window` of the specified window. + * + * @return The `Window` of the specified window, or `None` if an + * [error](@ref error_handling) occurred. + * + * @par Thread Safety + * This function may be called from any thread. Access is not synchronized. + * + * @par History + * Added in GLFW 3.0. + * * @ingroup native */ GLFWAPI Window glfwGetX11Window(GLFWwindow* window); @@ -148,7 +286,16 @@ GLFWAPI Window glfwGetX11Window(GLFWwindow* window); #if defined(GLFW_EXPOSE_NATIVE_GLX) /*! @brief Returns the `GLXContext` of the specified window. - * @return The `GLXContext` of the specified window. + * + * @return The `GLXContext` of the specified window, or `NULL` if an + * [error](@ref error_handling) occurred. + * + * @par Thread Safety + * This function may be called from any thread. Access is not synchronized. + * + * @par History + * Added in GLFW 3.0. + * * @ingroup native */ GLFWAPI GLXContext glfwGetGLXContext(GLFWwindow* window); @@ -156,17 +303,46 @@ GLFWAPI GLXContext glfwGetGLXContext(GLFWwindow* window); #if defined(GLFW_EXPOSE_NATIVE_EGL) /*! @brief Returns the `EGLDisplay` used by GLFW. - * @return The `EGLDisplay` used by GLFW. + * + * @return The `EGLDisplay` used by GLFW, or `EGL_NO_DISPLAY` if an + * [error](@ref error_handling) occurred. + * + * @par Thread Safety + * This function may be called from any thread. Access is not synchronized. + * + * @par History + * Added in GLFW 3.0. + * * @ingroup native */ GLFWAPI EGLDisplay glfwGetEGLDisplay(void); + /*! @brief Returns the `EGLContext` of the specified window. - * @return The `EGLContext` of the specified window. + * + * @return The `EGLContext` of the specified window, or `EGL_NO_CONTEXT` if an + * [error](@ref error_handling) occurred. + * + * @par Thread Safety + * This function may be called from any thread. Access is not synchronized. + * + * @par History + * Added in GLFW 3.0. + * * @ingroup native */ GLFWAPI EGLContext glfwGetEGLContext(GLFWwindow* window); + /*! @brief Returns the `EGLSurface` of the specified window. - * @return The `EGLSurface` of the specified window. + * + * @return The `EGLSurface` of the specified window, or `EGL_NO_SURFACE` if an + * [error](@ref error_handling) occurred. + * + * @par Thread Safety + * This function may be called from any thread. Access is not synchronized. + * + * @par History + * Added in GLFW 3.0. + * * @ingroup native */ GLFWAPI EGLSurface glfwGetEGLSurface(GLFWwindow* window); diff --git a/external/glfw3/lib/win32/libglfw3.a b/external/glfw3/lib/win32/libglfw3.a index 7138ee9b5cf629ea307cf221f2469dde8edef091..4af1f9720bcea20c70739cd3d57a5929c47126b1 100644 GIT binary patch literal 89824 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 literal 83006 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 Fe*x@E3nKsk delta 3168 zcmaKuc}&z-5Xa}OviL)kW7%c7WR*iiS(ak~@xr5`6$Ou4m8e8fOT|dN5Vb;?#&1`xCZz+#qI=K%;p z4@<&+2M|OiO8Tt=5ID|AVoU&nxMD#iz`)~@#Bcz?ki`<`WdK1+h9s>XK;XV5$tnO4 zWS^3Zhy@UgDw2#o2_P6ZKr+4xKrrE3$)retNtOIDnQth_=O++M<4Fi+lu2gt1%lb! zS5UZBGWQn%K~a`u!DawK@mG>12>^nU4U(lT0D@&6Nm&j+rFg7pl&rc7ASmYn1r<9b z>u&)FHl|Ce_$dUNu1L1n00i4gCDm;Jf;V|A!A`!1ptfF8$J-;=lM0pM0ed$}_T2^$ zG-OK-@V*J&yDT{r4VHH7_W@rBu`dwYE@71 zpxdT;A8hS)2uq5ccvD+|0c8$)%kLn=O8;J1>OU1P)y2~2KC^n_#h}^Y#V-EKOm{9% z))nhWc`RZqu-d3CID%>afAxnYpII~03|3HqHJGspw9w{axZmloEG#RuUPm1LMQVp^rJ%Nq68Xk28)6HZD_e(MGyrnlx>lJOKeuR z+aMtnVkm0x;FT9Os?PCecyE>xR@Wao=4g0nYyf>fCX8WWp<;iOlPMjrx3AdtI{J;D zY;_xz9b27t47|#>ny1mWTqnbTA|(`w*0WT)IWdu+ZGmdhiAV^Mn!jhrrl>wV$-Maz)O|oyc>4x-sE9PRQ>|b^x-nas5hGp zq5gBSd2Azz>Qm%97?zYSE}xDOXS=av?r>|m(S&;|mQ4H_yd-7Z?j0WwFV>>@SQ#kOPdt49Pbd?`|e=l zT9WwGnJj>vjkdN%e$hPq=*bGPU>bdx-wq{5REz#Ss%;LW#`lA`pj%X%F7-hA=|f%= zBQZXjK8$SBDEX6N44WGHnh&ce@`e; z9(UfKqS}&J$TNq#^t475N0S-Wo-qpHN1ex$c<0*{qin23F`w}-rprisQpxkqX|(z@ zAD5c*N{PI;vdNdLuRWAHKj(vg=c3{v+KbK;xId5=m|JsaA z7cJCzA=