/*! @page news New features @tableofcontents @section news_30 New features in version 3.0 @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](http://cmake.org/cmake/help/documentation.html). @subsection new_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 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 and EGL support GLFW now supports the creation of OpenGL ES contexts, by setting the `GLFW_CLIENT_API` window 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. GLFW now has an (experimental) EGL context creation back end, which can be selected through CMake options. @subsection news_30_hidpi High-DPI support GLFW now supports high-DPI monitors on both Windows and OS X, 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 work with 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 object 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 object has a callback for iconification and restoration events, which is set with @ref glfwSetWindowIconifyCallback. @subsection news_30_wndposfun Window position callback Each window object 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 Windows now have 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 client 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 `GLFW_VISIBLE` window hint. 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, i.e. things like a frame, a title bar, with the `GLFW_DECORATED` window hint. 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. */