-
Notifications
You must be signed in to change notification settings - Fork 108
/
Copy pathreadme.html
1308 lines (1083 loc) · 61.9 KB
/
readme.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!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 2.7.9 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 2.7.9 of the GLFW library. GLFW is a free, Open Source,
multi-platform library for OpenGL application development that provides a
powerful API for handling operating system specific tasks such as opening an
OpenGL window, reading keyboard, mouse, joystick and time input, creating
threads, and more.</p>
<p>GLFW 2.7 is expected to be the last major release of the 2.x series, with
most development now being done on what will become version 3.0.</p>
<p>This release adds fixes for multiple cursor motion bugs on Windows and fixes
support for the <code>LFLAGS</code> environment variable on OS X.</p>
<p>For a full list of changes, see the
<a href="#changelog">version history</a>.</p>
<a name="compiling"></a>
<h2>2. Compiling GLFW and the example programs</h2>
<p>A top level makefile can be found in the root directory of the GLFW
distribution that has been designed to work with several compilers. If you
simply enter the GLFW root directory in a shell and type <code>make</code> (or
<code>nmake</code>, <code>mingw32-make</code>, <code>gnumake</code>,
<code>gmake</code> or something else, depending on your development
envronment), and a list should appear with the currently supported options for
systems and compilers.</p>
<p>For example, one of the options is to compile GLFW for Windows using MinGW
and MSYS. To do this, use:</p>
<blockquote><code>make win32-msys</code></blockquote>
<p>This will compile the GLFW static library and DLL as well as the supplied
example and test programs.</p>
<p>Currently supported compilers and systems are:</p>
<ul>
<li>Microsoft Visual C++ 2008, 2010 and 2012</li>
<li>MinGW with or without MSYS</li>
<li>MinGW cross-compilation for Unix-like systems</li>
<li>OpenWatcom for Windows</li>
<li>Unix or Unix-like systems running the X Window System</li>
<li>Apple GCC or Clang on Mac OS X</li>
</ul>
<p>There are also project files available for Microsoft Visual C++ 2008,
2010 and 2012 in the <code>support/msvc90</code>,
<code>support/msvc100</code> and <code>support/msvc110</code> directories.</p>
<p>If your compiler/system is not in the list, you may have to create new
makefiles in the <code>lib\win32</code>, <code>lib/x11</code> or
<code>lib/cocoa</code> directory, and in the <code>examples</code> directory.
If you encounter any problems using, please use the
<a href="http://sourceforge.net/projects/glfw/forums/forum/247562">support forum</a>.
If you encounter any bugs, please submit an issue to the
<a href="https://github.com/glfw/glfw-legacy/issues">issue tracker</a>. We would
like to support as many systems as possible, so if you had to make any
modifications or additions to the source and/or makefiles in order to make GLFW
compile successfully, we would very much like to know what you had to do.</p>
<h3>2.1 Microsoft Windows</h3>
<p>When building GLFW as a DLL (dynamic link library), all compilation units
need to have the <code>GLFW_BUILD_DLL</code> macro defined. All build methods
listed below already does this, but you need to do it yourself if you are
making a custom build. Without this macro, the GLFW DLL will not export
functions correctly and code calling the DLL will be incorrectly generated.</p>
<h4>2.1.1 Microsoft Visual C++</h4>
<p>Project files for both the static and dynamic versions of the GLFW library
are provided in the <code>support/msvc90</code>, <code>support/msvc100</code>
and <code>support/msvc110</code> directories.</p>
<h4>2.1.2 MinGW on Windows</h4>
<p>GLFW can be compiled using only
<a href="http://www.mingw.org/">MinGW</a>. Open a Windows command prompt,
enter the root directory of the GLFW source distribution and use the
<code>win32-mingw</code> target:</p>
<blockquote><code>mingw32-make win32-mingw</code></blockquote>
<h4>2.1.3 MSYS and MinGW on Windows</h4>
<p>If you have both <a href="http://www.mingw.org/">MinGW and MSYS</a>
installed, a better alternative is to use the built-in MSYS support. Open an
MSYS shell, enter the root directory of the GLFW source distribution and use
the <code>win32-msys</code> target:</p>
<blockquote><code>mingw32-make win32-msys</code></blockquote>
<h4>2.1.4 Cygwin's MinGW on Windows</h4>
<p>GLFW can be cross-compiled to native Win32 code using the MinGW packages in
<a href="http://www.cygwin.com/">Cygwin</a> (the newer <code>mingw-</code>
packages, not the older <code>gcc-mingw-</code> ones). Open a Cygwin shell,
enter the root directory of the GLFW source distribution and use the
<code>cross-mgw</code> target:</p>
<blockquote><code>env TARGET=i686-pc-mingw32- make cross-mgw</code></blockquote>
<p>This results in binaries that are functionally identical to those produced
by the other MinGW variants, i.e. they will use <code>msvcrt.dll</code> as libc
and will have no dependency on Cygwin.</p>
<h4>2.1.5 MinGW cross-compilation for Unix or Unix-like systems</h4>
<p>Some Unix-like systems have a MinGW cross-compilation package for compiling
native Win32 binaries, for example the <code>mingw32</code> package on Debian
GNU/Linux and its derivatives. You can use this to build Win32 binaries of
GLFW and all examples without having to run Microsoft Windows or even Wine.
Use the regular make program with the <code>cross-mgw</code> target. You may
also need to adjust the <code>TARGET</code> environment variable, depending on
how packagers named the binaries.</p>
<h4>2.1.6 OpenWatcom on Windows</h4>
<p>GLFW can be compiled using <a href="http://www.openwatcom.org/">OpenWatcom</a>
for Windows by running the following in the GLFW root directory:</p>
<blockquote><code>nmake MAKE=nmake win32-ow</code></blockquote>
<p>Also make sure that you have all your environment variables set up
correctly. It is the default option when installing OpenWatcom to permanently
set up all the required environment variables. If <code>nmake</code> is
unavailable, you probably have to run <code>WATCOM\setvars.bat</code> from the
command prompt first, where <code>WATCOM</code> is the directory in which you
installed OpenWatcom (e.g. <code>C:\Watcom</code>).</p>
<h3>2.2 X11 on Unix-like systems</h3>
<p>Compiler and link library capabilities are auto-detected with a script
called <code>compile.sh</code>. Note that you don't need to run this script
yourself, as it is run automatically by the top-level makefile when necessary.
It has been tested on FreeBSD and many Linux distributions and should hopefully
run correctly on the majority of available Unix-like systems.</p>
<p>If you wish to customize the compilation or link flags for GLFW, set the
<code>CFLAGS</code> or <code>LFLAGS</code> environment variables as needed
before building the library. These flags will be picked up and added to the
generated <code>Makefile.x11</code> files.</p>
<p>If you wish to use a certain compiler, set the <code>CC</code> environment
variable before building the library. This will also be stored in the
generated <code>Makefile.x11</code> files.</p>
<p>If you have already configured your source tree, you can reset it to an
un-configured state by running make with the <code>x11-dist-clean</code>
target.</p>
<p>If you are making your own build setup for GLFW, you need to be aware of the
various preprocessor symbols that the bundled makefiles use to enable various
features and code paths. They need to be defined either on the command-line or
at the very beginning for each GLFW source file with an <code>x11_</code>
prefix.</p>
<p>Note that the X11 port of GLFW compiles on Mac OS X, but is currently unable
to open a window when running against X11.app, due to Apple's incomplete
implementation of GLXFBConfigs.</p>
<table border=1>
<tr>
<td>_GLFW_USE_LINUX_JOYSTICKS</td>
<td>Use the Linux joystick API. This is the only supported API for the X11
port. Without it, joystick input will be unavailable.</td>
</tr>
<tr>
<td>_GLFW_HAS_XRANDR</td>
<td>Use the X Resize and Rotate extension for display mode changes. This is
the preferred method.</td>
</tr>
<tr>
<td>_GLFW_HAS_XF86VIDMODE</td>
<td>Use the Xf86VidMode extension for display mode changes. This is a
fall-back method.</td>
</tr>
<tr>
<td>_GLFW_HAS_PTHREAD</td>
<td>Use the POSIX Threads API for threading. This is the only supported API
for the X11 port. Without it, threading will be disabled.</td>
</tr>
<tr>
<td>_GLFW_HAS_SCHED_YIELD</td>
<td>Call the <code>sched_yield</code> function inside <code>glfwPlatformSleep</code>.</td>
</tr>
<tr>
<td>_GLFW_HAS_GLXGETPROCADDRESS</td>
<td>Use the <code>glXGetProcAddress</code> function to retrieve OpenGL
entry point addresses.</td>
</tr>
<tr>
<td>_GLFW_HAS_GLXGETPROCADDRESSARB</td>
<td>Use the <code>glXGetProcAddressARB</code> function to retrieve OpenGL
entry point addresses.</td>
</tr>
<tr>
<td>_GLFW_HAS_GLXGETPROCADDRESSEXT</td>
<td>Use the <code>glXGetProcAddressEXT</code> function to retrieve OpenGL
entry point addresses.</td>
</tr>
<tr>
<td>_GLFW_HAS_DLOPEN</td>
<td>Use <code>dlopen</code> on the OpenGL shared library to retrieve OpenGL
entry point addresses. This is a fall-back method.</td>
</tr>
<tr>
<td>_GLFW_HAS_SYSCONF</td>
<td>Use the sysconf API to find the number of processors.</td>
</tr>
<tr>
<td>_GLFW_HAS_SYSCTL</td>
<td>Use the sysctl API to find the number of processors.</td>
</tr>
</table>
<h3>2.3 Apple GCC or Clang on Mac OS X</h3>
<p>To compile GLFW for Mac OS X, you will need to have installed the Developer
Tools. A version of these tools can be found on your Mac OS X disc, with newer
versions available from the Apple Developer Connection site. When they are
installed, simply open Terminal and go to the root GLFW directory. From there,
you can build the library and all the examples by running make with the
appropriate target, i.e.:</p>
<blockquote><code>make cocoa</code></blockquote>
<p>The default compiler for the Cocoa port of GLFW is <code>cc</code>, which as
of Mac OS X 10.6 still defaults to GCC, but you can override this using the
<code>CC</code> environment variable. For example, to build GLFW using Clang,
use:</p>
<blockquote><code>env CC=clang make cocoa</code></blockquote>
<p>There is also a deprecated Carbon port of GLFW, which is limited to
32-bit code and only runs well on Mac OS X 10.3 and 10.4. However, if you
need to build applications for those systems, it is a better choice than
the Cocoa port, which uses APIs unavailable on systems older than 10.5.</p>
<a name="installing"></a>
<h2>3. Installing GLFW</h2>
<h3>3.1 Windows</h3>
<p>After compiling GLFW with MinGW or Cygwin, three files of interest should
have appeared in the <code>lib\win32</code> directory. They are:
<code>libglfw.a</code> (the static link version of GLFW), <code>glfw.dll</code>
(the DLL version of GLFW) and <code>libglfwdll.a</code> (the DLL import
library).</p>
<p>To install GLFW on Cygwin (and possibly MinGW), run make with the
<code>cygwin-install</code> target. This will generate the pkg-config file and
copy it, the header file and the library to the correct locations of your
Cygwin installation. If you wish to change the installation location from its
default, set the desired prefix path with the environment variable
<code>PREFIX</code>.</p>
<p>If you used Borland C++ Builder, LCC-Win32, Microsoft Visual C++ or
OpenWatcom, the files are named <code>glfw.lib</code> (the static link version
of GLFW), <code>glfw.dll</code> (the DLL version of GLFW) and
<code>glfwdll.lib</code> (the DLL import library).</p>
<p>The static link library and the DLL import library should be copied to your
compiler's <code>LIB</code> directory (where all other link libraries are
located). The DLL can be copied either to your Windows system directory (where
opengl32.dll is located), or to the project directory of your GLFW-based
projects (where you place your executable files).</p>
<p>You should also copy the GLFW include file, <code>include\GL\glfw.h</code>,
to the <code>GL</code> directory of your compiler's include directory (i.e.
where <code>gl.h</code>, <code>glu.h</code> etc. are located).</p>
<h3>3.2 Unix</h3>
<p>After compiling GLFW, three files named <code>libglfw.pc.in</code>,
<code>libglfw.a</code> and <code>libglfw.so</code> should have appeared in the
<code>lib/x11</code> directory. This is the pkg-config template file, the GLFW
static link library and the GLFW shared library, respectively.</p>
<p>To install GLFW onto your system, run make as root with the
<code>x11-install</code> make target. This will install the pkg-config file, the
static library and the header. By default, the files will be installed under
<code>/usr/local</code>. If you wish to install to a different location, set the
<code>PREFIX</code> environment variable appropriately when running make.</p>
<p>Note that the shared library is not installed by default, as you really
should think twice before using it. GLFW is very small and shared library
distribution on Unix outside of packaging systems is quite tricky. The GLFW
license also allows static linking without requiring you to share your
code.</p>
<p>However, if you're a *nix distribution packager, use a language binding or
for some other reason wish to install the shared library along with the rest,
run make with the <code>x11-dist-install</code> target.</p>
<h3>3.4 Mac OS X</h3>
<p>After compiling GLFW, three files named <code>libglfw.pc.in</code>,
<code>libglfw.a</code> and <code>libglfw.dylib</code> should appear in the
<code>lib/cocoa</code> directory. This is the pkg-config template file, the GLFW
static link library and the GLFW dynamic library, respectively.</p>
<p>To install GLFW onto your system, run make with sudo and the
<code>cocoa-install</code> build target, i.e.:</p>
<blockquote><code>sudo make cocoa-install</code></blockquote>
<p>This will install the pkg-config file, the static library and the header. By
default, the files will be installed under <code>/usr/local</code>. If you wish
to install to a different location, set the environment variable
<code>PREFIX</code> appropriately when running make.</p>
<p>Note that the shared library is not installed by default, as you really
should think twice before using it. GLFW is very small and very suitable for
static linking. The GLFW license also allows static linking without requiring
your to share your code.</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/UsersGuide.pdf">GLFW Users Guide</a> and the
<a href="docs/Reference.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/glfw.h</code> header file, i.e.:</p>
<blockquote><code>#include <GL/glfw.h></code></blockquote>
<p>This defines all the constants, types and function prototypes of the GLFW
API. It also includes the OpenGL and GLU header files, and defines all the
necessary constants and types that are necessary for these headers to work on
that particular platform.</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.</p>
<p>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>By default, the regular <code>gl.h</code> OpenGL header is included. If you
wish to include the draft <code>gl3.h</code> header instead, define
<code>GLFW_INCLUDE_GL3</code> before the inclusion of the GLFW header.</p>
<p>By default, the <code>glu.h</code> GLU header is included. If you wish to
avoid this, define <code>GLFW_NO_GLU</code> before the inclusion of the GLFW
header.</p>
<p>In other words:
<ul>
<li>Do <em>not</em> include <code>gl.h</code> or <code>glu.h</code>
yourself, as GLFW does this for you</li>
<li>Do <em>not</em> include <code>windows.h</code> unless you need
direct access to the Windows API</li>
<li>If you <em>do</em> include <code>windows.h</code>, do it
<em>before</em> including <code>GL/glfw.h</code>. The GLFW header will
detect this and act appropriately.</li>
</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</code></td>
</tr>
<tr>
<td>MinGW and MinGW-w64</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>MinGW and MinGW-w64</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 when using the GLFW static library
may look like this:</p>
<blockquote><code>cc `pkg-config --cflags libglfw` -o myprog myprog.c `pkg-config --static --libs libglfw`</code></blockquote>
<p>When using the GLFW sharedd library it 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 -framework IOKit</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>v2.7.9</h3>
<ul>
<li>[Cocoa] Bugfix: The dynamic library makefile rule did not use <code>LFLAGS</code></li>
<li>[Win32] Bugfix: Enabling or disabling the cursor for an inactive window did nothing (backported from 3.0)</li>
<li>[Win32] Bugfix: The locked cursor was re-centered when the window was inactive (backported from 3.0)</li>
<li>[Win32] Bugfix: The cursor clip rectangle included the title bar (backported from 3.0)</li>
</ul>
<h3>v2.7.8</h3>
<ul>
<li>[Win32] Bugfix: The temporary window was shown before being destroyed (backported from 3.0)</li>
<li>[X11] Bugfix: Some function pointer types were named incorrectly</li>
<li>[X11] Bugfix: The Mesa 9.x implementation of <code>GLX_ARB_create_context_profile</code> is broken in some revisions (backported from 3.0)</li>
</ul>
<h3>v2.7.7</h3>
<ul>
<li>[Cocoa] Bugfix: The cursor positioning code used NSPoint in place of CGPoint</li>
<li>[Cocoa] Bugfix: The detection of setRestorable: used the wrong selector signature</li>
<li>[Cocoa] Bugfix: The test for whether <code>glfwTerminate</code> had been called from the main thread was missing</li>
<li>[Win32] Added Visual C++ 2012 project files for the static library, DLL and all test and example programs</li>
<li>[Win32] Bugfix: The <code>GLFW_OPENGL_DEBUG_CONTEXT</code> hint did not trigger context re-creation when <code>WGL_ARB_create_context</code> was available</li>
<li>[Win32] Bugfix: The <code>GLFW_OPENGL_DEBUG_CONTEXT</code> window parameter was not set after debug context creation</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] Bugfix: The <code>GLFW_OPENGL_DEBUG_CONTEXT</code> window parameter was not set after debug context creation</li>
<li>[X11] Bugfix: The window size hints were not updated when calling <code>glfwSetWindowSize</code> on a non-resizable window</li>
<li>[X11] Bugfix: The detected link flags for <code>clock_gettime</code> were not added to the pkg-config file</li>
</ul>
<h3>v2.7.6</h3>
<ul>
<li>[Cocoa] Added joystick support (backported from 3.0)</li>
<li>[Cocoa] Added new joystick test (backported from 3.0)</li>
<li>[Cocoa] Bugfix: Fullscreen windows with OpenGL 3.2 core contexts failed to open</li>
<li>[Cocoa] Bugfix: The cursor position was 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>[Win32] Bugfix: A test was missing for whether all available pixel formats had been disqualified</li>
<li>[Win32] Bugfix: Entering locked cursor mode caused cursor movement to be reported to the mouse position callback</li>
<li>[Win32] Bugfix: Setting the cursor position caused cursor movement to be reported to the mouse position callback</li>
<li>[Win32] Bugfix: A .def file using <code>__stdcall</code> naming conventions was used for the 64-bit DLL on MinGW-w64</li>
<li>[Win32] Bugfix: A superfluous link flag prevented tests and examples from being built for 64-bit on MinGW-w64</li>
<li>[X11] Bugfix: The VirtualBox OpenGL implementation does not set the window bit for GLX framebuffer configs</li>
</ul>
<h3>v2.7.5</h3>
<ul>
<li>[Cocoa] Replaced <code>NSDate</code> time source with <code>mach_absolute_time</code> (backported from 3.0)</li>
<li>[Cocoa] Bugfix: A header needed for <code>MAXPATHLEN</code> on some systems was not included</li>
</ul>
<h3>v2.7.4</h3>
<ul>
<li>[X11] Bugfix: The library containing <code>clock_gettime</code> was not detected</li>
<li>[X11] Bugfix: The POSIX monotonic clock was detected using a non-POSIX macro</li>
<li>[Cocoa] Replaced deprecated Core Graphics event suppression call</li>
<li>[Cocoa] Bugfix: The <code>GLFW_WINDOW_NO_RESIZE</code> window parameter was always zero</li>
<li>[Cocoa] Bugfix: <code>glfwInit</code> changed the current directory without a bundle resource directory (backported from 3.0)</li>
<li>[Cocoa] Bugfix: <code>glfwInit</code> created a non-interactive menu bar (backported from 3.0)</li>
<li>[Carbon] Bugfix: The <code>GLFW_WINDOW_NO_RESIZE</code> window parameter was always zero</li>
<li>[Win32] Bugfix: The <code>GLFW_WINDOW_NO_RESIZE</code> window parameter was always zero</li>
</ul>
<h3>v2.7.3</h3>
<ul>
<li>Added <code>GLFW_INCLUDE_GL3</code> macro for including the new <code>gl3.h</code> instead of <code>gl.h</code></li>
<li>Bugfix: The returned desktop mode did not reflect the display mode as it was before the window was opened.</li>
<li>Bugfix: The reference manual did not note that <code>glfwSetMousePosCallback</code> and <code>glfwSetMouseWheelCallback</code> called the new callback before returning</li>
<li>[X11] Added the POSIX <code>CLOCK_MONOTONIC</code> time source as the preferred method (backported from 3.0)</li>
<li>[X11] Bugfix: Added missing <code>Requires:</code> line to pkg-config file generation</li>
<li>[X11] Bugfix: Threading link flags were discarded before pkg-config file generation</li>
<li>[X11] Bugfix: A synchronization point necessary for jitter-free locked cursor mode was incorrectly removed</li>
<li>[Cocoa] Added <code>cocoa-dist-install</code> install target, intended for packagers and language binding creators</li>
<li>[Cocoa] Bugfix: Permitted requests for OpenGL 3.0 and 3.1 despite the 3.2 context being forward-compatible</li>
<li>[Win32] Added Visual C++ 2010 project files for the GLFW tests and examples</li>
<li>[Win32] Replaced Cygwin cross-compile support with MSYS support due to clearer separation between Cygwin and MSYS</li>
<li>[Win32] Bugfix: Alt+F4 hot key was not translated into <code>WM_CLOSE</code></li>
</ul>
<h3>v2.7.2</h3>
<ul>
<li>Added library version check to dynamic linking test</li>
<li>[Cocoa] Added support for OpenGL 3.2 core profile in 10.7 Lion and above</li>
<li>[Cocoa] Made relevant <code>CFLAGS</code> overridable</li>
<li>[Cocoa] Bugfix: The OpenGL framework pointer was not retrieved, making <code>glfwGetProcAddress</code> fail</li>
<li>[Cocoa] Bugfix: The Cocoa layer was not notified that the application may be multithreaded</li>
</ul>
<h3>v2.7.1</h3>
<ul>
<li>Clarified language in the Reference Manual concerning window hint resetting</li>
<li>Bugfix: The OpenGL profile and forward-compatibility window parameters were not set</li>
<li>Bugfix: The default OpenGL version in the <code>version</code> test was set to 1.1</li>
<li>Bugfix: The FSAA test did not check for the availability of <code>GL_ARB_multisample</code></li>
<li>Bugfix: The window could be left in a closed state but still be flagged as open</li>
<li>Bugfix: <code>glfwGetWindowSize</code> did not check whether GLFW was initialized or whether the window was open</li>
<li>[Cocoa] Bugfix: The loop condition for saving video modes used the wrong index variable</li>
<li>[Cocoa] Bugfix: The iconified and active window states were not tracked</li>
<li>[X11] Cleaned up depdendencies for <code>libglfw.pc</code> file</li>
<li>[X11] Bugfix: The <code>dlopen</code> fallback method for <code>glfwGetProcAddress</code> had been broken by unrelated edits</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: <code>GLFW_WINDOW_NO_RESIZE</code> was honored in fullscreen mode</li>
<li>[Win32] Added Visual C++ 2010 project files for the GLFW DLL and static library to the <code>support/msvc100</code> directory</li>
<li>[Win32] Enabled <code>_GLFW_NO_DLOAD_GDI32</code> and <code>_GLFW_NO_DLOAD_WINMM</code> for the DLL build</li>
<li>[Win32] Bugfix: <code>compile.bat</code> used Unix-style line endings</li>
<li>[Win32] Bugfix: The <code>WGLSWAPINTERVALEXT_T</code>, <code>WGLGETEXTENSIONSSTRINGARB_T</code> and <code>WGLGETEXTENSIONSSTRINGEXT_T</code> typedefs were declared under <code>WGL_ARB_pixel_format</code></li>
<li>[Win32] Bugfix: The array for WGL context attributes was too small and could overflow</li>
<li>[Win32] Bugfix: Context creation using profiles did not check for the availability of <code>WGL_ARB_create_context_profile</code></li>
<li>[Win32] Bugfix: Context recreation logic was overly conservative, leading to unnecessary recreations</li>
<li>[Win32] Bugfix: Window focus was not handled correctly when using <code>glfwInconifyWindow</code></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