-
Notifications
You must be signed in to change notification settings - Fork 8
/
glfw3.h
executable file
·1770 lines (1615 loc) · 62.1 KB
/
glfw3.h
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
/*************************************************************************
* GLFW - An OpenGL library
* API version: 3.0
* WWW: http://www.glfw.org/
*------------------------------------------------------------------------
* Copyright (c) 2002-2006 Marcus Geelnard
* Copyright (c) 2006-2010 Camilla Berglund <elmindreda@elmindreda.org>
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would
* be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*
*************************************************************************/
#ifndef _glfw3_h_
#define _glfw3_h_
#ifdef __cplusplus
extern "C" {
#endif
/*************************************************************************
* Doxygen documentation
*************************************************************************/
/*! @defgroup clipboard Clipboard support
*/
/*! @defgroup context Context handling
*/
/*! @defgroup error Error handling
*/
/*! @defgroup gamma Gamma ramp support
*/
/*! @defgroup init Initialization and version information
*/
/*! @defgroup input Input handling
*/
/*! @defgroup monitor Monitor handling
*/
/*! @defgroup time Time input
*/
/*! @defgroup window Window handling
*
* The primary purpose of GLFW is to provide a simple interface to window
* management and OpenGL and OpenGL ES context creation. GLFW supports
* multiple windows, which can be either a normal desktop window or
* a fullscreen window.
*/
/*************************************************************************
* Global definitions
*************************************************************************/
/* ------------------- BEGIN SYSTEM/COMPILER SPECIFIC -------------------- */
/* Please report any problems that you find with your compiler, which may
* be solved in this section! There are several compilers that I have not
* been able to test this file with yet.
*
* First: If we are we on Windows, we want a single define for it (_WIN32)
* (Note: For Cygwin the compiler flag -mwin32 should be used, but to
* make sure that things run smoothly for Cygwin users, we add __CYGWIN__
* to the list of "valid Win32 identifiers", which removes the need for
* -mwin32)
*/
#if !defined(_WIN32) && (defined(__WIN32__) || defined(WIN32) || defined(__CYGWIN__))
#define _WIN32
#endif /* _WIN32 */
/* In order for extension support to be portable, we need to define an
* OpenGL function call method. We use the keyword APIENTRY, which is
* defined for Win32. (Note: Windows also needs this for <GL/gl.h>)
*/
#ifndef APIENTRY
#ifdef _WIN32
#define APIENTRY __stdcall
#else
#define APIENTRY
#endif
#endif /* APIENTRY */
/* The following three defines are here solely to make some Windows-based
* <GL/gl.h> files happy. Theoretically we could include <windows.h>, but
* it has the major drawback of severely polluting our namespace.
*/
/* Under Windows, we need WINGDIAPI defined */
#if !defined(WINGDIAPI) && defined(_WIN32)
#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__POCC__)
/* Microsoft Visual C++, Borland C++ Builder and Pelles C */
#define WINGDIAPI __declspec(dllimport)
#elif defined(__LCC__)
/* LCC-Win32 */
#define WINGDIAPI __stdcall
#else
/* Others (e.g. MinGW, Cygwin) */
#define WINGDIAPI extern
#endif
#define GLFW_WINGDIAPI_DEFINED
#endif /* WINGDIAPI */
/* Some <GL/glu.h> files also need CALLBACK defined */
#if !defined(CALLBACK) && defined(_WIN32)
#if defined(_MSC_VER)
/* Microsoft Visual C++ */
#if (defined(_M_MRX000) || defined(_M_IX86) || defined(_M_ALPHA) || defined(_M_PPC)) && !defined(MIDL_PASS)
#define CALLBACK __stdcall
#else
#define CALLBACK
#endif
#else
/* Other Windows compilers */
#define CALLBACK __stdcall
#endif
#define GLFW_CALLBACK_DEFINED
#endif /* CALLBACK */
/* Most <GL/glu.h> variants on Windows need wchar_t */
#if defined(_WIN32)
#include <stddef.h>
#endif
/* ---------------- GLFW related system specific defines ----------------- */
#if defined(GLFW_DLL) && defined(_GLFW_BUILD_DLL)
#error "You must not have both GLFW_DLL and _GLFW_BUILD_DLL defined"
#endif
#if defined(_WIN32) && defined(_GLFW_BUILD_DLL)
/* We are building a Win32 DLL */
#define GLFWAPI __declspec(dllexport)
#elif defined(_WIN32) && defined(GLFW_DLL)
/* We are calling a Win32 DLL */
#if defined(__LCC__)
#define GLFWAPI extern
#else
#define GLFWAPI __declspec(dllimport)
#endif
#else
/* We are either building/calling a static lib or we are non-win32 */
#define GLFWAPI
#endif
/* -------------------- END SYSTEM/COMPILER SPECIFIC --------------------- */
/* Include the chosen client API headers.
*/
#if defined(__APPLE_CC__)
#if defined(GLFW_INCLUDE_GLCOREARB)
#include <OpenGL/gl3.h>
#else
#define GL_GLEXT_LEGACY
#include <OpenGL/gl.h>
#endif
#if defined(GLFW_INCLUDE_GLU)
#include <OpenGL/glu.h>
#endif
#else
#if defined(GLFW_INCLUDE_GLCOREARB)
#include <GL/glcorearb.h>
#elif defined(GLFW_INCLUDE_ES1)
#include <GLES/gl.h>
#elif defined(GLFW_INCLUDE_ES2)
#include <GLES2/gl2.h>
#elif defined(GLFW_INCLUDE_ES3)
#include <GLES3/gl3.h>
#else
#include <GL/gl.h>
#endif
#if defined(GLFW_INCLUDE_GLU)
#include <GL/glu.h>
#endif
#endif
/*************************************************************************
* GLFW API tokens
*************************************************************************/
/*! @name GLFW version macros
* @{ */
/*! @brief The major version number of the GLFW library.
*
* This is incremented when the API is changed in non-compatible ways.
* @ingroup init
*/
#define GLFW_VERSION_MAJOR 3
/*! @brief The minor version number of the GLFW library.
*
* This is incremented when features are added to the API but it remains
* backward-compatible.
* @ingroup init
*/
#define GLFW_VERSION_MINOR 0
/*! @brief The revision number of the GLFW library.
*
* This is incremented when a bug fix release is made that does not contain any
* API changes.
* @ingroup init
*/
#define GLFW_VERSION_REVISION 0
/*! @} */
/*! @name Key and button actions
* @{ */
/*! @brief The key or button was released.
* @ingroup input
*/
#define GLFW_RELEASE 0
/*! @brief The key or button was pressed.
* @ingroup input
*/
#define GLFW_PRESS 1
/*! @brief The key was held down until it repeated.
* @ingroup input
*/
#define GLFW_REPEAT 2
/*! @} */
/* Keyboard raw key codes.
* These key codes are inspired by the USB HID Usage Tables v1.12 (p. 53-60),
* but re-arranged to map to 7-bit ASCII for printable keys (function keys are
* put in the 256+ range).
* The naming of the key codes follow these rules:
* - The US keyboard layout is used.
* - Names of printable alpha-numeric characters are used (e.g. "A", "R",
* "3", etc).
* - For non-alphanumeric characters, Unicode:ish names are used (e.g.
* "COMMA", "LEFT_SQUARE_BRACKET", etc). Note that some names do not
* correspond to the Unicode standard (usually for brevity).
* - Keys that lack a clear US mapping are named "WORLD_x".
* - For non-printable keys, custom names are used (e.g. "F4",
* "BACKSPACE", etc).
*/
/*! @defgroup keys Keyboard keys
* @ingroup input
* @{
*/
/* Printable keys */
#define GLFW_KEY_SPACE 32
#define GLFW_KEY_APOSTROPHE 39 /* ' */
#define GLFW_KEY_COMMA 44 /* , */
#define GLFW_KEY_MINUS 45 /* - */
#define GLFW_KEY_PERIOD 46 /* . */
#define GLFW_KEY_SLASH 47 /* / */
#define GLFW_KEY_0 48
#define GLFW_KEY_1 49
#define GLFW_KEY_2 50
#define GLFW_KEY_3 51
#define GLFW_KEY_4 52
#define GLFW_KEY_5 53
#define GLFW_KEY_6 54
#define GLFW_KEY_7 55
#define GLFW_KEY_8 56
#define GLFW_KEY_9 57
#define GLFW_KEY_SEMICOLON 59 /* ; */
#define GLFW_KEY_EQUAL 61 /* = */
#define GLFW_KEY_A 65
#define GLFW_KEY_B 66
#define GLFW_KEY_C 67
#define GLFW_KEY_D 68
#define GLFW_KEY_E 69
#define GLFW_KEY_F 70
#define GLFW_KEY_G 71
#define GLFW_KEY_H 72
#define GLFW_KEY_I 73
#define GLFW_KEY_J 74
#define GLFW_KEY_K 75
#define GLFW_KEY_L 76
#define GLFW_KEY_M 77
#define GLFW_KEY_N 78
#define GLFW_KEY_O 79
#define GLFW_KEY_P 80
#define GLFW_KEY_Q 81
#define GLFW_KEY_R 82
#define GLFW_KEY_S 83
#define GLFW_KEY_T 84
#define GLFW_KEY_U 85
#define GLFW_KEY_V 86
#define GLFW_KEY_W 87
#define GLFW_KEY_X 88
#define GLFW_KEY_Y 89
#define GLFW_KEY_Z 90
#define GLFW_KEY_LEFT_BRACKET 91 /* [ */
#define GLFW_KEY_BACKSLASH 92 /* \ */
#define GLFW_KEY_RIGHT_BRACKET 93 /* ] */
#define GLFW_KEY_GRAVE_ACCENT 96 /* ` */
#define GLFW_KEY_WORLD_1 161 /* non-US #1 */
#define GLFW_KEY_WORLD_2 162 /* non-US #2 */
/* Function keys */
#define GLFW_KEY_ESCAPE 256
#define GLFW_KEY_ENTER 257
#define GLFW_KEY_TAB 258
#define GLFW_KEY_BACKSPACE 259
#define GLFW_KEY_INSERT 260
#define GLFW_KEY_DELETE 261
#define GLFW_KEY_RIGHT 262
#define GLFW_KEY_LEFT 263
#define GLFW_KEY_DOWN 264
#define GLFW_KEY_UP 265
#define GLFW_KEY_PAGE_UP 266
#define GLFW_KEY_PAGE_DOWN 267
#define GLFW_KEY_HOME 268
#define GLFW_KEY_END 269
#define GLFW_KEY_CAPS_LOCK 280
#define GLFW_KEY_SCROLL_LOCK 281
#define GLFW_KEY_NUM_LOCK 282
#define GLFW_KEY_PRINT_SCREEN 283
#define GLFW_KEY_PAUSE 284
#define GLFW_KEY_F1 290
#define GLFW_KEY_F2 291
#define GLFW_KEY_F3 292
#define GLFW_KEY_F4 293
#define GLFW_KEY_F5 294
#define GLFW_KEY_F6 295
#define GLFW_KEY_F7 296
#define GLFW_KEY_F8 297
#define GLFW_KEY_F9 298
#define GLFW_KEY_F10 299
#define GLFW_KEY_F11 300
#define GLFW_KEY_F12 301
#define GLFW_KEY_F13 302
#define GLFW_KEY_F14 303
#define GLFW_KEY_F15 304
#define GLFW_KEY_F16 305
#define GLFW_KEY_F17 306
#define GLFW_KEY_F18 307
#define GLFW_KEY_F19 308
#define GLFW_KEY_F20 309
#define GLFW_KEY_F21 310
#define GLFW_KEY_F22 311
#define GLFW_KEY_F23 312
#define GLFW_KEY_F24 313
#define GLFW_KEY_F25 314
#define GLFW_KEY_KP_0 320
#define GLFW_KEY_KP_1 321
#define GLFW_KEY_KP_2 322
#define GLFW_KEY_KP_3 323
#define GLFW_KEY_KP_4 324
#define GLFW_KEY_KP_5 325
#define GLFW_KEY_KP_6 326
#define GLFW_KEY_KP_7 327
#define GLFW_KEY_KP_8 328
#define GLFW_KEY_KP_9 329
#define GLFW_KEY_KP_DECIMAL 330
#define GLFW_KEY_KP_DIVIDE 331
#define GLFW_KEY_KP_MULTIPLY 332
#define GLFW_KEY_KP_SUBTRACT 333
#define GLFW_KEY_KP_ADD 334
#define GLFW_KEY_KP_ENTER 335
#define GLFW_KEY_KP_EQUAL 336
#define GLFW_KEY_LEFT_SHIFT 340
#define GLFW_KEY_LEFT_CONTROL 341
#define GLFW_KEY_LEFT_ALT 342
#define GLFW_KEY_LEFT_SUPER 343
#define GLFW_KEY_RIGHT_SHIFT 344
#define GLFW_KEY_RIGHT_CONTROL 345
#define GLFW_KEY_RIGHT_ALT 346
#define GLFW_KEY_RIGHT_SUPER 347
#define GLFW_KEY_MENU 348
#define GLFW_KEY_LAST GLFW_KEY_MENU
#define GLFW_KEY_UNKNOWN -1
/* GLFW 2.x key name aliases (deprecated) */
#define GLFW_KEY_ESC GLFW_KEY_ESCAPE
#define GLFW_KEY_DEL GLFW_KEY_DELETE
#define GLFW_KEY_PAGEUP GLFW_KEY_PAGE_UP
#define GLFW_KEY_PAGEDOWN GLFW_KEY_PAGE_DOWN
#define GLFW_KEY_KP_NUM_LOCK GLFW_KEY_NUM_LOCK
#define GLFW_KEY_LCTRL GLFW_KEY_LEFT_CONTROL
#define GLFW_KEY_LSHIFT GLFW_KEY_LEFT_SHIFT
#define GLFW_KEY_LALT GLFW_KEY_LEFT_ALT
#define GLFW_KEY_LSUPER GLFW_KEY_LEFT_SUPER
#define GLFW_KEY_RCTRL GLFW_KEY_RIGHT_CONTROL
#define GLFW_KEY_RSHIFT GLFW_KEY_RIGHT_SHIFT
#define GLFW_KEY_RALT GLFW_KEY_RIGHT_ALT
#define GLFW_KEY_RSUPER GLFW_KEY_RIGHT_SUPER
#define GLFW_MOD_SHIFT 0x0001
#define GLFW_MOD_CONTROL 0x0002
#define GLFW_MOD_ALT 0x0004
#define GLFW_MOD_SUPER 0x0008
/*! @} */
/*! @defgroup buttons Mouse buttons
* @ingroup input
* @{ */
#define GLFW_MOUSE_BUTTON_1 0
#define GLFW_MOUSE_BUTTON_2 1
#define GLFW_MOUSE_BUTTON_3 2
#define GLFW_MOUSE_BUTTON_4 3
#define GLFW_MOUSE_BUTTON_5 4
#define GLFW_MOUSE_BUTTON_6 5
#define GLFW_MOUSE_BUTTON_7 6
#define GLFW_MOUSE_BUTTON_8 7
#define GLFW_MOUSE_BUTTON_LAST GLFW_MOUSE_BUTTON_8
#define GLFW_MOUSE_BUTTON_LEFT GLFW_MOUSE_BUTTON_1
#define GLFW_MOUSE_BUTTON_RIGHT GLFW_MOUSE_BUTTON_2
#define GLFW_MOUSE_BUTTON_MIDDLE GLFW_MOUSE_BUTTON_3
/*! @} */
/*! @defgroup joysticks Joysticks
* @ingroup input
* @{ */
#define GLFW_JOYSTICK_1 0
#define GLFW_JOYSTICK_2 1
#define GLFW_JOYSTICK_3 2
#define GLFW_JOYSTICK_4 3
#define GLFW_JOYSTICK_5 4
#define GLFW_JOYSTICK_6 5
#define GLFW_JOYSTICK_7 6
#define GLFW_JOYSTICK_8 7
#define GLFW_JOYSTICK_9 8
#define GLFW_JOYSTICK_10 9
#define GLFW_JOYSTICK_11 10
#define GLFW_JOYSTICK_12 11
#define GLFW_JOYSTICK_13 12
#define GLFW_JOYSTICK_14 13
#define GLFW_JOYSTICK_15 14
#define GLFW_JOYSTICK_16 15
#define GLFW_JOYSTICK_LAST GLFW_JOYSTICK_16
/*! @} */
/*! @defgroup errors Error codes
* @ingroup error
* @{ */
/*! @brief No error has occurred.
*/
#define GLFW_NO_ERROR 0
/*! @brief GLFW has not been initialized.
*/
#define GLFW_NOT_INITIALIZED 0x00070001
/*! @brief No context is current for this thread.
*/
#define GLFW_NO_CURRENT_CONTEXT 0x00070002
/*! @brief One of the enum parameters for the function was given an invalid
* enum.
*/
#define GLFW_INVALID_ENUM 0x00070003
/*! @brief One of the parameters for the function was given an invalid value.
*/
#define GLFW_INVALID_VALUE 0x00070004
/*! @brief A memory allocation failed.
*/
#define GLFW_OUT_OF_MEMORY 0x00070005
/*! @brief GLFW could not find support for the requested client API on the
* system.
*/
#define GLFW_API_UNAVAILABLE 0x00070006
/*! @brief The requested client API version is not available.
*/
#define GLFW_VERSION_UNAVAILABLE 0x00070007
/*! @brief A platform-specific error occurred that does not match any of the
* more specific categories.
*/
#define GLFW_PLATFORM_ERROR 0x00070008
/*! @brief The clipboard did not contain data in the requested format.
*/
#define GLFW_FORMAT_UNAVAILABLE 0x00070009
/*! @} */
#define GLFW_FOCUSED 0x00020001
#define GLFW_ICONIFIED 0x00020002
#define GLFW_RESIZABLE 0x00022007
#define GLFW_VISIBLE 0x00022008
#define GLFW_UNDECORATED 0x00022009
#define GLFW_CONTEXT_REVISION 0x00020004
#define GLFW_RED_BITS 0x00021000
#define GLFW_GREEN_BITS 0x00021001
#define GLFW_BLUE_BITS 0x00021002
#define GLFW_ALPHA_BITS 0x00021003
#define GLFW_DEPTH_BITS 0x00021004
#define GLFW_STENCIL_BITS 0x00021005
#define GLFW_ACCUM_RED_BITS 0x00021006
#define GLFW_ACCUM_GREEN_BITS 0x00021007
#define GLFW_ACCUM_BLUE_BITS 0x00021008
#define GLFW_ACCUM_ALPHA_BITS 0x00021009
#define GLFW_AUX_BUFFERS 0x0002100A
#define GLFW_STEREO 0x0002100B
#define GLFW_SAMPLES 0x0002100C
#define GLFW_SRGB_CAPABLE 0x0002100D
#define GLFW_CLIENT_API 0x00022000
#define GLFW_CONTEXT_VERSION_MAJOR 0x00022001
#define GLFW_CONTEXT_VERSION_MINOR 0x00022002
#define GLFW_CONTEXT_ROBUSTNESS 0x00022003
#define GLFW_OPENGL_FORWARD_COMPAT 0x00022004
#define GLFW_OPENGL_DEBUG_CONTEXT 0x00022005
#define GLFW_OPENGL_PROFILE 0x00022006
#define GLFW_OPENGL_API 0x00000001
#define GLFW_OPENGL_ES_API 0x00000002
#define GLFW_NO_ROBUSTNESS 0x00000000
#define GLFW_NO_RESET_NOTIFICATION 0x00000001
#define GLFW_LOSE_CONTEXT_ON_RESET 0x00000002
#define GLFW_OPENGL_NO_PROFILE 0x00000000
#define GLFW_OPENGL_CORE_PROFILE 0x00000001
#define GLFW_OPENGL_COMPAT_PROFILE 0x00000002
#define GLFW_CURSOR_MODE 0x00030001
#define GLFW_STICKY_KEYS 0x00030002
#define GLFW_STICKY_MOUSE_BUTTONS 0x00030003
#define GLFW_CURSOR_NORMAL 0x00040001
#define GLFW_CURSOR_HIDDEN 0x00040002
#define GLFW_CURSOR_CAPTURED 0x00040003
#define GLFW_PRESENT 0x00050001
#define GLFW_AXES 0x00050002
#define GLFW_BUTTONS 0x00050003
#define GLFW_GAMMA_RAMP_SIZE 256
#define GLFW_CONNECTED 0x00061000
#define GLFW_DISCONNECTED 0x00061001
/*************************************************************************
* GLFW API types
*************************************************************************/
/*! @brief Client API function pointer type.
* @ingroup context
*/
typedef void (*GLFWglproc)(void);
/*! @brief Opaque monitor object.
* @ingroup monitor
*/
typedef struct GLFWmonitor GLFWmonitor;
/*! @brief Opaque window object.
* @ingroup window
*/
typedef struct GLFWwindow GLFWwindow;
/*! @brief The function signature for error callbacks.
* @param[in] error An @link errors error code @endlink.
* @param[in] description A UTF-8 encoded string describing the error.
* @ingroup error
*
* @sa glfwSetErrorCallback
*/
typedef void (* GLFWerrorfun)(int,const char*);
/*! @brief The function signature for window position callbacks.
* @param[in] window The window that the user moved.
* @param[in] xpos The new x-coordinate, in pixels, of the upper-left corner of
* the client area of the window.
* @param[in] ypos The new y-coordinate, in pixels, of the upper-left corner of
* the client area of the window.
* @ingroup window
*
* @sa glfwSetWindowPosCallback
*/
typedef void (* GLFWwindowposfun)(GLFWwindow*,int,int);
/*! @brief The function signature for window resize callbacks.
* @param[in] window The window that the user resized.
* @param[in] width The new width, in pixels, of the window.
* @param[in] height The new height, in pixels, of the window.
* @ingroup window
*
* @sa glfwSetWindowSizeCallback
*/
typedef void (* GLFWwindowsizefun)(GLFWwindow*,int,int);
/*! @brief The function signature for window close callbacks.
* @param[in] window The window that the user attempted to close.
* @return One of @c GL_TRUE or @c GL_FALSE.
* @ingroup window
*
* The return value of the close callback becomes the new value returned by
* @ref glfwWindowShouldClose.
*
* @sa glfwSetWindowCloseCallback
*/
typedef int (* GLFWwindowclosefun)(GLFWwindow*);
/*! @brief The function signature for window content refresh callbacks.
* @param[in] window The window whose content needs to be refreshed.
* @ingroup window
*
* @sa glfwSetWindowRefreshCallback
*/
typedef void (* GLFWwindowrefreshfun)(GLFWwindow*);
/*! @brief The function signature for window focus/defocus callbacks.
* @param[in] window The window that was focused or defocused.
* @param[in] focused @c GL_TRUE if the window was focused, or @c GL_FALSE if
* it was defocused.
* @ingroup window
*
* @sa glfwSetWindowFocusCallback
*/
typedef void (* GLFWwindowfocusfun)(GLFWwindow*,int);
/*! @brief The function signature for window iconify/restore callbacks.
* @param[in] window The window that was iconified or restored.
* @param[in] iconified @c GL_TRUE if the window was iconified, or @c GL_FALSE
* if it was restored.
* @ingroup window
*
* @sa glfwSetWindowIconifyCallback
*/
typedef void (* GLFWwindowiconifyfun)(GLFWwindow*,int);
/*! @brief The function signature for mouse button callbacks.
* @param[in] window The window that received the event.
* @param[in] button The @link buttons mouse button @endlink that was pressed
* or released.
* @param[in] action One of @c GLFW_PRESS or @c GLFW_RELEASE.
* @ingroup input
*
* @sa glfwSetMouseButtonCallback
*/
typedef void (* GLFWmousebuttonfun)(GLFWwindow*,int,int);
/*! @brief The function signature for cursor position callbacks.
* @param[in] window The window that received the event.
* @param[in] xpos The new x-coordinate of the cursor.
* @param[in] ypos The new y-coordinate of the cursor.
* @ingroup input
*
* @sa glfwSetCursorPosCallback
*/
typedef void (* GLFWcursorposfun)(GLFWwindow*,int,int);
/*! @brief The function signature for cursor enter/exit callbacks.
* @param[in] window The window that received the event.
* @param[in] entered @c GL_TRUE if the cursor entered the window's client
* area, or @c GL_FALSE if it left it.
* @ingroup input
*
* @sa glfwSetCursorEnterCallback
*/
typedef void (* GLFWcursorenterfun)(GLFWwindow*,int);
/*! @brief The function signature for scroll callbacks.
* @param[in] window The window that received the event.
* @param[in] xpos The scroll offset along the x-axis.
* @param[in] ypos The scroll offset along the y-axis.
* @ingroup input
*
* @sa glfwSetScrollCallback
*/
typedef void (* GLFWscrollfun)(GLFWwindow*,double,double);
/*! @brief The function signature for keyboard key callbacks.
* @param[in] window The window that received the event.
* @param[in] key The @link keys keyboard key @endlink that was pressed or
* released.
* @param[in] action @ref GLFW_PRESS, @ref GLFW_RELEASE or @ref GLFW_REPEAT.
* @ingroup input
*
* @sa glfwSetKeyCallback
*/
typedef void (* GLFWkeyfun)(GLFWwindow*,int,int,int,int);
/*! @brief The function signature for Unicode character callbacks.
* @param[in] window The window that received the event.
* @param[in] character The Unicode code point of the character.
* @ingroup input
*
* @sa glfwSetCharCallback
*/
typedef void (* GLFWcharfun)(GLFWwindow*,unsigned int);
/*! @brief The function signature for monitor configuration callbacks.
* @param[in] monitor The monitor that was connected or disconnected.
* @param[in] event One of @c GLFW_CONNECTED or @c GLFW_DISCONNECTED.
* @ingroup monitor
*
* @sa glfwSetMonitorCallback
*/
typedef void (* GLFWmonitorfun)(GLFWmonitor*,int);
/* @brief Video mode type.
* @ingroup monitor
*/
typedef struct
{
int width;
int height;
int redBits;
int blueBits;
int greenBits;
} GLFWvidmode;
/*! @brief Gamma ramp.
* @ingroup gamma
*/
typedef struct
{
unsigned short red[GLFW_GAMMA_RAMP_SIZE];
unsigned short green[GLFW_GAMMA_RAMP_SIZE];
unsigned short blue[GLFW_GAMMA_RAMP_SIZE];
} GLFWgammaramp;
/*************************************************************************
* GLFW API functions
*************************************************************************/
/*! @brief Initializes the GLFW library.
*
* Before most GLFW functions can be used, GLFW must be initialized, and before
* a program terminates GLFW should be terminated in order to free allocated
* resources, memory, etc.
*
* @return @c GL_TRUE if successful, or @c GL_FALSE if an error occurred.
* @ingroup init
*
* @remarks Additional calls to this function after successful initialization
* but before termination will succeed but will do nothing.
*
* @note This function may only be called from the main thread.
*
* @note This function may take several seconds to complete on some systems,
* while on other systems it may take only a fraction of a second to complete.
*
* @note <b>Mac OS X:</b> This function will change the current directory of the
* application to the @c Contents/Resources subdirectory of the application's
* bundle, if present.
*
* @sa glfwTerminate
*/
GLFWAPI int glfwInit(void);
/*! @brief Terminates the GLFW library.
* @ingroup init
*
* @remarks This function may be called before @ref glfwInit.
*
* @note This function may only be called from the main thread.
*
* @note This function closes all GLFW windows.
*
* @note This function should be called before the program exits.
*
* @warning No window's context may be current on another thread when this
* function is called.
*
* @sa glfwInit
*/
GLFWAPI void glfwTerminate(void);
/*! @brief Retrieves the version of the GLFW library.
* @param[out] major Where to store the major version number, or @c NULL.
* @param[out] minor Where to store the minor version number, or @c NULL.
* @param[out] rev Where to store the revision number, or @c NULL.
* @ingroup init
*
* @remarks This function may be called before @ref glfwInit.
*
* @remarks This function may be called from secondary threads.
*
* @sa glfwGetVersionString
*/
GLFWAPI void glfwGetVersion(int* major, int* minor, int* rev);
/*! @brief Returns a string describing the compile-time configuration.
*
* The format of the string is as follows:
* @arg The name of the window system API
* @arg The name of the context creation API
* @arg Any additional options or APIs
*
* @return The GLFW version string.
* @ingroup init
*
* @remarks This function may be called before @ref glfwInit.
*
* @remarks This function may be called from secondary threads.
*
* @sa glfwGetVersion
*/
GLFWAPI const char* glfwGetVersionString(void);
/*! @brief Sets the error callback.
* @param[in] cbfun The new callback, or @c NULL to remove the currently set
* callback.
* @ingroup error
*
* @remarks This function may be called before @ref glfwInit.
*
* @note The error callback is called by the thread where the error was
* generated. If you are using GLFW from multiple threads, your error callback
* needs to be written accordingly.
*
* @note Because the description string provided to the callback may have been
* generated specifically for that error, it is not guaranteed to be valid
* after the callback has returned. If you wish to use it after that, you need
* to make your own copy of it before returning.
*/
GLFWAPI void glfwSetErrorCallback(GLFWerrorfun cbfun);
/*! @brief Returns the currently connected monitors.
* @param[out] count The size of the returned array.
* @return An array of monitor handles, or @c NULL if an error occurred.
* @ingroup monitor
*
* @sa glfwGetPrimaryMonitor
*/
GLFWAPI GLFWmonitor** glfwGetMonitors(int* count);
/*! @brief Returns the primary monitor.
* @return The primary monitor, or @c NULL if an error occurred.
* @ingroup monitor
*
* @sa glfwGetMonitors
*/
GLFWAPI GLFWmonitor* glfwGetPrimaryMonitor(void);
/*! @brief Returns the position of the monitor's viewport on the virtual screen.
* @param[in] monitor The monitor to query.
* @param[out] xpos The monitor x-coordinate.
* @param[out] ypos The monitor y-coordinate.
* @ingroup monitor
*/
GLFWAPI void glfwGetMonitorPos(GLFWmonitor* monitor, int* xpos, int* ypos);
/*! @brief Returns the physical size of the monitor.
* @param[in] monitor The monitor to query.
* @param[out] width The width, in mm, of the monitor's display
* @param[out] height The height, in mm, of the monitor's display.
* @ingroup monitor
*/
GLFWAPI void glfwGetMonitorPhysicalSize(GLFWmonitor* monitor, int* width, int* height);
/*! @brief Returns the name of the specified monitor.
* @param[in] monitor The monitor to query.
* @return The UTF-8 encoded name of the monitor, or @c NULL if an error
* occurred.
* @ingroup monitor
*/
GLFWAPI const char* glfwGetMonitorName(GLFWmonitor* monitor);
GLFWAPI const char* glfwGetMonitorICCProfilePath(GLFWmonitor* monitor);
/*! @brief Sets the monitor configuration callback.
* @param[in] cbfun The new callback, or @c NULL to remove the currently set
* callback.
* @ingroup monitor
*/
GLFWAPI void glfwSetMonitorCallback(GLFWmonitorfun cbfun);
/*! @brief Returns the available video modes for the specified monitor.
* @param[in] monitor The monitor to query.
* @param[out] count The number of video modes in the returned array.
* @return An array of video modes, or @c NULL if an error occurred.
* @ingroup monitor
*
* @sa glfwGetVideoMode
*/
GLFWAPI const GLFWvidmode* glfwGetVideoModes(GLFWmonitor* monitor, int* count);
/*! @brief Returns the current mode of the specified monitor.
* @param[in] monitor The monitor to query.
* @return The current mode of the monitor, or all zeroes if an error occurred.
* @ingroup monitor
*
* @sa glfwGetVideoModes
*/
GLFWAPI GLFWvidmode glfwGetVideoMode(GLFWmonitor* monitor);
/*! @brief Generates a gamma ramp and sets it for the specified monitor.
* @param[in] monitor The monitor whose gamma ramp to set.
* @param[in] gamma The desired exponent.
* @ingroup gamma
*
* @remarks This is a helper function on top of @ref glfwSetGammaRamp.
*/
GLFWAPI void glfwSetGamma(GLFWmonitor* monitor, float gamma);
/*! @brief Retrieves the current gamma ramp for the specified monitor.
* @param[in] monitor The monitor to query.
* @param[out] ramp Where to store the gamma ramp.
* @ingroup gamma
*
* @bug This function does not yet support monitors whose original gamma ramp
* has more or less than 256 entries.
*/
GLFWAPI void glfwGetGammaRamp(GLFWmonitor* monitor, GLFWgammaramp* ramp);
/*! @brief Sets the gamma ramp for the specified monitor.
* @param[in] monitor The monitor whose gamma ramp to set.
* @param[in] ramp The gamma ramp to use.
* @ingroup gamma
*
* @bug This function does not yet support monitors whose original gamma ramp
* has more or less than 256 entries.
*/
GLFWAPI void glfwSetGammaRamp(GLFWmonitor* monitor, const GLFWgammaramp* ramp);
/*! @brief Resets all window hints to their default values
*
* The @c GLFW_RED_BITS, @c GLFW_GREEN_BITS, @c GLFW_BLUE_BITS, @c
* GLFW_ALPHA_BITS and @c GLFW_STENCIL_BITS hints are set to 8.
*
* The @c GLFW_DEPTH_BITS hint is set to 24.
*
* The @c GLFW_VISIBLE and @c GLFW_RESIZABLE hints are set to 1.
*
* The @c GLFW_CLIENT_API hint is set to @c GLFW_OPENGL_API.
*
* The @c GLFW_CONTEXT_VERSION_MAJOR and @c GLFW_CONTEXT_VERSION_MINOR
* hints are set to 1 and 0, respectively.
*
* The @c GLFW_CONTEXT_ROBUSTNESS hint is set to @c GLFW_NO_ROBUSTNESS.
*
* The @c GLFW_OPENGL_PROFILE hint is set to @c GLFW_OPENGL_NO_PROFILE.
*
* All other hints are set to 0.
*
* @ingroup window
*
* @note This function may only be called from the main thread.
*
* @sa glfwWindowHint
*/
GLFWAPI void glfwDefaultWindowHints(void);
/*! @brief Sets the specified window hint to the desired value.
* @param[in] target The window hint to set.
* @param[in] hint The new value of the window hint.
* @ingroup window
*
* This function sets hints for the next call to @ref glfwCreateWindow. The
* hints, once set, retain their values until changed by a call to @ref
* glfwWindowHint or @ref glfwDefaultWindowHints, or until the library is
* terminated with @ref glfwTerminate.
*
* @par Hard and soft constraints
*
* Some window hints are hard constraints. These must match the available
* capabilities @em exactly for window and context creation to succeed. Hints
* that are not hard constraints are matched as closely as possible, but the
* resulting window and context may differ from what these hints requested. To
* find out the actual parameters of the created window and context, use the
* @ref glfwGetWindowParam function.
*
* The following hints are hard constraints:
* @arg @c GLFW_STEREO
* @arg @c GLFW_CLIENT_API
*
* The following additional hints are hard constraints if requesting an OpenGL
* context:
* @arg @c GLFW_OPENGL_FORWARD_COMPAT
* @arg @c GLFW_OPENGL_PROFILE
*
* Hints that do not apply to a given type of window or context are ignored.
*
* @par Framebuffer hints
*
* The @c GLFW_RED_BITS, @c GLFW_GREEN_BITS, @c GLFW_BLUE_BITS, @c
* GLFW_ALPHA_BITS, @c GLFW_DEPTH_BITS and @c GLFW_STENCIL_BITS hints specify
* the desired bit depths of the various components of the default framebuffer.
*
* The @c GLFW_ACCUM_RED_BITS, @c GLFW_ACCUM_GREEN_BITS, @c
* GLFW_ACCUM_BLUE_BITS and @c GLFW_ACCUM_ALPHA_BITS hints specify the desired
* bit depths of the various components of the accumulation buffer.
*
* The @c GLFW_AUX_BUFFERS hint specifies the desired number of auxiliary
* buffers.
*
* The @c GLFW_STEREO hint specifies whether to use stereoscopic rendering.
*
* The @c GLFW_SAMPLES hint specifies the desired number of samples to use