/*!

@page news Release notes

@tableofcontents


@section news_33 Release notes for version 3.3

These are the release notes for version 3.3.  For a more detailed view including
all fixed bugs see the [version history](https://www.glfw.org/changelog.html).

Please review the caveats, deprecations and removals if your project was written
against an earlier version of GLFW 3.


@subsection features_33 New features in version 3.3

@subsubsection gamepad_33 Gamepad input via SDL_GameControllerDB

GLFW can now remap game controllers to a standard Xbox-like layout using
a built-in copy of SDL_GameControllerDB.  Call @ref glfwJoystickIsGamepad to
check if a joystick has a mapping, @ref glfwGetGamepadState to retrieve its
input state, @ref glfwUpdateGamepadMappings to add newer mappings and @ref
glfwGetGamepadName and @ref glfwGetJoystickGUID for mapping related information.

For more information see @ref gamepad.


@subsubsection moltenvk_33 Support for Vulkan on macOS via MoltenVK

GLFW now supports [MoltenVK](https://moltengl.com/moltenvk/), a Vulkan
implementation on top of the Metal API, and its `VK_MVK_macos_surface` window
surface creation extension.  MoltenVK is included in the [macOS Vulkan
SDK](https://vulkan.lunarg.com/).

For more information see @ref vulkan_guide.


@subsubsection content_scale_33 Content scale queries for DPI-aware rendering

GLFW now provides content scales for windows and monitors, i.e. the ratio
between their 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 where this is necessary.  This takes effect both on creation and when
the window is moved between monitors.  It is related to but different from
[GLFW_COCOA_RETINA_FRAMEBUFFER](@ref GLFW_COCOA_RETINA_FRAMEBUFFER_hint).

For more information see @ref window_scale.


@subsubsection setwindowattrib_33 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),
[GLFW_AUTO_ICONIFY](@ref GLFW_AUTO_ICONIFY_attrib) and
[GLFW_FOCUS_ON_SHOW](@ref GLFW_FOCUS_ON_SHOW_attrib) attributes for existing
windows with @ref glfwSetWindowAttrib.

For more information see @ref window_attribs.


@subsubsection raw_motion_33 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.  Raw mouse motion input is not yet implemented on macOS.  Call @ref
glfwRawMouseMotionSupported to check if GLFW can provide raw mouse motion on the
current system.

For more information see @ref raw_mouse_motion.


@subsubsection joysticks_33 Joystick hats

GLFW can now return the state of hats (i.e. POVs or D-pads) of a joystick with
@ref glfwGetJoystickHats.  For compatibility, hats are also exposed as buttons.
This can be disabled with the @ref GLFW_JOYSTICK_HAT_BUTTONS initialization
hint.

For more information see @ref joystick_hat.


@subsubsection geterror_33 Error query

GLFW now supports querying the last error code for the calling thread and its
human-readable description with @ref glfwGetError.  This can be used instead of
or together with the error callback.

For more information see @ref error_handling.


@subsubsection init_hints_33 Support for initialization hints

GLFW now supports setting library initialization hints with @ref glfwInitHint.
These must be set before initialization to take effect.  Some of these hints are
platform specific but are safe to set on any platform.

For more information see @ref init_hints.


@subsubsection attention_33 User attention request

GLFW now supports requesting user attention with @ref
glfwRequestWindowAttention.  Where possible this calls attention to the
specified window.  On platforms like macOS it calls attention to the whole
application.

For more information see @ref window_attention.


@subsubsection maximize_33 Window maximization callback

GLFW now supports notifying the application that the window has been maximized
@ref glfwSetWindowMaximizeCallback.  This is called both when the window was
maximized by the user and when it was done with @ref glfwMaximizeWindow.

For more information see @ref window_maximize.


@subsubsection workarea_33 Query for the 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.  On
platforms that lack this concept, the whole area of the monitor is returned.

For more information see @ref monitor_workarea.


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

For more information see @ref window_transparency.


@subsubsection key_scancode_33 Query for the scancode of a key

GLFW now supports querying the platform dependent scancode of any physical key
with @ref glfwGetKeyScancode.

For more information see @ref input_key.


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


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


@subsubsection focusonshow_33 Window hint and attribute for input focus on show

GLFW now has the [GLFW_FOCUS_ON_SHOW](@ref GLFW_DECORATED_hint) window hint and
attribute for controlling whether a window gets input focus when shown.  It is
enabled by default.  It applies both when creating an visible window with @ref
glfwCreateWindow and when showing it with @ref glfwShowWindow.

This is a workaround for GLFW 3.0 lacking @ref glfwFocusWindow and will be
corrected in the next major version.

For more information see @ref window_hide.


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

For more information see @ref monitor_userptr and @ref joystick_userptr.


@subsubsection macos_nib_33 macOS menu bar from nib file

GLFW will now load a `MainMenu.nib` file if found in the `Contents/Resources`
directory of the application bundle, as a way to replace the GLFW menu bar
without recompiling GLFW.  This behavior can be disabled with the
[GLFW_COCOA_MENUBAR](@ref GLFW_COCOA_MENUBAR_hint) initialization hint.


@subsubsection glext_33 Support for more context creation extensions

The context hint @ref GLFW_SRGB_CAPABLE now supports OpenGL ES via
`WGL_EXT_colorspace`, the context hint @ref GLFW_CONTEXT_NO_ERROR now supports
`WGL_ARB_create_context_no_error` and `GLX_ARB_create_context_no_error`, the
context hint @ref GLFW_CONTEXT_RELEASE_BEHAVIOR now supports
`EGL_KHR_context_flush_control` and @ref glfwGetProcAddress now supports
`EGL_KHR_get_all_proc_addresses`.


@subsubsection osmesa_33 OSMesa off-screen context creation support

GLFW now supports creating off-screen 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`.  Native access function have been added to retrieve
the OSMesa color and depth buffers.

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 caveats_33 Caveats for version 3.3

@subsubsection joystick_layout_33 Layout of joysticks have changed

The way joystick elements are arranged have changed to match SDL2 in order to
support SDL_GameControllerDB mappings.  The layout of joysticks may
change again if required for compatibility with SDL2.  If you need a known and
stable layout for game controllers, see if you can switch to @ref gamepad.

Existing code that depends on a specific joystick layout will likely have to be
updated.


@subsubsection wait_events_33 No window required to wait for events

The @ref glfwWaitEvents and @ref glfwWaitEventsTimeout functions no longer need
a window to be created to wait for events.  Before version 3.3 these functions
would return immediately if there were no user-created windows.  On platforms
where only windows can receive events, an internal helper window is used.

Existing code that depends on the earlier behavior will likely have to be
updated.


@subsubsection gamma_ramp_size_33 Gamma ramp size of 256 may be rejected

The documentation for versions before 3.3 stated that a gamma ramp size of 256
would always be accepted.  This was never the case on X11 and could lead to
artifacts on macOS.  The @ref glfwSetGamma function has been updated to always
generate a ramp of the correct size.

Existing code that hardcodes a size of 256 should be updated to use the size of
the current ramp of a monitor when setting a new ramp for that monitor.


@subsubsection xinput_deadzone_33 Windows XInput deadzone removed

GLFW no longer applies any deadzone to the input state received from the XInput
API.  This was never done for any other platform joystick API so this change
makes the behavior more consistent but you will need to apply your own deadzone
if desired.


@subsubsection x11_clipboard_33 X11 clipboard transfer limits

GLFW now supports reading clipboard text via the `INCR` method, which removes
the limit on how much text can be read with @ref glfwGetClipboardString.
However, writing via this method is not yet supported, so you may not be able to
write a very large string with @ref glfwSetClipboardString even if you read it
from the clipboard earlier.

The exact size limit for writing to the clipboard is negotiated with each
receiving application but is at least several tens of kilobytes.  Note that only
the read limit has changed.  Any string that could be written before still can
be.


@subsubsection x11_linking_33 X11 extension libraries are loaded dynamically

GLFW now loads all X11 extension libraries at initialization.  The only X11
library you need to link against is `libX11`.  The header files for the
extension libraries are still required for compilation.

Existing projects and makefiles that link GLFW directly against the extension
libraries should still build correctly but will add these libraries as load-time
dependencies.


@subsubsection cmake_version_33 CMake 3.0 or later is required

The minimum CMake version has been raised from 2.8.12 to 3.0.  This is only
a requirement of the GLFW CMake files.  The GLFW source files do not depend on
CMake.


@subsection deprecations_33 Deprecations in version 3.3

@subsubsection charmods_callback_33 Character with modifiers callback

The character with modifiers callback set with @ref glfwSetCharModsCallback has
been deprecated and should if possible not be used.

Existing code should still work but further bug fixes will likely not be made.
The callback will be removed in the next major version.


@subsubsection clipboard_window_33 Window parameter to clipboard functions

The window parameter of the clipboard functions @ref glfwGetClipboardString and
@ref glfwSetClipboardString has been deprecated and is no longer used on any
platform.  On platforms where the clipboard must be owned by a specific window,
an internal helper window is used.

Existing code should still work unless it depends on a specific window owning
the clipboard.  New code may pass `NULL` as the window argument.  The parameter
will be removed in a future release.


@subsection removals_33 Removals in 3.3

@subsubsection macos_options_33 macOS specific CMake options and macros

The `GLFW_USE_RETINA`, `GLFW_USE_CHDIR` and `GLFW_USE_MENUBAR` CMake options and
the `_GLFW_USE_RETINA`, `_GLFW_USE_CHDIR` and `_GLFW_USE_MENUBAR` compile-time
macros have been removed.

These options and macros are replaced by the window hint
[GLFW_COCOA_RETINA_FRAMEBUFFER](@ref GLFW_COCOA_RETINA_FRAMEBUFFER_hint)
and the init hints
[GLFW_COCOA_CHDIR_RESOURCES](@ref GLFW_COCOA_CHDIR_RESOURCES_hint) and
[GLFW_COCOA_MENUBAR](@ref GLFW_COCOA_MENUBAR_hint).

Existing projects and makefiles that set these options or define these macros
during compilation of GLFW will still build but it will have no effect and the
default behaviors will be used.


@subsubsection vulkan_sdk_33 LunarG Vulkan SDK dependency

The GLFW test programs that previously depended on the LunarG Vulkan SDK now
instead uses a Vulkan loader generated by
[glad2](https://github.com/Dav1dde/glad).  This means the GLFW CMake files no
longer look for the Vulkan SDK.

Existing CMake projects that depended on the Vulkan SDK cache variables from
GLFW will need to call `find_package(Vulkan)` themselves.  CMake 3.7 and later
already comes with a
[Vulkan find module](https://cmake.org/cmake/help/latest/module/FindVulkan.html)
similar to the one GLFW previously included.


@subsubsection lib_suffix_33 CMake option LIB_SUFFIX

The `LIB_SUFFIX` CMake option has been removed.  GLFW now uses the
GNUInstallDirs CMake package to handle platform specific details like the
library directory suffix and the `LIB_SUFFIX` CMake option has been removed.

Existing projects and makefiles that set the `LIB_SUFFIX` option will use the
suffix chosen by the GNUInstallDirs package and the option will be ignored.


@subsubsection mir_removed_33 Mir support

The experimental Mir support has been completely removed as the Mir project has
implemented support for the Wayland protocol and is recommending that
applications use that instead.

Existing projects and makefiles that select Mir when compiling GLFW will fail.
Use Wayland or X11 instead.


@subsection symbols_33 New symbols in version 3.3

@subsubsection functions_33 New functions in version 3.3

 - @ref glfwInitHint
 - @ref glfwGetError
 - @ref glfwGetMonitorWorkarea
 - @ref glfwGetMonitorContentScale
 - @ref glfwGetMonitorUserPointer
 - @ref glfwSetMonitorUserPointer
 - @ref glfwWindowHintString
 - @ref glfwGetWindowContentScale
 - @ref glfwGetWindowOpacity
 - @ref glfwSetWindowOpacity
 - @ref glfwRequestWindowAttention
 - @ref glfwSetWindowAttrib
 - @ref glfwSetWindowMaximizeCallback
 - @ref glfwSetWindowContentScaleCallback
 - @ref glfwRawMouseMotionSupported
 - @ref glfwGetKeyScancode
 - @ref glfwGetJoystickHats
 - @ref glfwGetJoystickGUID
 - @ref glfwGetJoystickUserPointer
 - @ref glfwSetJoystickUserPointer
 - @ref glfwJoystickIsGamepad
 - @ref glfwUpdateGamepadMappings
 - @ref glfwGetGamepadName
 - @ref glfwGetGamepadState


@subsubsection types_33 New types in version 3.3

 - @ref GLFWwindowmaximizefun
 - @ref GLFWwindowcontentscalefun
 - @ref GLFWgamepadstate


@subsubsection constants_33 New constants in version 3.3

 - @ref GLFW_NO_ERROR
 - @ref GLFW_JOYSTICK_HAT_BUTTONS
 - @ref GLFW_COCOA_CHDIR_RESOURCES
 - @ref GLFW_COCOA_MENUBAR
 - @ref GLFW_CENTER_CURSOR
 - @ref GLFW_TRANSPARENT_FRAMEBUFFER
 - @ref GLFW_HOVERED
 - @ref GLFW_FOCUS_ON_SHOW
 - @ref GLFW_SCALE_TO_MONITOR
 - @ref GLFW_COCOA_RETINA_FRAMEBUFFER
 - @ref GLFW_COCOA_FRAME_NAME
 - @ref GLFW_COCOA_GRAPHICS_SWITCHING
 - @ref GLFW_X11_CLASS_NAME
 - @ref GLFW_X11_INSTANCE_NAME
 - @ref GLFW_OSMESA_CONTEXT_API
 - @ref GLFW_HAT_CENTERED
 - @ref GLFW_HAT_UP
 - @ref GLFW_HAT_RIGHT
 - @ref GLFW_HAT_DOWN
 - @ref GLFW_HAT_LEFT
 - @ref GLFW_HAT_RIGHT_UP
 - @ref GLFW_HAT_RIGHT_DOWN
 - @ref GLFW_HAT_LEFT_UP
 - @ref GLFW_HAT_LEFT_DOWN
 - @ref GLFW_MOD_CAPS_LOCK
 - @ref GLFW_MOD_NUM_LOCK
 - @ref GLFW_LOCK_KEY_MODS
 - @ref GLFW_RAW_MOUSE_MOTION
 - @ref GLFW_GAMEPAD_BUTTON_A
 - @ref GLFW_GAMEPAD_BUTTON_B
 - @ref GLFW_GAMEPAD_BUTTON_X
 - @ref GLFW_GAMEPAD_BUTTON_Y
 - @ref GLFW_GAMEPAD_BUTTON_LEFT_BUMPER
 - @ref GLFW_GAMEPAD_BUTTON_RIGHT_BUMPER
 - @ref GLFW_GAMEPAD_BUTTON_BACK
 - @ref GLFW_GAMEPAD_BUTTON_START
 - @ref GLFW_GAMEPAD_BUTTON_GUIDE
 - @ref GLFW_GAMEPAD_BUTTON_LEFT_THUMB
 - @ref GLFW_GAMEPAD_BUTTON_RIGHT_THUMB
 - @ref GLFW_GAMEPAD_BUTTON_DPAD_UP
 - @ref GLFW_GAMEPAD_BUTTON_DPAD_RIGHT
 - @ref GLFW_GAMEPAD_BUTTON_DPAD_DOWN
 - @ref GLFW_GAMEPAD_BUTTON_DPAD_LEFT
 - @ref GLFW_GAMEPAD_BUTTON_LAST
 - @ref GLFW_GAMEPAD_BUTTON_CROSS
 - @ref GLFW_GAMEPAD_BUTTON_CIRCLE
 - @ref GLFW_GAMEPAD_BUTTON_SQUARE
 - @ref GLFW_GAMEPAD_BUTTON_TRIANGLE
 - @ref GLFW_GAMEPAD_AXIS_LEFT_X
 - @ref GLFW_GAMEPAD_AXIS_LEFT_Y
 - @ref GLFW_GAMEPAD_AXIS_RIGHT_X
 - @ref GLFW_GAMEPAD_AXIS_RIGHT_Y
 - @ref GLFW_GAMEPAD_AXIS_LEFT_TRIGGER
 - @ref GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER
 - @ref GLFW_GAMEPAD_AXIS_LAST


@section news_32 Release notes for 3.2

These are the release notes for version 3.2.  For a more detailed view including
all fixed bugs see the [version history](https://www.glfw.org/changelog.html).


@subsection features_32 New features in version 3.2

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


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


@subsubsection news_32_maximize Window maxmimization support

GLFW now supports window maximization with @ref glfwMaximizeWindow and the
@ref GLFW_MAXIMIZED window hint and attribute.


@subsubsection news_32_focus Window input focus control

GLFW now supports giving windows input focus with @ref glfwFocusWindow.


@subsubsection news_32_sizelimits Window size limit support

GLFW now supports setting both absolute and relative window size limits with
@ref glfwSetWindowSizeLimits and @ref glfwSetWindowAspectRatio.


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


@subsubsection news_32_waittimeout Wait for events with timeout

GLFW now supports waiting for events for a set amount of time with @ref
glfwWaitEventsTimeout.


@subsubsection news_32_icon Window icon support

GLFW now supports setting the icon of windows with @ref glfwSetWindowIcon.


@subsubsection news_32_timer Raw timer access

GLFW now supports raw timer values with @ref glfwGetTimerValue and @ref
glfwGetTimerFrequency.


@subsubsection news_32_joystick Joystick connection callback

GLFW now supports notifying when a joystick has been connected or disconnected
with @ref glfwSetJoystickCallback.


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


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


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


@subsubsection 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 notes for version 3.1.  For a more detailed view including
all fixed bugs see the [version history](https://www.glfw.org/changelog.html).


@subsection features_31 New features in version 3.1

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


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


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


@subsubsection 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)


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


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


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


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


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


@subsubsection news_31_single Single buffered framebuffers

GLFW now supports the creation of single buffered windows, with the @ref
GLFW_DOUBLEBUFFER hint.


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


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


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


@subsubsection 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 notes for version 3.0.  For a more detailed view including
all fixed bugs see the [version history](https://www.glfw.org/changelog.html).


@subsection features_30 New features in version 3.0

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


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


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


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


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


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


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


@subsubsection news_30_egl (Experimental) EGL support

GLFW now has an experimental EGL context creation back end that can be selected
through CMake options.


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


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


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


@subsubsection news_30_iconifyfun Window iconification callback

Each window now has a callback for iconification and restoration events,
which is set with @ref glfwSetWindowIconifyCallback.


@subsubsection news_30_wndposfun Window position callback

Each window now has a callback for position events, which is set with @ref
glfwSetWindowPosCallback.


@subsubsection news_30_wndpos Window position query

The position of a window can now be retrieved using @ref glfwGetWindowPos.


@subsubsection news_30_focusfun Window focus callback

Each windows now has a callback for focus events, which is set with @ref
glfwSetWindowFocusCallback.


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


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


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


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


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


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


@subsubsection news_30_jsname Joystick names

The name of a joystick can now be retrieved using @ref glfwGetJoystickName.


@subsubsection news_30_doxygen Doxygen documentation

You are reading it.

*/
