GLFW Changelog

What's new in GLFW 3.4

Feb 23, 2024
  • Added GLFW_PLATFORM init hint for runtime platform selection (#1958)
  • Added GLFW_ANY_PLATFORM, GLFW_PLATFORM_WIN32, GLFW_PLATFORM_COCOA, GLFW_PLATFORM_WAYLAND, GLFW_PLATFORM_X11 and GLFW_PLATFORM_NULL symbols to specify the desired platform (#1958)
  • Added glfwGetPlatform function to query what platform was selected (#1655,#1958)
  • Added glfwPlatformSupported function to query if a platform is supported (#1655,#1958)
  • Added glfwInitAllocator for setting a custom memory allocator (#544,#1628,#1947)
  • Added GLFWallocator struct and GLFWallocatefun, GLFWreallocatefun and GLFWdeallocatefun types (#544,#1628,#1947)
  • Added glfwGetWindowTitle function for querying window title (#1448,#1909,#2482)
  • Added glfwInitVulkanLoader for using a non-default Vulkan loader (#1374,#1890)
  • Added GLFW_RESIZE_NWSE_CURSOR, GLFW_RESIZE_NESW_CURSOR, GLFW_RESIZE_ALL_CURSOR and GLFW_NOT_ALLOWED_CURSOR cursor shapes (#427)
  • Added GLFW_RESIZE_EW_CURSOR alias for GLFW_HRESIZE_CURSOR (#427)
  • Added GLFW_RESIZE_NS_CURSOR alias for GLFW_VRESIZE_CURSOR (#427)
  • Added GLFW_POINTING_HAND_CURSOR alias for GLFW_HAND_CURSOR (#427)
  • Added GLFW_MOUSE_PASSTHROUGH window hint for letting mouse input pass through the window (#1236,#1568)
  • Added GLFW_CURSOR_CAPTURED cursor mode to confine the cursor to the window content area (#58)
  • Added GLFW_POSITION_X and GLFW_POSITION_Y window hints for initial position (#1603,#1747)
  • Added GLFW_SCALE_FRAMEBUFFER window hint for Wayland and macOS scaling (#2457)
  • Added GLFW_ANY_POSITION hint value for letting the window manager choose (#1603,#1747)
  • Added GLFW_PLATFORM_UNAVAILABLE error for platform detection failures (#1958)
  • Added GLFW_FEATURE_UNAVAILABLE error for platform limitations (#1692)
  • Added GLFW_FEATURE_UNIMPLEMENTED error for incomplete backends (#1692)
  • Added GLFW_WAYLAND_APP_ID window hint string for Wayland app_id selection (#2121,#2122)
  • Added GLFW_ANGLE_PLATFORM_TYPE init hint and GLFW_ANGLE_PLATFORM_TYPE_* values to select ANGLE backend (#1380)
  • Added GLFW_X11_XCB_VULKAN_SURFACE init hint for selecting X11 Vulkan surface extension (#1793)
  • Added GLFW_WIN32_KEYBOARD_MENU window hint for enabling access to the window menu
  • Added GLFW_WIN32_SHOWDEFAULT window hint for applying the parent process show command (#2359)
  • Added GLFW_NATIVE_INCLUDE_NONE for disabling inclusion of native headers (#1348)
  • Added GLFW_BUILD_WIN32 CMake option for enabling Win32 support (#1958)
  • Added GLFW_BUILD_COCOA CMake option for enabling Cocoa support (#1958)
  • Added GLFW_BUILD_X11 CMake option for enabling X11 support (#1958)
  • Added GLFW_LIBRARY_TYPE CMake variable for overriding the library type (#279,#1307,#1497,#1574,#1928)
  • Added support for XDG_SESSION_TYPE environment variable
  • Added GLFW_PKG_CONFIG_REQUIRES_PRIVATE and GLFW_PKG_CONFIG_LIBS_PRIVATE CMake variables exposing pkg-config dependencies (#1307)
  • Made joystick subsystem initialize at first use (#1284,#1646)
  • Made GLFW_DOUBLEBUFFER a read-only window attribute
  • Made Wayland the preferred platform over X11 if both are available (#2035)
  • Updated the minimum required CMake version to 3.4
  • Updated gamepad mappings from upstream
  • Renamed GLFW_USE_WAYLAND CMake option to GLFW_BUILD_WAYLAND (#1958)
  • Disabled tests and examples by default when built as a CMake subdirectory
  • Removed GLFW_USE_OSMESA CMake option enabling the Null platform (#1958)
  • Removed CMake generated configuration header
  • Bugfix: glfwGetVideoMode returned an invalid mode on error (#1292)
  • [Win32] Added a version info resource to the GLFW DLL
  • [Win32] Made hidden helper window use its own window class
  • [Win32] Bugfix: The foreground lock timeout was overridden, ignoring the user
  • [Cocoa] Added glfwGetCocoaView native access function (#2235)
  • [Cocoa] Moved main menu creation to GLFW initialization time (#1649)
  • [Cocoa] Bugfix: Touching event queue from secondary thread before main thread would abort (#1649)
  • [Wayland] Added support for glfwRequestWindowAttention (#2287)
  • [Wayland] Added support for glfwFocusWindow
  • [Wayland] Added support for GLFW_RESIZABLE (#2203)
  • [Wayland] Added support for fractional scaling of window contents
  • [Wayland] Added dynamic loading of all Wayland libraries
  • [Wayland] Bugfix: CLOCK_MONOTONIC was not correctly enabled
  • [Wayland] Bugfix: GLFW_HOVERED was true when the cursor was over any fallback window decoration
  • [Wayland] Bugfix: Fallback decorations allowed resizing to invalid size (#2204)
  • [X11] Bugfix: Termination would segfault if the IM had been destroyed
  • [X11] Bugfix: Any IM started after initialization would not be detected
  • [Linux] Bugfix: Joystick evdev fds remained open in forks (#2446)
  • [POSIX] Removed use of deprecated function gettimeofday
  • [POSIX] Bugfix: CLOCK_MONOTONIC was not correctly tested for or enabled
  • [WGL] Disabled the DWM swap interval hack for Windows 8 and later (#1072)
  • [NSGL] Removed enforcement of forward-compatible flag for core contexts
  • [NSGL] Bugfix: A core profile OpenGL context was returned if 3.2+ compatibility profile was requested
  • [EGL] Added platform selection via the EGL_EXT_platform_base extension (#442)
  • [EGL] Added ANGLE backend selection via EGL_ANGLE_platform_angle extension (#1380)

New in GLFW 3.3.10 (Feb 22, 2024)

  • Bugfix: glfwGetKeyName emitted GLFW_INVALID_VALUE for scancodes with no key token (#1785,#2214)
  • [Wayland] Bugfix: Terminating the library before showing a window could segfault
  • [Wayland] Bugfix: Compilation failed on FreeBSD (#2445)
  • [Linux] Bugfix: `regfree´ was called on invalid data (#2464)
  • [WGL] Bugfix: Context creation failed in Parallels VM (#2191,#2406,#2467)

New in GLFW 3.3.9 (Dec 14, 2023)

  • Bugfix: glfwGetKeyScancode returned 0 on error when initialized instead of -1
  • Bugfix: Failure to make a newly created context current could cause segfault (#2327)
  • [Win32] Fix pkg-config for dynamic library on Windows (#2386, #2420)
  • [Win32] Bugfix: glfwWaitEventsTimeout did not return for some sent messages (#2408)
  • [Win32] Bugfix: XInput could reportedly provide invalid DPad bit masks (#2291)
  • [Cocoa] Bugfix: Compilation failed on OS X 10.8 due to unconditional use of 10.9+ symbols (#2161)
  • [Cocoa] Bugfix: Full screen windows were resizable by the user (#2377,#2405)
  • [Cocoa] Bugfix: Full screen windows were miniaturized when clicked on macOS 10.15 (#2377,#2405)
  • [Cocoa] Bugfix: Querying joystick elements could reportedly segfault on macOS 13 Ventura (#2320)
  • [Cocoa] Bugfix: Print Screen key was not correctly reported (#1786,#2169)
  • [Wayland] Added improved fallback window decorations via libdecor (#1639,#1693)
  • [Wayland] Bugfix: Connecting a mouse after glfwInit would segfault (#1450)
  • [Wayland] Disabled alpha channel for opaque windows on systems lacking EGL_EXT_present_opaque (#1895)
  • [Wayland] Bugfix: Buffer would overrun when storing received drag offer (#2225)
  • [Wayland] Bugfix: Joysticks connected after glfwInit were not detected (#2198)
  • [Wayland] Bugfix: Fallback decorations emitted GLFW_CURSOR_UNAVAILABLE errors
  • [Wayland] Bugfix: Some events could fail to end wait for new events (#2397)
  • [Linux] Bugfix: Joysticks without buttons were ignored (#2042,#2043)
  • [Linux] Bugfix: A small amount of memory could leak if initialization failed (#2229)
  • [EGL] Added loading of glvnd libOpenGL.so.0 where available for OpenGL
  • [EGL] Bugfix: EGL_EXT_present_opaque caused issues on X11 with Nvidia blob (#2365)
  • [EGL] Bugfix: Setting GLFW_CONTEXT_DEBUG caused creation to fail (#2348)
  • [GLX] Added loading of glvnd libGLX.so.0 where available

New in GLFW 3.3.8 (Jul 22, 2022)

  • Added GLFW_NATIVE_INCLUDE_NONE for disabling inclusion of native headers (#1348)
  • Bugfix: glfwMakeContextCurrent would access TLS slot before initialization
  • Bugfix: glfwSetGammaRamp could emit GLFW_INVALID_VALUE before initialization
  • Bugfix: glfwGetJoystickUserPointer returned NULL during disconnection (#2092)
  • [Win32] Bugfix: Alt+PrtSc would emit GLFW_KEY_UNKNOWN and a different scancode than PrtSc (#1993)
  • [Win32] Bugfix: GLFW_KEY_PAUSE scancode from glfwGetKeyScancode did not match event scancode (#1993)
  • [Win32] Bugfix: Instance-local operations used executable instance (#469,#1296,#1395)
  • [Win32] Bugfix: The OSMesa library was not unloaded on termination
  • [Win32] Bugfix: Right shift emitted GLFW_KEY_UNKNOWN when using a CJK IME (#2050)
  • [Cocoa] Disabled macOS fullscreen when GLFW_RESIZABLE is false
  • [Cocoa] Bugfix: A connected Apple AirPlay would emit a useless error (#1791)
  • [Cocoa] Bugfix: The EGL and OSMesa libraries were not unloaded on termination
  • [Cocoa] Bugfix: GLFW_MAXIMIZED was always true when GLFW_RESIZABLE was false
  • [Cocoa] Bugfix: Changing GLFW_DECORATED in macOS fullscreen would abort application (#1886)
  • [Cocoa] Bugfix: Setting a monitor from macOS fullscreen would abort application (#2110)
  • [Cocoa] Bugfix: The Vulkan loader was not loaded from the Frameworks bundle subdirectory (#2113,#2120)
  • [X11] Bugfix: The OSMesa libray was not unloaded on termination
  • [X11] Bugfix: A malformed response during selection transfer could cause a segfault
  • [X11] Bugfix: Some calls would reset Xlib to the default error handler (#2108)
  • [Wayland] Added support for file path drop events (#2040)
  • [Wayland] Added support for more human-readable monitor names where available
  • [Wayland] Removed support for the deprecated wl_shell protocol
  • [Wayland] Bugfix: glfwSetClipboardString would fail if set to result of glfwGetClipboardString
  • [Wayland] Bugfix: Data source creation error would cause double free at termination
  • [Wayland] Bugfix: Partial writes of clipboard string would cause beginning to repeat
  • [Wayland] Bugfix: Some errors would cause clipboard string transfer to hang
  • [Wayland] Bugfix: Drag and drop data was misinterpreted as clipboard string
  • [Wayland] Bugfix: MIME type matching was not performed for clipboard string
  • [Wayland] Bugfix: The OSMesa library was not unloaded on termination
  • [Wayland] Bugfix: glfwCreateWindow could emit GLFW_PLATFORM_ERROR
  • [Wayland] Bugfix: Lock key modifier bits were only set when lock keys were pressed
  • [Wayland] Bugfix: A window leaving full screen mode would be iconified (#1995)
  • [Wayland] Bugfix: A window leaving full screen mode ignored its desired size
  • [Wayland] Bugfix: glfwSetWindowMonitor did not update windowed mode size
  • [Wayland] Bugfix: glfwRestoreWindow would make a full screen window windowed
  • [Wayland] Bugfix: A window maximized or restored by the user would enter an inconsistent state
  • [Wayland] Bugfix: Window maximization events were not emitted
  • [Wayland] Bugfix: glfwRestoreWindow assumed it was always in windowed mode
  • [Wayland] Bugfix: glfwSetWindowSize would resize a full screen window
  • [Wayland] Bugfix: A window content scale event would be emitted every time the window resized
  • [Wayland] Bugfix: If glfwInit failed it would close stdin
  • [Wayland] Bugfix: Manual resizing with fallback decorations behaved erratically (#1991,#2115,#2127)
  • [Wayland] Bugfix: Size limits included frame size for fallback decorations
  • [Wayland] Bugfix: Updating GLFW_DECORATED had no effect on server-side decorations
  • [Wayland] Bugfix: A monitor would be reported as connected again if its scale changed
  • [Wayland] Bugfix: glfwTerminate would segfault if any monitor had changed scale
  • [Wayland] Bugfix: Window content scale events were not emitted when monitor scale changed
  • [Wayland] Bugfix: glfwSetWindowAspectRatio reported an error instead of applying the specified ratio
  • [Wayland] Bugfix: GLFW_MAXIMIZED window hint had no effect
  • [Wayland] Bugfix: glfwRestoreWindow had no effect before first show
  • [Wayland] Bugfix: Hiding and then showing a window caused program abort on wlroots compositors (#1268)
  • [Wayland] Bugfix: GLFW_DECORATED was ignored when showing a window with XDG decorations

New in GLFW 3.3.7 (Apr 5, 2022)

  • [Win32] Bugfix: A window created maximized and undecorated would cover the whole monitor (#1806)
  • [Win32] Bugfix: The default restored window position was lost when creating a maximized window
  • [Win32] Bugfix: glfwMaximizeWindow would make a hidden window visible
  • [Cocoa] Bugfix: kUTTypeURL was deprecated in macOS 12.0 (#2003)
  • [X11] Bugfix: Dynamic loading on OpenBSD failed due to soname differences
  • [X11] Bugfix: Waiting for events would fail if file descriptor was too large (#2024)
  • [X11] Bugfix: Joystick events could lead to busy-waiting (#1872)
  • [X11] Bugfix: glfwWaitEvents* did not continue for joystick events
  • [X11] Bugfix: glfwPostEmptyEvent could be ignored due to race condition (#379,#1281,#1285,#2033)
  • [X11] Bugfix: Dynamic loading on NetBSD failed due to soname differences
  • [X11] Bugfix: Left shift of int constant relied on undefined behavior (#1951)
  • [Wayland] Added support for key names via xkbcommon
  • [Wayland] Bugfix: Key repeat could lead to a race condition (#1710)
  • [Wayland] Bugfix: Activating a window would emit two input focus events
  • [Wayland] Bugfix: Disable key repeat mechanism when window loses input focus
  • [Wayland] Bugfix: Window hiding and showing did not work (#1492,#1731)
  • [Wayland] Bugfix: A key being repeated was not released when window lost focus
  • [Wayland] Bugfix: Showing a hidden window did not emit a window refresh event
  • [Wayland] Bugfix: Full screen window creation did not ignore GLFW_VISIBLE
  • [Wayland] Bugfix: Some keys were reported as wrong key or GLFW_KEY_UNKNOWN
  • [Wayland] Bugfix: Text input did not repeat along with key repeat
  • [Wayland] Bugfix: glfwPostEmptyEvent sometimes had no effect (#1520,#1521)
  • [GLX] Bugfix: Context creation failed if GLX 1.4 was not exported by GLX library

New in GLFW 3.3.6 (Dec 10, 2021)

  • Bugfix: Joysticks connected before init did not get gamepad mappings (#1996)
  • [Win32] Bugfix: Content scale queries could fail silently (#1615)
  • [Win32] Bugfix: Content scales could have garbage values if monitor was recently disconnected (#1615)
  • [Cocoa] Bugfix: A dependency on an external constant caused crashes on macOS 11 and earlier (#1985,#1994)
  • [X11] Bugfix: Icon pixel format conversion worked only by accident, relying on undefined behavior (#1986)

New in GLFW 3.3.5 (Oct 28, 2021)

  • Updated gamepad mappings from upstream
  • Bugfix: Buffers were swapped at creation on single-buffered windows (#1873)
  • Bugfix: Gamepad mapping updates could spam GLFW_INVALID_VALUE due to incompatible controllers sharing hardware ID (#1763)
  • Bugfix: Native access functions for context handles did not check that the API matched
  • [Win32] Bugfix: USE_MSVC_RUNTIME_LIBRARY_DLL had no effect on CMake 3.15 or later (#1783,#1796)
  • [Win32] Bugfix: Compilation with LLVM for Windows failed (#1807,#1824,#1874)
  • [Cocoa] Bugfix: The MoltenVK layer contents scale was updated only after related events were emitted
  • [Cocoa] Bugfix: Moving the cursor programmatically would freeze it for a fraction of a second (#1962)
  • [Cocoa] Bugfix: kIOMasterPortDefault was deprecated in macOS 12.0 (#1980)
  • [X11] Bugfix: Changing GLFW_FLOATING could leak memory
  • [Wayland] Bugfix: Some keys were not repeating in Wayland (#1908)
  • [Wayland] Bugfix: Non-arrow cursors are offset from the hotspot (#1706,#1899)
  • [Wayland] Bugfix: The O_CLOEXEC flag was not defined on FreeBSD
  • [NSGL] Bugfix: Defining GL_SILENCE_DEPRECATION externally caused a duplicate definition warning (#1840)
  • [EGL] Bugfix: The GLFW_DOUBLEBUFFER context attribute was ignored (#1843)

New in GLFW 3.3.4 (Apr 9, 2021)

  • [X11] Bugfix: Some window attributes were not applied on leaving fullscreen (#1863)

New in GLFW 3.3.2 (Nov 6, 2020)

  • [Win32] Bugfix: Super key was not released after Win+V hotkey (#1622)
  • [Win32] Bugfix: glfwGetKeyName could access out of bounds and return an invalid pointer
  • [Win32] Bugfix: Some synthetic key events were reported as GLFW_KEY_UNKNOWN (#1623)
  • [Cocoa] Added support for VK_EXT_metal_surface (#1619)
  • [Cocoa] Added locating the Vulkan loader at runtime in an application bundle
  • [X11] Bugfix: glfwFocusWindow could terminate on older WMs or without a WM
  • [X11] Bugfix: Creating an undecorated window could fail with BadMatch (#1620)
  • [X11] Bugfix: Querying a disconnected monitor could segfault (#1602)

New in GLFW 3.1.1 (Mar 23, 2015)

  • Made library compilation fail if any header option macros are defined
  • Removed support for LCC and Borland C++
  • Bugfix: glfwSetTime silently accepted invalid values
  • [Cocoa] Bugfix: NSHighResolutionCapable was not enabled for test and example programs
  • [Cocoa] Bugfix: glfwSetWindowSize did not change the video mode for full screen windows
  • [X11] Added support for Cygwin-X
  • [X11] Made XInput2 optional at compile-time
  • [X11] Made Xxf86vm optional at compile-time
  • [X11] Bugfix: Moved _NET_REQUEST_FRAME_EXTENTS request to glfwGetWindowFrameSize and added protocol-breaking timeout as a workaround for broken support in Unity, Fluxbox and Xfwm
  • [X11] Bugfix: Mouse button GLFW_MOUSE_BUTTON_4 was never used
  • [X11] Bugfix: glfwTerminate could close an unrelated file descriptor
  • [X11] Bugfix: Some WMs (KWM, Fluxbox) did not respect cursor redefinition
  • [WGL] Bugfix: The context flags debug bit was not set for OpenGL ES
  • [GLX] Bugfix: The context flags debug bit was not set for OpenGL ES
  • [EGL] Bugfix: The context flags debug bit was not set for OpenGL ES

New in GLFW 3.1 (Jan 19, 2015)

  • Added GLFWcursor custom system cursor handle
  • Added glfwCreateCursor, glfwCreateStandardCursor, glfwDestroyCursor and glfwSetCursor for managing system cursor images
  • Added GLFWimage struct for passing 32-bit RGBA images
  • Added monitor and adapter identifier access to native API
  • Added glfwSetDropCallback and GLFWdropfun for receiving dropped files
  • Added glfwPostEmptyEvent for allowing secondary threads to cause glfwWaitEvents to return
  • Added empty test program for verifying posting of empty events
  • Added glfwSetCharModsCallback for receiving character events with modifiers
  • Added glfwGetWindowFrameSize for retrieving the size of the frame around the client area of a window
  • Added GLFW_AUTO_ICONIFY for controlling whether full screen windows automatically iconify (and restore the previous video mode) on focus loss
  • Added GLFW_DONT_CARE for indicating that any value is acceptable
  • Added GLFW_DOUBLEBUFFER for controlling whether to use double buffering
  • Added GLFW_CONTEXT_RELEASE_BEHAVIOR and values GLFW_ANY_RELEASE_BEHAVIOR, GLFW_RELEASE_BEHAVIOR_FLUSH and GLFW_RELEASE_BEHAVIOR_NONE for GL_KHR_context_flush_control support
  • Added GLFW_INCLUDE_ES31 for including the OpenGL ES 3.1 header
  • Added GLFW_FLOATING for creating always-on-top windowed mode windows
  • Added GLFW_FOCUSED window hint for controlling initial input focus
  • Added partial and experimental support for Wayland
  • Added partial and experimental support for Mir
  • Changed the window state attributes (focused, iconified and visible) to query the system directly
  • Changed the default of GLFW_REFRESH_RATE to GLFW_DONT_CARE to maintain the default behavior
  • Changed static library to build as position independent code for easier use from the Rust language
  • Changed glfwGetCursorPos to query the system directly for all cursor modes except captured mode
  • Bugfix: The debug context attribute was set from GL_ARB_debug_output even when a debug context had not been requested
  • Bugfix: The particles example was not linked against the threading library
  • Bugfix: The cursor was not positioned over newly created full screen windows
  • Bugfix: The queried cursor position was not always up-to-date
  • Bugfix: glfwExtensionSupported always failed for OpenGL ES 3.0 and later if the library was compiled for OpenGL ES
  • [Cocoa] Added _GLFW_USE_RETINA to control whether windows will use the full resolution on Retina displays
  • [Cocoa] Made content view subclass of NSOpenGLView
  • [Cocoa] Bugfix: Using a 1x1 cursor for hidden mode caused some screen recorders to fail
  • [Cocoa] Bugfix: Some Core Foundation objects were leaked during joystick enumeration and termination
  • [Cocoa] Bugfix: One copy of each display name string was leaked
  • [Cocoa] Bugfix: Monitor enumeration caused a segfault if no NSScreen was found for a given CGDisplay
  • [Cocoa] Bugfix: Modifier key events were lost if the corresponding modifier bit field was unchanged
  • [Cocoa] Bugfix: Joystick enumeration took hundreds of ms on some systems
  • [Cocoa] Bugfix: The cursor was hidden when the user resized a GLFW window
  • [Cocoa] Bugfix: The 10.10 Yosemite OpenGL 4.1 profile token was not used
  • [Cocoa] Bugfix: The generic software OpenGL renderer could be selected under certain conditions
  • [Cocoa] Bugfix: The virtual cursor jumped unpredictably when entering disabled cursor mode
  • [Win32] Enabled generation of pkg-config file for MinGW
  • [Win32] Removed option to require explicitly linking against winmm.dll
  • [Win32] Bugfix: Failure to load winmm or its functions was not reported to the error callback
  • [Win32] Bugfix: Some keys were reported based on the current layout instead of their physical location
  • [Win32] Bugfix: Maximized hidden windows were restored by glfwShowWindow
  • [Win32] Bugfix: Context re-creation was not triggered by sRGB hint
  • [Win32] Bugfix: Full screen windows were incorrectly sized and placed on some systems
  • [Win32] Bugfix: Gamma ramp functions acted on entire desktop instead of the specified monitor
  • [Win32] Bugfix: The wrong incorrect physical size was returned for non-primary monitors
  • [Win32] Bugfix: X-axis scroll offsets were inverted
  • [Win32] Bugfix: The Optimus HPG forcing variable was not correctly exported
  • [Win32] Bugfix: The iconified window state attribute was not always updated
  • [Win32] Bugfix: Previously focused windows with disabled cursor mode and that had been iconified by Win+D were not visible when restored
  • [Win32] Bugfix: The virtual cursor jumped unpredictably when entering disabled cursor mode
  • [X11] Added run-time support for systems lacking the XKB extension
  • [X11] Made GLX 1.3 the minimum supported version
  • [X11] Replaced XRRGetScreenResources with XRRGetScreenResourcesCurrent for monitor property retrieval
  • [X11] Bugfix: The case of finding no usable CRTCs was not detected
  • [X11] Bugfix: Detection of broken Nvidia RandR gamma support did not verify that at least one CRTC was present
  • [X11] Bugfix: A stale _NET_SUPPORTING_WM_CHECK root window property would cause an uncaught BadWindow error
  • [X11] Bugfix: No check was made for the presence of GLX 1.3 when GLX_SGIX_fbconfig was unavailable
  • [X11] Bugfix: The message type of ICCCM protocol events was not checked
  • [X11] Bugfix: glfwDestroyWindow did not flush the output buffer
  • [X11] Bugfix: Window frame interactions were reported as focus events
  • [X11] Bugfix: Workaround for legacy Compiz caused flickering during resize
  • [X11] Bugfix: The name pointer of joysticks were not cleared on disconnection
  • [X11] Bugfix: Video mode resolutions and monitor physical sizes were not corrected for rotated CRTC
  • [X11] Bugfix: Unicode character input ignored dead keys
  • [X11] Bugfix: X-axis scroll offsets were inverted
  • [X11] Bugfix: Full screen override redirect windows were not always positioned over the specified monitor
  • [X11] Bugfix: Character input did not work for the default "C" locale
  • [X11] Bugfix: Joysticks connected after glfwInit were not detected (temporary inotify solution until proper libudev solution)

New in GLFW 3.0.4 (Jan 3, 2014)

  • Added the GLFW_BUILD_DOCS CMake option for controlling whether the documentation is built
  • Added the _GLFW_USE_CONFIG_H configuration macro for controlling whether to include the configuration header
  • Moved version number macro to internal.h for easier manual compilation
  • Renamed configuration header to glfw_config.h to avoid conflicts
  • [Bugfix: The glfw3.pc file did not respect the LIB_SUFFIX CMake option
  • [Bugfix: The joysticks test would segfault if a controller had no axes
  • [Win32] Allowed swap interval to be explicitly set to zero on DWM systems
  • [Win32] Bugfix: Removed joystick axis value negation left over from GLFW 2
  • [Win32] Bugfix: Restoring windows using the Win+D hot key did not trigger the focus callback
  • [Win32] Bugfix: The disabled cursor mode clip rectangle was updated for unfocused windows
  • [Win32] Bugfix: Cursor was not properly re-centered over odd-sized windows
  • [Win32] Bugfix: Negative window positions were reported incorrectly
  • [Win32] Bugfix: The iconify callback was not triggered when switching away from a full screen window using Alt+Tab
  • [Win32] Bugfix: Resizing a window with glfwSetWindowSize gave it focus
  • [Cocoa] Added dependency on CoreVideo framework for refresh rate retrieval
  • [Cocoa] Enabled Lion full screen for resizable windowed mode windows
  • [Cocoa] Moved to Cocoa API for application transformation and activation
  • [Cocoa] Bugfix: The GLFW_KEY_GRAVE_ACCENT key was reported as GLFW_KEY_WORLD_1 and vice versa
  • [Cocoa] Bugfix: The GLFW_KEY_F13 key was reported as GLFW_KEY_PRINT_SCREEN
  • [Cocoa] Bugfix: Implicit conversion from NSUInteger to int caused warnings with Xcode 5
  • [Cocoa] Bugfix: Use of undeclared selectors with @selector caused warnings with Xcode 5
  • [Cocoa] Bugfix: The cursor remained visible if moved onto client area after having been set to hidden outside it
  • [Cocoa] Bugfix: The refresh rate was zero for all modes of certain monitors
  • [Cocoa] Bugfix: The install_name field of the dynamic library was not set
  • [Cocoa] Bugfix: Full screen windows were never reported as having focus
  • [Cocoa] Bugfix: A superfluous I/O flag test prevented video modes from being listed for Thunderbolt monitor
  • [Cocoa] Bugfix: Retrieving the name of some external displays caused segfault
  • [Cocoa] Bugfix: The 10.9 SDK defines GLintptrARB and GLsizeiptrARB differently from the Khronos glext.h
  • [Cocoa] Bugfix: Creating hidden windows would steal application focus
  • [Cocoa] Bugfix: Controllers were reported as having zero buttons and axes
  • [Cocoa] Bugfix: Removed joystick axis value negation left over from GLFW 2
  • [X11] Added setting of the WM_CLASS property to the initial window title
  • [X11] Added support for _NET_WM_BYPASS_COMPOSITOR
  • [X11] Bugfix: Removed joystick axis value negation left over from GLFW 2
  • [X11] Bugfix: The position of hidden windows was ignored by Metacity and Compiz
  • [X11] Bugfix: The pthread.h header was not included by the GLX platform header.

New in GLFW 3.0.2 (Sep 23, 2013)

  • Allowed character callback to be triggered regardless of modifier keys
  • Bugfix: The -Wall flag was not used with Clang and other GCC compatibles
  • Bugfix: The default for GLFW_ALPHA_BITS was set to zero
  • Bugfix: glfwInit would segfault if monitor enumeration failed and no error callback was set
  • [Win32] Added _GLFW_USE_DWM_SWAP_INTERVAL for forcing the swap interval to be set even when DWM compositing is enabled
  • Win32] Added support for forcing the use of the high-performance GPU on nVidia Optimus systems
  • [Win32] Bugfix: The clipboard string was not freed on terminate
  • [Win32] Bugfix: Entry points for OpenGL 1.0 and 1.1 functions were not returned by glfwGetProcAddress
  • [Win32] Bugfix: The user32 and dwmapi module handles were not freed on library termination
  • [Cocoa] Added support for precise scrolling deltas on OS X 10.7 and later
  • [Cocoa] Enabled explicit creation of OpenGL 3.x and 4.x contexts as supported by OS X 10.9
  • [Cocoa] Bugfix: The clipboard string was not freed on terminate
  • [Cocoa] Bugfix: Selectors were used that are not declared by the 10.6 SDK
  • [Cocoa] Bugfix: The position set by glfwSetWindowPos was incorrect
  • [X11] Bugfix: Override-redirect windows were resized to the desired instead of the actual resolution of the selected video mode
  • [X11] Bugfix: Screensaver override for full screen windows had a possible race condition
  • [X11] Bugfix: The reported window position did not account for the size of the window frame on some WMs
  • [X11] Bugfix: The original video mode of a monitor was overwritten by calls to glfwSetWindowSize
  • [X11] Bugfix: Key release events for GLFW_KEY_KP_5 were discarded.

New in GLFW 3.0.1 (Jun 17, 2013)

  • Bugfix: The wrong name was used for the CMake variable for the Xxf86vm library
  • [Win32] Bugfix: Context creation was attempted even if no valid pixel formats had been found

New in GLFW 2.7.9 (Jun 7, 2013)

  • [Win32] Bugfix: Enabling or disabling the cursor for an inactive window did nothing (backported from 3.0)
  • [Win32] Bugfix: The locked cursor was re-centered when the window was inactive (backported from 3.0
  • [Win32] Bugfix: The cursor clip rectangle included the title bar (backported from 3.0)

New in GLFW 2.7.8 (Apr 6, 2013)

  • This release adds fixes for a few minor bugs on each platform, most notably the flashing window on Win32 and a workaround for a bug in Mesa 9.x.: [Win32] Bugfix: The temporary window was shown before being destroyed (backported from 3.0)
  • [X11] Bugfix: Some function pointer types were named incorrectly
  • [X11] Bugfix: The Mesa 9.x implementation of GLX_ARB_create_context_profile is broken in some revisions (backported from 3.0)

New in GLFW 2.7.7 (Nov 9, 2012)

  • Added Visual C++ 2012 project files for the static library, DLL and all test and example programs
  • Bugfix: The GLFW_OPENGL_DEBUG_CONTEXT hint did not trigger context re-creation when WGL_ARB_create_context was available
  • Bugfix: The GLFW_OPENGL_DEBUG_CONTEXT window parameter was not set after debug context creation

New in GLFW 2.7.4 (Mar 23, 2012)

  • [X11] Bugfix: The library containing clock_gettime was not detected
  • [X11] Bugfix: The POSIX monotonic clock was detected using a non-POSIX macro
  • [Cocoa] Replaced deprecated Core Graphics event suppression call
  • [Cocoa] Bugfix: The GLFW_WINDOW_NO_RESIZE window parameter was always zero
  • [Cocoa] Bugfix: glfwInit changed the current directory without a bundle resource directory (backported from 3.0)
  • [Cocoa] Bugfix: glfwInit created a non-interactive menu bar (backported from 3.0)
  • [Carbon] Bugfix: The GLFW_WINDOW_NO_RESIZE window parameter was always zero
  • [Win32] Bugfix: The GLFW_WINDOW_NO_RESIZE window parameter was always zero

New in GLFW 2.7.3 (Mar 23, 2012)

  • Added GLFW_INCLUDE_GL3 macro for including the new gl3.h instead of gl.h
  • Bugfix: The returned desktop mode did not reflect the display mode as it was before the window was opened.
  • Bugfix: The reference manual did not note that glfwSetMousePosCallback and glfwSetMouseWheelCallback called the new callback before returning
  • [X11] Added the POSIX CLOCK_MONOTONIC time source as the preferred method (backported from 3.0)
  • [X11] Bugfix: Added missing Requires: line to pkg-config file generation
  • [X11] Bugfix: Threading link flags were discarded before pkg-config file generation
  • [X11] Bugfix: A synchronization point necessary for jitter-free locked cursor mode was incorrectly removed
  • [Cocoa] Added cocoa-dist-install install target, intended for packagers and language binding creators
  • [Cocoa] Bugfix: Permitted requests for OpenGL 3.0 and 3.1 despite the 3.2 context being forward-compatible
  • [Win32] Added Visual C++ 2010 project files for the GLFW tests and examples
  • [Win32] Replaced Cygwin cross-compile support with MSYS support due to clearer separation between Cygwin and MSYS
  • [Win32] Bugfix: Alt+F4 hot key was not translated into WM_CLOSE

New in GLFW 2.7.2 (Mar 23, 2012)

  • Added library version check to dynamic linking test
  • [Cocoa] Added support for OpenGL 3.2 core profile in 10.7 Lion and above
  • [Cocoa] Made relevant CFLAGS overridable
  • [Cocoa] Bugfix: The OpenGL framework pointer was not retrieved, making glfwGetProcAddress fail
  • [Cocoa] Bugfix: The Cocoa layer was not notified that the application may be multithreaded

New in GLFW 2.7.1 (Mar 23, 2012)

  • Clarified language in the Reference Manual concerning window hint resetting
  • Bugfix: The OpenGL profile and forward-compatibility window parameters were not set
  • Bugfix: The default OpenGL version in the version test was set to 1.1
  • Bugfix: The FSAA test did not check for the availability of GL_ARB_multisample
  • Bugfix: The window could be left in a closed state but still be flagged as open
  • Bugfix: glfwGetWindowSize did not check whether GLFW was initialized or whether the window was open
  • Bugfix: The loop condition for saving video modes used the wrong index variable
  • Bugfix: The iconified and active window states were not tracked
  • Cleaned up depdendencies for libglfw.pc file
  • bugfix: The dlopen fallback method for glfwGetProcAddress had been broken by unrelated edits
  • Bugfix: Calling glXCreateContextAttribsARB with an unavailable OpenGL version caused the application to terminate with a BadMatch Xlib error
  • Bugfix: GLFW_WINDOW_NO_RESIZE was honored in fullscreen mode
  • Win32 Added Visual C++ 2010 project files for the GLFW DLL and static library to the support/msvc100 directory
  • Win32 Enabled _GLFW_NO_DLOAD_GDI32 and _GLFW_NO_DLOAD_WINMM for the DLL build
  • Win32 Bugfix: compile.bat used Unix-style line endings
  • Win32 Bugfix: The WGLSWAPINTERVALEXT_T, WGLGETEXTENSIONSSTRINGARB_T and WGLGETEXTENSIONSSTRINGEXT_T typedefs were declared under WGL_ARB_pixel_format
  • Win32 Bugfix: The array for WGL context attributes was too small and could overflow
  • Win32 Bugfix: Context creation using profiles did not check for the availability of WGL_ARB_create_context_profile
  • Win32 Bugfix: Context recreation logic was overly conservative, leading to unnecessary recreations
  • Win32 Bugfix: Window focus was not handled correctly when using glfwInconifyWindow

New in GLFW 2.7 (Mar 23, 2012)

  • Added GLFW_OPENGL_VERSION_MAJOR and GLFW_OPENGL_VERSION_MINOR hints for versioned context creation
  • Added GLFW_OPENGL_FORWARD_COMPAT hint for forward compatible context creation
  • Added GLFW_OPENGL_DEBUG_CONTEXT hint for debug context creation
  • Added GLFW_OPENL_PROFILE hint for context creation using profiles
  • Added GLFW_NO_GLU macro for disabling the inclusion of the GLU header by the GLFW header
  • Added platform-independent pixel format selection (not used on Mac OS X)
  • Added support and symbols for several additional keys, including Windows/Command keys, Pause, Caps Lock and Menu
  • Added conservative value clamping to glfwOpenWindowHint
  • Added a number of test programs mostly useful to developers of GLFW
  • Added error messages and graceful failure to example programs
  • Added Cocoa port for Mac OS X 10.5 Leopard and later
  • Added vsync to all relevant example programs
  • Added a rudimentary OpenGL 3.2+ core profile example program
  • Updated Pascal (formerly Delphi) bindings to support more compilers
  • Clarified and expanded the User's Guide and Reference Manual
  • Fixed a number of compiler warnings in the example programs
  • OpenGL version is now only parsed once, at window creation time
  • Changed glfwSwapBuffers to call glfwPollEvents after buffer swap
  • Changed all comments in public header file to plain C style
  • Removed the keytest example program, as it was superseded by the events test
  • Removed deprecated AmigaOS and DOS ports
  • Removed all FPS counters from example programs
  • Removed all unmaintained language bindings
  • Removed support for Pelles C
  • Removed broken Microsoft Visual C++ 6.0 build path
  • Added x11-dist-install install target, intended for packagers of GLFW
  • Added x11-dist-clean build target, intended for developers of GLFW
  • Added support for GLX_SGIX_fbconfig
  • Added support for user-specified compilation flags via CFLAGS
  • Added documentation of configuration macros
  • Implemented support for GLFW_SYSTEM_KEYS
  • Improved configuration and makefile creation logic
  • Removed support for GLX version 1.2 and below
  • Removed unnecessary calls to XSync
  • removed use of legacy window style atoms
  • Bugfix: Repeated keys would sometimes leak through despite key repeat being disabled
  • Bugfix: Fullscreen window resizing would cause color buffer clearing without taking framebuffer objects into account
  • Bugfix: AltGr was not reported as right Alt
  • Bugfix: Window colormap was not freed
  • Bugfix: Close callback was called for glfwCloseWindow
  • Bugfix: Misspelt struct member in XF86VidMode code path
  • Bugfix: Window decorations would not appear using certain versions of Compiz on Intel hardware
  • X11] Bugfix: Numeric keypad key symbols would change depending on Num Lock state
  • Bugfix: Hidden cursor position snapped back when halfway from window center to edge
  • Bugfix: Not properly verifying that the window was mapped before making certain calls caused a BadMatch error
  • Bugfix: The response to _NET_WM_PING events was malformed
  • Bugfix: Hidden cursor mode interfered with other applications when GLFW window was unfocused
  • Bugfix: The invisible cursor objects used for hidden cursor mode were not freed
  • Bugfix: EWMH-compliant window managers were incorrectly detected
  • Bugfix: The EWMH code path for fullscreen windows did not present the window using _NET_ACTIVE_WINDOW
  • Bugfix: The EWMH code path for fullscreen windows did not send a _NET_WM_STATE client message
  • Win32 Added Visual C++ project files for all examples and test programs
  • Win32 Removed iterative context re-creation attempts for FSAA sample count
  • Win32 Bugfix: The Visual C++ GLFW DLL project file did not use the correct DEF file
  • Win32 Bugfix: WGL extensions were not detected and/or used correctly
  • Win32 Bugfix: Improper use of wParam for WM_SYSCOMMAND
  • Win32 Bugfix: Derivatives of stream.c were not cleaned up by compile.bat
  • Win32 Bugfix: Pointer for GetExtensionsStringARB was not initialized
  • Win32 Bugfix: Makefiles contained the wrong GLFW API version
  • Win32 Bugfix: Numeric keypad key symbols would change depending on Num Lock state
  • Win32 Bugfix: DllMain performed a number of forbidden actions (by calling glfwTerminate)

New in GLFW 2.6 (Mar 23, 2012)

  • Added GLFW_FSAA_SAMPLES multisampling hint
  • Added GLFW_WINDOW_NO_RESIZE hint for non-resizable windows
  • Added install targets for all Unix-like build targets
  • Added glfwReadMemoryImage function for creating a GLFWImage object from an image file in a memory buffer
  • Added glfwLoadMemoryTexture2D function for decoding an image file in a memory buffer into a texture
  • Added glfwLoadTextureImage2D function for loading a GLFWImage object into a texture
  • Added cross-compilation support for MinGW under a Unix-like host
  • D bindings updated and all examples ported to modern D
  • Delphi bindings updated to reflect API additions
  • Bugfix: The interaction between key repeat and window focus code caused duplicate presses
  • Bugfix: The mouse position was not properly updated when re-enabling the mouse cursor
  • Win32 Added pkg-config file generation for Cygwin
  • Win32 Added version number to window class name
  • Win32 Added optional loading of user provided window icon resource
  • Win32 Bugfix: Very small sleep periods were forced to higher value
  • Win32 Bugfix: The nmake makefile did not handle paths with spaces correctly
  • Win32] Bugfix: Removed assembly RDTSC timing code
  • Win32] Bugfix: Hidden cursor was not clipped to windowed windows
  • Added XRandR code path for fullscreen windows
  • Added building of shared library
  • Added ICCCM WM fullscreen hints
  • Added support for the _NET_WM_PING protocol
  • Added pkg-config file generation
  • Added setting of WM size hints
  • Bugfix: Removed assembly RDTSC timing code
  • Bugfix: Window re-opening now works properly (including fullscreen windows)
  • Bugfix: Potential crash bug in video mode matching code
  • Bugfix: Static buffers imposed an invisible limit on reported video mode count
  • Bugfix: Interaction with certain window managers when setting input focus would cause termination with a BadMatch error
  • Bugfix: Keypad keys did not trigger the character callback
  • [DOS] Obsoleted platform due to lack of maintainer and community interest

New in GLFW 2.5 (Mar 23, 2012)

  • Added the function glfwWaitEvents
  • Added window close callback, which enables a program to prevent a user from closing a window with the window manager
  • Added window refresh callback, which is called when the window needs to be refreshed
  • Added support for loading alpha textures (GLFW_ALPHA_MAP_BIT)
  • Added support for the Lua programming language
  • Added support for the D programming language
  • Added support for the Pelles C compiler for Windows
  • Added API level support for up to eight mouse buttons
  • Added support for up to five mouse buttons
  • Mouse down events capture mouse input
  • Bugfix: The DLL now exports glfwSetTime
  • Fix: The GLFW window is now placed in the upper left corner of the desktop working area
  • Bugfix: More robust check for SwapInterval
  • Added support for USB joysticks under Linux (/dev/input/js*)
  • Bugfix: Added support for GLX extensions in glfwExtensionSupported
  • Bugfix: More robust fullscreen mode (?)
  • Bugfix: Runtime check of XF86VidMode support for the active display
  • Bugfix: Some mouse button events were reported incorrectly
  • Improved Intel mobile CPU detection (e.g. disables RDTSC timing on Centrino systems)