2 ;;; Copyright (C) 2013 Daniel Hartwig <mandyke@gmail.com>
4 ;;; Figl is free software: you can redistribute it and/or modify it
5 ;;; under the terms of the GNU Lesser General Public License as
6 ;;; published by the Free Software Foundation, either version 3 of the
7 ;;; License, or (at your option) any later version.
9 ;;; Figl is distributed in the hope that it will be useful, but WITHOUT
10 ;;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
11 ;;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
12 ;;; Public License for more details.
14 ;;; You should have received a copy of the GNU Lesser General Public
15 ;;; License along with this program. If not, see
16 ;;; <http://www.gnu.org/licenses/>.
20 ;; These bindings are direct mappings to the OpenGL Utility Library
21 ;; (GLUT) Programming Interface, API Version 3.
23 ;; Care should be taken to avoid errors as GLUT implementations may
24 ;; exit() on error condition. See section 14.3 of the specification.
28 (define-module (figl glut low-level)
29 #:use-module (figl glut runtime)
30 #:use-module (figl glut types)
31 #:use-module (figl gl types)
32 #:use-module ((system foreign) #:renamer (symbol-prefix-proc 'ffi:))
33 #:use-module (srfi srfi-26) ; cut
34 #:export (;; 2 Initialization
36 glutInitWindowPosition
40 ;; 3 Begin Event Processing
43 ;; 4 Window Management
63 ;; 5 Overlay Management
67 glutPostOverlayRedisplay
84 ;; 7 Callback Registration
86 glutOverlayDisplayFunc
95 glutSpaceballMotionFunc
96 glutSpaceballRotateFunc
97 glutSpaceballButtonFunc
107 ;; 8 Color Index Colormap Management
117 glutExtensionSupported
125 ;; 11 Geometric Object Rendering
134 glutSolidDodecahedron
150 (define-glut-procedure
151 (glutInit (argcp int-*) (argv char-**) -> void)
154 (define-glut-procedure
155 (glutInitWindowPosition (x int) (y int) -> void)
158 (define-glut-procedure
159 (glutInitWindowSize (width int) (height int) -> void)
162 (define-glut-procedure
163 (glutInitDisplayMode (mode unsigned-int) -> void)
167 ;;; 3 Begin Event Processing
170 (define-glut-procedure
171 (glutMainLoop -> void)
175 ;;; 4 Window Management
178 (define-glut-procedure
179 (glutCreateWindow (name char-*) -> int)
182 (define-glut-procedure
183 (glutCreateSubWindow (win int)
192 (define-glut-procedure
193 (glutSetWindow (win int) -> void)
196 (define-glut-procedure
197 (glutGetWindow -> int)
200 (define-glut-procedure
201 (glutDestroyWindow (win int) -> void)
204 (define-glut-procedure
205 (glutPostRedisplay -> void)
208 (define-glut-procedure
209 (glutSwapBuffers -> void)
212 (define-glut-procedure
213 (glutPositionWindow (x int) (y int) -> void)
216 (define-glut-procedure
217 (glutReshapeWindow (width int) (height int) -> void)
220 (define-glut-procedure
221 (glutFullScreen -> void)
224 (define-glut-procedure
225 (glutPopWindow -> void)
228 (define-glut-procedure
229 (glutPushWindow -> void)
232 (define-glut-procedure
233 (glutShowWindow -> void)
236 (define-glut-procedure
237 (glutHideWindow -> void)
240 (define-glut-procedure
241 (glutIconifyWindow -> void)
244 (define-glut-procedure
245 (glutSetWindowTitle (name char-*) -> void)
248 (define-glut-procedure
249 (glutSetIconTitle (name char-*) -> void)
252 (define-glut-procedure
253 (glutSetCursor (cursor int) -> void)
258 ;;; 5 Overlay Management
261 (define-glut-procedure
262 (glutEstablishOverlay -> void)
265 (define-glut-procedure
266 (glutUseLayer (layer GLenum) -> void)
269 (define-glut-procedure
270 (glutRemoveOverlay -> void)
273 (define-glut-procedure
274 (glutPostOverlayRedisplay -> void)
277 (define-glut-procedure
278 (glutShowOverlay -> void)
281 (define-glut-procedure
282 (glutHideOverlay -> void)
287 ;;; 6 Menu Management
290 (define-glut-procedure
291 (glutCreateMenu (func void-*) -> int)
294 (define-glut-procedure
295 (glutSetMenu (menu int) -> void)
298 (define-glut-procedure
302 (define-glut-procedure
303 (glutDestroyMenu (menu int) -> void)
306 (define-glut-procedure
307 (glutAddMenuEntry (name char-*) (value int) -> void)
310 (define-glut-procedure
311 (glutAddSubMenu (name char-*) (menu int) -> void)
314 (define-glut-procedure
315 (glutChangeToMenuEntry (entry int)
322 (define-glut-procedure
323 (glutChangeToSubMenu (entry int)
330 (define-glut-procedure
331 (glutRemoveMenuItem (entry int) -> void)
334 (define-glut-procedure
335 (glutAttachMenu (button int) -> void)
338 (define-glut-procedure
339 (glutDetachMenu (button int) -> void)
344 ;;; 7 Callback Registration
347 (define-glut-procedure
348 (glutDisplayFunc (func void-*) -> void)
351 (define-glut-procedure
352 (glutOverlayDisplayFunc (func void-*) -> void)
355 (define-glut-procedure
356 (glutReshapeFunc (func void-*) -> void)
359 (define-glut-procedure
360 (glutKeyboardFunc (func void-*) -> void)
363 (define-glut-procedure
364 (glutMouseFunc (func void-*) -> void)
367 (define-glut-procedure
368 (glutMotionFunc (func void-*) -> void)
371 (define-glut-procedure
372 (glutPassiveMotionFunc (func void-*) -> void)
375 (define-glut-procedure
376 (glutVisibilityFunc (func void-*) -> void)
379 (define-glut-procedure
380 (glutEntryFunc (func void-*) -> void)
383 (define-glut-procedure
384 (glutSpecialFunc (func void-*) -> void)
387 (define-glut-procedure
388 (glutSpaceballMotionFunc (func void-*) -> void)
391 (define-glut-procedure
392 (glutSpaceballRotateFunc (func void-*) -> void)
395 (define-glut-procedure
396 (glutSpaceballButtonFunc (func void-*) -> void)
399 (define-glut-procedure
400 (glutButtonBoxFunc (func void-*) -> void)
403 (define-glut-procedure
404 (glutDialsFunc (func void-*) -> void)
407 (define-glut-procedure
408 (glutTabletMotionFunc (func void-*) -> void)
411 (define-glut-procedure
412 (glutTabletButtonFunc (func void-*) -> void)
415 (define-glut-procedure
416 (glutMenuStatusFunc (func void-*) -> void)
419 (define-glut-procedure
420 (glutIdleFunc (func void-*) -> void)
423 (define-glut-procedure
424 (glutTimerFunc (msecs unsigned-int)
433 ;;; 8 Color Index Colormap Management
436 (define-glut-procedure
437 (glutSetColor (cell int)
445 (define-glut-procedure
446 (glutGetColor (cell int) (component int) -> GLfloat)
449 (define-glut-procedure
450 (glutCopyColormap (win int) -> void)
454 ;;; 9 State Retrieval
457 (define-glut-procedure
458 (glutGet (state GLenum) -> int)
461 (define-glut-procedure
462 (glutLayerGet (info GLenum) -> int)
465 (define-glut-procedure
466 (glutDeviceGet (info GLenum) -> int)
469 (define-glut-procedure
470 (glutGetModifiers -> int)
473 (define-glut-procedure
474 (glutExtensionSupported (extension char-*) -> int)
478 ;;; 10 Font Rendering
481 (define-glut-procedure
482 (glutBitmapCharacter (font void-*) (character int) -> void)
485 (define-glut-procedure
486 (glutBitmapWidth (font void-*) (character int) -> int)
489 (define-glut-procedure
490 (glutStrokeCharacter (font void-*) (character int) -> void)
493 (define-glut-procedure
494 (glutStrokeWidth (font void-*) (character int) -> void)
499 ;;; 11 Geometric Object Rendering
502 (define-glut-procedure
503 (glutSolidSphere (radius GLdouble)
510 (define-glut-procedure
511 (glutWireSphere (radius GLdouble)
518 (define-glut-procedure
519 (glutSolidCube (size GLdouble) -> void)
522 (define-glut-procedure
523 (glutWireCube (size GLdouble) -> void)
526 (define-glut-procedure
527 (glutSolidCone (base GLdouble)
535 (define-glut-procedure
536 (glutWireCone (base GLdouble)
544 (define-glut-procedure
545 (glutSolidTorus (inner-radius GLdouble)
546 (outer-radius GLdouble)
553 (define-glut-procedure
554 (glutWireTorus (inner-radius GLdouble)
555 (outer-radius GLdouble)
562 (define-glut-procedure
563 (glutSolidDodecahedron -> void)
566 (define-glut-procedure
567 (glutWireDodecahedron -> void)
570 (define-glut-procedure
571 (glutSolidOctahedron -> void)
574 (define-glut-procedure
575 (glutWireOctahedron -> void)
578 (define-glut-procedure
579 (glutSolidTetrahedron -> void)
582 (define-glut-procedure
583 (glutWireTetrahedron -> void)
586 (define-glut-procedure
587 (glutSolidIcosahedron -> void)
590 (define-glut-procedure
591 (glutWireIcosahedron -> void)
594 (define-glut-procedure
595 (glutSolidTeapot (size GLdouble) -> void)
598 (define-glut-procedure
599 (glutWireTeapot (size GLdouble) -> void)