/*! @page news Release notes @section news_33 Release notes for 3.3 @subsection news_33_focusonshow GLFW_FOCUS_ON_SHOW window hint and attribute GLFW now supports the [GLFW_FOCUS_ON_SHOW](@ref GLFW_DECORATED_hint) window hint and attribute for controlling input focus when calling @ref glfwShowWindow @see @ref window_hide @subsection news_33_geterror Error query GLFW now supports querying the last error code for the calling thread and its human-readable description with @ref glfwGetError. @see @ref error_handling @subsection news_33_gamepad SDL_GameControllerDB support and gamepad input GLFW now supports remapping of gamepads and controllers to a 360-like controller layout with @ref glfwJoystickIsGamepad, @ref glfwGetJoystickGUID, @ref glfwGetGamepadName, @ref glfwGetGamepadState and @ref glfwUpdateGamepadMappings, and the input state struct @ref GLFWgamepadstate. @sa @ref gamepad @subsection news_33_attention User attention request GLFW now supports requesting user attention to a specific window (on macOS to the application as a whole) with @ref glfwRequestWindowAttention. @see @ref window_attention @subsection news_33_maximize Window maximization callback GLFW now supports notifying the application that the window has been maximized @ref glfwSetWindowMaximizeCallback. @see @ref window_maximize @subsection news_33_keyscancode Platform-specific key scancode query GLFW now supports querying the platform dependent scancode of any physical key with @ref glfwGetKeyScancode. @see @ref input_key @subsection news_33_setwindowattrib Support for updating window attributes GLFW now supports changing the [GLFW_DECORATED](@ref GLFW_DECORATED_attrib), [GLFW_RESIZABLE](@ref GLFW_RESIZABLE_attrib), [GLFW_FLOATING](@ref GLFW_FLOATING_attrib) and [GLFW_AUTO_ICONIFY](@ref GLFW_AUTO_ICONIFY_attrib) attributes for existing windows with @ref glfwSetWindowAttrib. @see @ref window_attribs @subsection news_33_contentscale Content scale queries for DPI-aware rendering GLFW now supports querying the window and monitor content scale, i.e. the ratio between the current DPI and the platform's default DPI, with @ref glfwGetWindowContentScale and @ref glfwGetMonitorContentScale. Changes of the content scale of a window can be received with the window content scale callback, set with @ref glfwSetWindowContentScaleCallback. The @ref GLFW_SCALE_TO_MONITOR window hint enables automatic resizing of a window by the content scale of the monitor it is placed, on platforms like Windows and X11 where this is necessary. @see @ref window_scale @subsection news_33_workarea Support for monitor work area GLFW now supports querying the work area of a monitor, i.e. the area not occupied by task bars or global menu bars, with @ref glfwGetMonitorWorkarea. @see @ref monitor_workarea @subsection news_33_inithint Support for initialization hints GLFW now supports setting library initialization hints with @ref glfwInitHint. These must be set before initialization to take effect. @see @ref init_hints @subsection news_33_platformhints Support for platform specific hints GLFW now supports platform specific init and window hints to control system features that are only available on a single platform. @see @ref init_hints_osx @see @ref window_hints_osx @subsection news_33_joyhats Support for joystick hats GLFW now supports querying the hats (or POVs or D-pads) of a joystick with @ref glfwGetJoystickHats. Hats are by default also exposed as buttons, but this can be disabled with the @ref GLFW_JOYSTICK_HAT_BUTTONS init hint. @see @ref joystick_hat @subsection news_33_transparent Support for transparent windows and framebuffers GLFW now supports the creation of windows with transparent framebuffers on systems with desktop compositing enabled with the @ref GLFW_TRANSPARENT_FRAMEBUFFER window hint and attribute. This hint must be set before window creation and leaves any window decorations opaque. GLFW now also supports whole window transparency with @ref glfwGetWindowOpacity and @ref glfwSetWindowOpacity. This value controls the opacity of the whole window including decorations and unlike framebuffer transparency can be changed at any time after window creation. @subsection news_33_centercursor Cursor centering window hint GLFW now supports controlling whether the cursor is centered over newly created full screen windows with the [GLFW_CENTER_CURSOR](@ref GLFW_CENTER_CURSOR_hint) window hint. It is enabled by default. @subsection news_33_hover Mouse cursor hover window attribute GLFW now supports polling whether the cursor is hovering over the window content area with the [GLFW_HOVERED](@ref GLFW_HOVERED_attrib) window attribute. This attribute corresponds to the [cursor enter/leave](@ref cursor_enter) event. @subsection news_33_rawmotion Support for raw mouse motion GLFW now supports raw (unscaled and unaccelerated) mouse motion in disabled cursor mode with the [GLFW_RAW_MOUSE_MOTION](@ref GLFW_RAW_MOUSE_MOTION) input mode. Call @ref glfwRawMouseMotionSupported to check if the current machine supports raw mouse motion. @subsection news_33_moltenvk Support for Vulkan on macOS via MoltenVK GLFW now supports the `VK_MVK_macos_surface` window surface creation extension provided by MoltenVK in the [LunarG Vulkan SDK](https://vulkan.lunarg.com/). @see @ref vulkan_guide @subsection news_33_osmesa OSMesa backend for headless software rendering GLFW now supports creating offscreen OpenGL contexts using [OSMesa](https://www.mesa3d.org/osmesa.html) by setting [GLFW_CONTEXT_CREATION_API](@ref GLFW_CONTEXT_CREATION_API_hint) to `GLFW_OSMESA_CONTEXT_API`. There is also a new null backend that uses OSMesa as its native context creation API, intended for automated testing. This backend does not provide input. @subsection news_33_userptr Monitor and joystick user pointers GLFW now supports setting and querying user pointers for connected monitors and joysticks with @ref glfwSetMonitorUserPointer, @ref glfwGetMonitorUserPointer, @ref glfwSetJoystickUserPointer and @ref glfwGetJoystickUserPointer. @subsection news_33_primary X11 primary selection access GLFW now supports querying and setting the X11 primary selection via the native access functions @ref glfwGetX11SelectionString and @ref glfwSetX11SelectionString. @subsection news_33_mir_removal Experimental Mir support has been removed As per the release of Mir 1.0, the recommended API is now Wayland, the experimental Mir display server backend introduced in GLFW 3.1 has thus been removed. To use the experimental Wayland backend, pass -DGLFW_USE_WAYLAND=ON to cmake where you previously passed the now-removed -DGLFW_USE_MIR=ON. @section news_32 Release notes for 3.2 @subsection news_32_vulkan Support for Vulkan GLFW now supports basic integration with Vulkan with @ref glfwVulkanSupported, @ref glfwGetRequiredInstanceExtensions, @ref glfwGetInstanceProcAddress, @ref glfwGetPhysicalDevicePresentationSupport and @ref glfwCreateWindowSurface. Vulkan header inclusion can be selected with @ref GLFW_INCLUDE_VULKAN. @subsection news_32_setwindowmonitor Window mode switching GLFW now supports switching between windowed and full screen modes and updating the monitor and desired resolution and refresh rate of full screen windows with @ref glfwSetWindowMonitor. @subsection news_32_maximize Window maxmimization support GLFW now supports window maximization with @ref glfwMaximizeWindow and the @ref GLFW_MAXIMIZED window hint and attribute. @subsection news_32_focus Window input focus control GLFW now supports giving windows input focus with @ref glfwFocusWindow. @subsection news_32_sizelimits Window size limit support GLFW now supports setting both absolute and relative window size limits with @ref glfwSetWindowSizeLimits and @ref glfwSetWindowAspectRatio. @subsection news_32_keyname Localized key names GLFW now supports querying the localized name of printable keys with @ref glfwGetKeyName, either by key token or by scancode. @subsection news_32_waittimeout Wait for events with timeout GLFW now supports waiting for events for a set amount of time with @ref glfwWaitEventsTimeout. @subsection news_32_icon Window icon support GLFW now supports setting the icon of windows with @ref glfwSetWindowIcon. @subsection news_32_timer Raw timer access GLFW now supports raw timer values with @ref glfwGetTimerValue and @ref glfwGetTimerFrequency. @subsection news_32_joystick Joystick connection callback GLFW now supports notifying when a joystick has been connected or disconnected with @ref glfwSetJoystickCallback. @subsection news_32_noapi Context-less windows GLFW now supports creating windows without a OpenGL or OpenGL ES context by setting the [GLFW_CLIENT_API](@ref GLFW_CLIENT_API_hint) hint to `GLFW_NO_API`. @subsection news_32_contextapi Run-time context creation API selection GLFW now supports selecting and querying the context creation API at run-time with the @ref GLFW_CONTEXT_CREATION_API hint and attribute. @subsection news_32_noerror Error-free context creation GLFW now supports creating and querying OpenGL and OpenGL ES contexts that do not emit errors with the @ref GLFW_CONTEXT_NO_ERROR hint, provided the machine supports the `GL_KHR_no_error` extension. @subsection news_32_cmake CMake config-file package support GLFW now supports being used as a [config-file package](@ref build_link_cmake_package) from other projects for easy linking with the library and its dependencies. @section news_31 Release notes for 3.1 These are the release highlights. For a full list of changes see the [version history](https://www.glfw.org/changelog.html). @subsection news_31_cursor Custom mouse cursor images GLFW now supports creating and setting both custom cursor images and standard cursor shapes. They are created with @ref glfwCreateCursor or @ref glfwCreateStandardCursor, set with @ref glfwSetCursor and destroyed with @ref glfwDestroyCursor. @see @ref cursor_object @subsection news_31_drop Path drop event GLFW now provides a callback for receiving the paths of files and directories dropped onto GLFW windows. The callback is set with @ref glfwSetDropCallback. @see @ref path_drop @subsection news_31_emptyevent Main thread wake-up GLFW now provides the @ref glfwPostEmptyEvent function for posting an empty event from another thread to the main thread event queue, causing @ref glfwWaitEvents to return. @see @ref events @subsection news_31_framesize Window frame size query GLFW now supports querying the size, on each side, of the frame around the content area of a window, with @ref glfwGetWindowFrameSize. @see [Window size](@ref window_size) @subsection news_31_autoiconify Simultaneous multi-monitor rendering GLFW now supports disabling auto-iconification of full screen windows with the [GLFW_AUTO_ICONIFY](@ref GLFW_AUTO_ICONIFY_hint) window hint. This is intended for people building multi-monitor installations, where you need windows to stay in full screen despite losing input focus. @subsection news_31_floating Floating windows GLFW now supports floating windows, also called topmost or always on top, for easier debugging with the @ref GLFW_FLOATING window hint and attribute. @subsection news_31_focused Initially unfocused windows GLFW now supports preventing a windowed mode window from gaining input focus on creation, with the [GLFW_FOCUSED](@ref GLFW_FOCUSED_hint) window hint. @subsection news_31_direct Direct access for window attributes and cursor position GLFW now queries the window input focus, visibility and iconification attributes and the cursor position directly instead of returning cached data. @subsection news_31_charmods Character with modifiers callback GLFW now provides a callback for character events with modifier key bits. The callback is set with @ref glfwSetCharModsCallback. Unlike the regular character callback, this will report character events that will not result in a character being input, for example if the Control key is held down. @see @ref input_char @subsection news_31_single Single buffered framebuffers GLFW now supports the creation of single buffered windows, with the @ref GLFW_DOUBLEBUFFER hint. @subsection news_31_glext Macro for including extension header GLFW now includes the extension header appropriate for the chosen OpenGL or OpenGL ES header when @ref GLFW_INCLUDE_GLEXT is defined. GLFW does not provide these headers. They must be provided by your development environment or your OpenGL or OpenGL ES SDK. @subsection news_31_release Context release behaviors GLFW now supports controlling and querying whether the pipeline is flushed when a context is made non-current, with the @ref GLFW_CONTEXT_RELEASE_BEHAVIOR hint and attribute, provided the machine supports the `GL_KHR_context_flush_control` extension. @subsection news_31_wayland (Experimental) Wayland support GLFW now has an _experimental_ Wayland display protocol backend that can be selected on Linux with a CMake option. @subsection news_31_mir (Experimental) Mir support GLFW now has an _experimental_ Mir display server backend that can be selected on Linux with a CMake option. @section news_30 Release notes for 3.0 These are the release highlights. For a full list of changes see the [version history](https://www.glfw.org/changelog.html). @subsection news_30_cmake CMake build system GLFW now uses the CMake build system instead of the various makefiles and project files used by earlier versions. CMake is available for all platforms supported by GLFW, is present in most package systems and can generate makefiles and/or project files for most popular development environments. For more information on how to use CMake, see the [CMake manual](https://cmake.org/cmake/help/documentation.html). @subsection news_30_multiwnd Multi-window support GLFW now supports the creation of multiple windows, each with their own OpenGL or OpenGL ES context, and all window functions now take a window handle. Event callbacks are now per-window and are provided with the handle of the window that received the event. The @ref glfwMakeContextCurrent function has been added to select which context is current on a given thread. @subsection news_30_multimon Multi-monitor support GLFW now explicitly supports multiple monitors. They can be enumerated with @ref glfwGetMonitors, queried with @ref glfwGetVideoModes, @ref glfwGetMonitorPos, @ref glfwGetMonitorName and @ref glfwGetMonitorPhysicalSize, and specified at window creation to make the newly created window full screen on that specific monitor. @subsection news_30_unicode Unicode support All string arguments to GLFW functions and all strings returned by GLFW now use the UTF-8 encoding. This includes the window title, error string, clipboard text, monitor and joystick names as well as the extension function arguments (as ASCII is a subset of UTF-8). @subsection news_30_clipboard Clipboard text I/O GLFW now supports reading and writing plain text to and from the system clipboard, with the @ref glfwGetClipboardString and @ref glfwSetClipboardString functions. @subsection news_30_gamma Gamma ramp support GLFW now supports setting and reading back the gamma ramp of monitors, with the @ref glfwGetGammaRamp and @ref glfwSetGammaRamp functions. There is also @ref glfwSetGamma, which generates a ramp from a gamma value and then sets it. @subsection news_30_gles OpenGL ES support GLFW now supports the creation of OpenGL ES contexts, by setting the [GLFW_CLIENT_API](@ref GLFW_CLIENT_API_hint) hint to `GLFW_OPENGL_ES_API`, where creation of such contexts are supported. Note that GLFW _does not implement_ OpenGL ES, so your driver must provide support in a way usable by GLFW. Modern Nvidia and Intel drivers support creation of OpenGL ES context using the GLX and WGL APIs, while AMD provides an EGL implementation instead. @subsection news_30_egl (Experimental) EGL support GLFW now has an experimental EGL context creation back end that can be selected through CMake options. @subsection news_30_hidpi High-DPI support GLFW now supports high-DPI monitors on both Windows and macOS, giving windows full resolution framebuffers where other UI elements are scaled up. To achieve this, @ref glfwGetFramebufferSize and @ref glfwSetFramebufferSizeCallback have been added. These work with pixels, while the rest of the GLFW API works with screen coordinates. This is important as OpenGL uses pixels, not screen coordinates. @subsection news_30_error Error callback GLFW now has an error callback, which can provide your application with much more detailed diagnostics than was previously possible. The callback is passed an error code and a description string. @subsection news_30_wndptr Per-window user pointer Each window now has a user-defined pointer, retrieved with @ref glfwGetWindowUserPointer and set with @ref glfwSetWindowUserPointer, to make it easier to integrate GLFW into C++ code. @subsection news_30_iconifyfun Window iconification callback Each window now has a callback for iconification and restoration events, which is set with @ref glfwSetWindowIconifyCallback. @subsection news_30_wndposfun Window position callback Each window now has a callback for position events, which is set with @ref glfwSetWindowPosCallback. @subsection news_30_wndpos Window position query The position of a window can now be retrieved using @ref glfwGetWindowPos. @subsection news_30_focusfun Window focus callback Each windows now has a callback for focus events, which is set with @ref glfwSetWindowFocusCallback. @subsection news_30_enterleave Cursor enter/leave callback Each window now has a callback for when the mouse cursor enters or leaves its content area, which is set with @ref glfwSetCursorEnterCallback. @subsection news_30_wndtitle Initial window title The title of a window is now specified at creation time, as one of the arguments to @ref glfwCreateWindow. @subsection news_30_hidden Hidden windows Windows can now be hidden with @ref glfwHideWindow, shown using @ref glfwShowWindow and created initially hidden with the @ref GLFW_VISIBLE window hint and attribute. This allows for off-screen rendering in a way compatible with most drivers, as well as moving a window to a specific position before showing it. @subsection news_30_undecorated Undecorated windows Windowed mode windows can now be created without decorations, e.g. things like a frame, a title bar, with the @ref GLFW_DECORATED window hint and attribute. This allows for the creation of things like splash screens. @subsection news_30_keymods Modifier key bit masks [Modifier key bit mask](@ref mods) parameters have been added to the [mouse button](@ref GLFWmousebuttonfun) and [key](@ref GLFWkeyfun) callbacks. @subsection news_30_scancode Platform-specific scancodes A scancode parameter has been added to the [key callback](@ref GLFWkeyfun). Keys that don't have a [key token](@ref keys) still get passed on with the key parameter set to `GLFW_KEY_UNKNOWN`. These scancodes will vary between machines and are intended to be used for key bindings. @subsection news_30_jsname Joystick names The name of a joystick can now be retrieved using @ref glfwGetJoystickName. @subsection news_30_doxygen Doxygen documentation You are reading it. */