-
Notifications
You must be signed in to change notification settings - Fork 59
/
Copy pathmain.lisp
59 lines (53 loc) · 2.34 KB
/
main.lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
;;; -*- Mode: Lisp; indent-tabs-mode: nil -*-
;;;
;;; main.lisp --- GLUT Event Processing API.
;;;
;;; Copyright (c) 2006, Luis Oliveira <[email protected]>
;;; All rights reserved.
;;;
;;; Redistribution and use in source and binary forms, with or without
;;; modification, are permitted provided that the following conditions
;;; are met:
;;;
;;; o Redistributions of source code must retain the above copyright
;;; notice, this list of conditions and the following disclaimer.
;;; o Redistributions in binary form must reproduce the above copyright
;;; notice, this list of conditions and the following disclaimer in the
;;; documentation and/or other materials provided with the distribution.
;;; o Neither the name of the author nor the names of the contributors may
;;; be used to endorse or promote products derived from this software
;;; without specific prior written permission.
;;;
;;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
;;; "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
;;; LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
;;; A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
;;; OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
;;; SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
;;; LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
;;; DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
;;; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
;;; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
;;; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
(in-package #:cl-glut)
(defcfun ("glutMainLoop" %glutMainLoop) :void)
#+darwin
(defcfun ("glutCheckLoop" check-loop) :void)
#-darwin
(defun main-loop ()
(without-fp-traps
(%glutMainLoop))
(init))
#+darwin
(let ((darwin-run-main-loop-p t))
(defun main-loop ()
(flet ((%loop ()
(without-fp-traps
(loop while darwin-run-main-loop-p do (check-loop)))
(init)
(setf darwin-run-main-loop-p t)))
(%loop)))
(defun leave-main-loop ()
(setf darwin-run-main-loop-p nil)))
#-darwin (defcfun ("glutMainLoopEvent" main-loop-event) :void)
#-darwin (defcfun ("glutLeaveMainLoop" leave-main-loop) :void)