New features

Table of Contents

New features in version 3.1

Custom system cursor support

GLFW now supports creating and setting custom system cursors. They can be created with glfwCreateCursor, set with glfwSetCursor and destroyed with glfwDestroyCursor. Custom cursors are only visible in normal cursor mode.

File drop event support

GLFW now provides a callback for receiving the paths of files dropped onto GLFW windows. The callback is set with glfwSetDropCallback.

Main thread waking support

GLFW now provides the glfwPostEmptyEvent function for posting an empty event from another thread to the main thread event queue, causing glfwWaitEvents to return.

Window frame size query

GLFW now supports querying the size, on each side, of the frame around the client area of a window, with glfwGetWindowFrameSize.

Multi-monitor installation support

GLFW now supports disabling auto-iconification of full screen windows with the GLFW_AUTO_ICONIFY window hint. This is intended for people building multi-monitor installations, where you need windows to stay in full screen despite losing focus.

Floating windows

GLFW now supports floating windows, also called topmost or always on top, for easier debugging with the GLFW_FLOATING window hint.

Initially unfocused windows

GLFW now supports preventing a windowed mode window from gaining input focus on creation, with the GLFW_FOCUSED window hint.

Character with modifiers callback

GLFW now provides a callback for character events with modifier key bits. The callback is set with 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.

Context release behavior support

GLFW now supports controlling whether the pipeline is flushed when a context is made non-current, with the GLFW_CONTEXT_RELEASE_BEHAVIOR window hint, provided the machine supports the GL_KHR_context_flush_control extension.

Single buffering support

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

Stable EGL support

The support for EGL is now stable, successfully running on PandaBoards, Mesa, ANGLE, Wayland, AMD EGL and others.

New features in version 3.0

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.

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 glfwMakeContextCurrent function has been added to select which context is current on a given thread.

Multi-monitor support

GLFW now explicitly supports multiple monitors. They can be enumerated with glfwGetMonitors, queried with glfwGetVideoModes, glfwGetMonitorPos, glfwGetMonitorName and glfwGetMonitorPhysicalSize, and specified at window creation to make the newly created window full screen on that specific monitor.

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

Clipboard text I/O

GLFW now supports reading and writing plain text to and from the system clipboard, with the glfwGetClipboardString and glfwSetClipboardString functions.

Gamma ramp support

GLFW now supports setting and reading back the gamma ramp of monitors, with the glfwGetGammaRamp and glfwSetGammaRamp functions. There is also glfwSetGamma, which generates a ramp from a gamma value and then sets it.

OpenGL ES 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.

(Experimental) EGL support

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

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, glfwGetFramebufferSize and 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.

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.

Per-window user pointer

Each window now has a user-defined pointer, retrieved with glfwGetWindowUserPointer and set with glfwSetWindowUserPointer, to make it easier to integrate GLFW into C++ code.

Window iconification callback

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

Window position callback

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

Window position query

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

Window focus callback

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

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

Initial window title

The title of a window is now specified at creation time, as one of the arguments to glfwCreateWindow.

Hidden windows

Windows can now be hidden with glfwHideWindow, shown using 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.

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.

Modifier key bit masks

Modifier key bit mask parameters have been added to the mouse button and key callbacks.

Platform-specific scancodes

A scancode parameter has been added to the key callback. Keys that don't have a key token 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.

Joystick names

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

Doxygen documentation

You are reading it.