Another example!
[cl-glfw.git] / examples / triangle.lisp
blob8c6cc2374435208d9b04677dcad51259c8ad4f69
1 (require '#:asdf)
2 (asdf:oos 'asdf:load-op '#:cl-glfw)
4 (glfw:init)
6 (when (eql gl:+true+ (glfw:open-window 640 480 0 0 0 0 0 0 glfw:+window+))
7 (glfw:enable glfw:+sticky-keys+)
8 (glfw:swap-interval 0)
10 (do ((running t (and (zerop (glfw:get-key glfw:+key-esc+))
11 (not (zerop (glfw:get-window-param glfw:+opened+)))))
12 (frames 0)
13 (t0 (glfw:get-time))
14 (t1 (glfw:get-time) (glfw:get-time)))
15 ((not running))
16 (when (or (> (- t1 t0) 1.0)
17 (= frames 0))
18 (glfw:set-window-title (format nil "Spinning Triangle (~,1f FPS)" (/ frames (- t1 t0))))
19 (setf frames 0)
20 (setf t0 t1))
21 (incf frames)
24 (destructuring-bind (width height) (glfw:get-window-size)
25 (setf height (max height 1))
26 (gl:viewport 0 0 width height)
28 (gl:clear-color 0.0 0.0 0.0 0.0)
29 (gl:clear gl:+color-buffer-bit+)
31 (gl:matrix-mode gl:+projection+)
32 (gl:load-identity)
33 (glu:perspective 65.0d0 (coerce (/ width height) 'double-float) 1.0d0 100.0d0)
34 (gl:matrix-mode gl:+modelview+)
35 (gl:load-identity)
36 (glu:look-at 0.0d0 1.0d0 0.0d0
37 0.0d0 20.0d0 0.0d0
38 0.0d0 0.0d0 1.0d0)
40 (gl:translate-f 0.0 14.0 0.0)
43 (destructuring-bind (x y) (glfw:get-mouse-pos)
44 (declare (ignore y))
45 (gl:rotate-f (coerce (+ (* x 0.3)
46 (* t1 100.0))
47 'single-float)
48 0.0 0.0 1.0))
50 (gl:begin gl:+triangles+)
51 (gl:color-3f 1.0 0.0 0.0) (gl:vertex-3f -5.0 0.0 -4.0)
52 (gl:color-3f 0.0 1.0 0.0) (gl:vertex-3f 5.0 0.0 -4.0)
53 (gl:color-3f 0.0 0.0 1.0) (gl:vertex-3f 0.0 0.0 6.0)
54 (gl:end)
55 (glfw:swap-buffers))))
57 (glfw:terminate)