1 //========================================================================
2 // GLFW - An OpenGL framework
3 // Platform:    Delphi/FPC + Windows/Linux/Mac OS
4 // API version: 2.7
5 // WWW:         http://www.glfw.org/
6 //------------------------------------------------------------------------
7 // Copyright (c) 2002-2006 Marcus Geelnard
8 // Copyright (c) 2006-2010 Camilla Berglund <elmindreda@elmindreda.org>
9 //
10 // This software is provided 'as-is', without any express or implied
11 // warranty. In no event will the authors be held liable for any damages
12 // arising from the use of this software.
13 //
14 // Permission is granted to anyone to use this software for any purpose,
15 // including commercial applications, and to alter it and redistribute it
16 // freely, subject to the following restrictions:
17 //
18 // 1. The origin of this software must not be misrepresented; you must not
19 //    claim that you wrote the original software. If you use this software
20 //    in a product, an acknowledgment in the product documentation would
21 //    be appreciated but is not required.
22 //
23 // 2. Altered source versions must be plainly marked as such, and must not
24 //    be misrepresented as being the original software.
25 //
26 // 3. This notice may not be removed or altered from any source
27 //    distribution.
28 //
29 //========================================================================
30 
31 unit glfw;
32 
33 // Use standard linking method
34 // This means links dynamically to glfw.dll on Windows, glfw.so on Linux
35 // and statically on Mac OS X
36 //
37 // If you don't like that, comment this define
38 {$DEFINE LINK_STANDARD}
39 
40 // If the define above is commented, remove the dot on your favorite option
41 {.$DEFINE LINK_DYNAMIC}
42 {.$DEFINE LINK_STATIC}
43 
44 
45 {$IFDEF FPC}
46   {$MODE DELPHI}
47 {$ENDIF}
48 
49 interface
50 
51 const
52 
53   //========================================================================
54   // GLFW version
55   //========================================================================
56   GLFW_VERSION_MAJOR    = 2;
57   GLFW_VERSION_MINOR    = 7;
58   GLFW_VERSION_REVISION = 9;
59 
60   //========================================================================
61   // Input handling definitions
62   //========================================================================
63 
64   // Key and button state/action definitions
65   GLFW_RELEASE          = 0;
66   GLFW_PRESS            = 1;
67 
68   // Keyboard key definitions: 8-bit ISO-8859-1 (Latin 1) encoding is used
69   // for printable keys (such as A-Z, 0-9 etc), and values above 256
70   // represent special (non-printable) keys (e.g. F1, Page Up etc).
71   GLFW_KEY_UNKNOWN      = -1;
72   GLFW_KEY_SPACE        = 32;
73   GLFW_KEY_SPECIAL      = 256;
74   GLFW_KEY_ESC          = (GLFW_KEY_SPECIAL+1);
75   GLFW_KEY_F1           = (GLFW_KEY_SPECIAL+2);
76   GLFW_KEY_F2           = (GLFW_KEY_SPECIAL+3);
77   GLFW_KEY_F3           = (GLFW_KEY_SPECIAL+4);
78   GLFW_KEY_F4           = (GLFW_KEY_SPECIAL+5);
79   GLFW_KEY_F5           = (GLFW_KEY_SPECIAL+6);
80   GLFW_KEY_F6           = (GLFW_KEY_SPECIAL+7);
81   GLFW_KEY_F7           = (GLFW_KEY_SPECIAL+8);
82   GLFW_KEY_F8           = (GLFW_KEY_SPECIAL+9);
83   GLFW_KEY_F9           = (GLFW_KEY_SPECIAL+10);
84   GLFW_KEY_F10          = (GLFW_KEY_SPECIAL+11);
85   GLFW_KEY_F11          = (GLFW_KEY_SPECIAL+12);
86   GLFW_KEY_F12          = (GLFW_KEY_SPECIAL+13);
87   GLFW_KEY_F13          = (GLFW_KEY_SPECIAL+14);
88   GLFW_KEY_F14          = (GLFW_KEY_SPECIAL+15);
89   GLFW_KEY_F15          = (GLFW_KEY_SPECIAL+16);
90   GLFW_KEY_F16          = (GLFW_KEY_SPECIAL+17);
91   GLFW_KEY_F17          = (GLFW_KEY_SPECIAL+18);
92   GLFW_KEY_F18          = (GLFW_KEY_SPECIAL+19);
93   GLFW_KEY_F19          = (GLFW_KEY_SPECIAL+20);
94   GLFW_KEY_F20          = (GLFW_KEY_SPECIAL+21);
95   GLFW_KEY_F21          = (GLFW_KEY_SPECIAL+22);
96   GLFW_KEY_F22          = (GLFW_KEY_SPECIAL+23);
97   GLFW_KEY_F23          = (GLFW_KEY_SPECIAL+24);
98   GLFW_KEY_F24          = (GLFW_KEY_SPECIAL+25);
99   GLFW_KEY_F25          = (GLFW_KEY_SPECIAL+26);
100   GLFW_KEY_UP           = (GLFW_KEY_SPECIAL+27);
101   GLFW_KEY_DOWN         = (GLFW_KEY_SPECIAL+28);
102   GLFW_KEY_LEFT         = (GLFW_KEY_SPECIAL+29);
103   GLFW_KEY_RIGHT        = (GLFW_KEY_SPECIAL+30);
104   GLFW_KEY_LSHIFT       = (GLFW_KEY_SPECIAL+31);
105   GLFW_KEY_RSHIFT       = (GLFW_KEY_SPECIAL+32);
106   GLFW_KEY_LCTRL        = (GLFW_KEY_SPECIAL+33);
107   GLFW_KEY_RCTRL        = (GLFW_KEY_SPECIAL+34);
108   GLFW_KEY_LALT         = (GLFW_KEY_SPECIAL+35);
109   GLFW_KEY_RALT         = (GLFW_KEY_SPECIAL+36);
110   GLFW_KEY_TAB          = (GLFW_KEY_SPECIAL+37);
111   GLFW_KEY_ENTER        = (GLFW_KEY_SPECIAL+38);
112   GLFW_KEY_BACKSPACE    = (GLFW_KEY_SPECIAL+39);
113   GLFW_KEY_INSERT       = (GLFW_KEY_SPECIAL+40);
114   GLFW_KEY_DEL          = (GLFW_KEY_SPECIAL+41);
115   GLFW_KEY_PAGEUP       = (GLFW_KEY_SPECIAL+42);
116   GLFW_KEY_PAGEDOWN     = (GLFW_KEY_SPECIAL+43);
117   GLFW_KEY_HOME         = (GLFW_KEY_SPECIAL+44);
118   GLFW_KEY_END          = (GLFW_KEY_SPECIAL+45);
119   GLFW_KEY_KP_0         = (GLFW_KEY_SPECIAL+46);
120   GLFW_KEY_KP_1         = (GLFW_KEY_SPECIAL+47);
121   GLFW_KEY_KP_2         = (GLFW_KEY_SPECIAL+48);
122   GLFW_KEY_KP_3         = (GLFW_KEY_SPECIAL+49);
123   GLFW_KEY_KP_4         = (GLFW_KEY_SPECIAL+50);
124   GLFW_KEY_KP_5         = (GLFW_KEY_SPECIAL+51);
125   GLFW_KEY_KP_6         = (GLFW_KEY_SPECIAL+52);
126   GLFW_KEY_KP_7         = (GLFW_KEY_SPECIAL+53);
127   GLFW_KEY_KP_8         = (GLFW_KEY_SPECIAL+54);
128   GLFW_KEY_KP_9         = (GLFW_KEY_SPECIAL+55);
129   GLFW_KEY_KP_DIVIDE    = (GLFW_KEY_SPECIAL+56);
130   GLFW_KEY_KP_MULTIPLY  = (GLFW_KEY_SPECIAL+57);
131   GLFW_KEY_KP_SUBTRACT  = (GLFW_KEY_SPECIAL+58);
132   GLFW_KEY_KP_ADD       = (GLFW_KEY_SPECIAL+59);
133   GLFW_KEY_KP_DECIMAL   = (GLFW_KEY_SPECIAL+60);
134   GLFW_KEY_KP_EQUAL     = (GLFW_KEY_SPECIAL+61);
135   GLFW_KEY_KP_ENTER     = (GLFW_KEY_SPECIAL+62);
136   GLFW_KEY_KP_NUM_LOCK  = (GLFW_KEY_SPECIAL+63);
137   GLFW_KEY_CAPS_LOCK    = (GLFW_KEY_SPECIAL+64);
138   GLFW_KEY_SCROLL_LOCK  = (GLFW_KEY_SPECIAL+65);
139   GLFW_KEY_PAUSE        = (GLFW_KEY_SPECIAL+66);
140   GLFW_KEY_LSUPER       = (GLFW_KEY_SPECIAL+67);
141   GLFW_KEY_RSUPER       = (GLFW_KEY_SPECIAL+68);
142   GLFW_KEY_MENU         = (GLFW_KEY_SPECIAL+69);
143   GLFW_KEY_LAST         = GLFW_KEY_MENU;
144 
145   // Mouse button definitions
146   GLFW_MOUSE_BUTTON_1      = 0;
147   GLFW_MOUSE_BUTTON_2      = 1;
148   GLFW_MOUSE_BUTTON_3      = 2;
149   GLFW_MOUSE_BUTTON_4      = 3;
150   GLFW_MOUSE_BUTTON_5      = 4;
151   GLFW_MOUSE_BUTTON_6      = 5;
152   GLFW_MOUSE_BUTTON_7      = 6;
153   GLFW_MOUSE_BUTTON_8      = 7;
154   GLFW_MOUSE_BUTTON_LAST   = GLFW_MOUSE_BUTTON_8;
155 
156   // Mouse button aliases
157   GLFW_MOUSE_BUTTON_LEFT   = GLFW_MOUSE_BUTTON_1;
158   GLFW_MOUSE_BUTTON_RIGHT  = GLFW_MOUSE_BUTTON_2;
159   GLFW_MOUSE_BUTTON_MIDDLE = GLFW_MOUSE_BUTTON_3;
160 
161   // Joystick identifiers
162   GLFW_JOYSTICK_1           = 0;
163   GLFW_JOYSTICK_2           = 1;
164   GLFW_JOYSTICK_3           = 2;
165   GLFW_JOYSTICK_4           = 3;
166   GLFW_JOYSTICK_5           = 4;
167   GLFW_JOYSTICK_6           = 5;
168   GLFW_JOYSTICK_7           = 6;
169   GLFW_JOYSTICK_8           = 7;
170   GLFW_JOYSTICK_9           = 8;
171   GLFW_JOYSTICK_10          = 9;
172   GLFW_JOYSTICK_11          = 10;
173   GLFW_JOYSTICK_12          = 11;
174   GLFW_JOYSTICK_13          = 12;
175   GLFW_JOYSTICK_14          = 13;
176   GLFW_JOYSTICK_15          = 14;
177   GLFW_JOYSTICK_16          = 15;
178   GLFW_JOYSTICK_LAST        = GLFW_JOYSTICK_16;
179 
180 
181   //========================================================================
182   // Other definitions
183   //========================================================================
184 
185   // glfwOpenWindow modes
186   GLFW_WINDOW               = $00010001;
187   GLFW_FULLSCREEN           = $00010002;
188 
189   // glfwGetWindowParam tokens
190   GLFW_OPENED               = $00020001;
191   GLFW_ACTIVE               = $00020002;
192   GLFW_ICONIFIED            = $00020003;
193   GLFW_ACCELERATED          = $00020004;
194   GLFW_RED_BITS             = $00020005;
195   GLFW_GREEN_BITS           = $00020006;
196   GLFW_BLUE_BITS            = $00020007;
197   GLFW_ALPHA_BITS           = $00020008;
198   GLFW_DEPTH_BITS           = $00020009;
199   GLFW_STENCIL_BITS         = $0002000A;
200 
201   // The following constants are used for both glfwGetWindowParam
202   // and glfwOpenWindowHint
203   GLFW_REFRESH_RATE         = $0002000B;
204   GLFW_ACCUM_RED_BITS       = $0002000C;
205   GLFW_ACCUM_GREEN_BITS     = $0002000D;
206   GLFW_ACCUM_BLUE_BITS      = $0002000E;
207   GLFW_ACCUM_ALPHA_BITS     = $0002000F;
208   GLFW_AUX_BUFFERS          = $00020010;
209   GLFW_STEREO               = $00020011;
210   GLFW_WINDOW_NO_RESIZE     = $00020012;
211   GLFW_FSAA_SAMPLES         = $00020013;
212   GLFW_OPENGL_VERSION_MAJOR = $00020014;
213   GLFW_OPENGL_VERSION_MINOR = $00020015;
214   GLFW_OPENGL_FORWARD_COMPAT= $00020016;
215   GLFW_DEBUG_CONTEXT        = $00020017;
216   GLFW_OPENGL_PROFILE       = $00020018;
217 
218   // GLFW_OPENGL_PROFILE tokens
219   GLFW_OPENGL_CORE_PROFILE  = $00050001;
220   GLFW_OPENGL_COMPAT_PROFILE = $00050002;
221 
222   // glfwEnable/glfwDisable tokens
223   GLFW_MOUSE_CURSOR         = $00030001;
224   GLFW_STICKY_KEYS          = $00030002;
225   GLFW_STICKY_MOUSE_BUTTONS = $00030003;
226   GLFW_SYSTEM_KEYS          = $00030004;
227   GLFW_KEY_REPEAT           = $00030005;
228   GLFW_AUTO_POLL_EVENTS     = $00030006;
229 
230   // glfwWaitThread wait modes
231   GLFW_WAIT                 = $00040001;
232   GLFW_NOWAIT               = $00040002;
233 
234   // glfwGetJoystickParam tokens
235   GLFW_PRESENT              = $00050001;
236   GLFW_AXES                 = $00050002;
237   GLFW_BUTTONS              = $00050003;
238 
239   // glfwReadImage/glfwLoadTexture2D flags
240   GLFW_NO_RESCALE_BIT       = $00000001; // Only for glfwReadImage
241   GLFW_ORIGIN_UL_BIT        = $00000002;
242   GLFW_BUILD_MIPMAPS_BIT    = $00000004; // Only for glfwLoadTexture2D
243   GLFW_ALPHA_MAP_BIT        = $00000008;
244 
245   // Time spans longer than this (seconds) are considered to be infinity
246   GLFW_INFINITY             = 100000.0;
247 
248 
249   //========================================================================
250   // Typedefs
251   //========================================================================
252 
253 type
254 
255   // The video mode structure used by glfwGetVideoModes()
256   GLFWvidmode = packed record
257     Width, Height               : Integer;
258     RedBits, BlueBits, GreenBits: Integer;
259   end;
260   PGLFWvidmode = ^GLFWvidmode;
261 
262   // Image/texture information
263   GLFWimage = packed record
264     Width, Height: Integer;
265     Format       : Integer;
266     BytesPerPixel: Integer;
267     Data         : PChar;
268   end;
269   PGLFWimage = ^GLFWimage;
270 
271   // Thread ID
272   GLFWthread = Integer;
273 
274   // Mutex object
275   GLFWmutex = Pointer;
276 
277   // Condition variable object
278   GLFWcond = Pointer;
279 
280   // Function pointer types
281   GLFWwindowsizefun    = procedure(Width, Height: Integer); {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF}
282   GLFWwindowclosefun   = function: Integer; {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF}
283   GLFWwindowrefreshfun = procedure; {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF}
284   GLFWmousebuttonfun   = procedure(Button, Action: Integer); {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF}
285   GLFWmouseposfun      = procedure(X, Y: Integer); {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF}
286   GLFWmousewheelfun    = procedure(Pos: Integer); {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF}
287   GLFWkeyfun           = procedure(Key, Action: Integer); {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF}
288   GLFWcharfun          = procedure(Character, Action: Integer); {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF}
289   GLFWthreadfun        = procedure(Arg: Pointer); {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF}
290 
291 
292 //========================================================================
293 // Prototypes
294 //========================================================================
295 
296 {$IFDEF LINK_DYNAMIC}
297 const
298   {$IFDEF WIN32}
299     DLLNAME = 'glfw.dll';
300   {$ELSE}
301     {$IFDEF DARWIN}
302     DLLNAME = 'libglfw.dylib';
303     {$ELSE}
304     DLLNAME = 'libglfw.so';
305     {$ENDIF}
306   {$ENDIF}
307 {$ENDIF}
308 
309 
310 // GLFW initialization, termination and version querying
311 function  glfwInit: Integer; {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
312 procedure glfwTerminate; {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
313 procedure glfwGetVersion(var major: Integer; var minor: Integer; var Rev: Integer); {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
314 
315 // Window handling
316 function  glfwOpenWindow(width, height, redbits, greenbits, bluebits, alphabits, depthbits, stencilbits, mode: Integer): Integer; {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
317 procedure glfwOpenWindowHint(target, hint: Integer); {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
318 procedure glfwCloseWindow; {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
319 procedure glfwSetWindowTitle(title: PChar); {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
320 procedure glfwGetWindowSize(var width: Integer; var height: Integer); {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
321 procedure glfwSetWindowSize(width, height: Integer); {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
322 procedure glfwSetWindowPos(x, y: Integer); {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
323 procedure glfwIconifyWindow; {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
324 procedure glfwRestoreWindow; {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
325 procedure glfwSwapBuffers; {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
326 procedure glfwSwapInterval(interval: Integer); {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
327 function  glfwGetWindowParam(Param: Integer): Integer; {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
328 procedure glfwSetWindowSizeCallback(cbfun: GLFWwindowsizefun); {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
329 procedure glfwSetWindowCloseCallback(cbfun: GLFWwindowclosefun); {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
330 procedure glfwSetWindowRefreshCallback(cbfun: GLFWwindowrefreshfun); {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
331 
332 // Video mode functions
333 function  glfwGetVideoModes(list: PGLFWvidmode; maxcount: Integer): Integer; {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
334 procedure glfwGetDesktopMode(mode: PGLFWvidmode); {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
335 
336 // Input handling
337 procedure glfwPollEvents; {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
338 procedure glfwWaitEvents; {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
339 function  glfwGetKey(key: Integer): Integer; {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
340 function  glfwGetMouseButton(button: Integer): Integer; {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
341 procedure glfwGetMousePos(var xpos: Integer; var ypos: Integer); {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
342 procedure glfwSetMousePos(xpos, ypos: Integer); {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
343 function  glfwGetMouseWheel: Integer; {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
344 procedure glfwSetMouseWheel(pos: Integer); {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
345 procedure glfwSetKeyCallback( cbfun: GLFWkeyfun); {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
346 procedure glfwSetCharCallback( cbfun: GLFWcharfun); {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
347 procedure glfwSetMouseButtonCallback( cbfun: GLFWmousebuttonfun); {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
348 procedure glfwSetMousePosCallback( cbfun: GLFWmouseposfun); {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
349 procedure glfwSetMouseWheelCallback( cbfun: GLFWmousewheelfun); {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
350 
351 // Joystick input
352 function  glfwGetJoystickParam(joy, param: Integer): Integer; {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
353 function  glfwGetJoystickPos(joy: Integer; var pos: Single; numaxes: Integer): Integer; {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
354 function  glfwGetJoystickButtons(joy: Integer; buttons: PChar; numbuttons: Integer): Integer; {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
355 
356 // Time
357 function  glfwGetTime: Double; {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
358 procedure glfwSetTime(time: Double); {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
359 procedure glfwSleep(time: Double); {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
360 
361 // Extension support
362 function  glfwExtensionSupported(extension: PChar): Integer; {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
363 function  glfwGetProcAddress(procname: PChar): Pointer; {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
364 procedure glfwGetGLVersion(var major: Integer; var minor: Integer; var Rev: Integer); {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
365 
366 // Threading support
367 function  glfwCreateThread(fun: GLFWthreadfun; arg: Pointer): GLFWthread; {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
368 procedure glfwDestroyThread(Id: GLFWthread); {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
369 function  glfwWaitThread(Id: GLFWthread; waitmode: Integer): Integer; {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
370 function  glfwGetThreadID: GLFWthread; {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
371 function  glfwCreateMutex: GLFWmutex; {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
372 procedure glfwDestroyMutex( mutex: GLFWmutex); {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
373 procedure glfwLockMutex(mutex: GLFWmutex); {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
374 procedure glfwUnlockMutex(mutex: GLFWmutex); {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
375 function  glfwCreateCond: GLFWcond; {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
376 procedure glfwDestroyCond(cond: GLFWcond); {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
377 procedure glfwWaitCond(cond: GLFWcond; mutex: GLFWmutex; timeout: Double); {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
378 procedure glfwSignalCond(cond: GLFWcond); {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
379 procedure glfwBroadcastCond(cond: GLFWcond); {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
380 function  glfwGetNumberOfProcessors: Integer; {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
381 
382 // Enable/disable functions
383 procedure glfwEnable(token: Integer); {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
384 procedure glfwDisable(token: Integer); {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
385 
386 // Image/texture I/O support
387 function  glfwReadImage(name: PChar; image: PGLFWimage; flags: Integer): Integer; {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
388 function  glfwReadMemoryImage(data: Pointer; size: LongInt; img: PGLFWimage; flags: Integer): Integer; {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
389 procedure glfwFreeImage(img: PGLFWimage);  {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
390 function  glfwLoadTexture2D(name: PChar; flags: Integer): Integer; {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
391 function  glfwLoadMemoryTexture2D(data: Pointer; size: LongInt; flags: Integer): Integer; {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
392 function  glfwLoadTextureImage2D(img: PGLFWimage; flags: Integer): Integer; {$IFDEF WIN32} stdcall; {$ELSE} cdecl; {$ENDIF} external {$IFDEF LINK_DYNAMIC} DLLNAME {$ENDIF};
393 
394 implementation
395 
396 
397 
398 end.
399