1 module deimos.glfw.glfw2;
2 /************************************************************************
3 * GLFW - An OpenGL framework
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
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 extern (C) {
31
32 enum {
33 /*************************************************************************
34 * GLFW version
35 *************************************************************************/
36 GLFW_VERSION_MAJOR = 2,
37 GLFW_VERSION_MINOR = 7,
38 GLFW_VERSION_REVISION = 2,
39
40 /*************************************************************************
41 * Input handling definitions
42 *************************************************************************/
43
44 /* Key and button state/action definitions */
45 GLFW_RELEASE = 0,
46 GLFW_PRESS = 1,
47
48 /* Keyboard key definitions: 8-bit ISO-8859-1 (Latin 1) encoding is used
49 * for printable keys (such as A-Z, 0-9 etc), and values above 256
50 * represent special (non-printable) keys (e.g. F1, Page Up etc).
51 */
52 GLFW_KEY_UNKNOWN = -1,
53 GLFW_KEY_SPACE = 32,
54 GLFW_KEY_SPECIAL = 256,
55 GLFW_KEY_ESC = (GLFW_KEY_SPECIAL+1),
56 GLFW_KEY_F1 = (GLFW_KEY_SPECIAL+2),
57 GLFW_KEY_F2 = (GLFW_KEY_SPECIAL+3),
58 GLFW_KEY_F3 = (GLFW_KEY_SPECIAL+4),
59 GLFW_KEY_F4 = (GLFW_KEY_SPECIAL+5),
60 GLFW_KEY_F5 = (GLFW_KEY_SPECIAL+6),
61 GLFW_KEY_F6 = (GLFW_KEY_SPECIAL+7),
62 GLFW_KEY_F7 = (GLFW_KEY_SPECIAL+8),
63 GLFW_KEY_F8 = (GLFW_KEY_SPECIAL+9),
64 GLFW_KEY_F9 = (GLFW_KEY_SPECIAL+10),
65 GLFW_KEY_F10 = (GLFW_KEY_SPECIAL+11),
66 GLFW_KEY_F11 = (GLFW_KEY_SPECIAL+12),
67 GLFW_KEY_F12 = (GLFW_KEY_SPECIAL+13),
68 GLFW_KEY_F13 = (GLFW_KEY_SPECIAL+14),
69 GLFW_KEY_F14 = (GLFW_KEY_SPECIAL+15),
70 GLFW_KEY_F15 = (GLFW_KEY_SPECIAL+16),
71 GLFW_KEY_F16 = (GLFW_KEY_SPECIAL+17),
72 GLFW_KEY_F17 = (GLFW_KEY_SPECIAL+18),
73 GLFW_KEY_F18 = (GLFW_KEY_SPECIAL+19),
74 GLFW_KEY_F19 = (GLFW_KEY_SPECIAL+20),
75 GLFW_KEY_F20 = (GLFW_KEY_SPECIAL+21),
76 GLFW_KEY_F21 = (GLFW_KEY_SPECIAL+22),
77 GLFW_KEY_F22 = (GLFW_KEY_SPECIAL+23),
78 GLFW_KEY_F23 = (GLFW_KEY_SPECIAL+24),
79 GLFW_KEY_F24 = (GLFW_KEY_SPECIAL+25),
80 GLFW_KEY_F25 = (GLFW_KEY_SPECIAL+26),
81 GLFW_KEY_UP = (GLFW_KEY_SPECIAL+27),
82 GLFW_KEY_DOWN = (GLFW_KEY_SPECIAL+28),
83 GLFW_KEY_LEFT = (GLFW_KEY_SPECIAL+29),
84 GLFW_KEY_RIGHT = (GLFW_KEY_SPECIAL+30),
85 GLFW_KEY_LSHIFT = (GLFW_KEY_SPECIAL+31),
86 GLFW_KEY_RSHIFT = (GLFW_KEY_SPECIAL+32),
87 GLFW_KEY_LCTRL = (GLFW_KEY_SPECIAL+33),
88 GLFW_KEY_RCTRL = (GLFW_KEY_SPECIAL+34),
89 GLFW_KEY_LALT = (GLFW_KEY_SPECIAL+35),
90 GLFW_KEY_RALT = (GLFW_KEY_SPECIAL+36),
91 GLFW_KEY_TAB = (GLFW_KEY_SPECIAL+37),
92 GLFW_KEY_ENTER = (GLFW_KEY_SPECIAL+38),
93 GLFW_KEY_BACKSPACE = (GLFW_KEY_SPECIAL+39),
94 GLFW_KEY_INSERT = (GLFW_KEY_SPECIAL+40),
95 GLFW_KEY_DEL = (GLFW_KEY_SPECIAL+41),
96 GLFW_KEY_PAGEUP = (GLFW_KEY_SPECIAL+42),
97 GLFW_KEY_PAGEDOWN = (GLFW_KEY_SPECIAL+43),
98 GLFW_KEY_HOME = (GLFW_KEY_SPECIAL+44),
99 GLFW_KEY_END = (GLFW_KEY_SPECIAL+45),
100 GLFW_KEY_KP_0 = (GLFW_KEY_SPECIAL+46),
101 GLFW_KEY_KP_1 = (GLFW_KEY_SPECIAL+47),
102 GLFW_KEY_KP_2 = (GLFW_KEY_SPECIAL+48),
103 GLFW_KEY_KP_3 = (GLFW_KEY_SPECIAL+49),
104 GLFW_KEY_KP_4 = (GLFW_KEY_SPECIAL+50),
105 GLFW_KEY_KP_5 = (GLFW_KEY_SPECIAL+51),
106 GLFW_KEY_KP_6 = (GLFW_KEY_SPECIAL+52),
107 GLFW_KEY_KP_7 = (GLFW_KEY_SPECIAL+53),
108 GLFW_KEY_KP_8 = (GLFW_KEY_SPECIAL+54),
109 GLFW_KEY_KP_9 = (GLFW_KEY_SPECIAL+55),
110 GLFW_KEY_KP_DIVIDE = (GLFW_KEY_SPECIAL+56),
111 GLFW_KEY_KP_MULTIPLY = (GLFW_KEY_SPECIAL+57),
112 GLFW_KEY_KP_SUBTRACT = (GLFW_KEY_SPECIAL+58),
113 GLFW_KEY_KP_ADD = (GLFW_KEY_SPECIAL+59),
114 GLFW_KEY_KP_DECIMAL = (GLFW_KEY_SPECIAL+60),
115 GLFW_KEY_KP_EQUAL = (GLFW_KEY_SPECIAL+61),
116 GLFW_KEY_KP_ENTER = (GLFW_KEY_SPECIAL+62),
117 GLFW_KEY_KP_NUM_LOCK = (GLFW_KEY_SPECIAL+63),
118 GLFW_KEY_CAPS_LOCK = (GLFW_KEY_SPECIAL+64),
119 GLFW_KEY_SCROLL_LOCK = (GLFW_KEY_SPECIAL+65),
120 GLFW_KEY_PAUSE = (GLFW_KEY_SPECIAL+66),
121 GLFW_KEY_LSUPER = (GLFW_KEY_SPECIAL+67),
122 GLFW_KEY_RSUPER = (GLFW_KEY_SPECIAL+68),
123 GLFW_KEY_MENU = (GLFW_KEY_SPECIAL+69),
124 GLFW_KEY_LAST = GLFW_KEY_MENU,
125 /* Mouse button definitions */
126 GLFW_MOUSE_BUTTON_1 = 0,
127 GLFW_MOUSE_BUTTON_2 = 1,
128 GLFW_MOUSE_BUTTON_3 = 2,
129 GLFW_MOUSE_BUTTON_4 = 3,
130 GLFW_MOUSE_BUTTON_5 = 4,
131 GLFW_MOUSE_BUTTON_6 = 5,
132 GLFW_MOUSE_BUTTON_7 = 6,
133 GLFW_MOUSE_BUTTON_8 = 7,
134 GLFW_MOUSE_BUTTON_LAST = GLFW_MOUSE_BUTTON_8,
135 /* Mouse button aliases */
136 GLFW_MOUSE_BUTTON_LEFT = GLFW_MOUSE_BUTTON_1,
137 GLFW_MOUSE_BUTTON_RIGHT = GLFW_MOUSE_BUTTON_2,
138 GLFW_MOUSE_BUTTON_MIDDLE = GLFW_MOUSE_BUTTON_3,
139 /* Joystick identifiers */
140 GLFW_JOYSTICK_1 = 0,
141 GLFW_JOYSTICK_2 = 1,
142 GLFW_JOYSTICK_3 = 2,
143 GLFW_JOYSTICK_4 = 3,
144 GLFW_JOYSTICK_5 = 4,
145 GLFW_JOYSTICK_6 = 5,
146 GLFW_JOYSTICK_7 = 6,
147 GLFW_JOYSTICK_8 = 7,
148 GLFW_JOYSTICK_9 = 8,
149 GLFW_JOYSTICK_10 = 9,
150 GLFW_JOYSTICK_11 = 10,
151 GLFW_JOYSTICK_12 = 11,
152 GLFW_JOYSTICK_13 = 12,
153 GLFW_JOYSTICK_14 = 13,
154 GLFW_JOYSTICK_15 = 14,
155 GLFW_JOYSTICK_16 = 15,
156 GLFW_JOYSTICK_LAST = GLFW_JOYSTICK_16,
157 /*************************************************************************
158 * Other definitions;
159 *************************************************************************/
160 /* glfwOpenWindow modes */
161 GLFW_WINDOW = 0x00010001,
162 GLFW_FULLSCREEN = 0x00010002,
163 /* glfwGetWindowParam tokens */
164 GLFW_OPENED = 0x00020001,
165 GLFW_ACTIVE = 0x00020002,
166 GLFW_ICONIFIED = 0x00020003,
167 GLFW_ACCELERATED = 0x00020004,
168 GLFW_RED_BITS = 0x00020005,
169 GLFW_GREEN_BITS = 0x00020006,
170 GLFW_BLUE_BITS = 0x00020007,
171 GLFW_ALPHA_BITS = 0x00020008,
172 GLFW_DEPTH_BITS = 0x00020009,
173 GLFW_STENCIL_BITS = 0x0002000A,
174 /* The following constants are used for both glfwGetWindowParam
175 * and glfwOpenWindowHint;
176 */
177 GLFW_REFRESH_RATE = 0x0002000B,
178 GLFW_ACCUM_RED_BITS = 0x0002000C,
179 GLFW_ACCUM_GREEN_BITS = 0x0002000D,
180 GLFW_ACCUM_BLUE_BITS = 0x0002000E,
181 GLFW_ACCUM_ALPHA_BITS = 0x0002000F,
182 GLFW_AUX_BUFFERS = 0x00020010,
183 GLFW_STEREO = 0x00020011,
184 GLFW_WINDOW_NO_RESIZE = 0x00020012,
185 GLFW_FSAA_SAMPLES = 0x00020013,
186 GLFW_OPENGL_VERSION_MAJOR = 0x00020014,
187 GLFW_OPENGL_VERSION_MINOR = 0x00020015,
188 GLFW_OPENGL_FORWARD_COMPAT = 0x00020016,
189 GLFW_OPENGL_DEBUG_CONTEXT = 0x00020017,
190 GLFW_OPENGL_PROFILE = 0x00020018,
191
192 /* GLFW_OPENGL_PROFILE tokens */
193 GLFW_OPENGL_CORE_PROFILE = 0x00050001,
194 GLFW_OPENGL_COMPAT_PROFILE = 0x00050002,
195
196 /* glfwEnable/glfwDisable tokens */
197 GLFW_MOUSE_CURSOR = 0x00030001,
198 GLFW_STICKY_KEYS = 0x00030002,
199 GLFW_STICKY_MOUSE_BUTTONS = 0x00030003,
200 GLFW_SYSTEM_KEYS = 0x00030004,
201 GLFW_KEY_REPEAT = 0x00030005,
202 GLFW_AUTO_POLL_EVENTS = 0x00030006,
203
204 /* glfwWaitThread wait modes */
205 GLFW_WAIT = 0x00040001,
206 GLFW_NOWAIT = 0x00040002,
207
208 /* glfwGetJoystickParam tokens */
209 GLFW_PRESENT = 0x00050001,
210 GLFW_AXES = 0x00050002,
211 GLFW_BUTTONS = 0x00050003,
212
213 /* glfwReadImage/glfwLoadTexture2D flags */
214 GLFW_NO_RESCALE_BIT = 0x00000001,/* Only for glfwReadImage */
215 GLFW_ORIGIN_UL_BIT = 0x00000002,
216 GLFW_BUILD_MIPMAPS_BIT = 0x00000004,/* Only for glfwLoadTexture2D */
217 GLFW_ALPHA_MAP_BIT = 0x00000008,
218
219 /* Time spans longer than this (seconds) are considered to be infinity */
220 GLFW_INFINITY = 100000.0
221 }
222
223 /*************************************************************************
224 * Typedefs
225 *************************************************************************/
226
227 /* The video mode structure used by glfwGetVideoModes() */
228 struct GLFWvidmode {
229 int Width, Height;
230 int RedBits, BlueBits, GreenBits;
231 }
232
233 /* Image/texture information */
234 struct GLFWimage {
235 int Width, Height;
236 int Format;
237 int BytesPerPixel;
238 ubyte* Data;
239 }
240
241 /* Thread ID */
242 alias int GLFWthread;
243
244 /* Mutex object */
245 alias void* GLFWmutex;
246
247 /* Condition variable object */
248 alias void* GLFWcond;
249
250 /* Function pointer types */
251 alias void function(int,int) GLFWwindowsizefun;
252 alias int function() GLFWwindowclosefun;
253 alias void function() GLFWwindowrefreshfun;
254 alias void function(int,int) GLFWmousebuttonfun;
255 alias void function(int,int) GLFWmouseposfun;
256 alias void function(int) GLFWmousewheelfun;
257 alias void function(int,int) GLFWkeyfun;
258 alias void function(int,int) GLFWcharfun;
259 alias void function(void*) GLFWthreadfun;
260
261
262 /*************************************************************************
263 * Prototypes
264 *************************************************************************/
265
266 /* GLFW initialization, termination and version querying */
267
268 int glfwInit();
269 void glfwTerminate();
270 void glfwGetVersion( int *major, int *minor, int *rev );
271
272 /* Window handling */
273 int glfwOpenWindow( int width, int height, int redbits, int greenbits, int bluebits, int alphabits, int depthbits, int stencilbits, int mode );
274 void glfwOpenWindowHint( int target, int hint );
275 void glfwCloseWindow();
276 void glfwSetWindowTitle( const(char)* title );
277 void glfwGetWindowSize( int *width, int *height );
278 void glfwSetWindowSize( int width, int height );
279 void glfwSetWindowPos( int x, int y );
280 void glfwIconifyWindow();
281 void glfwRestoreWindow();
282 void glfwSwapBuffers();
283 void glfwSwapInterval( int interval );
284 int glfwGetWindowParam( int param );
285 void glfwSetWindowSizeCallback( GLFWwindowsizefun cbfun );
286 void glfwSetWindowCloseCallback( GLFWwindowclosefun cbfun );
287 void glfwSetWindowRefreshCallback( GLFWwindowrefreshfun cbfun );
288
289 /* Video mode functions */
290 int glfwGetVideoModes( GLFWvidmode *list, int maxcount );
291 void glfwGetDesktopMode( GLFWvidmode *mode );
292
293 /* Input handling */
294 void glfwPollEvents();
295 void glfwWaitEvents();
296 int glfwGetKey( int key );
297 int glfwGetMouseButton( int button );
298 void glfwGetMousePos( int *xpos, int *ypos );
299 void glfwSetMousePos( int xpos, int ypos );
300 int glfwGetMouseWheel();
301 void glfwSetMouseWheel( int pos );
302 void glfwSetKeyCallback( GLFWkeyfun cbfun );
303 void glfwSetCharCallback( GLFWcharfun cbfun );
304 void glfwSetMouseButtonCallback( GLFWmousebuttonfun cbfun );
305 void glfwSetMousePosCallback( GLFWmouseposfun cbfun );
306 void glfwSetMouseWheelCallback( GLFWmousewheelfun cbfun );
307
308 /* Joystick input */
309 int glfwGetJoystickParam( int joy, int param );
310 int glfwGetJoystickPos( int joy, float *pos, int numaxes );
311 int glfwGetJoystickButtons( int joy, ubyte *buttons, int numbuttons );
312
313 /* Time */
314 double glfwGetTime();
315 void glfwSetTime( double time );
316 void glfwSleep( double time );
317
318 /* Extension support */
319 int glfwExtensionSupported( const(char)* extension );
320 void* glfwGetProcAddress( const(char)* procname );
321 void glfwGetGLVersion( int *major, int *minor, int *rev );
322
323 /* Threading support */
324 GLFWthread glfwCreateThread( GLFWthreadfun fun, void *arg );
325 void glfwDestroyThread( GLFWthread ID );
326 int glfwWaitThread( GLFWthread ID, int waitmode );
327 GLFWthread glfwGetThreadID();
328 GLFWmutex glfwCreateMutex();
329 void glfwDestroyMutex( GLFWmutex mutex );
330 void glfwLockMutex( GLFWmutex mutex );
331 void glfwUnlockMutex( GLFWmutex mutex );
332 GLFWcond glfwCreateCond();
333 void glfwDestroyCond( GLFWcond cond );
334 void glfwWaitCond( GLFWcond cond, GLFWmutex mutex, double timeout );
335 void glfwSignalCond( GLFWcond cond );
336 void glfwBroadcastCond( GLFWcond cond );
337 int glfwGetNumberOfProcessors();
338
339 /* Enable/disable functions */
340 void glfwEnable( int token );
341 void glfwDisable( int token );
342
343 /* Image/texture I/O support */
344 int glfwReadImage( const(char)* name, GLFWimage *img, int flags );
345 int glfwReadMemoryImage( const void *data, long size, GLFWimage *img, int flags );
346 void glfwFreeImage( GLFWimage *img );
347 int glfwLoadTexture2D( const(char)* name, int flags );
348 int glfwLoadMemoryTexture2D( const void *data, long size, int flags );
349 int glfwLoadTextureImage2D( GLFWimage *img, int flags );
350
351 }
352