| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | 
 | <html> | 
 | <head> | 
 |   <meta http-equiv="content-type" content="text/html; charset=UTF-8"> | 
 |   <title>GLFW Readme File</title> | 
 | </head> | 
 |  | 
 | <body> | 
 |  | 
 | <h1>GLFW 3.0 source distribution</h1> | 
 |  | 
 | <ol> | 
 |  <li><a href="#intro">Introduction</a></li> | 
 |  <li><a href="#compiling">Compiling GLFW and the example programs</a></li> | 
 |  <li><a href="#installing">Installing GLFW</a></li> | 
 |  <li><a href="#using">Using GLFW</a></li> | 
 |  <li><a href="#changelog">Version history</a></li> | 
 |  <li><a href="#structure">Directory structure of the GLFW distribution</a></li> | 
 |  <li><a href="#contact">Contacting the project</a></li> | 
 |  <li><a href="#credits">Acknowledgements</a></li> | 
 | </ol> | 
 |  | 
 |  | 
 | <a name="intro"></a> | 
 | <h2>1. Introduction</h2> | 
 |  | 
 | <p>Welcome to version 3.0 of the GLFW library.  GLFW is a free, open source, | 
 | portable library for OpenGL application development.  It provides a powerful | 
 | API for handling operating system specific tasks, such as opening an OpenGL | 
 | window, reading keyboard, mouse, joystick and time input, and more.</p> | 
 |  | 
 | <p>This is an <em>experimental</em> series intended to allow the new API to | 
 | settle.</p> | 
 |  | 
 | <p><strong>Note</strong> that the threading and image loading APIs from the 2.x | 
 | series have been removed.</p> | 
 |  | 
 |  | 
 | <a name="compiling"></a> | 
 | <h2>2. Compiling GLFW and the example programs</h2> | 
 |  | 
 | <p>To compile GLFW and the accompanying example programs, you will need the | 
 | <a href="http://www.cmake.org/">CMake</a> build system.</p> | 
 |  | 
 |  | 
 | <a name="installing"></a> | 
 | <h2>3. Installing GLFW</h2> | 
 |  | 
 | <p>A rudimentary installation target is provided for all supported platforms | 
 | via the CMake build system.</p> | 
 |  | 
 |  | 
 | <a name="using"></a> | 
 | <h2>4. Using GLFW</h2> | 
 |  | 
 | <p>There are two aspects to using GLFW:</p> | 
 |  | 
 | <ol> | 
 |   <li>How does the GLFW API work</li> | 
 |   <li>How to compile programs that use GLFW</li> | 
 | </ol> | 
 |  | 
 | <p>The first point is covered in the | 
 | <a href="docs/GLFWUsersGuide30.pdf">GLFW Users Guide</a> and the | 
 | <a href="docs/GLFWReference30.pdf">GLFW Reference Manual</a>, and we suggest | 
 | that you read at least the Users Guide, since it's a good introduction to the | 
 | GLFW API.</p> | 
 |  | 
 | <p>Designing and compiling programs that use GLFW is not very difficult. | 
 | A few rules for successfully designing GLFW-based programs are presented | 
 | in the following sections.</p> | 
 |  | 
 |  | 
 | <h3>4.1 Include the GLFW header file</h3> | 
 |  | 
 | <p>In the files of your program where you use OpenGL or GLFW, you should | 
 | include the <code>GL/glfw3.h</code> header file, i.e.:</p> | 
 |  | 
 | <blockquote><code>#include <GL/glfw3.h></code></blockquote> | 
 |  | 
 | <p>This defines all the constants, types and function prototypes of the GLFW | 
 | API.  It also includes the <code>gl.h</code> and </code>GL/glu.h</code> header | 
 | files, and - this is very important - <em>it defines all the necessary | 
 | constants and types that are necessary for the OpenGL headers to work on | 
 | different platforms</em>.</p> | 
 |  | 
 | <p>For example, under Microsoft Windows you are normally required to include | 
 | <code>windows.h</code> before you include <code>GL/gl.h</code>.  This would | 
 | however make your code dependent on the Windows platform, or at least require | 
 | your program to check which platform it is being compiled on. | 
 |  | 
 | The GLFW header file takes care of this for you, not by including | 
 | <code>windows.h</code>, but rather by itself duplicating the necessary parts of | 
 | it.  This way, the namespace won't be cluttered by the entire Windows API.</p> | 
 |  | 
 | <p>In other words: | 
 | <ul> | 
 |   <li>Do <em>not</em> include <code>GL/gl.h</code> or <code>GL/glu.h</code> | 
 |       yourself, as GLFW does this for you</li> | 
 |   <li>Do <em>not</em> include <code>windows.h</code> unless you actually need | 
 |       direct access to the Windows API</li> | 
 |   <li>If you <em>do</em> need to include <code>windows.h</code>, do it | 
 |       <em>before</em> including <code>GL/glfw3.h</code> and the GLFW header will | 
 |       detect this.</p> | 
 | </ul> | 
 |  | 
 | <p>Also note that if you are using an OpenGL extension loading library such as | 
 | <a href="http://glew.sourceforge.net/">GLEW</a>, you should include the GLEW | 
 | header <em>before</em> the GLFW one.  The GLEW header defines macros that | 
 | disable any <code>gl.h</code> that the GLFW header includes and GLEW will work | 
 | as expected.</p> | 
 |  | 
 |  | 
 | <h3>4.2 Link with the right libraries</h3> | 
 |  | 
 |  | 
 | <h4>4.2.1 Windows static library</h4> | 
 |  | 
 | <p>If you link with the static version of GLFW, it is also necessary to | 
 | link with some system libraries that GLFW uses.</p> | 
 |  | 
 | <p>When linking a program under Windows that uses the static version of GLFW, | 
 | you must also link with the following libraries: <code>opengl32</code>, | 
 | <code>user32</code> and <code>kernel32</code>. Some of these libraries may be | 
 | linked with by default by your compiler. In the table below you can see the | 
 | minimum required link options for each supported Windows compiler (you may want | 
 | to add other libraries as well, such as <code>glu32</code>):</p> | 
 |  | 
 | <table border=1> | 
 |   <tr> | 
 |     <td><b>Compiler</b></td> | 
 |     <td><b>Link options</b></td> | 
 |   </tr> | 
 |   <tr> | 
 |     <td>Borland C++ Builder</td> | 
 |     <td><code>glfw.lib opengl32.lib</code></td> | 
 |   </tr> | 
 |   <tr> | 
 |     <td>Cygwin</td> | 
 |     <td><i>See Unix static library below</i></td> | 
 |   </tr> | 
 |   <tr> | 
 |     <td>LCC-Win32</td> | 
 |     <td><code>glfw.lib opengl32.lib</code></td> | 
 |   </tr> | 
 |   <tr> | 
 |     <td>Microsoft Visual C++</td> | 
 |     <td><code>glfw.lib opengl32.lib user32.lib</code></td> | 
 |   </tr> | 
 |   <tr> | 
 |     <td>MinGW32</td> | 
 |     <td><code>-lglfw -lopengl32</code></td> | 
 |   </tr> | 
 |   <tr> | 
 |     <td>OpenWatcom</td> | 
 |     <td><code>glfw.lib opengl32.lib user32.lib</code></td> | 
 |   </tr> | 
 | </table> | 
 |  | 
 |  | 
 | <h4>4.2.2 Windows DLL</h4> | 
 |  | 
 | <p>To compile a program that uses the DLL version of GLFW, you need to | 
 | define the <code>GLFW_DLL</code> constant. This can either be done with a | 
 | compiler switch, typically by adding <code>-DGLFW_DLL</code> to the list of | 
 | compiler options. You can also do it by adding the following line to all your | 
 | source files <b>before</b> including the GLFW header file:</p> | 
 |  | 
 | <blockquote><code>#define GLFW_DLL</code></blockquote> | 
 |  | 
 | <p>When linking a program under Windows that uses the DLL version of GLFW, | 
 | the only library you need to link with for GLFW to work is <code>glfwdll</code>. | 
 | In the table below you can see the minimum required link options for each | 
 | supported Windows compiler (you may want to add other libraries as well, | 
 | such as <code>opengl32</code> and <code>glu32</code>):</p> | 
 |  | 
 | <table border=1> | 
 |   <tr> | 
 |     <td><b>Compiler</b></td> | 
 |     <td><b>Link options</b></td> | 
 |   </tr> | 
 |   <tr> | 
 |     <td>Borland C++ Builder</td> | 
 |     <td><code>glfwdll.lib</code></td> | 
 |   </tr> | 
 |   <tr> | 
 |     <td>Cygwin</td> | 
 |     <td><code>-lglfwdll</code></td> | 
 |   </tr> | 
 |   <tr> | 
 |     <td>LCC-Win32</td> | 
 |     <td><code>glfwdll.lib</code></td> | 
 |   </tr> | 
 |   <tr> | 
 |     <td>Microsoft Visual C++</td> | 
 |     <td><code>glfwdll.lib</code></td> | 
 |   </tr> | 
 |   <tr> | 
 |     <td>MinGW32</td> | 
 |     <td><code>-lglfwdll</code></td> | 
 |   </tr> | 
 |   <tr> | 
 |     <td>OpenWatcom</td> | 
 |     <td><code>glfwdll.lib</code></td> | 
 |   </tr> | 
 | </table> | 
 |  | 
 |  | 
 |  | 
 | <h4>4.2.3 Unix static library</h4> | 
 |  | 
 | <p>GLFW supports | 
 | <a href="http://pkgconfig.freedesktop.org/wiki/">pkg-config</a>, | 
 | and a <code>libglfw.pc</code> file is generated and installed when you install | 
 | the library.  For systems that do not provide pkg-config, you should look in | 
 | this file for the proper compile and link flags for your system, as determined | 
 | by compile.sh at compile time.</p> | 
 |  | 
 | <p>A typical compile and link command-line may look like this:</p> | 
 |  | 
 | <blockquote><code>cc `pkg-config --cflags libglfw` -o myprog myprog.c `pkg-config --libs libglfw`</code></blockquote> | 
 |  | 
 | <p>If you use GLU functions in your program you should also add | 
 | <code>-lGLU</code> to your link flags.</p> | 
 |  | 
 |  | 
 | <h4>4.2.5 Mac OS X static library</h4> | 
 |  | 
 | <p>When compiling and linking a program under Mac OS X that uses GLFW, you | 
 | must also link with Cocoa and OpenGL frameworks. | 
 |  | 
 | <p>If you are using Xcode, you simply add the GLFW library <code>libglfw.a</code> and | 
 | these frameworks to your project. If, however, you are building your program | 
 | from the command-line, there are two methods for correctly linking your GLFW | 
 | program.</p> | 
 |  | 
 | <p>GLFW supports | 
 | <a href="http://pkgconfig.freedesktop.org/wiki/">pkg-config</a>, and a | 
 | libglfw.pc file is generated and installed when you install the library. You | 
 | can find pkg-config in most packaging systems, such as | 
 | <a href="http://www.finkproject.org/">Fink</a> and | 
 | <a href="http://www.macports.org/">MacPorts</a>, so if you have one of them | 
 | installed, simply install pkg-config. Once you have pkg-config available, the | 
 | command-line for compiling and linking your program is:</p> | 
 |  | 
 | <blockquote><code>cc `pkg-config --cflags libglfw` -o myprog myprog.c `pkg-config --libs libglfw`</code></blockquote> | 
 |  | 
 | <p>If you do not wish to use pkg-config, you will need to add the required | 
 | frameworks and libraries to your command-line using the <code>-l</code> and | 
 | <code>-framework</code> switches, i.e.:</p> | 
 |  | 
 | <blockquote><code>cc -o myprog myprog.c -lglfw -framework Cocoa -framework OpenGL</code></blockquote> | 
 |  | 
 | <p>Note that you do not add the .framework extension to a framework when adding | 
 | it from the command-line.</p> | 
 |  | 
 | <p>These frameworks contain all OpenGL and GLU functions, so there is no need to | 
 | add additional libraries or frameworks when using GLU functionality. Also note | 
 | that even though your machine may have Unix-style OpenGL libraries, they are for | 
 | use with the X Window System, and will <em>not</em> work with the Mac OS X native | 
 | version of GLFW.</p> | 
 |  | 
 |  | 
 | <a name="changelog"></a> | 
 | <h2>5. Version history</h2> | 
 |  | 
 |  | 
 | <h3>v3.0</h3> | 
 | <ul> | 
 |   <li>Added <code>GLFWmonitor</code> monitor handle type and updated monitor-related functions to take a monitor handle</li> | 
 |   <li>Added <code>glfwGetMonitors</code> and <code>glfwGetPrimaryMonitor</code> for enumerating available monitors</li> | 
 |   <li>Added <code>glfwGetMonitorParam</code> and <code>glfwGetMonitorName</code> for retrieving monitor properties</li> | 
 |   <li>Added <code>glfwSetMonitorCallback</code> and <code>GLFWmonitorfun</code> for notification of changes in the set of available monitors</li> | 
 |   <li>Added <code>GLFWwindow</code> window handle type and updated window-related functions and callbacks to take a window handle</li> | 
 |   <li>Added <code>glfwDefaultWindowHints</code> function for resetting all window hints to their default values</li> | 
 |   <li>Added <code>glfwMakeContextCurrent</code> function for making the context of the specified window current</li> | 
 |   <li>Added <code>glfwSetErrorCallback</code> function and <code>GLFWerrorfun</code> type for receiving error descriptions</li> | 
 |   <li>Added <code>glfwSetWindowUserPointer</code> and <code>glfwGetWindowUserPointer</code> functions for per-window user pointers</li> | 
 |   <li>Added <code>glfwGetVersionString</code> function for determining which code paths were enabled at compile time</li> | 
 |   <li>Added <code>glfwGetWindowMonitor</code> for querying the monitor, if any, of the specified window</li> | 
 |   <li>Added <code>glfwSetWindowPosCallback</code> function and <code>GLFWwindowposfun</code> type for reciving window position events</li> | 
 |   <li>Added <code>glfwSetWindowFocusCallback</code> function and <code>GLFWwindowfocusfun</code> type for receiving window focus events</li> | 
 |   <li>Added <code>glfwSetWindowIconifyCallback</code> function and <code>GLFWwindowiconifyfun</code> type for receiving window iconification events</li> | 
 |   <li>Added <code>glfwGetClipboardString</code> and <code>glfwSetClipboardString</code> functions for interacting with the system clipboard</li> | 
 |   <li>Added <code>glfwGetJoystickName</code> for retrieving the name of a joystick</li> | 
 |   <li>Added <code>glfwGetCurrentContext</code> function for retrieving the window whose OpenGL context is current</li> | 
 |   <li>Added <code>GLFW_SRGB_CAPABLE</code> for requesting sRGB capable framebuffers</li> | 
 |   <li>Added <code>GLFW_CLIENT_API</code>, <code>GLFW_OPENGL_API</code> and <code>GLFW_OPENGL_ES_API</code> for selecting client API</li> | 
 |   <li>Added <code>GLFW_OPENGL_ROBUSTNESS</code> window hint and associated strategy tokens for <code>GL_ARB_robustness</code> support</li> | 
 |   <li>Added <code>GLFW_OPENGL_REVISION</code> window parameter to make up for removal of <code>glfwGetGLVersion</code></li> | 
 |   <li>Added <code>GLFW_INCLUDE_GLCOREARB</code> macro for including <code>glcorearb.h</code> instead of <code>gl.h</code></li> | 
 |   <li>Added <code>GLFW_INCLUDE_ES2</code> macro for telling the GLFW header to include the OpenGL ES 2.0 header instead of <code>gl.h</code></li> | 
 |   <li>Added <code>GLFW_VISIBLE</code> window hint and parameter for controlling and polling window visibility</li> | 
 |   <li>Added <code>GLFW_POSITION_X</code> and <code>GLFW_POSITION_Y</code> window hints and parameter for controlling and polling window position</li> | 
 |   <li>Added <code>windows</code> simple multi-window test program</li> | 
 |   <li>Added <code>sharing</code> simple OpenGL object sharing test program</li> | 
 |   <li>Added <code>modes</code> video mode enumeration and setting test program</li> | 
 |   <li>Added <code>threads</code> simple multi-threaded rendering test program</li> | 
 |   <li>Added <code>glfw3native.h</code> header and platform-specific functions for explicit access to native display, window and context handles</li> | 
 |   <li>Added <code>glfwSetGamma</code>, <code>glfwSetGammaRamp</code> and <code>glfwGetGammaRamp</code> functions and <code>GLFWgammaramp</code> type for monitor gamma ramp control</li> | 
 |   <li>Added window parameter to <code>glfwSwapBuffers</code></li> | 
 |   <li>Changed buffer bit depth parameters of <code>glfwOpenWindow</code> to window hints</li> | 
 |   <li>Changed <code>glfwOpenWindow</code> and <code>glfwSetWindowTitle</code> to use UTF-8 encoded strings</li> | 
 |   <li>Changed <code>glfwGetProcAddress</code> to return a (generic) function pointer</li> | 
 |   <li>Changed <code>glfwGetVideoModes</code> to return a dynamic, unlimited number of video modes for the specified monitor</li> | 
 |   <li>Renamed <code>glfw.h</code> to <code>glfw3.h</code> to avoid conflicts with 2.x series</li> | 
 |   <li>Renamed <code>glfwOpenWindowHint</code> to <code>glfwWindowHint</code></li> | 
 |   <li>Renamed <code>GLFW_ACTIVE</code> to <code>GLFW_FOCUSED</code></li> | 
 |   <li>Renamed <code>GLFW_FSAA_SAMPLES</code> to <code>GLFW_SAMPLES</code></li> | 
 |   <li>Renamed <code>GLFW_WINDOW_NO_RESIZE</code> to <code>GLFW_RESIZABLE</code></li> | 
 |   <li>Renamed <code>GLFW_BUILD_DLL</code> to <code>_GLFW_BUILD_DLL</code></li> | 
 |   <li>Renamed <code>version</code> test to <code>glfwinfo</code></li> | 
 |   <li>Renamed <code>GLFW_NO_GLU</code> to <code>GLFW_INCLUDE_GLU</code> and made it disabled by default</li> | 
 |   <li>Renamed <code>glfwGetJoystickPos</code> to <code>glfwGetJoystickAxes</code> to match <code>glfwGetJoystickButtons</code></li> | 
 |   <li>Renamed mouse position functions to cursor position equivalents</li> | 
 |   <li>Replaced <code>glfwOpenWindow</code> and <code>glfwCloseWindow</code> with <code>glfwCreateWindow</code> and <code>glfwDestroyWindow</code></li> | 
 |   <li>Replaced <code>glfwGetDesktopMode</code> width <code>glfwGetVideoMode</code></li> | 
 |   <li>Replaced ad hoc build system with CMake</li> | 
 |   <li>Replaced layout-dependent key codes with single, platform-independent set based on US layout</li> | 
 |   <li>Replaced mouse wheel interface with two-dimensional, floating point scrolling interface</li> | 
 |   <li>Replaced <code>glfwEnable</code> and <code>glfwDisable</code> with <code>glfwGetInputMode</code> and <code>glfwSetInputMode</code></li> | 
 |   <li>Replaced <code>joystick</code> test with graphical version</li> | 
 |   <li>Replaced automatic closing of windows with <code>GLFW_SHOULD_CLOSE</code> window parameter</li> | 
 |   <li>Removed the <code>GLFW_KEY_REPEAT</code> input option</li> | 
 |   <li>Removed event auto-polling and the <code>GLFW_AUTO_POLL_EVENTS</code> window enable</li> | 
 |   <li>Removed the Win32 port .def files</li> | 
 |   <li>Removed the entire threading API</li> | 
 |   <li>Removed the entire image loading API</li> | 
 |   <li>Removed deprecated Carbon port</li> | 
 |   <li>Removed registering <code>glfwTerminate</code> with <code>atexit</code></li> | 
 |   <li>Removed <code>glfwSleep</code> function</li> | 
 |   <li>Removed <code>glfwGetNumberOfProcessors</code> function</li> | 
 |   <li>Removed <code>glfwGetGLVersion</code> function</li> | 
 |   <li>Removed <code>GLFW_OPENED</code> window parameter</li> | 
 |   <li>Removed <code>GLFW_WINDOW</code> and <code>GLFW_FULLSCREEN</code></li> | 
 |   <li>Removed nonsensical key actions for Unicode character input</li> | 
 |   <li>Removed <code>GLFWCALL</code> and <code>GLFWAPIENTRY</code> macros for stdcall calling convention</li> | 
 |   <li>Removed <code>GLFW_ACCELERATED</code> window parameter</li> | 
 |   <li>Removed default framebuffer attributes from <code>glfwGetWindowParam</code></li> | 
 |   <li>Bugfix: The default OpenGL version in the <code>glfwinfo</code> test was set to 1.1</li> | 
 |   <li>Bugfix: The OpenGL profile and forward-compatibility window parameters were not saved after context creation</li> | 
 |   <li>Bugfix: The FSAA test did not check for the availability of <code>GL_ARB_multisample</code></li> | 
 |   <li>Bugfix: Cursor centering upon leaving captured cursor mode was reported before the mode was changed to non-captured</li> | 
 |   <li>[Cocoa] Added support for OpenGL 3.2 core profile in 10.7 Lion and above</li> | 
 |   <li>[Cocoa] Added support for joysticks</li> | 
 |   <li>[Cocoa] Postponed menu creation to first window creation</li> | 
 |   <li>[Cocoa] Replaced <code>NSDate</code> time source with <code>mach_absolute_time</code></li> | 
 |   <li>[Cocoa] Replaced all deprecated CoreGraphics calls with non-deprecated counterparts</li> | 
 |   <li>[Cocoa] Bugfix: The <code>NSOpenGLPFAFullScreen</code> pixel format attribute caused creation to fail on some machines</li> | 
 |   <li>[Cocoa] Bugfix: <code>glfwOpenWindow</code> did not properly enforce the forward-compatible and context profile hints</li> | 
 |   <li>[Cocoa] Bugfix: The loop condition for saving video modes used the wrong index variable</li> | 
 |   <li>[Cocoa] Bugfix: The OpenGL framework was not retrieved, making glfwGetProcAddress crash</li> | 
 |   <li>[Cocoa] Bugfix: <code>glfwInit</code> changed the current directory for unbundled executables</li> | 
 |   <li>[Cocoa] Bugfix: The <code>GLFW_WINDOW_NO_RESIZE</code> window parameter was always zero</li> | 
 |   <li>[Cocoa] Bugfix: The cursor position incorrectly rounded during conversion</li> | 
 |   <li>[Cocoa] Bugfix: Cursor positioning led to nonsensical results for fullscreen windows</li> | 
 |   <li>[Cocoa] Bugfix: The GLFW window was flagged as restorable</li> | 
 |   <li>[X11] Added support for the <code>GLX_EXT_swap_control</code> and <code>GLX_MESA_swap_control</code> extensions as alternatives to <code>GLX_SGI_swap_control</code></li> | 
 |   <li>[X11] Added the POSIX <code>CLOCK_MONOTONIC</code> time source as the preferred method</li> | 
 |   <li>[X11] Added dependency on libm, where present</li> | 
 |   <li>[X11] Added support for the <code>_NET_WM_NAME</code> and <code>_NET_WM_ICON_NAME</code> EWMH window properties</li> | 
 |   <li>[X11] Made client-side RandR and Xf86VidMode extensions required</li> | 
 |   <li>[X11] Bugfix: Some window properties required by the ICCCM were not set</li> | 
 |   <li>[X11] Bugfix: Calling <code>glXCreateContextAttribsARB</code> with an unavailable OpenGL version caused the application to terminate with a <code>BadMatch</code> Xlib error</li> | 
 |   <li>[X11] Bugfix: A synchronization point necessary for jitter-free locked cursor mode was incorrectly removed</li> | 
 |   <li>[X11] Bugfix: The window size hints were not updated when calling <code>glfwSetWindowSize</code> on a non-resizable window</li> | 
 |   <li>[Win32] Changed port to use Unicode mode only</li> | 
 |   <li>[Win32] Removed explicit support for versions of Windows older than Windows XP</li> | 
 |   <li>[Win32] Bugfix: Window activation and iconification did not work as expected</li> | 
 |   <li>[Win32] Bugfix: Software rasterizer pixel formats were not discarded by the WGL_ARB_pixel_format code path</li> | 
 |   <li>[Win32] Bugfix: The array for WGL context attributes was too small and could overflow</li> | 
 |   <li>[Win32] Bugfix: Alt+F4 hot key was not translated into <code>WM_CLOSE</code></li> | 
 |   <li>[Win32] Bugfix: The <code>GLFW_WINDOW_NO_RESIZE</code> window parameter was always zero</li> | 
 |   <li>[Win32] Bugfix: A test was missing for whether all available pixel formats had been disqualified</li> | 
 | </ul> | 
 |  | 
 | <h3>v2.7</h3> | 
 | <ul> | 
 |   <li>Added <code>GLFW_OPENGL_VERSION_MAJOR</code> and <code>GLFW_OPENGL_VERSION_MINOR</code> | 
 |       hints for versioned context creation</li> | 
 |   <li>Added <code>GLFW_OPENGL_FORWARD_COMPAT</code> hint for forward compatible context creation</li> | 
 |   <li>Added <code>GLFW_OPENGL_DEBUG_CONTEXT</code> hint for debug context creation</li> | 
 |   <li>Added <code>GLFW_OPENL_PROFILE</code> hint for context creation using profiles</li> | 
 |   <li>Added <code>GLFW_NO_GLU</code> macro for disabling the inclusion of the GLU header by the GLFW header</li> | 
 |   <li>Added platform-independent pixel format selection (not used on Mac OS X)</li> | 
 |   <li>Added support and symbols for several additional keys, including Windows/Command keys, Pause, Caps Lock and Menu</li> | 
 |   <li>Added conservative value clamping to <code>glfwOpenWindowHint</code></li> | 
 |   <li>Added a number of test programs mostly useful to developers of GLFW</li> | 
 |   <li>Added error messages and graceful failure to example programs</li> | 
 |   <li>Added Cocoa port for Mac OS X 10.5 Leopard and later</li> | 
 |   <li>Added vsync to all relevant example programs</li> | 
 |   <li>Added a rudimentary OpenGL 3.2+ core profile example program</li> | 
 |   <li>Updated Pascal (formerly Delphi) bindings to support more compilers</li> | 
 |   <li>Clarified and expanded the User's Guide and Reference Manual</li> | 
 |   <li>Fixed a number of compiler warnings in the example programs</li> | 
 |   <li>OpenGL version is now only parsed once, at window creation time</li> | 
 |   <li>Changed <code>glfwSwapBuffers</code> to call <code>glfwPollEvents</code> <em>after</em> buffer swap</li> | 
 |   <li>Changed all comments in public header file to plain C style</li> | 
 |   <li>Removed the <code>keytest</code> example program, as it was superseded by the <code>events</code> test</li> | 
 |   <li>Removed deprecated AmigaOS and DOS ports</li> | 
 |   <li>Removed all FPS counters from example programs</li> | 
 |   <li>Removed all unmaintained language bindings</li> | 
 |   <li>Removed support for Pelles C</li> | 
 |   <li>Removed broken Microsoft Visual C++ 6.0 build path</li> | 
 |   <li>[X11] Added <code>x11-dist-install</code> install target, intended for packagers of GLFW</li> | 
 |   <li>[X11] Added <code>x11-dist-clean</code> build target, intended for developers of GLFW</li> | 
 |   <li>[X11] Added support for <code>GLX_SGIX_fbconfig</code></li> | 
 |   <li>[X11] Added support for user-specified compilation flags via <code>CFLAGS</code></li> | 
 |   <li>[X11] Added documentation of configuration macros</li> | 
 |   <li>[X11] Implemented support for <code>GLFW_SYSTEM_KEYS</code></li> | 
 |   <li>[X11] Improved configuration and makefile creation logic</li> | 
 |   <li>[X11] Removed support for GLX version 1.2 and below</li> | 
 |   <li>[X11] Removed unnecessary calls to XSync</li> | 
 |   <li>[X11] Removed use of legacy window style atoms</li> | 
 |   <li>[X11] Bugfix: Repeated keys would sometimes leak through despite key repeat being disabled</li> | 
 |   <li>[X11] Bugfix: Fullscreen window resizing would cause color buffer clearing without taking framebuffer objects into account</li> | 
 |   <li>[X11] Bugfix: AltGr was not reported as right Alt</li> | 
 |   <li>[X11] Bugfix: Window colormap was not freed</li> | 
 |   <li>[X11] Bugfix: Close callback was called for <code>glfwCloseWindow</code></li> | 
 |   <li>[X11] Bugfix: Misspelt struct member in XF86VidMode code path</li> | 
 |   <li>[X11] Bugfix: Window decorations would not appear using certain versions of Compiz on Intel hardware</li> | 
 |   <li>[X11] Bugfix: Numeric keypad key symbols would change depending on Num Lock state</li> | 
 |   <li>[X11] Bugfix: Hidden cursor position snapped back when halfway from window center to edge</li> | 
 |   <li>[X11] Bugfix: Not properly verifying that the window was mapped before making certain calls caused a <code>BadMatch</code> error</li> | 
 |   <li>[X11] Bugfix: The response to <code>_NET_WM_PING</code> events was malformed</li> | 
 |   <li>[X11] Bugfix: Hidden cursor mode interfered with other applications when GLFW window was unfocused</li> | 
 |   <li>[X11] Bugfix: The invisible cursor objects used for hidden cursor mode were not freed</li> | 
 |   <li>[X11] Bugfix: EWMH-compliant window managers were incorrectly detected</li> | 
 |   <li>[X11] Bugfix: The EWMH code path for fullscreen windows did not present the window using <code>_NET_ACTIVE_WINDOW</code></li> | 
 |   <li>[X11] Bugfix: The EWMH code path for fullscreen windows did not send a <code>_NET_WM_STATE</code> client message</li> | 
 |   <li>[Carbon] Added Universal Binary build targets for all examples</li> | 
 |   <li>[Carbon] Renamed MacOSX port to Carbon</li> | 
 |   <li>[Carbon] Removed support for 10.2 Jaguar</li> | 
 |   <li>[Carbon] Deprecated Carbon port</li> | 
 |   <li>[Carbon] Bugfix: Using the Dock or menu Quit command did not call the close callback</li> | 
 |   <li>[Carbon] Bugfix: Key repeat events were not caught on 10.5 Leopard</li> | 
 |   <li>[Carbon] Bugfix: Certain keys were not reported</li> | 
 |   <li>[Carbon] Bugfix: Missing <code>-m32</code> flag caused build failure on 10.6 Snow Leopard</li> | 
 |   <li>[Carbon] Bugfix: Missing <code>-mmacosx-version-min</code> flag caused build failure on 10.5 Leopard</li> | 
 |   <li>[Carbon] Bugfix: <code>glfwOpenWindow</code> did not call <code>glClear</code></li> | 
 |   <li>[Win32] Added Visual C++ project files for all examples and test programs</li> | 
 |   <li>[Win32] Removed iterative context re-creation attempts for FSAA sample count</li> | 
 |   <li>[Win32] Bugfix: The Visual C++ GLFW DLL project file did not use the correct DEF file</li> | 
 |   <li>[Win32] Bugfix: WGL extensions were not detected and/or used correctly</li> | 
 |   <li>[Win32] Bugfix: Improper use of wParam for <code>WM_SYSCOMMAND</code></li> | 
 |   <li>[Win32] Bugfix: Derivatives of stream.c were not cleaned up by compile.bat</li> | 
 |   <li>[Win32] Bugfix: Pointer for <code>GetExtensionsStringARB</code> was not initialized</li> | 
 |   <li>[Win32] Bugfix: Makefiles contained the wrong GLFW API version</li> | 
 |   <li>[Win32] Bugfix: Numeric keypad key symbols would change depending on Num Lock state</li> | 
 |   <li>[Win32] Bugfix: <code>DllMain</code> performed a number of forbidden actions (by calling <code>glfwTerminate</code>)</li> | 
 | </ul> | 
 |  | 
 | <h3>v2.6</h3> | 
 | <ul> | 
 |   <li>Added <code>GLFW_FSAA_SAMPLES</code> multisampling hint</li> | 
 |   <li>Added <code>GLFW_WINDOW_NO_RESIZE</code> hint for non-resizable windows</li> | 
 |   <li>Added install targets for all Unix-like build targets</li> | 
 |   <li>Added <code>glfwReadMemoryImage</code> function for creating a <code>GLFWImage</code> object from an image file in a memory buffer</li> | 
 |   <li>Added <code>glfwLoadMemoryTexture2D</code> function for decoding an image file in a memory buffer into a texture</li> | 
 |   <li>Added <code>glfwLoadTextureImage2D</code> function for loading a <code>GLFWImage</code> object into a texture</li> | 
 |   <li>Added cross-compilation support for MinGW under a Unix-like host</li> | 
 |   <li>D bindings updated and all examples ported to modern D</li> | 
 |   <li>Delphi bindings updated to reflect API additions</li> | 
 |   <li>Bugfix: The interaction between key repeat and window focus code caused duplicate presses</li> | 
 |   <li>Bugfix: The mouse position was not properly updated when re-enabling the mouse cursor</li> | 
 |   <li>[Win32] Added pkg-config file generation for Cygwin</li> | 
 |   <li>[Win32] Added version number to window class name</li> | 
 |   <li>[Win32] Added optional loading of user provided window icon resource</li> | 
 |   <li>[Win32] Bugfix: Very small sleep periods were forced to higher value</li> | 
 |   <li>[Win32] Bugfix: The nmake makefile did not handle paths with spaces correctly</li> | 
 |   <li>[Win32] Bugfix: Removed assembly RDTSC timing code</li> | 
 |   <li>[Win32] Bugfix: Hidden cursor was not clipped to windowed windows</li> | 
 |   <li>[X11] Added XRandR code path for fullscreen windows</li> | 
 |   <li>[X11] Added building of shared library</li> | 
 |   <li>[X11] Added <a href="http://tronche.com/gui/x/icccm/">ICCCM</a> WM fullscreen hints</li> | 
 |   <li>[X11] Added support for the <code>_NET_WM_PING</code> protocol</li> | 
 |   <li>[X11] Added pkg-config file generation</li> | 
 |   <li>[X11] Added setting of WM size hints</li> | 
 |   <li>[X11] Bugfix: Removed assembly RDTSC timing code</li> | 
 |   <li>[X11] Bugfix: Window re-opening now works properly (including fullscreen windows)</li> | 
 |   <li>[X11] Bugfix: Potential crash bug in video mode matching code</li> | 
 |   <li>[X11] Bugfix: Static buffers imposed an invisible limit on reported video mode count</li> | 
 |   <li>[X11] Bugfix: Interaction with certain window managers when setting input focus would cause termination with a BadMatch error</li> | 
 |   <li>[X11] Bugfix: Keypad keys did not trigger the character callback</li> | 
 |   <li>[MacOSX] Added pkg-config file generation</li> | 
 |   <li>[MacOSX] Added building of shared library</li> | 
 |   <li>[MacOSX] Added building of Universal Binary libraries</li> | 
 |   <li>[MacOSX] Replaced fullscreen code path with CGL version</li> | 
 |   <li>[MacOSX] Bugfix: Binaries without bundles or resource forks now interact properly with the WM</li> | 
 |   <li>[MacOSX] Bugfix: Replaced Carbon event time source with <code>gettimeofday</code></li> | 
 |   <li>[MacOSX] Bugfix: Added code to minimize the dreaded OpenGL application startup jump</li> | 
 |   <li>[MacOSX] Bugfix: Fixed broken implementation of <code>glfwSetMousePos</code> for windowed mode</li> | 
 |   <li>[MacOSX] Bugfix: Fixed broken implementation of hidden cursor</li> | 
 |   <li>[MacOSX] Bugfix: Capturing all displays and not just the main one</li> | 
 |   <li>[AmigaOS] Obsoleted platform due to lack of maintainer and community interest</li> | 
 |   <li>[DOS] Obsoleted platform due to lack of maintainer and community interest</li> | 
 | </ul> | 
 |  | 
 | <h3>v2.5</h3> | 
 | <ul> | 
 |  <li>Added the function glfwWaitEvents</li> | 
 |  <li>Added window close callback, which enables a program to prevent a user | 
 |      from closing a window with the window manager</li> | 
 |  <li>Added window refresh callback, which is called when the window needs | 
 |      to be refreshed</li> | 
 |  <li>Added support for loading alpha textures (GLFW_ALPHA_MAP_BIT)</li> | 
 |  <li>Added support for the Lua programming language</li> | 
 |  <li>Added support for the D programming language</li> | 
 |  <li>Added support for the Pelles C compiler for Windows</li> | 
 |  <li>Added API level support for up to eight mouse buttons</li> | 
 |  <li>[Win32] Added support for up to five mouse buttons</li> | 
 |  <li>[Win32] Mouse down events capture mouse input</li> | 
 |  <li>[Win32] Bugfix: The DLL now exports glfwSetTime</li> | 
 |  <li>[Win32] Fix: The GLFW window is now placed in the upper left corner | 
 |      of the desktop working area</li> | 
 |  <li>[Win32/X11] Bugfix: More robust check for SwapInterval</li> | 
 |  <li>[X11] Added support for USB joysticks under Linux (/dev/input/js*)</li> | 
 |  <li>[X11] Bugfix: Added support for GLX extensions in glfwExtensionSupported</li> | 
 |  <li>[X11] Bugfix: More robust fullscreen mode (?)</li> | 
 |  <li>[X11] Bugfix: Runtime check of XF86VidMode support for the active | 
 |      display</li> | 
 |  <li>[X11] Bugfix: Some mouse button events were reported incorrectly</li> | 
 |  <li>[MacOSX] Added support for the input char callback.</li> | 
 |  <li>[MacOSX] Added video mode validation and duplicate elimination.</li> | 
 |  <li>[MacOSX] Switched to a new MakeBundle.sh script.</li> | 
 |  <li>[MacOSX] Added emulation of the window refresh callback.</li> | 
 |  <li>[MacOSX] Bugfix: The window and its associated resources are now | 
 |      properly released.</li> | 
 |  <li>[MacOSX] Bugfix: Removed support for more than eight mouse buttons.</li> | 
 |  <li>[x86 CPUs] Improved Intel mobile CPU detection (e.g. disables RDTSC | 
 |      timing on Centrino systems)</li> | 
 | </ul> | 
 |  | 
 | <h3>v2.4.2</h3> | 
 | <ul> | 
 |  <li>Preliminary native Mac OS X support (via the Carbon interface)</li> | 
 |  <li>Preliminary DOS support (DJGPP + Mesa)</li> | 
 |  <li>Changed license to the zlib license (almost identical to the previous | 
 |      GLFW license), so now GLFW is OSI Certified</li> | 
 |  <li>Rewrote the GLFW documentation in LaTeX, meaning several improvements | 
 |      (both visual and practical)</li> | 
 |  <li>Added the <code>support</code> folder to the distribution, which includes | 
 |      support for various languages</li> | 
 |  <li>[Win32] Added OpenWatcom compiler support (thanks Sebastian | 
 |      Schuberth!)</li> | 
 |  <li>[Win32] Changed fallback timer from GetTickCount to timeGetTime, | 
 |      which usually provides better resolution</li> | 
 |  <li>[Win32] Bugfix: Accumulator buffer selection should be more | 
 |      robust</li> | 
 |  <li>[Win32] Bugfix: If stereo rendering is requested, and no stereo pixel | 
 |      format could be created, glfwOpenWindow now fails</li> | 
 |  <li>[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</li> | 
 |  <li>[X11] Added FreeBSD and QNX support</li> | 
 |  <li>[X11] Added support for non-pthread capable systems</li> | 
 |  <li>[X11] Hopefully more robust configuration script (compile.sh)</li> | 
 |  <li>[X11] Bugfix: When mouse cursor is hidden, mouse sensitivity is no | 
 |      longer degraded</li> | 
 |  <li>[X11] Bugfix: Source files EOL was PC style (CR/LF) in v2.4.1 (blame | 
 |      my WinCVS configuration)</li> | 
 |  <li>[X11] Bugfix: When a GLFW window is closed, input focus is properly | 
 |      released</li> | 
 |  <li>[X11] Bugfix: Iconification of fullscreen windows should now work | 
 |      properly</li> | 
 |  <li>[x86 CPUs] Improved RDTSC timing (e.g. RDTSC support on single-CPU | 
 |      Intel Hyper-Threading enabled systems)</li> | 
 |  <li>[AmigaOS] Added joystick support</li> | 
 |  <li>[AmigaOS] Mouse cursor positioning is now implemented</li> | 
 |  <li>[AmigaOS] Added support for Geek Gadgets GCC</li> | 
 |  <li>[AmigaOS] Bugfix: glfwGetWindowParam now returns proper values for | 
 |      all parameters (except for GLFW_ACCELERATED)</li> | 
 | </ul> | 
 |  | 
 | <h3>v2.4.1</h3> | 
 | <ul> | 
 |  <li>Added AmigaOS support (preliminary)</li> | 
 |  <li>GLFW for the X Window System now works under Mac OS X</li> | 
 |  <li>[Win32] Bugfix: glfwWaitCond treated the timeout as milliseconds | 
 |      instead of seconds</li> | 
 |  <li>[X11] Bugfix: GLFW should now compile under IRIX v5.3</li> | 
 |  <li>[X11] Bugfix: GLFW should now compile with Kylix</li> | 
 | </ul> | 
 |  | 
 | <h3>v2.4</h3> | 
 | <ul> | 
 |  <li>Major source code rearrangement - much code is now shared between | 
 |      different platforms, and it should be easier to port GLFW to new | 
 |      platforms</li> | 
 |  <li>Added a Unicode keyboard text input interface (CharCallback)</li> | 
 |  <li>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</li> | 
 |  <li>Added more key constants (F13-F25, keypad '=')</li> | 
 |  <li>Added an enable/disable swicth for automatic event polling from | 
 |      glfwSwapBuffers</li> | 
 |  <li>[X11] Added support for sysctl for querying the number of processors | 
 |      in the system (if POSIX sysconf is not supported)</li> | 
 |  <li>[X11] Bugfix: compile.sh now works with Sun sh (and hopefully others | 
 |      too)</li> | 
 |  <li>[X11] Bugfix: compile.sh now detects the need for -ldl when dlopen is | 
 |      used</li> | 
 |  <li>[Win32] Bugfix: When closing a fullscreen window under Win 9x/NT4, | 
 |      the task bar icon now disappears properly</li> | 
 |  <li>[Win32] Bugfix: GLFW should now compile on a wider range of MSVC | 
 |      compilers (e.g. .NET) - Thanks Tim Little!</li> | 
 | </ul> | 
 |  | 
 | <h3>v2.3.2</h3> | 
 | <ul> | 
 |  <li>Removed the silly limitation of 100 threads (the thread information | 
 |      is now kept in a linked list)</li> | 
 |  <li>General source cleanup (window state is now kept in a single | 
 |      struct, plus some other minor changes)</li> | 
 |  <li>[X11] Added Solaris gethrtime() support (not tested yet), which | 
 |      should give an improved timer for Sun/Solaris stations</li> | 
 |  <li>[X11] Some fixes to the 'compile.sh' script (-O for non-gcc compilers | 
 |      and 'make x11-gcc' should now really force GCC)</li> | 
 | </ul> | 
 |  | 
 | <h3>v2.3.1</h3> | 
 | <ul> | 
 |  <li>[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)</li> | 
 | </ul> | 
 |  | 
 | <h3>v2.3</h3> | 
 | <ul> | 
 |  <li>Added OpenGL stereo rendering support</li> | 
 |  <li>Added a function for parsing the OpenGL version string | 
 |      (glfwGetGLVersion)</li> | 
 |  <li>[x86] Bugfix: Hopefully the CPU core clock dependent timer RDTSC will | 
 |      never be used on CPUs with variable core frequencies anymore</li> | 
 |  <li>[X11] Bugfix: GLFW could create stereo rendering capable windows, | 
 |      even if it was not requested (GLFW v2.2.x did not support selection | 
 |      of stereo rendering)</li> | 
 |  <li>[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).</li> | 
 | </ul> | 
 |  | 
 | <h3>v2.2.3</h3> | 
 | <ul> | 
 |  <li>Bugfix: Checking for GL_SGIS_generate_mipmap is more robust</li> | 
 |  <li>Bugfix: glfwLoadTexture2D will now fail if no window is opened</li> | 
 |  <li>[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)</li> | 
 |  <li>[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).</li> | 
 | </ul> | 
 |  | 
 | <h3>v2.2.2</h3> | 
 | <ul> | 
 |  <li>[Win32] Bugfix: Windows did not always get focus (this was a tough | 
 |      one!)</li> | 
 |  <li>[Win32] Bugfix: glfwGetWindowParam did not work with | 
 |      GLFW_ACCUM_*_BITS or GLFW_AUX_BUFFERS</li> | 
 |  <li>[X11] Bugfix: Linux joystick Y axis positions were reversed</li> | 
 | </ul> | 
 |  | 
 | <h3>v2.2.1</h3> | 
 | <ul> | 
 |  <li>[X11] Added joystick support for Linux</li> | 
 | </ul> | 
 |  | 
 | <h3>v2.2</h3> | 
 | <ul> | 
 |  <li>Added joystick support (only supported under Windows so far)</li> | 
 |  <li>Added joystick controls to pong3d.c (only 3 more lines of code)</li> | 
 |  <li>Added glfwOpenWindowHint() function</li> | 
 |  <li>It is now possible to specify a desired vertical monitor refresh | 
 |      rate (for fullscreen windows)</li> | 
 |  <li>It is now possible to request an accumulator buffer and auxiliary | 
 |      buffers</li> | 
 |  <li>Added glfwSetTime() function</li> | 
 |  <li>Added a GLFW conversion of the MESA/GLUT gears.c demo to the example | 
 |      programs</li> | 
 |  <li>[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.</li> | 
 |  <li>[Win32] Bugfix: Greatly improved keyboard input (detect left/right | 
 |      CTRL etc)</li> | 
 |  <li>[Win32] Bugfix: glfwExtensionSupported now detects all WGL extensions | 
 |      (e.g. WGL_ARB_pbuffer)</li> | 
 |  <li>[Win32] Bugfix: Mouse cursor was not re-hidden when a GLFW window was | 
 |      deselected and then selected again (with ALT+TAB)</li> | 
 |  <li>[X11] Bugfix: Minor bug in the SGI timer - and ugly (unintended) SGI | 
 |      timer debug info removed</li> | 
 |  <li>[X11] Bugfix: glfwGetDesktopMode and glfwGetVideoModes no longer give | 
 |      segmentation faults if no X server is available</li> | 
 | </ul> | 
 |  | 
 | <h3>v2.1</h3> | 
 | <ul> | 
 |  <li>Added image and texture loading capabilities (support for the TGA | 
 |      file format at the moment)</li> | 
 |  <li>Added a new example program (mipmaps.c) for showing off the automatic | 
 |      mipmap generation and texture loading capabilities of GLFW 2.1</li> | 
 |  <li>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.</li> | 
 |  <li>Improved keyboard handling (e.g. numeric keypad keys can be | 
 |      detected)</li> | 
 |  <li>Added a new example program, keytest.c</li> | 
 |  <li>Changed the GLFWvidmode structure and the corresponding API functions | 
 |      to report pure color bits instead of the confusing (and unportable) | 
 |      "BPP" field</li> | 
 |  <li>Changed glfwSetWindowSize so that it operates in fullscreen mode | 
 |      too</li> | 
 |  <li>Added mouse wheel support under Windows (not Win95) and X11</li> | 
 |  <li>Added window iconification functions (glfwInconifyWindow and | 
 |      glfwRestoreWindow)</li> | 
 |  <li>Improved iconification and deactivation handling under both Windows | 
 |      and X11</li> | 
 |  <li>Made it possible to turn on/off key repeat (the default is now no key | 
 |      repeat)</li> | 
 |  <li>Added SGI hardware timer support (CLOCK_SGI_CYCLE) for improved | 
 |      timer resolution for SGI computers</li> | 
 |  <li>Added support for the free Borland C++ Builder 5.x compiler for | 
 |      Windows</li> | 
 |  <li>Made it possible to compiler GLFW as a Windows DLL using any of the | 
 |      supported compilers</li> | 
 |  <li>Some constants have changed names (e.g. GLFW_REDBITS is now called | 
 |      GLFW_RED_BITS)</li> | 
 |  <li>Updated GLFW documentation (GLFW Users Guide and GLFW Reference | 
 |      Manual) to reflect the changes in the API</li> | 
 |  <li>[Win32] Bugfix: Corrected Cygwin toplevel makefile entry</li> | 
 |  <li>[Win32] Bugfix: Fixed event lag bug</li> | 
 |  <li>[Win32] Bugfix: Fixed Radeon 8500 crash</li> | 
 |  <li>[X11] Bugfix: Fixed the window close bug</li> | 
 |  <li>[X11] Bugfix: Iconification/deactivation is now detected</li> | 
 |  <li>[X11] Bugfix: Non-OpenGL visuals are not listed anymore</li> | 
 |  <li>[X11] Bugfix: Undesired video mode changes on XFree86 are now prevented</li> | 
 | </ul> | 
 |  | 
 | <h3>v2.0.3</h3> | 
 | <ul> | 
 |  <li>Added precise CPU cycle based timing support (RDTSC) for x86 | 
 |      CPUs (under both Windows and Unix)</li> | 
 |  <li>Added a makefile option for building for Windows with Cygwin</li> | 
 |  <li>Corrected the CC for Unix/X11 makefiles (-Wall is usually not a | 
 |      supported flag for CC, so it was removed from the CFLAGS list)</li> | 
 | </ul> | 
 |  | 
 | <h3>v2.0.2</h3> | 
 | <ul> | 
 |  <li>Added a makefile option for building for X11 with 'cc' rather than | 
 |      'gcc' (useful for IRIX users for instance).</li> | 
 |  <li>[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.</li> | 
 |  <li>[X11] Bugfix: Added a bunch of more keys that are recognized by | 
 |      GLFW.</li> | 
 |  <li>[X11] Bugfix: glfwGetNumberOfProcessors now works for IRIX (earlier | 
 |      versions of GLFW would not compile under IRIX).</li> | 
 | </ul> | 
 |  | 
 | <h3>v2.0.1</h3> | 
 | <ul> | 
 |  <li>glfwTerminate() will now be called automatically upon normal program | 
 |      termination (using atexit())</li> | 
 |  <li>[Win32] Bugfix: Buffer-swapping did not work if a window lost | 
 |      focus.</li> | 
 |  <li>[Win32] Bugfix: Top level Makefile did not work under Windows | 
 |      9x.</li> | 
 |  <li>[Win32] Bugfix: NULL declaratoin in glfw.h was not MSVC 7.x | 
 |      compatible.</li> | 
 |  <li>[X11] Bugfix: GLFW would not build with C++ (e.g. g++).</li> | 
 | </ul> | 
 |  | 
 | <h3>v2.0</h3> | 
 | <ul> | 
 |  <li>GLFW is no longer a single source file, but an entire link library.</li> | 
 |  <li>Added multi threading support.</li> | 
 |  <li>Added more window control.</li> | 
 |  <li>New distribution layout (both Win32 and X11 version in same archive).</li> | 
 |  <li>Added GLFW Users Manual and GLFW Reference Manual as PDF files.</li> | 
 |  <li>Some bugfixes.</li> | 
 | </ul> | 
 |  | 
 | <h3>v1.0.2</h3> | 
 | <ul> | 
 |  <li>Improved fullscreen functionality.</li> | 
 |  <li>Added fullscreen support for X11.</li> | 
 | </ul> | 
 |  | 
 | <h3>v1.0.1</h3> | 
 | <ul> | 
 |  <li>Added support for the X Window System.</li> | 
 |  <li>Fixed bugs.</li> | 
 | </ul> | 
 |  | 
 | <h3>v1.0.0</h3> | 
 | <ul> | 
 |  <li>First release.</li> | 
 |  <li>Only supported Windows.</li> | 
 | </ul> | 
 |  | 
 |  | 
 | <a name="structure"></a> | 
 | <h2>6. Directory structure of the GLFW distribution</h2> | 
 |  | 
 | <p>Here is an overview of the directory structure of the GLFW distribution: | 
 |  | 
 | <p> | 
 | <table border=0 cellspacing=0> | 
 | <tr valign="top"><td width=100><code>docs</code></td><td> </td><td>GLFW manuals in PDF format</td></tr> | 
 | <tr valign="top"><td><code>examples</code></td><td> </td><td>Several example programs in C</td></tr> | 
 | <tr valign="top"><td><code>include</code></td><td> </td><td> </td></tr> | 
 | <tr valign="top"><td><code>   GL</code></td><td> </td><td>Here is the GLFW C/C++ include file</td></tr> | 
 | <tr valign="top"><td><code>lib</code></td><td> </td><td>The source code for GLFW</td></tr> | 
 | <tr valign="top"><td><code>   cocoa</code></td><td> </td><td>Mac OS X/Cocoa specific implementation</td></tr> | 
 | <tr valign="top"><td><code>   win32</code></td><td> </td><td>Windows specific implementation</td></tr> | 
 | <tr valign="top"><td><code>   x11</code></td><td> </td><td>Unix/X11 specific implementation</td></tr> | 
 | <tr valign="top"><td><code>support</code></td><td> </td><td> </td></tr> | 
 | <tr valign="top"><td><code>   d</code></td><td> </td><td>D support</td></tr> | 
 | <tr valign="top"><td><code>   msvc90</code></td><td> </td><td>Project files for Visual C++ 9.0</td></tr> | 
 | <tr valign="top"><td><code>   pascal</code></td><td> </td><td>Pascal support</td></tr> | 
 | <tr valign="top"><td><code>tests</code></td><td> </td><td>Several test programs in C</td></tr> | 
 | </table> | 
 |  | 
 |  | 
 | <a name="contact"></a> | 
 | <h2>7. Contacting the project</h2> | 
 |  | 
 | <p>The official website for GLFW is <a href="http://www.glfw.org/">glfw.org</a>. | 
 | It contains the latest version of GLFW, news and other information that is | 
 | useful for OpenGL development.</p> | 
 |  | 
 | <p>If you have questions related to the use of GLFW, we have a | 
 | <a href="https://sourceforge.net/forum/forum.php?forum_id=247562">user's web forum</a>, | 
 | and a | 
 | <a href="https://lists.sourceforge.net/lists/listinfo/glfw-user">user's mailing list</a> | 
 | on SF.net, and the registered IRC channel <code>#glfw</code> on | 
 | <a href="http://freenode.net/">Freenode</a>.</p> | 
 |  | 
 | <p>If you have a bug to report, a patch to submit or a feature you'd like to | 
 | request, please file it in one of the | 
 | <a href="http://sourceforge.net/tracker/?group_id=72569">GLFW trackers</a> on SF.net.</p> | 
 |  | 
 | Finally, if you're interested in helping out with the development of | 
 | GLFW or porting it to your favorite platform, we have a | 
 | <a href="https://lists.stacken.kth.se/mailman/listinfo/glfw-dev">developer's mailing list</a>, | 
 | or you could join us on <code>#glfw</code>. | 
 |  | 
 |  | 
 | <a name="credits"></a> | 
 | <h2>8. Acknowledgements</h2> | 
 |  | 
 | <p>GLFW exists because people around the world donated their time and lent | 
 | their skills.  Special thanks go out to:</p> | 
 |  | 
 | <ul> | 
 |  | 
 |   <li>artblanc, for a patch replacing a deprecated Core Graphics call</li> | 
 |  | 
 |   <li>Bobyshev Alexander and Martins Mozeiko, for the original proposal of | 
 |   an FSAA hint and their work on the Win32 implementation of FSAA</li> | 
 |  | 
 |   <li>Keith Bauer, for his invaluable help with porting and maintaining GLFW on | 
 |   Mac OS X, and for his many ideas</li> | 
 |  | 
 |   <li>John Bartholomew, for adding proper version number and soname to the | 
 |   shared library build</li> | 
 |  | 
 |   <li>Lambert Clara, for a bug fix for the modes test</li> | 
 |  | 
 |   <li>Jarrod Davis, for the Delphi port of GLFW</li> | 
 |  | 
 |   <li>Olivier Delannoy, for the initial implementation of FSAA support on | 
 |   X11, cross-compiling support for MinGW and general extreme usefulness</li> | 
 |  | 
 |   <li>Paul R. Deppe, who helped with Cygwin support, and made an | 
 |   adaption of <a href="http://plib.sourceforge.net/">PLIB</a> | 
 |   so that it can use GLFW (instead of GLUT)</li> | 
 |  | 
 |   <li>Jonathan Dummer, for submitting a patch fixing an input bug on Win32 and | 
 |   adding logic for the <code>GLFW_ICON</code> resource</li> | 
 |  | 
 |   <li>Ralph Eastwood, for the initial design and implementation of the gamma | 
 |   correction and clipboard APIs</li> | 
 |  | 
 |   <li>GeO4d, for the implementation of cursor enter/leave notifications on | 
 |   Win32.</li> | 
 |  | 
 |   <li>Gerald Franz, who made GLFW compile under IRIX, and supplied patches | 
 |   for the X11 keyboard translation routine</li> | 
 |  | 
 |   <li>Marcus Geelnard, the original author and long-time maintainer of GLFW, | 
 |   without whose brilliant work none of this would have happened</li> | 
 |  | 
 |   <li>Stefan Gustavson, for quick and thorough testing of GLFW on many and | 
 |   varied operating systems and hardware configurations</li> | 
 |  | 
 |   <li>Sylvain Hellegouarch, for support, bug reports and testing</li> | 
 |  | 
 |   <li>Alex Holkner, for writing the code from which the Compiz/Intel fix was | 
 |   stolen</li> | 
 |  | 
 |   <li>Toni Jovanoski, for helping with the MASM32 port of GLFW, and | 
 |   supplying the example program and fixed OpenGL and GLU bindings for | 
 |   MASM32</li> | 
 |  | 
 |   <li>Cameron King, for reporting a hidden cursor mouse bug on X11</li> | 
 |  | 
 |   <li>Peter Knut, for his many and detailed reports of difficult to find input | 
 |   bugs</li> | 
 |  | 
 |   <li>Robin Leffmann, for his work on Mac OS X and other platforms, and his | 
 |   invaluable support</li> | 
 |  | 
 |   <li>Glenn Lewis, for helping out with support for the D programming | 
 |   language</li> | 
 |  | 
 |   <li>Shane Liesegang, for providing a bug fix relating to Cocoa window | 
 |   restoration and reporting a bug on 32-bit Cocoa builds</li> | 
 |  | 
 |   <li>Tristam MacDonald, for his bug reports and feedback on the Cocoa port</li> | 
 |  | 
 |   <li>Hans 'Hanmac' Mackowiak, for the initial implementation of cursor | 
 |   enter/leave callbacks on X11, adding UTF-8 window title support on X11 and | 
 |   a fix for the Xkb support</li> | 
 |  | 
 |   <li>David Medlock, for doing the initial Lua port</li> | 
 |  | 
 |   <li>Marcel Metz, for the initial implementation of multi-monitor support on | 
 |   X11 and Win32</li> | 
 |  | 
 |   <li>Kenneth Miller, for his many and detailed bug reports on Win32</li> | 
 |  | 
 |   <li>Jeff Molofee, the author of the excellent OpenGL tutorials at <a | 
 |   href="http://nehe.gamedev.net/">NeHe Productions</a>. | 
 |   Much of the Windows code of GLFW was originally based on Jeff's | 
 |   code</li> | 
 |  | 
 |   <li>Julian Møller, for reporting a bug in the Cocoa joystick code</li> | 
 |  | 
 |   <li>Arturo J. Pérez, for a bug fix for cursor tracking on Mac OS X 10.6 Snow | 
 |   Leopard</li> | 
 |  | 
 |   <li>Riku Salminen, for the initial implementation of | 
 |   <code>glfwShowWindow</code> and <code>glfwHideWindow</code>, for the ideas of | 
 |   <code>glfwDefaultWindowHints</code> and making the pointer-ness of object | 
 |   handles explicit, and for making the X11 event processing able to support | 
 |   multi-threaded rendering</li> | 
 |  | 
 |   <li>Douglas C. Schmidt and Irfan Pyarali, for their excellent article | 
 |   <a href="http://www.cs.wustl.edu/~schmidt/win32-cv-1.html">Strategies for Implementing POSIX Condition Variables on Win32</a></li> | 
 |  | 
 |   <li>Sebastian Schuberth, for the OpenWatcom makefiles</li> | 
 |  | 
 |   <li>Matt Sealey, for helping with the MorphOS port</li> | 
 |  | 
 |   <li>Steve Sexton, for reporting an input bug in the Carbon port</li> | 
 |  | 
 |   <li>Dmitri Shuralyov, for support, bug reports, bug fixes and testing</li> | 
 |  | 
 |   <li>Daniel Skorupski, for reporting a bug in the Win32 DEF file</li> | 
 |  | 
 |   <li>Bradley Smith, for his updates of the D support and his ports of the | 
 |   remaining examples to the D language</li> | 
 |  | 
 |   <li>Julian Squires, for submitting a patch for a bug in the key repeat logic on X11</li> | 
 |  | 
 |   <li>Johannes Stein, for maintaining the Pascal bindings</li> | 
 |  | 
 |   <li>Sergey Tikhomirov, for the initial implementation of joystick support on | 
 |   Mac OS X</li> | 
 |  | 
 |   <li>Samuli Tuomola, for support, bug reports and testing</li> | 
 |  | 
 |   <li>Torsten Walluhn, for fixing various compilation issues on OS X</li> | 
 |  | 
 |   <li>Frank Wille, for helping with the AmigaOS port and making GLFW | 
 |   compile under IRIX 5.3</li> | 
 |  | 
 |   <li>Santi Zupancic, for support, bug reports and testing</li> | 
 |  | 
 |   <li>Lasse Öörni, for submitting patches for the input code of the Win32 and X11 ports</li> | 
 |  | 
 |   <li>Дмитри Малышев, for the idea of a <code>GLFW_NO_GLU</code> macro</li> | 
 |  | 
 |   <li>blanco, for submitting a patch for a deprecation bug in the Cocoa port</li> | 
 |  | 
 |   <li>heromyth, for reporting a bug in the D bindings</li> | 
 |  | 
 |   <li>Ozzy @ <a href="http://www.orkysquad.org">Orkysquad</a>, | 
 |   for his dedication to GLFW, for debugging my source, and for his | 
 |   valuable experience with game development</li> | 
 |  | 
 |   <li>Peoro, for reporting a bug in the <code>_NET_WM_PING</code> response</li> | 
 |  | 
 |   <li>TTK-Bandit, for submitting a number of input patches adding many missing | 
 |   keys to the Win32 and X11 ports</li> | 
 |  | 
 |   <li>yuriks, for reporting a bug in Win32 context creation</li> | 
 |  | 
 |   <li>All the unmentioned and anonymous contributors in the GLFW community, for | 
 |   bug reports, patches, feedback and encouragement</li> | 
 |  | 
 |   <li><a href="http://www.opengl.org/">OpenGL.org</a>, and all the people on | 
 |   the discussion forums there that have provided help during the development of | 
 |   GLFW</li> | 
 |  | 
 | </ul> | 
 |  | 
 | </body> | 
 | </html> |