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 runtime)
30 #:use-module (figl glut runtime)
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
146 (define-simple-foreign-type int ffi:int)
147 (define-simple-foreign-type unsigned-int ffi:unsigned-int)
149 ;; GLUT specifies that all strings are ASCII encoded.
150 (define-foreign-type char-* '*
151 (cut ffi:string->pointer <> "ASCII")
152 (cut ffi:pointer->string <> -1 "ASCII"))
154 (define-simple-foreign-type int-* '*)
155 (define-simple-foreign-type char-** '*)
161 (define-glut-procedure
162 (glutInit (argcp int-*) (argv char-**) -> void)
165 (define-glut-procedure
166 (glutInitWindowPosition (x int) (y int) -> void)
169 (define-glut-procedure
170 (glutInitWindowSize (width int) (height int) -> void)
173 (define-glut-procedure
174 (glutInitDisplayMode (mode unsigned-int) -> void)
178 ;;; 3 Begin Event Processing
181 (define-glut-procedure
182 (glutMainLoop -> void)
186 ;;; 4 Window Management
189 (define-glut-procedure
190 (glutCreateWindow (name char-*) -> int)
193 (define-glut-procedure
194 (glutCreateSubWindow (win int)
203 (define-glut-procedure
204 (glutSetWindow (win int) -> void)
207 (define-glut-procedure
208 (glutGetWindow -> int)
211 (define-glut-procedure
212 (glutDestroyWindow (win int) -> void)
215 (define-glut-procedure
216 (glutPostRedisplay -> void)
219 (define-glut-procedure
220 (glutSwapBuffers -> void)
223 (define-glut-procedure
224 (glutPositionWindow (x int) (y int) -> void)
227 (define-glut-procedure
228 (glutReshapeWindow (width int) (height int) -> void)
231 (define-glut-procedure
232 (glutFullScreen -> void)
235 (define-glut-procedure
236 (glutPopWindow -> void)
239 (define-glut-procedure
240 (glutPushWindow -> void)
243 (define-glut-procedure
244 (glutShowWindow -> void)
247 (define-glut-procedure
248 (glutHideWindow -> void)
251 (define-glut-procedure
252 (glutIconifyWindow -> void)
255 (define-glut-procedure
256 (glutSetWindowTitle (name char-*) -> void)
259 (define-glut-procedure
260 (glutSetIconTitle (name char-*) -> void)
263 (define-glut-procedure
264 (glutSetCursor (cursor int) -> void)
269 ;;; 5 Overlay Management
272 (define-glut-procedure
273 (glutEstablishOverlay -> void)
276 (define-glut-procedure
277 (glutUseLayer (layer GLenum) -> void)
280 (define-glut-procedure
281 (glutRemoveOverlay -> void)
284 (define-glut-procedure
285 (glutPostOverlayRedisplay -> void)
288 (define-glut-procedure
289 (glutShowOverlay -> void)
292 (define-glut-procedure
293 (glutHideOverlay -> void)
298 ;;; 6 Menu Management
301 (define-glut-procedure
302 (glutCreateMenu (func void-*) -> int)
305 (define-glut-procedure
306 (glutSetMenu (menu int) -> void)
309 (define-glut-procedure
313 (define-glut-procedure
314 (glutDestroyMenu (menu int) -> void)
317 (define-glut-procedure
318 (glutAddMenuEntry (name char-*) (value int) -> void)
321 (define-glut-procedure
322 (glutAddSubMenu (name char-*) (menu int) -> void)
325 (define-glut-procedure
326 (glutChangeToMenuEntry (entry int)
333 (define-glut-procedure
334 (glutChangeToSubMenu (entry int)
341 (define-glut-procedure
342 (glutRemoveMenuItem (entry int) -> void)
345 (define-glut-procedure
346 (glutAttachMenu (button int) -> void)
349 (define-glut-procedure
350 (glutDetachMenu (button int) -> void)
355 ;;; 7 Callback Registration
358 (define-glut-procedure
359 (glutDisplayFunc (func void-*) -> void)
362 (define-glut-procedure
363 (glutOverlayDisplayFunc (func void-*) -> void)
366 (define-glut-procedure
367 (glutReshapeFunc (func void-*) -> void)
370 (define-glut-procedure
371 (glutKeyboardFunc (func void-*) -> void)
374 (define-glut-procedure
375 (glutMouseFunc (func void-*) -> void)
378 (define-glut-procedure
379 (glutMotionFunc (func void-*) -> void)
382 (define-glut-procedure
383 (glutPassiveMotionFunc (func void-*) -> void)
386 (define-glut-procedure
387 (glutVisibilityFunc (func void-*) -> void)
390 (define-glut-procedure
391 (glutEntryFunc (func void-*) -> void)
394 (define-glut-procedure
395 (glutSpecialFunc (func void-*) -> void)
398 (define-glut-procedure
399 (glutSpaceballMotionFunc (func void-*) -> void)
402 (define-glut-procedure
403 (glutSpaceballRotateFunc (func void-*) -> void)
406 (define-glut-procedure
407 (glutSpaceballButtonFunc (func void-*) -> void)
410 (define-glut-procedure
411 (glutButtonBoxFunc (func void-*) -> void)
414 (define-glut-procedure
415 (glutDialsFunc (func void-*) -> void)
418 (define-glut-procedure
419 (glutTabletMotionFunc (func void-*) -> void)
422 (define-glut-procedure
423 (glutTabletButtonFunc (func void-*) -> void)
426 (define-glut-procedure
427 (glutMenuStatusFunc (func void-*) -> void)
430 (define-glut-procedure
431 (glutMenuStateFunc (func void-*) -> void)
434 (define-glut-procedure
435 (glutIdleFunc (func void-*) -> void)
438 (define-glut-procedure
439 (glutTimerFunc (msecs unsigned-int)
448 ;;; 8 Color Index Colormap Management
451 (define-glut-procedure
452 (glutSetColor (cell int)
460 (define-glut-procedure
461 (glutGetColor (cell int) (component int) -> GLfloat)
464 (define-glut-procedure
465 (glutCopyColormap (win int) -> void)
469 ;;; 9 State Retrieval
472 (define-glut-procedure
473 (glutGet (state GLenum) -> int)
476 (define-glut-procedure
477 (glutLayerGet (info GLenum) -> int)
480 (define-glut-procedure
481 (glutDeviceGet (info GLenum) -> int)
484 (define-glut-procedure
485 (glutGetModifiers -> int)
488 (define-glut-procedure
489 (glutExtensionSupported (extension char-*) -> int)
493 ;;; 10 Font Rendering
496 (define-glut-procedure
497 (glutBitmapCharacter (font void-*) (character int) -> void)
500 (define-glut-procedure
501 (glutBitmapWidth (font void-*) (character int) -> int)
504 (define-glut-procedure
505 (glutStrokeCharacter (font void-*) (character int) -> void)
508 (define-glut-procedure
509 (glutStrokeWidth (font void-*) (character int) -> void)
514 ;;; 11 Geometric Object Rendering
517 (define-glut-procedure
518 (glutSolidSphere (radius GLdouble)
525 (define-glut-procedure
526 (glutWireSphere (radius GLdouble)
533 (define-glut-procedure
534 (glutSolidCube (size GLdouble) -> void)
537 (define-glut-procedure
538 (glutWireCube (size GLdouble) -> void)
541 (define-glut-procedure
542 (glutSolidCone (base GLdouble)
550 (define-glut-procedure
551 (glutWireCone (base GLdouble)
559 (define-glut-procedure
560 (glutSolidTorus (inner-radius GLdouble)
561 (outer-radius GLdouble)
568 (define-glut-procedure
569 (glutWireTorus (inner-radius GLdouble)
570 (outer-radius GLdouble)
577 (define-glut-procedure
578 (glutSolidDodecahedron -> void)
581 (define-glut-procedure
582 (glutWireDodecahedron -> void)
585 (define-glut-procedure
586 (glutSolidOctahedron -> void)
589 (define-glut-procedure
590 (glutWireOctahedron -> void)
593 (define-glut-procedure
594 (glutSolidTetrahedron -> void)
597 (define-glut-procedure
598 (glutWireTetrahedron -> void)
601 (define-glut-procedure
602 (glutSolidIcosahedron -> void)
605 (define-glut-procedure
606 (glutWireIcosahedron -> void)
609 (define-glut-procedure
610 (glutSolidTeapot (size GLdouble) -> void)
613 (define-glut-procedure
614 (glutWireTeapot (size GLdouble) -> void)