/*!

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

*/
