Version history

This is the complete log of user-visible changes for each version since the project started. For a task oriented view of changes and additions in recent versions, see the release notes.

Version 3.4

Released on
  • 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)

Version 3.3.10

Released on
  • 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)

Version 3.3.9

Released on
  • 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

Version 3.3.8

Released on
  • 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

Version 3.3.7

Released on
  • [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

Version 3.3.6

Released on
  • 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)

Version 3.3.5

Released on
  • 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)

Version 3.3.4

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

Version 3.3.3

Released on
  • Bugfix: Some extension loader headers did not prevent default OpenGL header inclusion (#1695)
  • [Win32] Disabled framebuffer transparency on Windows 7 when DWM windows are opaque (#1512)
  • [Win32] Bugfix: Non-BMP Unicode codepoint input was reported as UTF-16
  • [Win32] Bugfix: Monitor functions could return invalid values after configuration change (#1761)
  • [Win32] Bugfix: Initialization would segfault on Windows 8 (not 8.1) (#1775)
  • [Win32] Bugfix: Duplicate size events were not filtered (#1610)
  • [Win32] Bugfix: Full screen windows were incorrectly resized by DPI changes (#1582)
  • [Win32] Bugfix: GLFW_SCALE_TO_MONITOR had no effect on systems older than Windows 10 version 1703 (#1511)
  • [Cocoa] Changed EGLNativeWindowType from NSView to CALayer (#1169)
  • [Cocoa] Bugfix: Non-BMP Unicode codepoint input was reported as UTF-16 (#1635)
  • [Cocoa] Bugfix: Failing to retrieve the refresh rate of built-in displays could leak memory
  • [Cocoa] Bugfix: Objective-C files were compiled as C with CMake 3.19 (#1787)
  • [Cocoa] Bugfix: Duplicate video modes were not filtered out (#1830)
  • [Cocoa] Bugfix: Menubar was not clickable on macOS 10.15+ until it lost and regained focus (#1648,#1802)
  • [Cocoa] Bugfix: Monitor name query could segfault on macOS 11 (#1809,#1833)
  • [Cocoa] Bugfix: The install name of the installed dylib was relative (#1504)
  • [X11] Bugfix: IME input of CJK was broken for “C” locale (#1587,#1636)
  • [X11] Bugfix: Xlib errors caused by other parts of the application could be reported as GLFW errors
  • [X11] Bugfix: A handle race condition could cause a BadWindow error (#1633)
  • [X11] Bugfix: XKB path used keysyms instead of physical locations for non-printable keys (#1598)
  • [X11] Bugfix: Function keys were mapped to GLFW_KEY_UNKNOWN for some layout combinaitons (#1598)
  • [X11] Bugfix: Keys pressed simultaneously with others were not always reported (#1112,#1415,#1472,#1616)
  • [Wayland] Bugfix: Repeated keys could be reported with NULL window (#1704)
  • [Wayland] Bugfix: Retrieving partial framebuffer size would segfault
  • [Wayland] Bugfix: Scrolling offsets were inverted compared to other platforms (#1463)
  • [Wayland] Bugfix: Client-Side Decorations were destroyed in the wrong worder (#1798)
  • [Wayland] Bugfix: Monitors physical size could report zero (#1784,#1792)

Version 3.3.2

Released on
  • [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)

Version 3.3.1

Released on
  • Bugfix: The CMake config-file package used an absolute path and was not relocatable (#1470)
  • Bugfix: Video modes with a duplicate screen area were discarded (#1555,#1556)
  • Bugfix: Compiling with -Wextra-semi caused warnings (#1440)
  • Bugfix: Built-in mappings failed because some OEMs re-used VID/PID (#1583)
  • [Win32] Bugfix: GLFW_INCLUDE_VULKAN plus VK_USE_PLATFORM_WIN32_KHR caused symbol redefinition (#1524)
  • [Win32] Bugfix: The cursor position event was emitted before its cursor enter event (#1490)
  • [Win32] Bugfix: The window hint GLFW_MAXIMIZED did not move or resize the window (#1499)
  • [Win32] Bugfix: Disabled cursor mode interfered with some non-client actions
  • [Cocoa] Removed dependency on the CoreVideo framework
  • [Cocoa] Bugfix: glfwSetWindowSize used a bottom-left anchor point (#1553)
  • [Cocoa] Bugfix: Window remained on screen after destruction until event poll (#1412)
  • [Cocoa] Bugfix: Event processing before window creation would assert (#1543)
  • [Cocoa] Bugfix: Undecorated windows could not be iconified on recent macOS
  • [X11] Bugfix: The CMake files did not check for the XInput headers (#1480)
  • [X11] Bugfix: Key names were not updated when the keyboard layout changed (#1462,#1528)
  • [X11] Bugfix: Decorations could not be enabled after window creation (#1566)
  • [X11] Bugfix: Content scale fallback value could be inconsistent (#1578)
  • [X11] Bugfix: glfwMaximizeWindow had no effect on hidden windows
  • [X11] Bugfix: Clearing GLFW_FLOATING on a hidden window caused invalid read
  • [X11] Bugfix: Changing GLFW_FLOATING on a hidden window could silently fail
  • [X11] Bugfix: Disabled cursor mode was interrupted by indicator windows
  • [X11] Bugfix: Monitor physical dimensions could be reported as zero mm
  • [X11] Bugfix: Window position events were not emitted during resizing (#1613)
  • [Wayland] Bugfix: The GLFW_HAND_CURSOR shape used the wrong image (#1432)
  • [NSGL] Bugfix: GLFW_COCOA_RETINA_FRAMEBUFFER had no effect on newer macOS versions (#1442)
  • [NSGL] Bugfix: Workaround for swap interval on 10.14 broke on 10.12 (#1483)

Version 3.3

Released on
  • Added glfwGetError function for querying the last error code and its description (#970)
  • Added glfwUpdateGamepadMappings function for importing gamepad mappings in SDL_GameControllerDB format (#900)
  • Added glfwJoystickIsGamepad function for querying whether a joystick has a gamepad mapping (#900)
  • Added glfwGetJoystickGUID function for querying the SDL compatible GUID of a joystick (#900)
  • Added glfwGetGamepadName function for querying the name provided by the gamepad mapping (#900)
  • Added glfwGetGamepadState function, GLFW_GAMEPAD_* and GLFWgamepadstate for retrieving gamepad input state (#900)
  • Added glfwGetWindowContentScale, glfwGetMonitorContentScale and glfwSetWindowContentScaleCallback for DPI-aware rendering (#235,#439,#677,#845,#898)
  • Added glfwRequestWindowAttention function for requesting attention from the user (#732,#988)
  • Added glfwGetMonitorWorkarea function for retrieving the monitor work area (#920,#989,#1322)
  • Added glfwGetKeyScancode function that allows retrieving platform dependent scancodes for keys (#830)
  • Added glfwSetWindowMaximizeCallback and GLFWwindowmaximizefun for receiving window maximization events (#778)
  • Added glfwSetWindowAttrib function for changing window attributes (#537)
  • Added glfwGetJoystickHats function for querying joystick hats (#889,#906,#934)
  • Added glfwInitHint for setting initialization hints
  • Added glfwWindowHintString for setting string type window hints (#893,#1139)
  • Added glfwGetWindowOpacity and glfwSetWindowOpacity for controlling whole window transparency (#1089)
  • Added glfwSetMonitorUserPointer and glfwGetMonitorUserPointer for per-monitor user pointers
  • Added glfwSetJoystickUserPointer and glfwGetJoystickUserPointer for per-joystick user pointers
  • Added glfwGetX11SelectionString and glfwSetX11SelectionString functions for accessing X11 primary selection (#894,#1056)
  • Added glfwRawMouseMotionSupported function for querying raw motion support (#125,#1400,#1401)
  • Added headless OSMesa backend (#850)
  • Added definition of GLAPIENTRY to public header
  • Added GLFW_TRANSPARENT_FRAMEBUFFER window hint and attribute for controlling per-pixel framebuffer transparency (#197,#663,#715,#723,#1078)
  • Added GLFW_HOVERED window attribute for polling cursor hover state (#1166)
  • Added GLFW_CENTER_CURSOR window hint for controlling cursor centering (#749,#842)
  • Added GLFW_FOCUS_ON_SHOW window hint and attribute to control input focus on calling show window (#1189)
  • Added GLFW_SCALE_TO_MONITOR window hint for automatic window resizing (#676,#1115)
  • Added GLFW_JOYSTICK_HAT_BUTTONS init hint (#889)
  • Added GLFW_LOCK_KEY_MODS input mode and GLFW_MOD_*_LOCK mod bits (#946)
  • Added GLFW_RAW_MOUSE_MOTION input mode for selecting raw motion input (#125,#1400,#1401)
  • Added macOS specific GLFW_COCOA_RETINA_FRAMEBUFFER window hint
  • Added macOS specific GLFW_COCOA_FRAME_NAME window hint (#195)
  • Added macOS specific GLFW_COCOA_GRAPHICS_SWITCHING window hint (#377,#935)
  • Added macOS specific GLFW_COCOA_CHDIR_RESOURCES init hint
  • Added macOS specific GLFW_COCOA_MENUBAR init hint
  • Added X11 specific GLFW_X11_CLASS_NAME and GLFW_X11_INSTANCE_NAME window hints (#893,#1139)
  • Added GLFW_INCLUDE_ES32 for including the OpenGL ES 3.2 header
  • Added GLFW_OSMESA_CONTEXT_API for creating OpenGL contexts with OSMesa (#281)
  • Added GenerateMappings.cmake script for updating gamepad mappings
  • Made glfwCreateWindowSurface emit an error when the window has a context (#1194,#1205)
  • Deprecated window parameter of clipboard string functions
  • Deprecated charmods callback
  • Removed GLFW_USE_RETINA compile-time option
  • Removed GLFW_USE_CHDIR compile-time option
  • Removed GLFW_USE_MENUBAR compile-time option
  • Removed requirement of at least one window for glfwWaitEvents and glfwPostEmptyEvent (#1317)
  • Removed all dependencies on the Vulkan SDK
  • Bugfix: Calling glfwMaximizeWindow on a full screen window was not ignored
  • Bugfix: GLFW_INCLUDE_VULKAN could not be combined with the corresponding OpenGL and OpenGL ES header macros
  • Bugfix: glfwGetInstanceProcAddress returned NULL for vkGetInstanceProcAddr when _GLFW_VULKAN_STATIC was enabled
  • Bugfix: Invalid library paths were used in test and example CMake files (#930)
  • Bugfix: The scancode for synthetic key release events was always zero
  • Bugfix: The generated Doxyfile did not handle paths with spaces (#1081)
  • Bugfix: The gamma ramp generated by glfwSetGamma did not use the monitor ramp size (#1387,#1388)
  • [Win32] Added system error strings to relevant GLFW error descriptions (#733)
  • [Win32] Removed XInput circular deadzone from joystick axis data (#1045)
  • [Win32] Bugfix: Undecorated windows could not be iconified by the user (#861)
  • [Win32] Bugfix: Deadzone logic could underflow with some controllers (#910)
  • [Win32] Bugfix: glfwVulkanSupported emitted an error on systems with a loader but no ICD (#916)
  • [Win32] Bugfix: Non-iconified full sreeen windows did not prevent screen blanking or password enabled screensavers (#851)
  • [Win32] Bugfix: Mouse capture logic lost secondary release messages (#954)
  • [Win32] Bugfix: Monitors with no display devices were not enumerated (#960)
  • [Win32] Bugfix: Monitor events were not emitted (#784)
  • [Win32] Bugfix: The DLL was installed to the wrong directory on Cygwin (#1035)
  • [Win32] Bugfix: Normalization of axis data via XInput was incorrect (#1045)
  • [Win32] Bugfix: glfw3native.h would undefine a foreign APIENTRY (#1062)
  • [Win32] Bugfix: Disabled cursor mode prevented use of caption buttons (#650,#1071)
  • [Win32] Bugfix: Returned key names did not match other platforms (#943)
  • [Win32] Bugfix: Undecorated windows did not maximize to workarea (#899)
  • [Win32] Bugfix: Window was resized twice when entering full screen (#1085)
  • [Win32] Bugfix: The HID device notification was not unregistered (#1170)
  • [Win32] Bugfix: glfwCreateWindow activated window even with GLFW_FOCUSED hint set to false (#1179,#1180)
  • [Win32] Bugfix: The keypad equals key was reported as GLFW_KEY_UNKNOWN (#1315,#1316)
  • [Win32] Bugfix: A title bar would be drawn over undecorated windows in some circumstances (#1383)
  • [Win32] Bugfix: Standard cursors were not per-monitor DPI aware (#1431)
  • [X11] Replaced _GLFW_HAS_XF86VM compile-time option with dynamic loading
  • [X11] Bugfix: glfwGetVideoMode would segfault on Cygwin/X
  • [X11] Bugfix: Dynamic X11 library loading did not use full sonames (#941)
  • [X11] Bugfix: Window creation on 64-bit would read past top of stack (#951)
  • [X11] Bugfix: XDND support had multiple non-conformance issues (#968)
  • [X11] Bugfix: The RandR monitor path was disabled despite working RandR (#972)
  • [X11] Bugfix: IM-duplicated key events would leak at low polling rates (#747)
  • [X11] Bugfix: Gamma ramp setting via RandR did not validate ramp size
  • [X11] Bugfix: Key name string encoding depended on current locale (#981,#983)
  • [X11] Bugfix: Incremental reading of selections was not supported (#275)
  • [X11] Bugfix: Selection I/O reported but did not support COMPOUND_TEXT
  • [X11] Bugfix: Latin-1 text read from selections was not converted to UTF-8
  • [X11] Bugfix: NVidia EGL would segfault if unloaded before closing the display
  • [X11] Bugfix: Checking window maximized attrib could crash some WMs (#1356)
  • [X11] Bugfix: Update cursor position on enter event (#1366)
  • [X11] Bugfix: glfwSetWindowMonitor did not update hints when resizing non-user-resizable windows
  • [X11] Bugfix: glfwSetWindowMonitor did not flush output buffer in some cases
  • [X11] Bugfix: glfwSetWindowMonitor did not update the EWMH state of hidden windows (#1358)
  • [Linux] Added workaround for missing SYN_DROPPED in pre-2.6.39 kernel headers (#1196)
  • [Linux] Moved to evdev for joystick input (#906,#1005)
  • [Linux] Bugfix: Event processing did not detect joystick disconnection (#932)
  • [Linux] Bugfix: The joystick device path could be truncated (#1025)
  • [Linux] Bugfix: glfwInit would fail if inotify creation failed (#833)
  • [Linux] Bugfix: strdup was used without any required feature macro (#1055)
  • [Cocoa] Added support for Vulkan window surface creation via MoltenVK (#870)
  • [Cocoa] Added support for loading a MainMenu.nib when available
  • [Cocoa] Disabled automatic window tabbing for created windows (#1250)
  • [Cocoa] Bugfix: Disabling window aspect ratio would assert (#852)
  • [Cocoa] Bugfix: Window creation failed to set first responder (#876,#883)
  • [Cocoa] Bugfix: Removed use of deprecated CGDisplayIOServicePort function (#165,#192,#508,#511)
  • [Cocoa] Bugfix: Disabled use of deprecated CGDisplayModeCopyPixelEncoding function on macOS 10.12+
  • [Cocoa] Bugfix: Running in AppSandbox would emit warnings (#816,#882)
  • [Cocoa] Bugfix: Windows created after the first were not cascaded (#195)
  • [Cocoa] Bugfix: Leaving video mode with glfwSetWindowMonitor would set incorrect position and size (#748)
  • [Cocoa] Bugfix: Iconified full screen windows could not be restored (#848)
  • [Cocoa] Bugfix: Value range was ignored for joystick hats and buttons (#888)
  • [Cocoa] Bugfix: Full screen framebuffer was incorrectly sized for some video modes (#682)
  • [Cocoa] Bugfix: A string object for IME was updated non-idiomatically (#1050)
  • [Cocoa] Bugfix: A hidden or disabled cursor would become visible when a user notification was shown (#971,#1028)
  • [Cocoa] Bugfix: Some characters did not repeat due to Press and Hold (#1010)
  • [Cocoa] Bugfix: Window title was lost when full screen or undecorated (#1082)
  • [Cocoa] Bugfix: Window was resized twice when entering full screen (#1085)
  • [Cocoa] Bugfix: Duplicate size events were not filtered (#1085)
  • [Cocoa] Bugfix: Event polling did not initialize AppKit if necessary (#1218)
  • [Cocoa] Bugfix: OpenGL rendering was not visible before resize on early macOS 10.14 (#1334,#1346)
  • [Cocoa] Bugfix: Caps Lock did not generate any key events (#1368,#1373)
  • [Cocoa] Bugfix: Some buttons for some joysticks were ignored (#1385)
  • [Cocoa] Bugfix: Analog joystick buttons were not translated correctly (#1385)
  • [Cocoa] Bugfix: OpenGL swap interval was ignored for occluded windows (#680)
  • [Cocoa] Bugfix: OpenGL swap interval was ignored on early macOS 10.14 (#1337,#1417,#1435)
  • [Cocoa] Bugfix: The y-coordinate was incorrect for glfwGetCursorPos and glfwSetCursorPos (#1461)
  • [WGL] Added support for WGL_EXT_colorspace for OpenGL ES contexts
  • [WGL] Added support for WGL_ARB_create_context_no_error
  • [GLX] Added support for GLX_ARB_create_context_no_error
  • [GLX] Bugfix: Context creation could segfault if no GLXFBConfigs were available (#1040)
  • [EGL] Added support for EGL_KHR_get_all_proc_addresses (#871)
  • [EGL] Added support for EGL_KHR_context_flush_control
  • [EGL] Bugfix: The test for EGL_RGB_BUFFER was invalid

Version 3.2.1

Released on
  • Added on-demand loading of Vulkan and context creation API libraries
  • Added _GLFW_VULKAN_STATIC build macro to make the library use the Vulkan loader linked statically into the application (#820)
  • Bugfix: Single compilation unit builds failed due to naming conflicts (#783)
  • Bugfix: The range checks for glfwSetCursorPos used the wrong minimum (#773)
  • Bugfix: Defining GLFW_INCLUDE_VULKAN when compiling the library did not fail with the expected error message (#823)
  • Bugfix: Inherited value of CMAKE_MODULE_PATH was clobbered (#822)
  • [Win32] Bugfix: glfwSetClipboardString created an unnecessary intermediate copy of the string
  • [Win32] Bugfix: Examples failed to build on Visual C++ 2010 due to C99 in linmath.h (#785)
  • [Win32] Bugfix: The first shown window ignored the GLFW_MAXIMIZED hint when the process was provided a STARTUPINFO (#780)
  • [Cocoa] Bugfix: Event processing would segfault on some machines due to a previous distributed notification listener not being fully removed (#817,#826)
  • [Cocoa] Bugfix: Some include statements were duplicated (#838)
  • [X11] Bugfix: Window size limits were ignored if the minimum or maximum size was set to GLFW_DONT_CARE (#805)
  • [X11] Bugfix: Input focus was set before window was visible, causing BadMatch on some non-reparenting WMs (#789,#798)
  • [X11] Bugfix: glfwGetWindowPos and glfwSetWindowPos operated on the window frame instead of the client area (#800)
  • [WGL] Added reporting of errors from WGL_ARB_create_context extension
  • [GLX] Bugfix: Dynamically loaded entry points were not verified
  • [EGL] Added lib prefix matching between EGL and OpenGL ES library binaries
  • [EGL] Bugfix: Dynamically loaded entry points were not verified

Version 3.2

Released on
  • Added glfwVulkanSupported, glfwGetRequiredInstanceExtensions, glfwGetInstanceProcAddress, glfwGetPhysicalDevicePresentationSupport and glfwCreateWindowSurface for platform independent Vulkan support
  • Added glfwSetWindowMonitor for switching between windowed and full screen modes and updating the monitor and desired video mode of full screen windows
  • Added glfwMaximizeWindow and GLFW_MAXIMIZED for window maximization
  • Added glfwFocusWindow for giving windows input focus
  • Added glfwSetWindowSizeLimits and glfwSetWindowAspectRatio for setting absolute and relative window size limits
  • Added glfwGetKeyName for querying the layout-specific name of printable keys
  • Added glfwWaitEventsTimeout for waiting for events for a set amount of time
  • Added glfwSetWindowIcon for setting the icon of a window
  • Added glfwGetTimerValue and glfwGetTimerFrequency for raw timer access
  • Added glfwSetJoystickCallback and GLFWjoystickfun for joystick connection and disconnection events
  • Added GLFW_NO_API for creating window without contexts
  • Added GLFW_INCLUDE_VULKAN for including the Vulkan header
  • Added GLFW_CONTEXT_CREATION_API, GLFW_NATIVE_CONTEXT_API and GLFW_EGL_CONTEXT_API for run-time context creation API selection
  • Added GLFW_CONTEXT_NO_ERROR context hint for GL_KHR_no_error support
  • Added GLFW_TRUE and GLFW_FALSE as client API independent boolean values
  • Added icons to examples on Windows and OS X
  • Relaxed rules for native access header macros
  • Removed dependency on external OpenGL or OpenGL ES headers
  • Removed _GLFW_USE_OPENGL, _GLFW_USE_GLESV1, _GLFW_USE_GLESV2, _GLFW_WGL, _GLFW_NSGL, _GLFW_GLX and _GLFW_EGL configuration macros
  • [Win32] Added support for Windows 8.1 per-monitor DPI
  • [Win32] Replaced winmm with XInput and DirectInput for joystick input
  • [Win32] Bugfix: Window creation would segfault if video mode setting required the system to be restarted
  • [Win32] Bugfix: MinGW import library lacked the lib prefix
  • [Win32] Bugfix: Monitor connection and disconnection events were not reported when no windows existed
  • [Win32] Bugfix: Activating or deactivating displays in software did not trigger monitor callback
  • [Win32] Bugfix: No monitors were listed on headless and VMware guest systems
  • [Win32] Bugfix: Pressing Ctrl+Pause would report GLFW_KEY_UNKNOWN
  • [Win32] Bugfix: Window size events would be reported in wrong order when restoring a full screen window
  • [Cocoa] Made joystick polling more efficient
  • [Cocoa] Removed support for OS X 10.6
  • [Cocoa] Bugfix: Full screen windows on secondary monitors were mispositioned
  • [Cocoa] Bugfix: Connecting a joystick that reports no name would segfault
  • [Cocoa] Bugfix: Modifier flags cache was not updated when window became key
  • [Cocoa] Bugfix: Dead key character composition did not work
  • [Cocoa] Bugfix: The CGL context was not released until the autorelease pool was drained by another function
  • [X11] Bugfix: Monitor connection and disconnection events were not reported
  • [X11] Bugfix: Decoding of UTF-8 text from XIM could continue past the end
  • [X11] Bugfix: An XKB structure was leaked during glfwInit
  • [X11] Bugfix: XInput2 XI_Motion events interfered with the Steam overlay
  • [POSIX] Bugfix: An unrelated TLS key could be deleted by glfwTerminate
  • [Linux] Made joystick polling more efficient
  • [WGL] Changed extension loading to only be performed once
  • [WGL] Removed dependency on external WGL headers
  • [GLX] Added glfwGetGLXWindow to query the GLXWindow of a window
  • [GLX] Replaced legacy drawable with GLXWindow
  • [GLX] Removed dependency on external GLX headers
  • [GLX] Bugfix: NetBSD does not provide libGL.so.1
  • [EGL] Added _GLFW_USE_EGLPLATFORM_H configuration macro for controlling whether to use an existing EGL/eglplatform.h header
  • [EGL] Added and documented test for if the context is current on the calling thread during buffer swap
  • [EGL] Removed dependency on external EGL headers

Version 3.1.2

Released on
  • Made all client API functions dynamically loaded
  • Changed minimum required CMake version to 2.8.12
  • Replaced GLU with linmath.h in example programs
  • Merged all cursor test programs into the cursor program
  • Removed all mention of GLU in examples, build files and package dependencies
  • Bugfix: Initialization failed on headless systems
  • Bugfix: The cached current context could get out of sync
  • Bugfix: glfwIconifyWindow did not restore the original video mode for full screen windows created with GLFW_AUTO_ICONIFY
  • [Win32] Renamed hybrid GPU override compile-time option to _GLFW_USE_HYBRID_HPG and added support for AMD PowerXpress systems
  • [Win32] Bugfix: glfwGetVideoModes included unusable modes on some systems
  • [Win32] Bugfix: glfwWaitEvents would return directly for focused windows in disabled cursor mode
  • [Cocoa] Bugfix: The cached NSScreen for a monitor could get out of sync
  • [Cocoa] Bugfix: The GLFW_AUTO_ICONIFY window hint was ignored
  • [Cocoa] Bugfix: Resizing a window to its minimum size would segfault
  • [Cocoa] Bugfix: Creating or showing a window would make its context current
  • [Cocoa] Bugfix: Joysticks connected after glfwInit were not detected
  • [Cocoa] Bugfix: Cursor creation failed unless a window had been created.
  • [Cocoa] Bugfix: Window refresh events were not generated by iconification or restoration
  • [Cocoa] Bugfix: The primary monitor would get reported as disconnected when entering full screen on a dual-GPU machine with automatic graphics switching
  • [Cocoa] Bugfix: The original video modes were not restored when the application was hidden
  • [X11] Bugfix: glfwInit would segfault on systems without RandR
  • [X11] Bugfix: The response to _NET_WM_PING was sent to the wrong window
  • [X11] Bugfix: Character input via XIM did not work in many cases
  • [X11] Bugfix: No fallback existed for missing _NET_ACTIVE_WINDOW support
  • [X11] Bugfix: Some significant window focus events were ignored
  • [X11] Bugfix: The GLFW_AUTO_ICONIFY window hint was ignored
  • [X11] Bugfix: The original video mode was not restored on iconification of full screen windows
  • [X11] Bugfix: GLFW_ARROW_CURSOR selected the wrong cursor image
  • [X11] Bugfix: The GLFW_DECORATED hint was not ignored for full screen
  • [X11] Bugfix: glfwWaitEvents did not handle EINTR for select
  • [X11] Bugfix: glfwWaitEvents could return when no events were available
  • [X11] Bugfix: XkbGetKeyboard fails on XWayland
  • [X11] Bugfix: Character input did not work correctly for non-UTF-8 locales
  • [X11] Bugfix: Long input sequences generated by IMEs were discarded
  • [WGL] Made all WGL functions dynamically loaded
  • [WGL] Removed GLFW_USE_DWM_SWAP_INTERVAL compile-time option
  • [WGL] Bugfix: Swap interval was ignored when DWM was enabled
  • [WGL] Bugfix: Failure to find a pixel format was reported incorrectly
  • [GLX] Added dependency on libdl on systems where it provides dlopen
  • [GLX] Made all GLX functions dynamically loaded
  • [GLX] Removed _GLFW_HAS_GLXGETPROCADDRESS* and _GLFW_HAS_DLOPEN compile-time options
  • [GLX] Bugfix: Failure to find a GLXFBConfig was reported incorrectly
  • [EGL] Made all EGL functions dynamically loaded
  • [EGL] Bugfix: glfwGetProcAddress did not return the addresses of core functions
  • [EGL] Bugfix: Failure to find an EGLConfig was reported incorrectly
  • [NSGL] Bugfix: Failure to find a pixel format was reported incorrectly

Version 3.1.1

Released on
  • 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

Version 3.1

Released on
  • 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 CRTCs
  • [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)

Version 3.0.4

Released on
  • 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.

Version 3.0.3

Released on
  • [Win32] Bugfix: _WIN32_WINNT was not set to Windows XP or later
  • [Win32] Bugfix: Legacy MinGW needs WINVER and UNICODE before stddef.h
  • [Cocoa] Bugfix: Cursor was not visible in normal mode in full screen
  • [Cocoa] Bugfix: Cursor was not actually hidden in hidden mode
  • [Cocoa] Bugfix: Cursor modes were not applied to inactive windows
  • [X11] Bugfix: Events for mouse buttons 4 and above were not reported
  • [X11] Bugfix: CMake 2.8.7 does not set X11_Xinput_LIB even when found

Version 3.0.2

Released on
  • 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.

Version 3.0.1

Released on
  • Bugfix: The wrong name was used for the CMake variable for the Xxf86vm library
  • [Cocoa] Bugfix: glfwGetFramebufferSize return the size in screen coordinates
  • [Cocoa] Bugfix: Messages not supported on Mac OS X 10.6 were used without tests for precence
  • [Cocoa] Bugfix: Process transformation was not performed if menu bar creation was disabled
  • [Win32] Bugfix: Context creation was attempted even if no valid pixel formats had been found
  • [X11] Bugfix: Duplicate window position and window and framebuffer size events were reported

Version 3.0

Released on
  • Added GLFWmonitor and updated monitor-related functions to take a monitor handle
  • Added glfwGetMonitors and glfwGetPrimaryMonitor for enumerating available monitors
  • Added glfwGetMonitorPos, glfwGetMonitorPhysicalSize and glfwGetMonitorName for retrieving monitor properties
  • Added glfwSetMonitorCallback and GLFWmonitorfun for notification of changes in the set of available monitors
  • Added GLFWwindow and updated window-related functions and callbacks to take a window handle
  • Added glfwSetWindowShouldClose and glfwWindowShouldClose for setting and retrieving the window close flag
  • Added glfwGetWindowPos for retrieving the position of a window
  • Added glfwDefaultWindowHints for resetting all window hints to their default values
  • Added glfwMakeContextCurrent for making the context of the specified window current
  • Added glfwSetErrorCallback, GLFWerrorfun and error type tokens for receiving error notifications
  • Added glfwSetWindowUserPointer and glfwGetWindowUserPointer for per-window user pointers
  • Added glfwGetVersionString for determining which code paths were enabled at compile time
  • Added glfwGetWindowMonitor for querying the monitor, if any, of the specified window
  • Added glfwGetFramebufferSize and glfwSetFramebufferSizeCallback for receiving the current size, in pixels, of the framebuffer
  • Added glfwSetWindowPosCallback and GLFWwindowposfun for receiving window position events
  • Added glfwSetWindowFocusCallback and GLFWwindowfocusfun for receiving window focus events
  • Added glfwSetWindowIconifyCallback and GLFWwindowiconifyfun for receiving window iconification events
  • Added glfwGetClipboardString and glfwSetClipboardString for interacting with the system clipboard
  • Added glfwGetJoystickName for retrieving the name of a joystick
  • Added glfwGetCurrentContext for retrieving the window whose OpenGL context is current
  • Added GLFW_SRGB_CAPABLE for requesting sRGB capable framebuffers
  • Added GLFW_CLIENT_API and its values GLFW_OPENGL_API and GLFW_OPENGL_ES_API for selecting client API
  • Added GLFW_CONTEXT_ROBUSTNESS and values GLFW_NO_ROBUSTNESS, GLFW_NO_RESET_NOTIFICATION and GLFW_LOSE_CONTEXT_ON_RESET for GL_ARB_robustness support
  • Added GLFW_OPENGL_REVISION to make up for removal of glfwGetGLVersion
  • Added GLFW_INCLUDE_GLCOREARB macro for including GL/glcorearb.h instead of GL/gl.h
  • Added GLFW_INCLUDE_ES1 macro for telling the GLFW header to use GLES/gl.h instead of GL/gl.h
  • Added GLFW_INCLUDE_ES2 macro for telling the GLFW header to use GLES2/gl2.h instead of GL/gl.h
  • Added GLFW_INCLUDE_NONE macro for telling the GLFW header to not include any client API header
  • Added GLFW_VISIBLE window hint and parameter for controlling and polling window visibility
  • Added GLFW_REPEAT key action for repeated keys
  • Added scancode parameter to key callback
  • Added refreshRate member to GLFWvidmode struct
  • Added key modifier parameter to key and mouse button callbacks
  • Added windows simple multi-window test program
  • Added sharing simple OpenGL object sharing test program
  • Added modes video mode enumeration and setting test program
  • Added threads simple multi-threaded rendering test program
  • Added glfw3native.h header and platform-specific functions for explicit access to native display, window and context handles
  • Added glfwSetGamma, glfwSetGammaRamp and glfwGetGammaRamp functions and GLFWgammaramp type for monitor gamma ramp control
  • Added window parameter to glfwSwapBuffers
  • Changed buffer bit depth parameters of glfwOpenWindow to window hints
  • Changed glfwCreateWindow and glfwSetWindowTitle to use UTF-8 encoded strings
  • Changed glfwGetProcAddress to return a (generic) function pointer
  • Changed glfwGetVideoModes to return a dynamic, unlimited number of video modes for the specified monitor
  • Changed cursor position to double-precision floating-point
  • Changed default cursor mode for fullscreen to normal
  • Renamed header directory GL to GLFW
  • Renamed glfw.h to glfw3.h to avoid conflicts with 2.x series
  • Renamed glfwOpenWindowHint to glfwWindowHint
  • Renamed glfwGetWindowParam to glfwGetWindowAttrib
  • Renamed GLFW_ACTIVE to GLFW_FOCUSED
  • Renamed GLFW_FSAA_SAMPLES to GLFW_SAMPLES
  • Renamed GLFW_WINDOW_NO_RESIZE to GLFW_RESIZABLE
  • Renamed GLFW_BUILD_DLL to _GLFW_BUILD_DLL
  • Renamed version test to glfwinfo
  • Renamed GLFW_NO_GLU to GLFW_INCLUDE_GLU and made it disabled by default
  • Renamed glfwGetJoystickPos to glfwGetJoystickAxes to match glfwGetJoystickButtons
  • Renamed mouse position functions to cursor position equivalents
  • Replaced glfwOpenWindow and glfwCloseWindow with glfwCreateWindow and glfwDestroyWindow
  • Replaced glfwGetDesktopMode width glfwGetVideoMode
  • Replaced ad hoc build system with CMake
  • Replaced layout-dependent key codes with single, platform-independent set based on US layout
  • Replaced mouse wheel interface with two-dimensional, floating point scrolling interface
  • Replaced glfwEnable and glfwDisable with glfwGetInputMode and glfwSetInputMode
  • Replaced joystick test with graphical version
  • Replaced automatic closing of windows with the window close flag
  • Removed the GLFW_KEY_REPEAT input option
  • Removed event auto-polling and the GLFW_AUTO_POLL_EVENTS window enable
  • Removed the Win32 port .def files
  • Removed the entire threading API
  • Removed the entire image loading API
  • Removed deprecated Carbon port
  • Removed registering glfwTerminate with atexit
  • Removed glfwSleep function
  • Removed glfwGetNumberOfProcessors function
  • Removed glfwGetGLVersion function
  • Removed GLFW_OPENED window parameter
  • Removed GLFW_WINDOW and GLFW_FULLSCREEN
  • Removed nonsensical key actions for Unicode character input
  • Removed GLFWCALL and GLFWAPIENTRY macros for stdcall calling convention
  • Removed GLFW_ACCELERATED window parameter
  • Removed default framebuffer attributes from glfwGetWindowParam
  • Bugfix: The default OpenGL version in the glfwinfo test was set to 1.1
  • Bugfix: The OpenGL profile and forward-compatibility window parameters were not saved after context creation
  • Bugfix: The FSAA test did not check for the availability of GL_ARB_multisample
  • Bugfix: Cursor centering upon leaving captured cursor mode was reported before the mode was changed to non-captured
  • [Cocoa] Added support for OpenGL 3.2 core profile in 10.7 Lion and above
  • [Cocoa] Added support for high-DPI (Retina) monitors
  • [Cocoa] Added support for joysticks
  • [Cocoa] Postponed menu creation to first window creation
  • [Cocoa] Replaced NSDate time source with mach_absolute_time
  • [Cocoa] Replaced all deprecated CoreGraphics calls with non-deprecated counterparts
  • [Cocoa] Bugfix: The NSOpenGLPFAFullScreen pixel format attribute caused creation to fail on some machines
  • [Cocoa] Bugfix: glfwCreateWindow did not properly enforce the forward-compatible and context profile hints
  • [Cocoa] Bugfix: The loop condition for saving video modes used the wrong index variable
  • [Cocoa] Bugfix: The OpenGL framework was not retrieved, making glfwGetProcAddress crash
  • [Cocoa] Bugfix: glfwInit changed the current directory for unbundled executables
  • [Cocoa] Bugfix: The GLFW_WINDOW_NO_RESIZE window parameter was always zero
  • [Cocoa] Bugfix: The cursor position incorrectly rounded during conversion
  • [Cocoa] Bugfix: Cursor positioning led to nonsensical results for fullscreen windows
  • [Cocoa] Bugfix: The GLFW window was flagged as restorable
  • [X11] Added support for the GLX_EXT_swap_control and GLX_MESA_swap_control extensions as alternatives to GLX_SGI_swap_control
  • [X11] Added the POSIX CLOCK_MONOTONIC time source as the preferred method
  • [X11] Added dependency on libm, where present
  • [X11] Added support for the _NET_WM_NAME and _NET_WM_ICON_NAME EWMH window properties
  • [X11] Made client-side RandR and Xf86VidMode extensions required
  • [X11] Bugfix: Some window properties required by the ICCCM were not set
  • [X11] Bugfix: Calling glXCreateContextAttribsARB with an unavailable OpenGL version caused the application to terminate with a BadMatch Xlib error
  • [X11] Bugfix: A synchronization point necessary for jitter-free locked cursor mode was incorrectly removed
  • [X11] Bugfix: The window size hints were not updated when calling glfwSetWindowSize on a non-resizable window
  • [Win32] Added support for high-DPI monitors
  • [Win32] Changed port to use Unicode mode only
  • [Win32] Removed explicit support for versions of Windows older than Windows XP
  • [Win32] Bugfix: Window activation and iconification did not work as expected
  • [Win32] Bugfix: Software rasterizer pixel formats were not discarded by the WGL_ARB_pixel_format code path
  • [Win32] Bugfix: The array for WGL context attributes was too small and could overflow
  • [Win32] Bugfix: Alt+F4 hot key was not translated into WM_CLOSE
  • [Win32] Bugfix: The GLFW_WINDOW_NO_RESIZE window parameter was always zero
  • [Win32] Bugfix: A test was missing for whether all available pixel formats had been disqualified

Version 2.7.9

Released on
  • [Cocoa] Bugfix: The dynamic library makefile rule did not use LFLAGS
  • [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)

Version 2.7.8

Released on
  • [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)

Version 2.7.7

Released on
  • [Cocoa] Bugfix: The cursor positioning code used NSPoint in place of CGPoint
  • [Cocoa] Bugfix: The detection of setRestorable: used the wrong selector signature
  • [Cocoa] Bugfix: The test for whether glfwTerminate had been called from the main thread was missing
  • [Win32] Added Visual C++ 2012 project files for the static library, DLL and all test and example programs
  • [Win32] Bugfix: The GLFW_OPENGL_DEBUG_CONTEXT hint did not trigger context re-creation when WGL_ARB_create_context was available
  • [Win32] Bugfix: The GLFW_OPENGL_DEBUG_CONTEXT window parameter was not set after debug context creation
  • [X11] Added support for the GLX_EXT_swap_control and GLX_MESA_swap_control extensions as alternatives to GLX_SGI_swap_control
  • [X11] Bugfix: The GLFW_OPENGL_DEBUG_CONTEXT window parameter was not set after debug context creation
  • [X11] Bugfix: The window size hints were not updated when calling glfwSetWindowSize on a non-resizable window
  • [X11] Bugfix: The detected link flags for clock_gettime were not added to the pkg-config file

Version 2.7.6

Released on
  • Added new joystick test (backported from 3.0)
  • [Cocoa] Added joystick support (backported from 3.0)
  • [Cocoa] Bugfix: Fullscreen windows with OpenGL 3.2 core contexts failed to open
  • [Cocoa] Bugfix: The cursor position was incorrectly rounded during conversion
  • [Cocoa] Bugfix: Cursor positioning led to nonsensical results for fullscreen windows
  • [Cocoa] Bugfix: The GLFW window was flagged as restorable
  • [Win32] Bugfix: A test was missing for whether all available pixel formats had been disqualified
  • [Win32] Bugfix: Entering locked cursor mode caused cursor movement to be reported to the mouse position callback
  • [Win32] Bugfix: Setting the cursor position caused cursor movement to be reported to the mouse position callback
  • [Win32] Bugfix: A .def file using __stdcall naming conventions was used for the 64-bit DLL on MinGW-w64
  • [Win32] Bugfix: A superfluous link flag prevented tests and examples from being built for 64-bit on MinGW-w64
  • [X11] Bugfix: The VirtualBox OpenGL implementation does not set the window bit for GLX framebuffer configs

Version 2.7.5

Released on
  • [Cocoa] Replaced NSDate time source with mach_absolute_time (backported from 3.0)
  • [Cocoa] Bugfix: A header needed for MAXPATHLEN on some systems was not included

Version 2.7.4

Released on
  • [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

Version 2.7.3

Released on
  • 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

Version 2.7.2

Released on
  • 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

Version 2.7.1

Released on
  • 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
  • [Cocoa] Bugfix: The loop condition for saving video modes used the wrong index variable
  • [Cocoa] Bugfix: The iconified and active window states were not tracked
  • [X11] Cleaned up depdendencies for libglfw.pc file
  • [X11] Bugfix: The dlopen fallback method for glfwGetProcAddress had been broken by unrelated edits
  • [X11] Bugfix: Calling glXCreateContextAttribsARB with an unavailable OpenGL version caused the application to terminate with a BadMatch Xlib error
  • [X11] 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

Version 2.7

Released on
  • 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
  • [X11] Added x11-dist-install install target, intended for packagers of GLFW
  • [X11] Added x11-dist-clean build target, intended for developers of GLFW
  • [X11] Added support for GLX_SGIX_fbconfig
  • [X11] Added support for user-specified compilation flags via CFLAGS
  • [X11] Added documentation of configuration macros
  • [X11] Implemented support for GLFW_SYSTEM_KEYS
  • [X11] Improved configuration and makefile creation logic
  • [X11] Removed support for GLX version 1.2 and below
  • [X11] Removed unnecessary calls to XSync
  • [X11] Removed use of legacy window style atoms
  • [X11] Bugfix: Repeated keys would sometimes leak through despite key repeat being disabled
  • [X11] Bugfix: Fullscreen window resizing would cause color buffer clearing without taking framebuffer objects into account
  • [X11] Bugfix: AltGr was not reported as right Alt
  • [X11] Bugfix: Window colormap was not freed
  • [X11] Bugfix: Close callback was called for glfwCloseWindow
  • [X11] Bugfix: Misspelt struct member in XF86VidMode code path
  • [X11] 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
  • [X11] Bugfix: Hidden cursor position snapped back when halfway from window center to edge
  • [X11] Bugfix: Not properly verifying that the window was mapped before making certain calls caused a BadMatch error
  • [X11] Bugfix: The response to _NET_WM_PING events was malformed
  • [X11] Bugfix: Hidden cursor mode interfered with other applications when GLFW window was unfocused
  • [X11] Bugfix: The invisible cursor objects used for hidden cursor mode were not freed
  • [X11] Bugfix: EWMH-compliant window managers were incorrectly detected
  • [X11] Bugfix: The EWMH code path for fullscreen windows did not present the window using _NET_ACTIVE_WINDOW
  • [X11] Bugfix: The EWMH code path for fullscreen windows did not send a _NET_WM_STATE client message
  • [Carbon] Added Universal Binary build targets for all examples
  • [Carbon] Renamed MacOSX port to Carbon
  • [Carbon] Removed support for 10.2 Jaguar
  • [Carbon] Deprecated Carbon port
  • [Carbon] Bugfix: Using the Dock or menu Quit command did not call the close callback
  • [Carbon] Bugfix: Key repeat events were not caught on 10.5 Leopard
  • [Carbon] Bugfix: Certain keys were not reported
  • [Carbon] Bugfix: Missing -m32 flag caused build failure on 10.6 Snow Leopard
  • [Carbon] Bugfix: Missing -mmacosx-version-min flag caused build failure on 10.5 Leopard
  • [Carbon] Bugfix: glfwOpenWindow did not call glClear
  • [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)

Version 2.6

Released on
  • 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
  • [X11] Added XRandR code path for fullscreen windows
  • [X11] Added building of shared library
  • [X11] Added ICCCM WM fullscreen hints
  • [X11] Added support for the _NET_WM_PING protocol
  • [X11] Added pkg-config file generation
  • [X11] Added setting of WM size hints
  • [X11] Bugfix: Removed assembly RDTSC timing code
  • [X11] Bugfix: Window re-opening now works properly (including fullscreen windows)
  • [X11] Bugfix: Potential crash bug in video mode matching code
  • [X11] Bugfix: Static buffers imposed an invisible limit on reported video mode count
  • [X11] Bugfix: Interaction with certain window managers when setting input focus would cause termination with a BadMatch error
  • [X11] Bugfix: Keypad keys did not trigger the character callback
  • [MacOSX] Added pkg-config file generation
  • [MacOSX] Added building of shared library
  • [MacOSX] Added building of Universal Binary libraries
  • [MacOSX] Replaced fullscreen code path with CGL version
  • [MacOSX] Bugfix: Binaries without bundles or resource forks now interact properly with the WM
  • [MacOSX] Bugfix: Replaced Carbon event time source with gettimeofday
  • [MacOSX] Bugfix: Added code to minimize the dreaded OpenGL application startup jump
  • [MacOSX] Bugfix: Fixed broken implementation of glfwSetMousePos for windowed mode
  • [MacOSX] Bugfix: Fixed broken implementation of hidden cursor
  • [MacOSX] Bugfix: Capturing all displays and not just the main one
  • [AmigaOS] Obsoleted platform due to lack of maintainer and community interest
  • [DOS] Obsoleted platform due to lack of maintainer and community interest

Version 2.5

Released on
  • 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
  • [Win32] Added support for up to five mouse buttons
  • [Win32] Mouse down events capture mouse input
  • [Win32] Bugfix: The DLL now exports glfwSetTime
  • [Win32] Fix: The GLFW window is now placed in the upper left corner of the desktop working area
  • [Win32/X11] Bugfix: More robust check for SwapInterval
  • [X11] Added support for USB joysticks under Linux (/dev/input/js*)
  • [X11] Bugfix: Added support for GLX extensions in glfwExtensionSupported
  • [X11] Bugfix: More robust fullscreen mode (?)
  • [X11] Bugfix: Runtime check of XF86VidMode support for the active display
  • [X11] Bugfix: Some mouse button events were reported incorrectly
  • [MacOSX] Added support for the input char callback.
  • [MacOSX] Added video mode validation and duplicate elimination.
  • [MacOSX] Switched to a new MakeBundle.sh script
  • [MacOSX] Added emulation of the window refresh callback.
  • [MacOSX] Bugfix: The window and its associated resources are now properly released.
  • [MacOSX] Bugfix: Removed support for more than eight mouse buttons.
  • [x86 CPUs] Improved Intel mobile CPU detection (e.g. disables RDTSC timing on Centrino systems)

Version 2.4.2

Released on
  • Preliminary native Mac OS X support (via the Carbon interface)
  • Preliminary DOS support (DJGPP + Mesa)
  • Changed license to the zlib license (almost identical to the previous GLFW license), so now GLFW is OSI Certified
  • Rewrote the GLFW documentation in LaTeX, meaning several improvements (both visual and practical)
  • Added the support folder to the distribution, which includes support for various languages
  • [Win32] Added OpenWatcom compiler support (thanks Sebastian Schuberth!)
  • [Win32] Changed fallback timer from GetTickCount to timeGetTime, which usually provides better resolution
  • [Win32] Bugfix: Accumulator buffer selection should be more robust
  • [Win32] Bugfix: If stereo rendering is requested, and no stereo pixel format could be created, glfwOpenWindow now fails
  • [Win32] Bugfix: glfwSetWindowSize now sets the size of the client area, NOT the entire window, meaning that there is a 1:1 relationship between glfwSetWindowSize and glfwGetWindowSize
  • [X11] Added FreeBSD and QNX support
  • [X11] Added support for non-pthread capable systems
  • [X11] Hopefully more robust configuration script (compile.sh)
  • [X11] Bugfix: When mouse cursor is hidden, mouse sensitivity is no longer degraded
  • [X11] Bugfix: Source files EOL was PC style (CR/LF) in Version 2.4.1 (blame my WinCVS configuration)
  • [X11] Bugfix: When a GLFW window is closed, input focus is properly released
  • [X11] Bugfix: Iconification of fullscreen windows should now work properly
  • [x86 CPUs] Improved RDTSC timing (e.g. RDTSC support on single-CPU Intel Hyper-Threading enabled systems)
  • [AmigaOS] Added joystick support
  • [AmigaOS] Mouse cursor positioning is now implemented
  • [AmigaOS] Added support for Geek Gadgets GCC
  • [AmigaOS] Bugfix: glfwGetWindowParam now returns proper values for all parameters (except for GLFW_ACCELERATED)

Version 2.4.1

Released on
  • Added AmigaOS support (preliminary)
  • GLFW for the X Window System now works under Mac OS X
  • [Win32] Bugfix: glfwWaitCond treated the timeout as milliseconds instead of seconds
  • [X11] Bugfix: GLFW should now compile under IRIX v5.3
  • [X11] Bugfix: GLFW should now compile with Kylix

Version 2.4

Released on
  • Major source code rearrangement - much code is now shared between different platforms, and it should be easier to port GLFW to new platforms
  • Added a Unicode keyboard text input interface (CharCallback)
  • Keyboard key input is now slightly more internationalized: GLFW now uses 8-bit ISO-8859-1 encoding for keys representing printable characters (e.g. "Ö", "§", etc), as opposed to the previous 7-bit US-ASCII encoding
  • Added more key constants (F13-F25, keypad ‘=’)
  • Added an enable/disable switch for automatic event polling from glfwSwapBuffers
  • [X11] Added support for sysctl for querying the number of processors in the system (if POSIX sysconf is not supported)
  • [X11] Bugfix: compile.sh now works with Sun sh (and hopefully others too)
  • [X11] Bugfix: compile.sh now detects the need for -ldl when dlopen is used
  • [Win32] Bugfix: When closing a fullscreen window under Win 9x/NT4, the task bar icon now disappears properly
  • [Win32] Bugfix: GLFW should now compile on a wider range of MSVC compilers (e.g. .NET) - Thanks Tim Little!

Version 2.3.2

Released on
  • Removed the silly limitation of 100 threads (the thread information is now kept in a linked list)
  • General source cleanup (window state is now kept in a single struct, plus some other minor changes)
  • [X11] Added Solaris gethrtime support (not tested yet), which should give an improved timer for Sun/Solaris stations
  • [X11] Some fixes to the compile.sh script (-O for non-gcc compilers and make x11-gcc should now really force GCC)

Version 2.3.1

Released on
  • [X11] A minimalist configuration script was added that solves the issue with glXGetProcAddressARB, and unifies all Unix/X11 Makefiles into one template Makefile (well, one for GLFW, and one for the examples)

Version 2.3

Released on
  • Added OpenGL stereo rendering support
  • Added a function for parsing the OpenGL version string (glfwGetGLVersion)
  • [x86] Bugfix: Hopefully the CPU core clock dependent timer RDTSC will never be used on CPUs with variable core frequencies anymore
  • [X11] Bugfix: GLFW could create stereo rendering capable windows, even if it was not requested (GLFW 2.2.x did not support selection of stereo rendering)
  • [X11] Bugfix: glfwGetProcAddress returned NULL on most systems (even on those that supported glXGetProcAddressARB). Now GLFW assumes that glXGetProcAddressARB is supported on all systems, which solves the bug, but may result in compiler errors on some systems (please let me know if you have any related problems).

Version 2.2.3

Released on
  • Bugfix: Checking for GL_SGIS_generate_mipmap is more robust
  • Bugfix: glfwLoadTexture2D will now fail if no window is opened
  • [Win32] Bugfix: Right shift was not detected under Win 9x/ME (it is still not as good as under NT/2K/XP, but at least you get right shifts)
  • [X11] Bugfix: Visuals are now selected more accurately. For instance, glfwOpenWindow will no longer fail if you request a 24-bit color buffer if only 16-bit color visuals are available (which means that pong3d should work on 16-bit displays).

Version 2.2.2

Released on
  • [Win32] Bugfix: Windows did not always get focus (this was a tough one!)
  • [Win32] Bugfix: glfwGetWindowParam did not work with GLFW_ACCUM_\*_BITS or GLFW_AUX_BUFFERS
  • [X11] Bugfix: Linux joystick Y axis positions were reversed

Version 2.2.1

Released on
  • [X11] Added joystick support for Linux

Version 2.2

Released on
  • Added joystick support (only supported under Windows so far)
  • Added joystick controls to pong3d.c (only 3 more lines of code)
  • Added glfwOpenWindowHint function
  • It is now possible to specify a desired vertical monitor refresh rate (for fullscreen windows)
  • It is now possible to request an accumulator buffer and auxiliary buffers
  • Added glfwSetTime function
  • Added a GLFW conversion of the MESA/GLUT gears.c demo to the example programs
  • [Win32] gdi32.dll and winmm.dll are now loaded dynamically when glfwInit is called. This means that there is no need to link with gdi32.lib or winmm.lib when using the static version of GLFW, which should make GLFW usage more convenient.
  • [Win32] Bugfix: Greatly improved keyboard input (detect left/right CTRL etc)
  • [Win32] Bugfix: glfwExtensionSupported now detects all WGL extensions (e.g. WGL_ARB_pbuffer)
  • [Win32] Bugfix: Mouse cursor was not re-hidden when a GLFW window was deselected and then selected again (with ALT+TAB)
  • [X11] Bugfix: Minor bug in the SGI timer - and ugly (unintended) SGI timer debug info removed
  • [X11] Bugfix: glfwGetDesktopMode and glfwGetVideoModes no longer give segmentation faults if no X server is available

Version 2.1

Released on
  • Added image and texture loading capabilities (support for the TGA file format at the moment)
  • Added a new example program (mipmaps.c) for showing off the automatic mipmap generation and texture loading capabilities of GLFW 2.1
  • Removed the separate TGA loader (tga.c in the examples directory) since texture loading is supported natively by GLFW. Also updated the Pong3D demo to use GLFW texture loading instead of tga.c.
  • Improved keyboard handling (e.g. numeric keypad keys can be detected)
  • Added a new example program, keytest.c
  • Changed the GLFWvidmode structure and the corresponding API functions to report pure color bits instead of the confusing (and unportable) “BPP” field
  • Changed glfwSetWindowSize so that it operates in fullscreen mode too
  • Added mouse wheel support under Windows (not Win95) and X11
  • Added window iconification functions (glfwInconifyWindow and glfwRestoreWindow)
  • Improved iconification and deactivation handling under both Windows and X11
  • Made it possible to turn on/off key repeat (the default is now no key repeat)
  • Added SGI hardware timer support (CLOCK_SGI_CYCLE) for improved timer resolution for SGI computers
  • Added support for the free Borland C++ Builder 5.x compiler for Windows
  • Made it possible to compiler GLFW as a Windows DLL using any of the supported compilers
  • Some constants have changed names (e.g. GLFW_REDBITS is now called GLFW_RED_BITS)
  • Updated GLFW documentation (GLFW Users Guide and GLFW Reference Manual) to reflect the changes in the API
  • [Win32] Bugfix: Corrected Cygwin toplevel makefile entry
  • [Win32] Bugfix: Fixed event lag bug
  • [Win32] Bugfix: Fixed Radeon 8500 crash
  • [X11] Bugfix: Fixed the window close bug
  • [X11] Bugfix: Iconification/deactivation is now detected
  • [X11] Bugfix: Non-OpenGL visuals are not listed anymore
  • [XFree86] Bugfix: Undesired video mode changes are now prevented

Version 2.0.3

Released on
  • Added precise CPU cycle based timing support (RDTSC) for x86 CPUs (under both Windows and Unix)
  • Added a makefile option for building for Windows with Cygwin
  • Corrected the CC for Unix/X11 makefiles (-Wall is usually not a supported flag for CC, so it was removed from the CFLAGS list)

Version 2.0.2

Released on
  • Added a makefile option for building for X11 with ‘cc’ rather than ‘gcc’ (useful for IRIX users for instance)
  • [Win32] Bugfix: Mouse coordinates are now relative to the window upper left corner, which also means that disabling the mouse cursor in windowed mode should work much better
  • [X11] Bugfix: Added a bunch of more keys that are recognized by GLFW
  • [X11] Bugfix: glfwGetNumberOfProcessors now works for IRIX (earlier versions of GLFW would not compile under IRIX)

Version 2.0.1

Released on
  • glfwTerminate will now be called automatically upon normal program termination (using atexit)
  • [Win32] Bugfix: Buffer-swapping did not work if a window lost focus
  • [Win32] Bugfix: Top level Makefile did not work under Windows 9x
  • [Win32] Bugfix: NULL declaration in glfw.h was not MSVC 7.x compatible
  • [X11] Bugfix: GLFW would not build with C++ (e.g. g++)

Version 2.0

Released on
  • GLFW is no longer a single source file, but an entire link library
  • Added multi threading support
  • Added more window control
  • New distribution layout (both Win32 and X11 version in same archive)
  • Added GLFW Users Manual and GLFW Reference Manual as PDF files
  • Some bugfixes

Version 1.0.2

Version 1.0.1

Version 1.0