Automatic conversion of gl:booleans, gl:floats and gl:doubles.
[cl-glfw.git] / examples / mipmaps.lisp
blobab91704f6bda63a8594b409df1bfff53078131f0
1 (require '#:asdf)
2 (asdf:oos 'asdf:load-op '#:cl-glfw)
5 (defun main ()
6 (unless (glfw:open-window 640 480 0 0 0 0 0 0 glfw:+window+)
7 (return-from main))
9 (glfw:enable glfw:+sticky-keys+)
10 (glfw:swap-interval 0)
12 (unless (glfw:load-texture-2d (namestring (merge-pathnames "mipmaps.tga" (or *load-pathname* #P"examples/")))
13 glfw:+build-mipmaps-bit+)
14 (return-from main))
16 (gl:tex-parameter-i gl:+texture-2d+ gl:+texture-min-filter+ gl:+linear-mipmap-linear+)
17 (gl:tex-parameter-i gl:+texture-2d+ gl:+texture-mag-filter+ gl:+linear+)
19 (gl:enable gl:+texture-2d+)
21 (do ((running t (and (zerop (glfw:get-key glfw:+key-esc+))
22 (not (zerop (glfw:get-window-param glfw:+opened+)))))
23 (frames 0)
24 (t0 (glfw:get-time))
25 (t1 (glfw:get-time) (glfw:get-time)))
26 ((not running))
28 (when (or (> (- t1 t0) 1.0)
29 (= frames 0))
30 (glfw:set-window-title (format nil "Spinning Triangle (~,1f FPS)" (/ frames (- t1 t0))))
31 (setf frames 0)
32 (setf t0 t1))
34 (incf frames)
36 (gl:clear-color 0.0 0.0 0.0 0.0)
37 (gl:clear gl:+color-buffer-bit+)
39 (destructuring-bind (width height) (glfw:get-window-size)
40 (setf height (max height 1))
41 (gl:viewport 0 0 width height)
43 (gl:matrix-mode gl:+projection+)
44 (gl:load-identity)
45 (glu:perspective 65.0d0 (coerce (/ width height) 'double-float) 1.0d0 50.0d0)
46 (gl:matrix-mode gl:+modelview+)
47 (gl:load-identity)
48 (glu:look-at 0.0d0 3.0d0 -20.0d0
49 0.0d0 -4.0d0 -11.0d0
50 0.0d0 1.0d0 0.0d0))
52 (destructuring-bind (x y) (glfw:get-mouse-pos)
53 (declare (ignore y))
54 (gl:rotate-f (coerce (+ (* x 0.05)
55 (* t1 5.0))
56 'single-float)
57 0.0 1.0 0.0))
59 (gl:begin gl:+quads+)
60 (gl:tex-coord-2f -20.0 20.0) (gl:vertex-3f -50.0 0.0 -50.0)
61 (gl:tex-coord-2f 20.0 20.0) (gl:vertex-3f 50.0 0.0 -50.0)
62 (gl:tex-coord-2f 20.0 -20.0) (gl:vertex-3f 50.0 0.0 50.0)
63 (gl:tex-coord-2f -20.0 -20.0) (gl:vertex-3f -50.0 0.0 50.0)
64 (gl:end)
65 (glfw:swap-buffers)))
67 (glfw:init)
68 (main)
69 (glfw:terminate)