diff --git a/README.md b/README.md index 328d743f..09c78c21 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,7 @@ GLFW 3 API. To compile GLFW and the accompanying example programs, you will need the [CMake](http://www.cmake.org/) build system. + ### Dependencies #### X11 dependencies @@ -36,12 +37,14 @@ Debian GNU/Linux, you need to install the `xorg-dev` and `libglu1-mesa-dev` packages. Note that using header files from Mesa *will not* tie your binary to the Mesa implementation of OpenGL. + ### CMake options There are a number of CMake build options for GLFW, although not all are available on all supported platforms. Some of these are de facto standards among CMake users and so have no `GLFW_` prefix. + #### Shared options `BUILD_SHARED_LIBS` determines whether GLFW is built as a static @@ -57,6 +60,7 @@ along with the library. `GLFW_BUILD_TESTS` determines whether the GLFW test programs are built along with the library. + #### Mac OS X specific options `GLFW_USE_CHDIR` determines whether `glfwInit` changes the current @@ -67,11 +71,13 @@ directory of bundled applications to the `Contents/Resources` directory. `GLFW_BUILD_UNIVERSAL` determines whether to build Universal Binaries. + #### Windows specific options `USE_MSVC_RUNTIME_LIBRARY_DLL` determines whether to use the DLL version of the Visual C++ runtime library. + #### EGL specific options `GLFW_USE_EGL` determines whether to use EGL instead of the platform-specific @@ -95,8 +101,8 @@ CMake. There are two aspects to using GLFW: - * Using the GLFW API - * Compiling and linking programs using the GLFW library + - Using the GLFW API + - Compiling and linking programs using the GLFW library The first point is covered in the WIP [reference manual](http://www.glfw.org/TEMP/3.0/). @@ -125,10 +131,10 @@ does not try to redefine those symbols. In other words: - * Do *not* include the OpenGL headers yourself, as GLFW does this for you - * Do *not* include `windows.h` or other platform-specific headers unless you + - Do *not* include the OpenGL headers yourself, as GLFW does this for you + - Do *not* include `windows.h` or other platform-specific headers unless you plan on using those APIs directly - * If you *do* need to include such headers, do it *before* including + - If you *do* need to include such headers, do it *before* including the GLFW one and it will detect this If you are using an OpenGL extension loading library such as @@ -136,6 +142,7 @@ If you are using an OpenGL extension loading library such as *before* the GLFW one. The GLEW header defines macros that disable any OpenGL header that the GLFW header includes and GLEW will work as expected. + #### GLFW header option macros These macros may be defined before the inclusion of the GLFW header. @@ -162,7 +169,6 @@ sense if you are using OpenGL. ### Link with the right libraries - #### Using GLFW from CMake The `GLFW_LIBRARIES` cache variable contains all link-time dependencies of GLFW @@ -197,7 +203,6 @@ dependencies, but you still have to link against `opengl32` if your program uses OpenGL and `glu32` if it uses GLU. - #### Unix library GLFW supports [pkg-config](http://www.freedesktop.org/wiki/Software/pkg-config/), @@ -255,180 +260,180 @@ GLFW. ## Changes for version 3.0 - * Added `GLFWmonitor` and updated monitor-related functions to take a monitor + - Added `GLFWmonitor` and updated monitor-related functions to take a monitor handle - * Added `glfwGetMonitors` and `glfwGetPrimaryMonitor` for enumerating available + - Added `glfwGetMonitors` and `glfwGetPrimaryMonitor` for enumerating available monitors - * Added `glfwGetMonitorPos`, `glfwGetMonitorPhysicalSize` and + - Added `glfwGetMonitorPos`, `glfwGetMonitorPhysicalSize` and `glfwGetMonitorName` for retrieving monitor properties - * Added `glfwSetMonitorCallback` and `GLFWmonitorfun` for notification of + - 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 + - Added `GLFWwindow` and updated window-related functions and callbacks to take a window handle - * Added `glfwSetWindowShouldClose` and `glfwWindowShouldClose` for setting and + - 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 + - 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 + - Added `glfwMakeContextCurrent` for making the context of the specified window current - * Added `glfwSetErrorCallback`, `GLFWerrorfun` and error type tokens for + - Added `glfwSetErrorCallback`, `GLFWerrorfun` and error type tokens for receiving error notifications - * Added `glfwSetWindowUserPointer` and `glfwGetWindowUserPointer` for + - Added `glfwSetWindowUserPointer` and `glfwGetWindowUserPointer` for per-window user pointers - * Added `glfwGetVersionString` for determining which code paths were enabled at + - Added `glfwGetVersionString` for determining which code paths were enabled at compile time - * Added `glfwGetWindowMonitor` for querying the monitor, if any, of the + - Added `glfwGetWindowMonitor` for querying the monitor, if any, of the specified window - * Added `glfwGetFramebufferSize` and `glfwSetFramebufferSizeCallback` for + - Added `glfwGetFramebufferSize` and `glfwSetFramebufferSizeCallback` for receiving the current size, in pixels, of the framebuffer - * Added `glfwSetWindowPosCallback` and `GLFWwindowposfun` for receiving window + - Added `glfwSetWindowPosCallback` and `GLFWwindowposfun` for receiving window position events - * Added `glfwSetWindowFocusCallback` and `GLFWwindowfocusfun` for receiving + - Added `glfwSetWindowFocusCallback` and `GLFWwindowfocusfun` for receiving window focus events - * Added `glfwSetWindowIconifyCallback` and `GLFWwindowiconifyfun` for receiving + - Added `glfwSetWindowIconifyCallback` and `GLFWwindowiconifyfun` for receiving window iconification events - * Added `glfwGetClipboardString` and `glfwSetClipboardString` for interacting + - 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 + - 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 + - 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`, + - 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 + - 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` + - 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 + - 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 + - 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 + - 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 + - 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 + - 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 + - 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 + - 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 + - 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 + - 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 + - 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 + - Replaced mouse wheel interface with two-dimensional, floating point scrolling interface - * Replaced `glfwEnable` and `glfwDisable` with `glfwGetInputMode` and + - 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 + - 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 + - Bugfix: The FSAA test did not check for the availability of `GL_ARB_multisample` - * Bugfix: Cursor centering upon leaving captured cursor mode was reported + - 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 + - [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 + - [Cocoa] Bugfix: The `NSOpenGLPFAFullScreen` pixel format attribute caused creation to fail on some machines - * [Cocoa] Bugfix: `glfwCreateWindow` did not properly enforce the + - [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 + - [Cocoa] Bugfix: The loop condition for saving video modes used the wrong index variable - * [Cocoa] Bugfix: The OpenGL framework was not retrieved, making + - [Cocoa] Bugfix: The OpenGL framework was not retrieved, making `glfwGetProcAddress` crash - * [Cocoa] Bugfix: `glfwInit` changed the current directory for unbundled + - [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 + - [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 + - [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 + - [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 + - [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 + - [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 + - [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 + - [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 + - [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 + - [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 + - [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 @@ -457,72 +462,72 @@ or you could join us on `#glfw`. GLFW exists because people around the world donated their time and lent their skills. - * Bobyshev Alexander - * artblanc - * Matt Arsenault - * Keith Bauer - * John Bartholomew - * Niklas Bergström - * blanco - * Lambert Clara - * Noel Cower - * Jarrod Davis - * Olivier Delannoy - * Paul R. Deppe - * Jonathan Dummer - * Ralph Eastwood - * Gerald Franz - * GeO4d - * Marcus Geelnard - * Stefan Gustavson - * Sylvain Hellegouarch - * heromyth - * Toni Jovanoski - * Osman Keskin - * Cameron King - * Peter Knut - * Robin Leffmann - * Glenn Lewis - * Shane Liesegang - * Дмитри Малышев - * Martins Mozeiko - * Tristam MacDonald - * Hans Mackowiak - * David Medlock - * Jonathan Mercier - * Marcel Metz - * Kenneth Miller - * Jeff Molofee - * Jon Morton - * Julian Møller - * Ozzy at Orkysquad - * Peoro - * Braden Pellett - * Arturo J. Pérez - * Jorge Rodriguez - * Ed Ropple - * Riku Salminen - * Sebastian Schuberth - * Matt Sealey - * SephiRok - * Steve Sexton - * Dmitri Shuralyov - * Daniel Skorupski - * Bradley Smith - * Julian Squires - * Johannes Stein - * Nathan Sweet - * TTK-Bandit - * Sergey Tikhomirov - * Samuli Tuomola - * Jari Vetoniemi - * Simon Voordouw - * Torsten Walluhn - * Jay Weisskopf - * Frank Wille - * yuriks - * Santi Zupancic - * Lasse Öörni - * All the unmentioned and anonymous contributors in the GLFW community, for bug + - Bobyshev Alexander + - artblanc + - Matt Arsenault + - Keith Bauer + - John Bartholomew + - Niklas Bergström + - blanco + - Lambert Clara + - Noel Cower + - Jarrod Davis + - Olivier Delannoy + - Paul R. Deppe + - Jonathan Dummer + - Ralph Eastwood + - Gerald Franz + - GeO4d + - Marcus Geelnard + - Stefan Gustavson + - Sylvain Hellegouarch + - heromyth + - Toni Jovanoski + - Osman Keskin + - Cameron King + - Peter Knut + - Robin Leffmann + - Glenn Lewis + - Shane Liesegang + - Дмитри Малышев + - Martins Mozeiko + - Tristam MacDonald + - Hans Mackowiak + - David Medlock + - Jonathan Mercier + - Marcel Metz + - Kenneth Miller + - Jeff Molofee + - Jon Morton + - Julian Møller + - Ozzy at Orkysquad + - Peoro + - Braden Pellett + - Arturo J. Pérez + - Jorge Rodriguez + - Ed Ropple + - Riku Salminen + - Sebastian Schuberth + - Matt Sealey + - SephiRok + - Steve Sexton + - Dmitri Shuralyov + - Daniel Skorupski + - Bradley Smith + - Julian Squires + - Johannes Stein + - Nathan Sweet + - TTK-Bandit + - Sergey Tikhomirov + - Samuli Tuomola + - Jari Vetoniemi + - Simon Voordouw + - Torsten Walluhn + - Jay Weisskopf + - Frank Wille + - yuriks + - Santi Zupancic + - Lasse Öörni + - All the unmentioned and anonymous contributors in the GLFW community, for bug reports, patches, feedback, testing and encouragement