opengl-bindings2 2.0.2 → 2.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/lib/glut.rb CHANGED
@@ -1,575 +1,575 @@
1
- # -*- coding: utf-8 -*-
2
- # A FreeGLUT wrapper
3
- require 'fiddle/import'
4
- require_relative 'opengl_platform'
5
-
6
- module GLUT
7
-
8
- extend Fiddle::Importer
9
-
10
- # defines
11
-
12
- GLUT_API_VERSION = 4
13
-
14
- GLUT_KEY_F1 = 0x0001
15
- GLUT_KEY_F2 = 0x0002
16
- GLUT_KEY_F3 = 0x0003
17
- GLUT_KEY_F4 = 0x0004
18
- GLUT_KEY_F5 = 0x0005
19
- GLUT_KEY_F6 = 0x0006
20
- GLUT_KEY_F7 = 0x0007
21
- GLUT_KEY_F8 = 0x0008
22
- GLUT_KEY_F9 = 0x0009
23
- GLUT_KEY_F10 = 0x000A
24
- GLUT_KEY_F11 = 0x000B
25
- GLUT_KEY_F12 = 0x000C
26
- GLUT_KEY_LEFT = 0x0064
27
- GLUT_KEY_UP = 0x0065
28
- GLUT_KEY_RIGHT = 0x0066
29
- GLUT_KEY_DOWN = 0x0067
30
- GLUT_KEY_PAGE_UP = 0x0068
31
- GLUT_KEY_PAGE_DOWN = 0x0069
32
- GLUT_KEY_HOME = 0x006A
33
- GLUT_KEY_END = 0x006B
34
- GLUT_KEY_INSERT = 0x006C
35
-
36
- GLUT_LEFT_BUTTON = 0x0000
37
- GLUT_MIDDLE_BUTTON = 0x0001
38
- GLUT_RIGHT_BUTTON = 0x0002
39
- GLUT_DOWN = 0x0000
40
- GLUT_UP = 0x0001
41
- GLUT_LEFT = 0x0000
42
- GLUT_ENTERED = 0x0001
43
-
44
- GLUT_RGB = 0x0000
45
- GLUT_RGBA = 0x0000
46
- GLUT_INDEX = 0x0001
47
- GLUT_SINGLE = 0x0000
48
- GLUT_DOUBLE = 0x0002
49
- GLUT_ACCUM = 0x0004
50
- GLUT_ALPHA = 0x0008
51
- GLUT_DEPTH = 0x0010
52
- GLUT_STENCIL = 0x0020
53
- GLUT_MULTISAMPLE = 0x0080
54
- GLUT_STEREO = 0x0100
55
- GLUT_LUMINANCE = 0x0200
56
-
57
- GLUT_MENU_NOT_IN_USE = 0x0000
58
- GLUT_MENU_IN_USE = 0x0001
59
- GLUT_NOT_VISIBLE = 0x0000
60
- GLUT_VISIBLE = 0x0001
61
- GLUT_HIDDEN = 0x0000
62
- GLUT_FULLY_RETAINED = 0x0001
63
- GLUT_PARTIALLY_RETAINED = 0x0002
64
- GLUT_FULLY_COVERED = 0x0003
65
-
66
- GLUT_WINDOW_X = 0x0064
67
- GLUT_WINDOW_Y = 0x0065
68
- GLUT_WINDOW_WIDTH = 0x0066
69
- GLUT_WINDOW_HEIGHT = 0x0067
70
- GLUT_WINDOW_BUFFER_SIZE = 0x0068
71
- GLUT_WINDOW_STENCIL_SIZE = 0x0069
72
- GLUT_WINDOW_DEPTH_SIZE = 0x006A
73
- GLUT_WINDOW_RED_SIZE = 0x006B
74
- GLUT_WINDOW_GREEN_SIZE = 0x006C
75
- GLUT_WINDOW_BLUE_SIZE = 0x006D
76
- GLUT_WINDOW_ALPHA_SIZE = 0x006E
77
- GLUT_WINDOW_ACCUM_RED_SIZE = 0x006F
78
- GLUT_WINDOW_ACCUM_GREEN_SIZE = 0x0070
79
- GLUT_WINDOW_ACCUM_BLUE_SIZE = 0x0071
80
- GLUT_WINDOW_ACCUM_ALPHA_SIZE = 0x0072
81
- GLUT_WINDOW_DOUBLEBUFFER = 0x0073
82
- GLUT_WINDOW_RGBA = 0x0074
83
- GLUT_WINDOW_PARENT = 0x0075
84
- GLUT_WINDOW_NUM_CHILDREN = 0x0076
85
- GLUT_WINDOW_COLORMAP_SIZE = 0x0077
86
- GLUT_WINDOW_NUM_SAMPLES = 0x0078
87
- GLUT_WINDOW_STEREO = 0x0079
88
- GLUT_WINDOW_CURSOR = 0x007A
89
-
90
- GLUT_SCREEN_WIDTH = 0x00C8
91
- GLUT_SCREEN_HEIGHT = 0x00C9
92
- GLUT_SCREEN_WIDTH_MM = 0x00CA
93
- GLUT_SCREEN_HEIGHT_MM = 0x00CB
94
- GLUT_MENU_NUM_ITEMS = 0x012C
95
- GLUT_DISPLAY_MODE_POSSIBLE = 0x0190
96
- GLUT_INIT_WINDOW_X = 0x01F4
97
- GLUT_INIT_WINDOW_Y = 0x01F5
98
- GLUT_INIT_WINDOW_WIDTH = 0x01F6
99
- GLUT_INIT_WINDOW_HEIGHT = 0x01F7
100
- GLUT_INIT_DISPLAY_MODE = 0x01F8
101
- GLUT_ELAPSED_TIME = 0x02BC
102
- GLUT_WINDOW_FORMAT_ID = 0x007B
103
- GLUT_INIT_STATE = 0x007C
104
-
105
- GLUT_HAS_KEYBOARD = 0x0258
106
- GLUT_HAS_MOUSE = 0x0259
107
- GLUT_HAS_SPACEBALL = 0x025A
108
- GLUT_HAS_DIAL_AND_BUTTON_BOX = 0x025B
109
- GLUT_HAS_TABLET = 0x025C
110
- GLUT_NUM_MOUSE_BUTTONS = 0x025D
111
- GLUT_NUM_SPACEBALL_BUTTONS = 0x025E
112
- GLUT_NUM_BUTTON_BOX_BUTTONS = 0x025F
113
- GLUT_NUM_DIALS = 0x0260
114
- GLUT_NUM_TABLET_BUTTONS = 0x0261
115
- GLUT_DEVICE_IGNORE_KEY_REPEAT = 0x0262
116
- GLUT_DEVICE_KEY_REPEAT = 0x0263
117
- GLUT_HAS_JOYSTICK = 0x0264
118
- GLUT_OWNS_JOYSTICK = 0x0265
119
- GLUT_JOYSTICK_BUTTONS = 0x0266
120
- GLUT_JOYSTICK_AXES = 0x0267
121
- GLUT_JOYSTICK_POLL_RATE = 0x0268
122
-
123
- GLUT_OVERLAY_POSSIBLE = 0x0320
124
- GLUT_LAYER_IN_USE = 0x0321
125
- GLUT_HAS_OVERLAY = 0x0322
126
- GLUT_TRANSPARENT_INDEX = 0x0323
127
- GLUT_NORMAL_DAMAGED = 0x0324
128
- GLUT_OVERLAY_DAMAGED = 0x0325
129
-
130
- GLUT_VIDEO_RESIZE_POSSIBLE = 0x0384
131
- GLUT_VIDEO_RESIZE_IN_USE = 0x0385
132
- GLUT_VIDEO_RESIZE_X_DELTA = 0x0386
133
- GLUT_VIDEO_RESIZE_Y_DELTA = 0x0387
134
- GLUT_VIDEO_RESIZE_WIDTH_DELTA = 0x0388
135
- GLUT_VIDEO_RESIZE_HEIGHT_DELTA = 0x0389
136
- GLUT_VIDEO_RESIZE_X = 0x038A
137
- GLUT_VIDEO_RESIZE_Y = 0x038B
138
- GLUT_VIDEO_RESIZE_WIDTH = 0x038C
139
- GLUT_VIDEO_RESIZE_HEIGHT = 0x038D
140
-
141
- GLUT_NORMAL = 0x0000
142
- GLUT_OVERLAY = 0x0001
143
-
144
- GLUT_ACTIVE_SHIFT = 0x0001
145
- GLUT_ACTIVE_CTRL = 0x0002
146
- GLUT_ACTIVE_ALT = 0x0004
147
-
148
- GLUT_CURSOR_RIGHT_ARROW = 0x0000
149
- GLUT_CURSOR_LEFT_ARROW = 0x0001
150
- GLUT_CURSOR_INFO = 0x0002
151
- GLUT_CURSOR_DESTROY = 0x0003
152
- GLUT_CURSOR_HELP = 0x0004
153
- GLUT_CURSOR_CYCLE = 0x0005
154
- GLUT_CURSOR_SPRAY = 0x0006
155
- GLUT_CURSOR_WAIT = 0x0007
156
- GLUT_CURSOR_TEXT = 0x0008
157
- GLUT_CURSOR_CROSSHAIR = 0x0009
158
- GLUT_CURSOR_UP_DOWN = 0x000A
159
- GLUT_CURSOR_LEFT_RIGHT = 0x000B
160
- GLUT_CURSOR_TOP_SIDE = 0x000C
161
- GLUT_CURSOR_BOTTOM_SIDE = 0x000D
162
- GLUT_CURSOR_LEFT_SIDE = 0x000E
163
- GLUT_CURSOR_RIGHT_SIDE = 0x000F
164
- GLUT_CURSOR_TOP_LEFT_CORNER = 0x0010
165
- GLUT_CURSOR_TOP_RIGHT_CORNER = 0x0011
166
- GLUT_CURSOR_BOTTOM_RIGHT_CORNER = 0x0012
167
- GLUT_CURSOR_BOTTOM_LEFT_CORNER = 0x0013
168
- GLUT_CURSOR_INHERIT = 0x0064
169
- GLUT_CURSOR_NONE = 0x0065
170
- GLUT_CURSOR_FULL_CROSSHAIR = 0x0066
171
-
172
- GLUT_RED = 0x0000
173
- GLUT_GREEN = 0x0001
174
- GLUT_BLUE = 0x0002
175
-
176
- GLUT_KEY_REPEAT_OFF = 0x0000
177
- GLUT_KEY_REPEAT_ON = 0x0001
178
- GLUT_KEY_REPEAT_DEFAULT = 0x0002
179
-
180
- GLUT_JOYSTICK_BUTTON_A = 0x0001
181
- GLUT_JOYSTICK_BUTTON_B = 0x0002
182
- GLUT_JOYSTICK_BUTTON_C = 0x0004
183
- GLUT_JOYSTICK_BUTTON_D = 0x0008
184
-
185
- GLUT_GAME_MODE_ACTIVE = 0x0000
186
- GLUT_GAME_MODE_POSSIBLE = 0x0001
187
- GLUT_GAME_MODE_WIDTH = 0x0002
188
- GLUT_GAME_MODE_HEIGHT = 0x0003
189
- GLUT_GAME_MODE_PIXEL_DEPTH = 0x0004
190
- GLUT_GAME_MODE_REFRESH_RATE = 0x0005
191
- GLUT_GAME_MODE_DISPLAY_CHANGED = 0x0006
192
-
193
- # typedefs
194
- @@glut_cb_function_signature = {
195
- :GLUTMenuFunc => "void GLUTMenuFunc(int)",
196
-
197
- :GLUTTimerFunc => "void GLUTTimerFunc(int)",
198
- :GLUTIdleFunc => "void GLUTIdleFunc()",
199
-
200
- :GLUTKeyboardFunc => "void GLUTKeyboardFunc(unsigned char, int, int)",
201
- :GLUTSpecialFunc => "void GLUTSpecialFunc(int, int, int)",
202
- :GLUTReshapeFunc => "void GLUTReshapeFunc(int, int)",
203
- :GLUTVisibilityFunc => "void GLUTVisibilityFunc(int)",
204
- :GLUTDisplayFunc => "void GLUTDisplayFunc()",
205
- :GLUTMouseFunc => "void GLUTMouseFunc(int, int, int, int)",
206
- :GLUTMotionFunc => "void GLUTMotionFunc(int, int)",
207
- :GLUTPassiveMotionFunc => "void GLUTPassiveMotionFunc(int, int)",
208
- :GLUTEntryFunc => "void GLUTEntryFunc(int)",
209
-
210
- :GLUTKeyboardUpFunc => "void GLUTKeyboardUpFunc(unsigned char, int, int)",
211
- :GLUTSpecialUpFunc => "void GLUTSpecialUpFunc(int, int, int)",
212
- :GLUTJoystickFunc => "void GLUTJoystickFunc(unsigned int, int, int, int)",
213
- :GLUTMenuStateFunc => "void GLUTMenuStateFunc(int)",
214
- :GLUTMenuStatusFunc => "void GLUTMenuStatusFunc(int, int, int)",
215
- :GLUTOverlayDisplayFunc => "void GLUTOverlayDisplayFunc()",
216
- :GLUTWindowStatusFunc => "void GLUTWindowStatusFunc(int)",
217
-
218
- :GLUTSpaceballMotionFunc => "void GLUTSpaceballMotionFunc(int, int, int)",
219
- :GLUTSpaceballRotateFunc => "void GLUTSpaceballRotateFunc(int, int, int)",
220
- :GLUTSpaceballButtonFunc => "void GLUTSpaceballButtonFunc(int, int)",
221
- :GLUTButtonBoxFunc => "void GLUTButtonBoxFunc(int, int)",
222
- :GLUTDialsFunc => "void GLUTDialsFunc(int, int)",
223
- :GLUTTabletMotionFunc => "void GLUTTabletMotionFunc(int, int)",
224
- :GLUTTabletButtonFunc => "void GLUTTabletButtonFunc(int, int, int, int)",
225
- }
226
-
227
- # Creates a callback as an instance of Fiddle::Function
228
- def self.create_callback(sym, proc=nil, &blk)
229
- if block_given?
230
- return bind(@@glut_cb_function_signature[sym], nil, &blk)
231
- else
232
- return bind(@@glut_cb_function_signature[sym], nil, &proc)
233
- end
234
- end
235
-
236
- GLUTMenuFunc_cb_args = [Fiddle::TYPE_INT]
237
- GLUTMenuFunc_cb_retval = Fiddle::TYPE_VOID
238
- GLUTTimerFunc_cb_args = [Fiddle::TYPE_INT]
239
- GLUTTimerFunc_cb_retval = Fiddle::TYPE_VOID
240
- GLUTIdleFunc_cb_args = []
241
- GLUTIdleFunc_cb_retval = Fiddle::TYPE_VOID
242
- GLUTKeyboardFunc_cb_args = [-Fiddle::TYPE_CHAR, Fiddle::TYPE_INT, Fiddle::TYPE_INT]
243
- GLUTKeyboardFunc_cb_retval = Fiddle::TYPE_VOID
244
- GLUTSpecialFunc_cb_args = [Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_INT]
245
- GLUTSpecialFunc_cb_retval = Fiddle::TYPE_VOID
246
- GLUTReshapeFunc_cb_args = [Fiddle::TYPE_INT, Fiddle::TYPE_INT]
247
- GLUTReshapeFunc_cb_retval = Fiddle::TYPE_VOID
248
- GLUTVisibilityFunc_cb_args = [Fiddle::TYPE_INT]
249
- GLUTVisibilityFunc_cb_retval = Fiddle::TYPE_VOID
250
- GLUTDisplayFunc_cb_args = []
251
- GLUTDisplayFunc_cb_retval = Fiddle::TYPE_VOID
252
- GLUTMouseFunc_cb_args = [Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_INT]
253
- GLUTMouseFunc_cb_retval = Fiddle::TYPE_VOID
254
- GLUTMotionFunc_cb_args = [Fiddle::TYPE_INT, Fiddle::TYPE_INT]
255
- GLUTMotionFunc_cb_retval = Fiddle::TYPE_VOID
256
- GLUTPassiveMotionFunc_cb_args = [Fiddle::TYPE_INT, Fiddle::TYPE_INT]
257
- GLUTPassiveMotionFunc_cb_retval = Fiddle::TYPE_VOID
258
- GLUTEntryFunc_cb_args = [Fiddle::TYPE_INT]
259
- GLUTEntryFunc_cb_retval = Fiddle::TYPE_VOID
260
- GLUTKeyboardUpFunc_cb_args = [-Fiddle::TYPE_CHAR, Fiddle::TYPE_INT, Fiddle::TYPE_INT]
261
- GLUTKeyboardUpFunc_cb_retval = Fiddle::TYPE_VOID
262
- GLUTSpecialUpFunc_cb_args = [Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_INT]
263
- GLUTSpecialUpFunc_cb_retval = Fiddle::TYPE_VOID
264
- GLUTJoystickFunc_cb_args = [-Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_INT]
265
- GLUTJoystickFunc_cb_retval = Fiddle::TYPE_VOID
266
- GLUTMenuStateFunc_cb_args = [Fiddle::TYPE_INT]
267
- GLUTMenuStateFunc_cb_retval = Fiddle::TYPE_VOID
268
- GLUTMenuStatusFunc_cb_args = [Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_INT]
269
- GLUTMenuStatusFunc_cb_retval = Fiddle::TYPE_VOID
270
- GLUTOverlayDisplayFunc_cb_args = []
271
- GLUTOverlayDisplayFunc_cb_retval = Fiddle::TYPE_VOID
272
- GLUTWindowStatusFunc_cb_args = [Fiddle::TYPE_INT]
273
- GLUTWindowStatusFunc_cb_retval = Fiddle::TYPE_VOID
274
- GLUTSpaceballMotionFunc_cb_args = [Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_INT]
275
- GLUTSpaceballMotionFunc_cb_retval = Fiddle::TYPE_VOID
276
- GLUTSpaceballRotateFunc_cb_args = [Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_INT]
277
- GLUTSpaceballRotateFunc_cb_retval = Fiddle::TYPE_VOID
278
- GLUTSpaceballButtonFunc_cb_args = [Fiddle::TYPE_INT, Fiddle::TYPE_INT]
279
- GLUTSpaceballButtonFunc_cb_retval = Fiddle::TYPE_VOID
280
- GLUTButtonBoxFunc_cb_args = [Fiddle::TYPE_INT, Fiddle::TYPE_INT]
281
- GLUTButtonBoxFunc_cb_retval = Fiddle::TYPE_VOID
282
- GLUTDialsFunc_cb_args = [Fiddle::TYPE_INT, Fiddle::TYPE_INT]
283
- GLUTDialsFunc_cb_retval = Fiddle::TYPE_VOID
284
- GLUTTabletMotionFunc_cb_args = [Fiddle::TYPE_INT, Fiddle::TYPE_INT]
285
- GLUTTabletMotionFunc_cb_retval = Fiddle::TYPE_VOID
286
- GLUTTabletButtonFunc_cb_args = [Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_INT]
287
- GLUTTabletButtonFunc_cb_retval = Fiddle::TYPE_VOID
288
-
289
- @@glut_cb_closure_signature = {
290
- :GLUTMenuFunc => [GLUTMenuFunc_cb_retval, GLUTMenuFunc_cb_args],
291
- :GLUTTimerFunc => [GLUTTimerFunc_cb_retval, GLUTTimerFunc_cb_args],
292
- :GLUTIdleFunc => [GLUTIdleFunc_cb_retval, GLUTIdleFunc_cb_args],
293
- :GLUTKeyboardFunc => [GLUTKeyboardFunc_cb_retval, GLUTKeyboardFunc_cb_args],
294
- :GLUTSpecialFunc => [GLUTSpecialFunc_cb_retval, GLUTSpecialFunc_cb_args],
295
- :GLUTReshapeFunc => [GLUTReshapeFunc_cb_retval, GLUTReshapeFunc_cb_args],
296
- :GLUTVisibilityFunc => [GLUTVisibilityFunc_cb_retval, GLUTVisibilityFunc_cb_args],
297
- :GLUTDisplayFunc => [GLUTDisplayFunc_cb_retval, GLUTDisplayFunc_cb_args],
298
- :GLUTMouseFunc => [GLUTMouseFunc_cb_retval, GLUTMouseFunc_cb_args],
299
- :GLUTMotionFunc => [GLUTMotionFunc_cb_retval, GLUTMotionFunc_cb_args],
300
- :GLUTPassiveMotionFunc => [GLUTPassiveMotionFunc_cb_retval, GLUTPassiveMotionFunc_cb_args],
301
- :GLUTEntryFunc => [GLUTEntryFunc_cb_retval, GLUTEntryFunc_cb_args],
302
- :GLUTKeyboardUpFunc => [GLUTKeyboardUpFunc_cb_retval, GLUTKeyboardUpFunc_cb_args],
303
- :GLUTSpecialUpFunc => [GLUTSpecialUpFunc_cb_retval, GLUTSpecialUpFunc_cb_args],
304
- :GLUTJoystickFunc => [GLUTJoystickFunc_cb_retval, GLUTJoystickFunc_cb_args],
305
- :GLUTMenuStateFunc => [GLUTMenuStateFunc_cb_retval, GLUTMenuStateFunc_cb_args],
306
- :GLUTMenuStatusFunc => [GLUTMenuStatusFunc_cb_retval, GLUTMenuStatusFunc_cb_args],
307
- :GLUTOverlayDisplayFunc => [GLUTOverlayDisplayFunc_cb_retval, GLUTOverlayDisplayFunc_cb_args],
308
- :GLUTWindowStatusFunc => [GLUTWindowStatusFunc_cb_retval, GLUTWindowStatusFunc_cb_args],
309
- :GLUTSpaceballMotionFunc => [GLUTSpaceballMotionFunc_cb_retval, GLUTSpaceballMotionFunc_cb_args],
310
- :GLUTSpaceballRotateFunc => [GLUTSpaceballRotateFunc_cb_retval, GLUTSpaceballRotateFunc_cb_args],
311
- :GLUTSpaceballButtonFunc => [GLUTSpaceballButtonFunc_cb_retval, GLUTSpaceballButtonFunc_cb_args],
312
- :GLUTButtonBoxFunc => [GLUTButtonBoxFunc_cb_retval, GLUTButtonBoxFunc_cb_args],
313
- :GLUTDialsFunc => [GLUTDialsFunc_cb_retval, GLUTDialsFunc_cb_args],
314
- :GLUTTabletMotionFunc => [GLUTTabletMotionFunc_cb_retval, GLUTTabletMotionFunc_cb_args],
315
- :GLUTTabletButtonFunc => [GLUTTabletButtonFunc_cb_retval, GLUTTabletButtonFunc_cb_args],
316
- }
317
-
318
- # Creates a callback as an instance of Fiddle::Closure::BlockCaller
319
- def self.create_callback_closure(sym, proc=nil, &blk)
320
- cb_retval = @@glut_cb_closure_signature[sym][0]
321
- cb_args = @@glut_cb_closure_signature[sym][1]
322
- if block_given?
323
- return Fiddle::Closure::BlockCaller.new(cb_retval, cb_args, Fiddle::Function::DEFAULT, &blk)
324
- else
325
- return Fiddle::Closure::BlockCaller.new(cb_retval, cb_args, Fiddle::Function::DEFAULT, &proc)
326
- end
327
- end
328
-
329
- # NOTE : Use 'create_callback_function' for backward compatibility.
330
- def self.create_callback(sym, proc=nil, &blk)
331
- return self.create_callback_closure(sym, proc, &blk)
332
- end
333
-
334
- @@glut_import_done = false
335
-
336
- # Load native library.
337
- def self.load_lib(lib_path = nil, output_error = false)
338
- if lib_path == nil
339
- lib_path = case GL.get_platform
340
- when :OPENGL_PLATFORM_WINDOWS
341
- Dir.pwd + '/freeglut.dll'
342
- when :OPENGL_PLATFORM_MACOSX
343
- '/System/Library/Frameworks/GLUT.framework/GLUT'
344
- else
345
- 'libglut.so' # not tested
346
- end
347
- end
348
-
349
- dlload(lib_path)
350
-
351
- import_symbols(output_error) unless @@glut_import_done
352
- end
353
-
354
- @@lib_signature = [
355
- 'void glutInit(int*, char**)',
356
- 'void glutInitWindowPosition(int, int)',
357
- 'void glutInitWindowSize(int, int)',
358
- 'void glutInitDisplayMode(unsigned int)',
359
- 'void glutInitDisplayString(const char*)',
360
-
361
- 'void glutMainLoop()',
362
-
363
- 'int glutCreateWindow(const char *)',
364
- 'int glutCreateSubWindow(int, int, int, int, int)',
365
- 'void glutDestroyWindow(int)',
366
- 'void glutSetWindow(int)',
367
- 'int glutGetWindow()',
368
- 'void glutSetWindowTitle(const char *)',
369
- 'void glutSetIconTitle(const char *)',
370
- 'void glutReshapeWindow(int, int)',
371
- 'void glutPositionWindow(int, int)',
372
- 'void glutShowWindow()',
373
- 'void glutHideWindow()',
374
- 'void glutIconifyWindow()',
375
- 'void glutPushWindow()',
376
- 'void glutPopWindow()',
377
- 'void glutFullScreen()',
378
-
379
- 'void glutPostWindowRedisplay(int)',
380
- 'void glutPostRedisplay()',
381
- 'void glutSwapBuffers()',
382
-
383
- 'void glutWarpPointer(int, int)',
384
- 'void glutSetCursor(int)',
385
-
386
- 'void glutEstablishOverlay()',
387
- 'void glutRemoveOverlay()',
388
- 'void glutUseLayer(unsigned int)',
389
- 'void glutPostOverlayRedisplay()',
390
- 'void glutPostWindowOverlayRedisplay(int)',
391
- 'void glutShowOverlay()',
392
- 'void glutHideOverlay()',
393
-
394
- 'int glutCreateMenu(void *)',
395
- 'void glutDestroyMenu(int)',
396
- 'int glutGetMenu()',
397
- 'void glutSetMenu(int)',
398
- 'void glutAddMenuEntry(const char *, int)',
399
- 'void glutAddSubMenu(const char *, int)',
400
- 'void glutChangeToMenuEntry(int, const char *, int)',
401
- 'void glutChangeToSubMenu(int, const char *, int)',
402
- 'void glutRemoveMenuItem(int)',
403
- 'void glutAttachMenu(int)',
404
- 'void glutDetachMenu(int)',
405
-
406
- 'void glutTimerFunc(unsigned int, void *, int)',
407
- 'void glutIdleFunc(void *)',
408
-
409
- 'void glutKeyboardFunc(void *)',
410
- 'void glutSpecialFunc(void *)',
411
- 'void glutReshapeFunc(void *)',
412
- 'void glutVisibilityFunc(void *)',
413
- 'void glutDisplayFunc(void *)',
414
- 'void glutMouseFunc(void *)',
415
- 'void glutMotionFunc(void *)',
416
- 'void glutPassiveMotionFunc(void *)',
417
- 'void glutEntryFunc(void *)',
418
-
419
- 'void glutKeyboardUpFunc(void *)',
420
- 'void glutSpecialUpFunc(void *)',
421
- 'void glutJoystickFunc(void *, int)',
422
- 'void glutMenuStateFunc(void *)',
423
- 'void glutMenuStatusFunc(void *)',
424
- 'void glutOverlayDisplayFunc(void *)',
425
- 'void glutWindowStatusFunc(void *)',
426
-
427
- 'void glutSpaceballMotionFunc(void *)',
428
- 'void glutSpaceballRotateFunc(void *)',
429
- 'void glutSpaceballButtonFunc(void *)',
430
- 'void glutButtonBoxFunc(void *)',
431
- 'void glutDialsFunc(void *)',
432
- 'void glutTabletMotionFunc(void *)',
433
- 'void glutTabletButtonFunc(void *)',
434
-
435
- 'int glutGet(unsigned int)',
436
- 'int glutDeviceGet(unsigned int)',
437
- 'int glutGetModifiers()',
438
- 'int glutLayerGet(unsigned int)',
439
-
440
- 'void glutBitmapCharacter(void *, int)',
441
- 'int glutBitmapWidth(void *, int)',
442
- 'void glutStrokeCharacter(void *, int)',
443
- 'int glutStrokeWidth(void *, int)',
444
- 'int glutBitmapLength(void *, const unsigned char*)',
445
- 'int glutStrokeLength(void *, const unsigned char*)',
446
-
447
- 'void glutWireCube(double)',
448
- 'void glutSolidCube(double)',
449
- 'void glutWireSphere(double, int, int)',
450
- 'void glutSolidSphere(double, int, int)',
451
- 'void glutWireCone(double, double, int, int)',
452
- 'void glutSolidCone(double, double, int, int)',
453
-
454
- 'void glutWireTorus(double, double, int, int)',
455
- 'void glutSolidTorus(double, double, int, int)',
456
- 'void glutWireDodecahedron()',
457
- 'void glutSolidDodecahedron()',
458
- 'void glutWireOctahedron()',
459
- 'void glutSolidOctahedron()',
460
- 'void glutWireTetrahedron()',
461
- 'void glutSolidTetrahedron()',
462
- 'void glutWireIcosahedron()',
463
- 'void glutSolidIcosahedron()',
464
-
465
- 'void glutWireTeapot(double)',
466
- 'void glutSolidTeapot(double)',
467
-
468
- 'void glutGameModeString(const char*)',
469
- 'int glutEnterGameMode()',
470
- 'void glutLeaveGameMode()',
471
- 'int glutGameModeGet(unsigned int)',
472
-
473
- 'int glutVideoResizeGet(unsigned int)',
474
- 'void glutSetupVideoResizing()',
475
- 'void glutStopVideoResizing()',
476
- 'void glutVideoResize(int, int, int, int)',
477
- 'void glutVideoPan(int, int, int, int)',
478
-
479
- 'void glutSetColor(int, float, float, float)',
480
- 'float glutGetColor(int, int)',
481
- 'void glutCopyColormap(int)',
482
-
483
- 'void glutIgnoreKeyRepeat(int)',
484
- 'void glutSetKeyRepeat(int)',
485
- 'void glutForceJoystickFunc()',
486
-
487
- 'int glutExtensionSupported(const char *)',
488
- 'void glutReportErrors()',
489
- ]
490
-
491
- def self.import_symbols(output_error = false)
492
- # defines
493
- if GL.get_platform == :OPENGL_PLATFORM_WINDOWS
494
- const_set('GLUT_STROKE_ROMAN', Fiddle::Pointer.new(0x0000))
495
- const_set('GLUT_STROKE_MONO_ROMAN', Fiddle::Pointer.new(0x0001))
496
- const_set('GLUT_BITMAP_9_BY_15', Fiddle::Pointer.new(0x0002))
497
- const_set('GLUT_BITMAP_8_BY_13', Fiddle::Pointer.new(0x0003))
498
- const_set('GLUT_BITMAP_TIMES_ROMAN_10', Fiddle::Pointer.new(0x0004))
499
- const_set('GLUT_BITMAP_TIMES_ROMAN_24', Fiddle::Pointer.new(0x0005))
500
- const_set('GLUT_BITMAP_HELVETICA_10', Fiddle::Pointer.new(0x0006))
501
- const_set('GLUT_BITMAP_HELVETICA_12', Fiddle::Pointer.new(0x0007))
502
- const_set('GLUT_BITMAP_HELVETICA_18', Fiddle::Pointer.new(0x0008))
503
- else
504
- const_set('GLUT_STROKE_ROMAN', import_symbol("glutStrokeRoman"))
505
- const_set('GLUT_STROKE_MONO_ROMAN', import_symbol("glutStrokeMonoRoman"))
506
- const_set('GLUT_BITMAP_9_BY_15', import_symbol("glutBitmap9By15"))
507
- const_set('GLUT_BITMAP_8_BY_13', import_symbol("glutBitmap8By13"))
508
- const_set('GLUT_BITMAP_TIMES_ROMAN_10', import_symbol("glutBitmapTimesRoman10"))
509
- const_set('GLUT_BITMAP_TIMES_ROMAN_24', import_symbol("glutBitmapTimesRoman24"))
510
- const_set('GLUT_BITMAP_HELVETICA_10', import_symbol("glutBitmapHelvetica10"))
511
- const_set('GLUT_BITMAP_HELVETICA_12', import_symbol("glutBitmapHelvetica12"))
512
- const_set('GLUT_BITMAP_HELVETICA_18', import_symbol("glutBitmapHelvetica18"))
513
- end
514
-
515
- # function
516
- @@lib_signature.each do |sig|
517
- begin
518
- extern sig
519
- rescue
520
- $stderr.puts("[Warning] Failed to import #{sig}.") if output_error
521
- end
522
- end
523
-
524
- # Convert method names (e.g.: GLUT.glutInit -> GLUT.Init)
525
- self.singleton_methods(false).each do |method_name|
526
- m = singleton_method(method_name)
527
- if m.name.to_s.start_with? 'glut'
528
- modified_api = m.name.to_s[4..-1] # omit prefix "glut"
529
- define_singleton_method(modified_api, m) # define alias
530
- end
531
- end
532
-
533
- # Convert constant names (e.g.: GLUT::GLUT_KEY_F1 -> GLUT::KEY_F1)
534
- self.constants.each do |constant|
535
- cs = constant.to_s
536
- if cs[0..4] == "GLUT_"
537
- if cs[5] =~ /\d/
538
- # We have to abandon name conversion like 'GL_2D, GL_3D_COLOR, GL_4_BYTES, etc.
539
- # Because constants can't start with a digit or underscore.
540
- # [Note] This rule has been inherited from Yoshi's very original ruby-opengl (confirmed with opengl-0.32g, 2004-07-17).
541
- else
542
- # Convert by omitting the 'GLUT_' prefix
543
- const_set(cs[5..-1], GLUT.const_get(constant))
544
- end
545
- end
546
- end
547
-
548
- @@glut_import_done = true
549
- end
550
-
551
- end
552
-
553
- =begin
554
- Ruby-OpenGL : Yet another OpenGL wrapper for Ruby (and wrapper code generator)
555
- Copyright (c) 2013-2024 vaiorabbit <http://twitter.com/vaiorabbit>
556
-
557
- This software is provided 'as-is', without any express or implied
558
- warranty. In no event will the authors be held liable for any damages
559
- arising from the use of this software.
560
-
561
- Permission is granted to anyone to use this software for any purpose,
562
- including commercial applications, and to alter it and redistribute it
563
- freely, subject to the following restrictions:
564
-
565
- 1. The origin of this software must not be misrepresented; you must not
566
- claim that you wrote the original software. If you use this software
567
- in a product, an acknowledgment in the product documentation would be
568
- appreciated but is not required.
569
-
570
- 2. Altered source versions must be plainly marked as such, and must not be
571
- misrepresented as being the original software.
572
-
573
- 3. This notice may not be removed or altered from any source
574
- distribution.
575
- =end
1
+ # -*- coding: utf-8 -*-
2
+ # A FreeGLUT wrapper
3
+ require 'fiddle/import'
4
+ require_relative 'opengl_platform'
5
+
6
+ module GLUT
7
+
8
+ extend Fiddle::Importer
9
+
10
+ # defines
11
+
12
+ GLUT_API_VERSION = 4
13
+
14
+ GLUT_KEY_F1 = 0x0001
15
+ GLUT_KEY_F2 = 0x0002
16
+ GLUT_KEY_F3 = 0x0003
17
+ GLUT_KEY_F4 = 0x0004
18
+ GLUT_KEY_F5 = 0x0005
19
+ GLUT_KEY_F6 = 0x0006
20
+ GLUT_KEY_F7 = 0x0007
21
+ GLUT_KEY_F8 = 0x0008
22
+ GLUT_KEY_F9 = 0x0009
23
+ GLUT_KEY_F10 = 0x000A
24
+ GLUT_KEY_F11 = 0x000B
25
+ GLUT_KEY_F12 = 0x000C
26
+ GLUT_KEY_LEFT = 0x0064
27
+ GLUT_KEY_UP = 0x0065
28
+ GLUT_KEY_RIGHT = 0x0066
29
+ GLUT_KEY_DOWN = 0x0067
30
+ GLUT_KEY_PAGE_UP = 0x0068
31
+ GLUT_KEY_PAGE_DOWN = 0x0069
32
+ GLUT_KEY_HOME = 0x006A
33
+ GLUT_KEY_END = 0x006B
34
+ GLUT_KEY_INSERT = 0x006C
35
+
36
+ GLUT_LEFT_BUTTON = 0x0000
37
+ GLUT_MIDDLE_BUTTON = 0x0001
38
+ GLUT_RIGHT_BUTTON = 0x0002
39
+ GLUT_DOWN = 0x0000
40
+ GLUT_UP = 0x0001
41
+ GLUT_LEFT = 0x0000
42
+ GLUT_ENTERED = 0x0001
43
+
44
+ GLUT_RGB = 0x0000
45
+ GLUT_RGBA = 0x0000
46
+ GLUT_INDEX = 0x0001
47
+ GLUT_SINGLE = 0x0000
48
+ GLUT_DOUBLE = 0x0002
49
+ GLUT_ACCUM = 0x0004
50
+ GLUT_ALPHA = 0x0008
51
+ GLUT_DEPTH = 0x0010
52
+ GLUT_STENCIL = 0x0020
53
+ GLUT_MULTISAMPLE = 0x0080
54
+ GLUT_STEREO = 0x0100
55
+ GLUT_LUMINANCE = 0x0200
56
+
57
+ GLUT_MENU_NOT_IN_USE = 0x0000
58
+ GLUT_MENU_IN_USE = 0x0001
59
+ GLUT_NOT_VISIBLE = 0x0000
60
+ GLUT_VISIBLE = 0x0001
61
+ GLUT_HIDDEN = 0x0000
62
+ GLUT_FULLY_RETAINED = 0x0001
63
+ GLUT_PARTIALLY_RETAINED = 0x0002
64
+ GLUT_FULLY_COVERED = 0x0003
65
+
66
+ GLUT_WINDOW_X = 0x0064
67
+ GLUT_WINDOW_Y = 0x0065
68
+ GLUT_WINDOW_WIDTH = 0x0066
69
+ GLUT_WINDOW_HEIGHT = 0x0067
70
+ GLUT_WINDOW_BUFFER_SIZE = 0x0068
71
+ GLUT_WINDOW_STENCIL_SIZE = 0x0069
72
+ GLUT_WINDOW_DEPTH_SIZE = 0x006A
73
+ GLUT_WINDOW_RED_SIZE = 0x006B
74
+ GLUT_WINDOW_GREEN_SIZE = 0x006C
75
+ GLUT_WINDOW_BLUE_SIZE = 0x006D
76
+ GLUT_WINDOW_ALPHA_SIZE = 0x006E
77
+ GLUT_WINDOW_ACCUM_RED_SIZE = 0x006F
78
+ GLUT_WINDOW_ACCUM_GREEN_SIZE = 0x0070
79
+ GLUT_WINDOW_ACCUM_BLUE_SIZE = 0x0071
80
+ GLUT_WINDOW_ACCUM_ALPHA_SIZE = 0x0072
81
+ GLUT_WINDOW_DOUBLEBUFFER = 0x0073
82
+ GLUT_WINDOW_RGBA = 0x0074
83
+ GLUT_WINDOW_PARENT = 0x0075
84
+ GLUT_WINDOW_NUM_CHILDREN = 0x0076
85
+ GLUT_WINDOW_COLORMAP_SIZE = 0x0077
86
+ GLUT_WINDOW_NUM_SAMPLES = 0x0078
87
+ GLUT_WINDOW_STEREO = 0x0079
88
+ GLUT_WINDOW_CURSOR = 0x007A
89
+
90
+ GLUT_SCREEN_WIDTH = 0x00C8
91
+ GLUT_SCREEN_HEIGHT = 0x00C9
92
+ GLUT_SCREEN_WIDTH_MM = 0x00CA
93
+ GLUT_SCREEN_HEIGHT_MM = 0x00CB
94
+ GLUT_MENU_NUM_ITEMS = 0x012C
95
+ GLUT_DISPLAY_MODE_POSSIBLE = 0x0190
96
+ GLUT_INIT_WINDOW_X = 0x01F4
97
+ GLUT_INIT_WINDOW_Y = 0x01F5
98
+ GLUT_INIT_WINDOW_WIDTH = 0x01F6
99
+ GLUT_INIT_WINDOW_HEIGHT = 0x01F7
100
+ GLUT_INIT_DISPLAY_MODE = 0x01F8
101
+ GLUT_ELAPSED_TIME = 0x02BC
102
+ GLUT_WINDOW_FORMAT_ID = 0x007B
103
+ GLUT_INIT_STATE = 0x007C
104
+
105
+ GLUT_HAS_KEYBOARD = 0x0258
106
+ GLUT_HAS_MOUSE = 0x0259
107
+ GLUT_HAS_SPACEBALL = 0x025A
108
+ GLUT_HAS_DIAL_AND_BUTTON_BOX = 0x025B
109
+ GLUT_HAS_TABLET = 0x025C
110
+ GLUT_NUM_MOUSE_BUTTONS = 0x025D
111
+ GLUT_NUM_SPACEBALL_BUTTONS = 0x025E
112
+ GLUT_NUM_BUTTON_BOX_BUTTONS = 0x025F
113
+ GLUT_NUM_DIALS = 0x0260
114
+ GLUT_NUM_TABLET_BUTTONS = 0x0261
115
+ GLUT_DEVICE_IGNORE_KEY_REPEAT = 0x0262
116
+ GLUT_DEVICE_KEY_REPEAT = 0x0263
117
+ GLUT_HAS_JOYSTICK = 0x0264
118
+ GLUT_OWNS_JOYSTICK = 0x0265
119
+ GLUT_JOYSTICK_BUTTONS = 0x0266
120
+ GLUT_JOYSTICK_AXES = 0x0267
121
+ GLUT_JOYSTICK_POLL_RATE = 0x0268
122
+
123
+ GLUT_OVERLAY_POSSIBLE = 0x0320
124
+ GLUT_LAYER_IN_USE = 0x0321
125
+ GLUT_HAS_OVERLAY = 0x0322
126
+ GLUT_TRANSPARENT_INDEX = 0x0323
127
+ GLUT_NORMAL_DAMAGED = 0x0324
128
+ GLUT_OVERLAY_DAMAGED = 0x0325
129
+
130
+ GLUT_VIDEO_RESIZE_POSSIBLE = 0x0384
131
+ GLUT_VIDEO_RESIZE_IN_USE = 0x0385
132
+ GLUT_VIDEO_RESIZE_X_DELTA = 0x0386
133
+ GLUT_VIDEO_RESIZE_Y_DELTA = 0x0387
134
+ GLUT_VIDEO_RESIZE_WIDTH_DELTA = 0x0388
135
+ GLUT_VIDEO_RESIZE_HEIGHT_DELTA = 0x0389
136
+ GLUT_VIDEO_RESIZE_X = 0x038A
137
+ GLUT_VIDEO_RESIZE_Y = 0x038B
138
+ GLUT_VIDEO_RESIZE_WIDTH = 0x038C
139
+ GLUT_VIDEO_RESIZE_HEIGHT = 0x038D
140
+
141
+ GLUT_NORMAL = 0x0000
142
+ GLUT_OVERLAY = 0x0001
143
+
144
+ GLUT_ACTIVE_SHIFT = 0x0001
145
+ GLUT_ACTIVE_CTRL = 0x0002
146
+ GLUT_ACTIVE_ALT = 0x0004
147
+
148
+ GLUT_CURSOR_RIGHT_ARROW = 0x0000
149
+ GLUT_CURSOR_LEFT_ARROW = 0x0001
150
+ GLUT_CURSOR_INFO = 0x0002
151
+ GLUT_CURSOR_DESTROY = 0x0003
152
+ GLUT_CURSOR_HELP = 0x0004
153
+ GLUT_CURSOR_CYCLE = 0x0005
154
+ GLUT_CURSOR_SPRAY = 0x0006
155
+ GLUT_CURSOR_WAIT = 0x0007
156
+ GLUT_CURSOR_TEXT = 0x0008
157
+ GLUT_CURSOR_CROSSHAIR = 0x0009
158
+ GLUT_CURSOR_UP_DOWN = 0x000A
159
+ GLUT_CURSOR_LEFT_RIGHT = 0x000B
160
+ GLUT_CURSOR_TOP_SIDE = 0x000C
161
+ GLUT_CURSOR_BOTTOM_SIDE = 0x000D
162
+ GLUT_CURSOR_LEFT_SIDE = 0x000E
163
+ GLUT_CURSOR_RIGHT_SIDE = 0x000F
164
+ GLUT_CURSOR_TOP_LEFT_CORNER = 0x0010
165
+ GLUT_CURSOR_TOP_RIGHT_CORNER = 0x0011
166
+ GLUT_CURSOR_BOTTOM_RIGHT_CORNER = 0x0012
167
+ GLUT_CURSOR_BOTTOM_LEFT_CORNER = 0x0013
168
+ GLUT_CURSOR_INHERIT = 0x0064
169
+ GLUT_CURSOR_NONE = 0x0065
170
+ GLUT_CURSOR_FULL_CROSSHAIR = 0x0066
171
+
172
+ GLUT_RED = 0x0000
173
+ GLUT_GREEN = 0x0001
174
+ GLUT_BLUE = 0x0002
175
+
176
+ GLUT_KEY_REPEAT_OFF = 0x0000
177
+ GLUT_KEY_REPEAT_ON = 0x0001
178
+ GLUT_KEY_REPEAT_DEFAULT = 0x0002
179
+
180
+ GLUT_JOYSTICK_BUTTON_A = 0x0001
181
+ GLUT_JOYSTICK_BUTTON_B = 0x0002
182
+ GLUT_JOYSTICK_BUTTON_C = 0x0004
183
+ GLUT_JOYSTICK_BUTTON_D = 0x0008
184
+
185
+ GLUT_GAME_MODE_ACTIVE = 0x0000
186
+ GLUT_GAME_MODE_POSSIBLE = 0x0001
187
+ GLUT_GAME_MODE_WIDTH = 0x0002
188
+ GLUT_GAME_MODE_HEIGHT = 0x0003
189
+ GLUT_GAME_MODE_PIXEL_DEPTH = 0x0004
190
+ GLUT_GAME_MODE_REFRESH_RATE = 0x0005
191
+ GLUT_GAME_MODE_DISPLAY_CHANGED = 0x0006
192
+
193
+ # typedefs
194
+ @@glut_cb_function_signature = {
195
+ :GLUTMenuFunc => "void GLUTMenuFunc(int)",
196
+
197
+ :GLUTTimerFunc => "void GLUTTimerFunc(int)",
198
+ :GLUTIdleFunc => "void GLUTIdleFunc()",
199
+
200
+ :GLUTKeyboardFunc => "void GLUTKeyboardFunc(unsigned char, int, int)",
201
+ :GLUTSpecialFunc => "void GLUTSpecialFunc(int, int, int)",
202
+ :GLUTReshapeFunc => "void GLUTReshapeFunc(int, int)",
203
+ :GLUTVisibilityFunc => "void GLUTVisibilityFunc(int)",
204
+ :GLUTDisplayFunc => "void GLUTDisplayFunc()",
205
+ :GLUTMouseFunc => "void GLUTMouseFunc(int, int, int, int)",
206
+ :GLUTMotionFunc => "void GLUTMotionFunc(int, int)",
207
+ :GLUTPassiveMotionFunc => "void GLUTPassiveMotionFunc(int, int)",
208
+ :GLUTEntryFunc => "void GLUTEntryFunc(int)",
209
+
210
+ :GLUTKeyboardUpFunc => "void GLUTKeyboardUpFunc(unsigned char, int, int)",
211
+ :GLUTSpecialUpFunc => "void GLUTSpecialUpFunc(int, int, int)",
212
+ :GLUTJoystickFunc => "void GLUTJoystickFunc(unsigned int, int, int, int)",
213
+ :GLUTMenuStateFunc => "void GLUTMenuStateFunc(int)",
214
+ :GLUTMenuStatusFunc => "void GLUTMenuStatusFunc(int, int, int)",
215
+ :GLUTOverlayDisplayFunc => "void GLUTOverlayDisplayFunc()",
216
+ :GLUTWindowStatusFunc => "void GLUTWindowStatusFunc(int)",
217
+
218
+ :GLUTSpaceballMotionFunc => "void GLUTSpaceballMotionFunc(int, int, int)",
219
+ :GLUTSpaceballRotateFunc => "void GLUTSpaceballRotateFunc(int, int, int)",
220
+ :GLUTSpaceballButtonFunc => "void GLUTSpaceballButtonFunc(int, int)",
221
+ :GLUTButtonBoxFunc => "void GLUTButtonBoxFunc(int, int)",
222
+ :GLUTDialsFunc => "void GLUTDialsFunc(int, int)",
223
+ :GLUTTabletMotionFunc => "void GLUTTabletMotionFunc(int, int)",
224
+ :GLUTTabletButtonFunc => "void GLUTTabletButtonFunc(int, int, int, int)",
225
+ }
226
+
227
+ # Creates a callback as an instance of Fiddle::Function
228
+ def self.create_callback(sym, proc=nil, &blk)
229
+ if block_given?
230
+ return bind(@@glut_cb_function_signature[sym], nil, &blk)
231
+ else
232
+ return bind(@@glut_cb_function_signature[sym], nil, &proc)
233
+ end
234
+ end
235
+
236
+ GLUTMenuFunc_cb_args = [Fiddle::TYPE_INT]
237
+ GLUTMenuFunc_cb_retval = Fiddle::TYPE_VOID
238
+ GLUTTimerFunc_cb_args = [Fiddle::TYPE_INT]
239
+ GLUTTimerFunc_cb_retval = Fiddle::TYPE_VOID
240
+ GLUTIdleFunc_cb_args = []
241
+ GLUTIdleFunc_cb_retval = Fiddle::TYPE_VOID
242
+ GLUTKeyboardFunc_cb_args = [-Fiddle::TYPE_CHAR, Fiddle::TYPE_INT, Fiddle::TYPE_INT]
243
+ GLUTKeyboardFunc_cb_retval = Fiddle::TYPE_VOID
244
+ GLUTSpecialFunc_cb_args = [Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_INT]
245
+ GLUTSpecialFunc_cb_retval = Fiddle::TYPE_VOID
246
+ GLUTReshapeFunc_cb_args = [Fiddle::TYPE_INT, Fiddle::TYPE_INT]
247
+ GLUTReshapeFunc_cb_retval = Fiddle::TYPE_VOID
248
+ GLUTVisibilityFunc_cb_args = [Fiddle::TYPE_INT]
249
+ GLUTVisibilityFunc_cb_retval = Fiddle::TYPE_VOID
250
+ GLUTDisplayFunc_cb_args = []
251
+ GLUTDisplayFunc_cb_retval = Fiddle::TYPE_VOID
252
+ GLUTMouseFunc_cb_args = [Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_INT]
253
+ GLUTMouseFunc_cb_retval = Fiddle::TYPE_VOID
254
+ GLUTMotionFunc_cb_args = [Fiddle::TYPE_INT, Fiddle::TYPE_INT]
255
+ GLUTMotionFunc_cb_retval = Fiddle::TYPE_VOID
256
+ GLUTPassiveMotionFunc_cb_args = [Fiddle::TYPE_INT, Fiddle::TYPE_INT]
257
+ GLUTPassiveMotionFunc_cb_retval = Fiddle::TYPE_VOID
258
+ GLUTEntryFunc_cb_args = [Fiddle::TYPE_INT]
259
+ GLUTEntryFunc_cb_retval = Fiddle::TYPE_VOID
260
+ GLUTKeyboardUpFunc_cb_args = [-Fiddle::TYPE_CHAR, Fiddle::TYPE_INT, Fiddle::TYPE_INT]
261
+ GLUTKeyboardUpFunc_cb_retval = Fiddle::TYPE_VOID
262
+ GLUTSpecialUpFunc_cb_args = [Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_INT]
263
+ GLUTSpecialUpFunc_cb_retval = Fiddle::TYPE_VOID
264
+ GLUTJoystickFunc_cb_args = [-Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_INT]
265
+ GLUTJoystickFunc_cb_retval = Fiddle::TYPE_VOID
266
+ GLUTMenuStateFunc_cb_args = [Fiddle::TYPE_INT]
267
+ GLUTMenuStateFunc_cb_retval = Fiddle::TYPE_VOID
268
+ GLUTMenuStatusFunc_cb_args = [Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_INT]
269
+ GLUTMenuStatusFunc_cb_retval = Fiddle::TYPE_VOID
270
+ GLUTOverlayDisplayFunc_cb_args = []
271
+ GLUTOverlayDisplayFunc_cb_retval = Fiddle::TYPE_VOID
272
+ GLUTWindowStatusFunc_cb_args = [Fiddle::TYPE_INT]
273
+ GLUTWindowStatusFunc_cb_retval = Fiddle::TYPE_VOID
274
+ GLUTSpaceballMotionFunc_cb_args = [Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_INT]
275
+ GLUTSpaceballMotionFunc_cb_retval = Fiddle::TYPE_VOID
276
+ GLUTSpaceballRotateFunc_cb_args = [Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_INT]
277
+ GLUTSpaceballRotateFunc_cb_retval = Fiddle::TYPE_VOID
278
+ GLUTSpaceballButtonFunc_cb_args = [Fiddle::TYPE_INT, Fiddle::TYPE_INT]
279
+ GLUTSpaceballButtonFunc_cb_retval = Fiddle::TYPE_VOID
280
+ GLUTButtonBoxFunc_cb_args = [Fiddle::TYPE_INT, Fiddle::TYPE_INT]
281
+ GLUTButtonBoxFunc_cb_retval = Fiddle::TYPE_VOID
282
+ GLUTDialsFunc_cb_args = [Fiddle::TYPE_INT, Fiddle::TYPE_INT]
283
+ GLUTDialsFunc_cb_retval = Fiddle::TYPE_VOID
284
+ GLUTTabletMotionFunc_cb_args = [Fiddle::TYPE_INT, Fiddle::TYPE_INT]
285
+ GLUTTabletMotionFunc_cb_retval = Fiddle::TYPE_VOID
286
+ GLUTTabletButtonFunc_cb_args = [Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_INT, Fiddle::TYPE_INT]
287
+ GLUTTabletButtonFunc_cb_retval = Fiddle::TYPE_VOID
288
+
289
+ @@glut_cb_closure_signature = {
290
+ :GLUTMenuFunc => [GLUTMenuFunc_cb_retval, GLUTMenuFunc_cb_args],
291
+ :GLUTTimerFunc => [GLUTTimerFunc_cb_retval, GLUTTimerFunc_cb_args],
292
+ :GLUTIdleFunc => [GLUTIdleFunc_cb_retval, GLUTIdleFunc_cb_args],
293
+ :GLUTKeyboardFunc => [GLUTKeyboardFunc_cb_retval, GLUTKeyboardFunc_cb_args],
294
+ :GLUTSpecialFunc => [GLUTSpecialFunc_cb_retval, GLUTSpecialFunc_cb_args],
295
+ :GLUTReshapeFunc => [GLUTReshapeFunc_cb_retval, GLUTReshapeFunc_cb_args],
296
+ :GLUTVisibilityFunc => [GLUTVisibilityFunc_cb_retval, GLUTVisibilityFunc_cb_args],
297
+ :GLUTDisplayFunc => [GLUTDisplayFunc_cb_retval, GLUTDisplayFunc_cb_args],
298
+ :GLUTMouseFunc => [GLUTMouseFunc_cb_retval, GLUTMouseFunc_cb_args],
299
+ :GLUTMotionFunc => [GLUTMotionFunc_cb_retval, GLUTMotionFunc_cb_args],
300
+ :GLUTPassiveMotionFunc => [GLUTPassiveMotionFunc_cb_retval, GLUTPassiveMotionFunc_cb_args],
301
+ :GLUTEntryFunc => [GLUTEntryFunc_cb_retval, GLUTEntryFunc_cb_args],
302
+ :GLUTKeyboardUpFunc => [GLUTKeyboardUpFunc_cb_retval, GLUTKeyboardUpFunc_cb_args],
303
+ :GLUTSpecialUpFunc => [GLUTSpecialUpFunc_cb_retval, GLUTSpecialUpFunc_cb_args],
304
+ :GLUTJoystickFunc => [GLUTJoystickFunc_cb_retval, GLUTJoystickFunc_cb_args],
305
+ :GLUTMenuStateFunc => [GLUTMenuStateFunc_cb_retval, GLUTMenuStateFunc_cb_args],
306
+ :GLUTMenuStatusFunc => [GLUTMenuStatusFunc_cb_retval, GLUTMenuStatusFunc_cb_args],
307
+ :GLUTOverlayDisplayFunc => [GLUTOverlayDisplayFunc_cb_retval, GLUTOverlayDisplayFunc_cb_args],
308
+ :GLUTWindowStatusFunc => [GLUTWindowStatusFunc_cb_retval, GLUTWindowStatusFunc_cb_args],
309
+ :GLUTSpaceballMotionFunc => [GLUTSpaceballMotionFunc_cb_retval, GLUTSpaceballMotionFunc_cb_args],
310
+ :GLUTSpaceballRotateFunc => [GLUTSpaceballRotateFunc_cb_retval, GLUTSpaceballRotateFunc_cb_args],
311
+ :GLUTSpaceballButtonFunc => [GLUTSpaceballButtonFunc_cb_retval, GLUTSpaceballButtonFunc_cb_args],
312
+ :GLUTButtonBoxFunc => [GLUTButtonBoxFunc_cb_retval, GLUTButtonBoxFunc_cb_args],
313
+ :GLUTDialsFunc => [GLUTDialsFunc_cb_retval, GLUTDialsFunc_cb_args],
314
+ :GLUTTabletMotionFunc => [GLUTTabletMotionFunc_cb_retval, GLUTTabletMotionFunc_cb_args],
315
+ :GLUTTabletButtonFunc => [GLUTTabletButtonFunc_cb_retval, GLUTTabletButtonFunc_cb_args],
316
+ }
317
+
318
+ # Creates a callback as an instance of Fiddle::Closure::BlockCaller
319
+ def self.create_callback_closure(sym, proc=nil, &blk)
320
+ cb_retval = @@glut_cb_closure_signature[sym][0]
321
+ cb_args = @@glut_cb_closure_signature[sym][1]
322
+ if block_given?
323
+ return Fiddle::Closure::BlockCaller.new(cb_retval, cb_args, Fiddle::Function::DEFAULT, &blk)
324
+ else
325
+ return Fiddle::Closure::BlockCaller.new(cb_retval, cb_args, Fiddle::Function::DEFAULT, &proc)
326
+ end
327
+ end
328
+
329
+ # NOTE : Use 'create_callback_function' for backward compatibility.
330
+ def self.create_callback(sym, proc=nil, &blk)
331
+ return self.create_callback_closure(sym, proc, &blk)
332
+ end
333
+
334
+ @@glut_import_done = false
335
+
336
+ # Load native library.
337
+ def self.load_lib(lib_path = nil, output_error = false)
338
+ if lib_path == nil
339
+ lib_path = case GL.get_platform
340
+ when :OPENGL_PLATFORM_WINDOWS
341
+ Dir.pwd + '/freeglut.dll'
342
+ when :OPENGL_PLATFORM_MACOSX
343
+ '/System/Library/Frameworks/GLUT.framework/GLUT'
344
+ else
345
+ 'libglut.so' # not tested
346
+ end
347
+ end
348
+
349
+ dlload(lib_path)
350
+
351
+ import_symbols(output_error) unless @@glut_import_done
352
+ end
353
+
354
+ @@lib_signature = [
355
+ 'void glutInit(int*, char**)',
356
+ 'void glutInitWindowPosition(int, int)',
357
+ 'void glutInitWindowSize(int, int)',
358
+ 'void glutInitDisplayMode(unsigned int)',
359
+ 'void glutInitDisplayString(const char*)',
360
+
361
+ 'void glutMainLoop()',
362
+
363
+ 'int glutCreateWindow(const char *)',
364
+ 'int glutCreateSubWindow(int, int, int, int, int)',
365
+ 'void glutDestroyWindow(int)',
366
+ 'void glutSetWindow(int)',
367
+ 'int glutGetWindow()',
368
+ 'void glutSetWindowTitle(const char *)',
369
+ 'void glutSetIconTitle(const char *)',
370
+ 'void glutReshapeWindow(int, int)',
371
+ 'void glutPositionWindow(int, int)',
372
+ 'void glutShowWindow()',
373
+ 'void glutHideWindow()',
374
+ 'void glutIconifyWindow()',
375
+ 'void glutPushWindow()',
376
+ 'void glutPopWindow()',
377
+ 'void glutFullScreen()',
378
+
379
+ 'void glutPostWindowRedisplay(int)',
380
+ 'void glutPostRedisplay()',
381
+ 'void glutSwapBuffers()',
382
+
383
+ 'void glutWarpPointer(int, int)',
384
+ 'void glutSetCursor(int)',
385
+
386
+ 'void glutEstablishOverlay()',
387
+ 'void glutRemoveOverlay()',
388
+ 'void glutUseLayer(unsigned int)',
389
+ 'void glutPostOverlayRedisplay()',
390
+ 'void glutPostWindowOverlayRedisplay(int)',
391
+ 'void glutShowOverlay()',
392
+ 'void glutHideOverlay()',
393
+
394
+ 'int glutCreateMenu(void *)',
395
+ 'void glutDestroyMenu(int)',
396
+ 'int glutGetMenu()',
397
+ 'void glutSetMenu(int)',
398
+ 'void glutAddMenuEntry(const char *, int)',
399
+ 'void glutAddSubMenu(const char *, int)',
400
+ 'void glutChangeToMenuEntry(int, const char *, int)',
401
+ 'void glutChangeToSubMenu(int, const char *, int)',
402
+ 'void glutRemoveMenuItem(int)',
403
+ 'void glutAttachMenu(int)',
404
+ 'void glutDetachMenu(int)',
405
+
406
+ 'void glutTimerFunc(unsigned int, void *, int)',
407
+ 'void glutIdleFunc(void *)',
408
+
409
+ 'void glutKeyboardFunc(void *)',
410
+ 'void glutSpecialFunc(void *)',
411
+ 'void glutReshapeFunc(void *)',
412
+ 'void glutVisibilityFunc(void *)',
413
+ 'void glutDisplayFunc(void *)',
414
+ 'void glutMouseFunc(void *)',
415
+ 'void glutMotionFunc(void *)',
416
+ 'void glutPassiveMotionFunc(void *)',
417
+ 'void glutEntryFunc(void *)',
418
+
419
+ 'void glutKeyboardUpFunc(void *)',
420
+ 'void glutSpecialUpFunc(void *)',
421
+ 'void glutJoystickFunc(void *, int)',
422
+ 'void glutMenuStateFunc(void *)',
423
+ 'void glutMenuStatusFunc(void *)',
424
+ 'void glutOverlayDisplayFunc(void *)',
425
+ 'void glutWindowStatusFunc(void *)',
426
+
427
+ 'void glutSpaceballMotionFunc(void *)',
428
+ 'void glutSpaceballRotateFunc(void *)',
429
+ 'void glutSpaceballButtonFunc(void *)',
430
+ 'void glutButtonBoxFunc(void *)',
431
+ 'void glutDialsFunc(void *)',
432
+ 'void glutTabletMotionFunc(void *)',
433
+ 'void glutTabletButtonFunc(void *)',
434
+
435
+ 'int glutGet(unsigned int)',
436
+ 'int glutDeviceGet(unsigned int)',
437
+ 'int glutGetModifiers()',
438
+ 'int glutLayerGet(unsigned int)',
439
+
440
+ 'void glutBitmapCharacter(void *, int)',
441
+ 'int glutBitmapWidth(void *, int)',
442
+ 'void glutStrokeCharacter(void *, int)',
443
+ 'int glutStrokeWidth(void *, int)',
444
+ 'int glutBitmapLength(void *, const unsigned char*)',
445
+ 'int glutStrokeLength(void *, const unsigned char*)',
446
+
447
+ 'void glutWireCube(double)',
448
+ 'void glutSolidCube(double)',
449
+ 'void glutWireSphere(double, int, int)',
450
+ 'void glutSolidSphere(double, int, int)',
451
+ 'void glutWireCone(double, double, int, int)',
452
+ 'void glutSolidCone(double, double, int, int)',
453
+
454
+ 'void glutWireTorus(double, double, int, int)',
455
+ 'void glutSolidTorus(double, double, int, int)',
456
+ 'void glutWireDodecahedron()',
457
+ 'void glutSolidDodecahedron()',
458
+ 'void glutWireOctahedron()',
459
+ 'void glutSolidOctahedron()',
460
+ 'void glutWireTetrahedron()',
461
+ 'void glutSolidTetrahedron()',
462
+ 'void glutWireIcosahedron()',
463
+ 'void glutSolidIcosahedron()',
464
+
465
+ 'void glutWireTeapot(double)',
466
+ 'void glutSolidTeapot(double)',
467
+
468
+ 'void glutGameModeString(const char*)',
469
+ 'int glutEnterGameMode()',
470
+ 'void glutLeaveGameMode()',
471
+ 'int glutGameModeGet(unsigned int)',
472
+
473
+ 'int glutVideoResizeGet(unsigned int)',
474
+ 'void glutSetupVideoResizing()',
475
+ 'void glutStopVideoResizing()',
476
+ 'void glutVideoResize(int, int, int, int)',
477
+ 'void glutVideoPan(int, int, int, int)',
478
+
479
+ 'void glutSetColor(int, float, float, float)',
480
+ 'float glutGetColor(int, int)',
481
+ 'void glutCopyColormap(int)',
482
+
483
+ 'void glutIgnoreKeyRepeat(int)',
484
+ 'void glutSetKeyRepeat(int)',
485
+ 'void glutForceJoystickFunc()',
486
+
487
+ 'int glutExtensionSupported(const char *)',
488
+ 'void glutReportErrors()',
489
+ ]
490
+
491
+ def self.import_symbols(output_error = false)
492
+ # defines
493
+ if GL.get_platform == :OPENGL_PLATFORM_WINDOWS
494
+ const_set('GLUT_STROKE_ROMAN', Fiddle::Pointer.new(0x0000))
495
+ const_set('GLUT_STROKE_MONO_ROMAN', Fiddle::Pointer.new(0x0001))
496
+ const_set('GLUT_BITMAP_9_BY_15', Fiddle::Pointer.new(0x0002))
497
+ const_set('GLUT_BITMAP_8_BY_13', Fiddle::Pointer.new(0x0003))
498
+ const_set('GLUT_BITMAP_TIMES_ROMAN_10', Fiddle::Pointer.new(0x0004))
499
+ const_set('GLUT_BITMAP_TIMES_ROMAN_24', Fiddle::Pointer.new(0x0005))
500
+ const_set('GLUT_BITMAP_HELVETICA_10', Fiddle::Pointer.new(0x0006))
501
+ const_set('GLUT_BITMAP_HELVETICA_12', Fiddle::Pointer.new(0x0007))
502
+ const_set('GLUT_BITMAP_HELVETICA_18', Fiddle::Pointer.new(0x0008))
503
+ else
504
+ const_set('GLUT_STROKE_ROMAN', import_symbol("glutStrokeRoman"))
505
+ const_set('GLUT_STROKE_MONO_ROMAN', import_symbol("glutStrokeMonoRoman"))
506
+ const_set('GLUT_BITMAP_9_BY_15', import_symbol("glutBitmap9By15"))
507
+ const_set('GLUT_BITMAP_8_BY_13', import_symbol("glutBitmap8By13"))
508
+ const_set('GLUT_BITMAP_TIMES_ROMAN_10', import_symbol("glutBitmapTimesRoman10"))
509
+ const_set('GLUT_BITMAP_TIMES_ROMAN_24', import_symbol("glutBitmapTimesRoman24"))
510
+ const_set('GLUT_BITMAP_HELVETICA_10', import_symbol("glutBitmapHelvetica10"))
511
+ const_set('GLUT_BITMAP_HELVETICA_12', import_symbol("glutBitmapHelvetica12"))
512
+ const_set('GLUT_BITMAP_HELVETICA_18', import_symbol("glutBitmapHelvetica18"))
513
+ end
514
+
515
+ # function
516
+ @@lib_signature.each do |sig|
517
+ begin
518
+ extern sig
519
+ rescue
520
+ $stderr.puts("[Warning] Failed to import #{sig}.") if output_error
521
+ end
522
+ end
523
+
524
+ # Convert method names (e.g.: GLUT.glutInit -> GLUT.Init)
525
+ self.singleton_methods(false).each do |method_name|
526
+ m = singleton_method(method_name)
527
+ if m.name.to_s.start_with? 'glut'
528
+ modified_api = m.name.to_s[4..-1] # omit prefix "glut"
529
+ define_singleton_method(modified_api, m) # define alias
530
+ end
531
+ end
532
+
533
+ # Convert constant names (e.g.: GLUT::GLUT_KEY_F1 -> GLUT::KEY_F1)
534
+ self.constants.each do |constant|
535
+ cs = constant.to_s
536
+ if cs[0..4] == "GLUT_"
537
+ if cs[5] =~ /\d/
538
+ # We have to abandon name conversion like 'GL_2D, GL_3D_COLOR, GL_4_BYTES, etc.
539
+ # Because constants can't start with a digit or underscore.
540
+ # [Note] This rule has been inherited from Yoshi's very original ruby-opengl (confirmed with opengl-0.32g, 2004-07-17).
541
+ else
542
+ # Convert by omitting the 'GLUT_' prefix
543
+ const_set(cs[5..-1], GLUT.const_get(constant))
544
+ end
545
+ end
546
+ end
547
+
548
+ @@glut_import_done = true
549
+ end
550
+
551
+ end
552
+
553
+ =begin
554
+ Ruby-OpenGL : Yet another OpenGL wrapper for Ruby (and wrapper code generator)
555
+ Copyright (c) 2013-2025 vaiorabbit <http://twitter.com/vaiorabbit>
556
+
557
+ This software is provided 'as-is', without any express or implied
558
+ warranty. In no event will the authors be held liable for any damages
559
+ arising from the use of this software.
560
+
561
+ Permission is granted to anyone to use this software for any purpose,
562
+ including commercial applications, and to alter it and redistribute it
563
+ freely, subject to the following restrictions:
564
+
565
+ 1. The origin of this software must not be misrepresented; you must not
566
+ claim that you wrote the original software. If you use this software
567
+ in a product, an acknowledgment in the product documentation would be
568
+ appreciated but is not required.
569
+
570
+ 2. Altered source versions must be plainly marked as such, and must not be
571
+ misrepresented as being the original software.
572
+
573
+ 3. This notice may not be removed or altered from any source
574
+ distribution.
575
+ =end