Revisited all examples and updated.
[cl-glfw.git] / examples / mipmaps.lisp
blob5edf4a377af23ee49351bde89a633bd2c606a98b
1 (require '#:asdf)
2 (asdf:oos 'asdf:load-op '#:cl-glfw)
4 (let ((frames 0)
5 t0
6 t1)
7 (glfw:do-window ("Spinning Triangle" 640 480)
8 ((glfw:enable glfw:+sticky-keys+)
9 (glfw:swap-interval 0)
11 (unless (glfw:load-texture-2d (namestring (merge-pathnames "mipmaps.tga" (or *load-pathname* #P"examples/")))
12 glfw:+build-mipmaps-bit+)
13 (error "Unable to load texture!"))
15 (gl:tex-parameter-i gl:+texture-2d+ gl:+texture-min-filter+ gl:+linear-mipmap-linear+)
16 (gl:tex-parameter-i gl:+texture-2d+ gl:+texture-mag-filter+ gl:+linear+)
18 (gl:enable gl:+texture-2d+)
19 (setf t1 (glfw:get-time)
20 t0 t1))
22 (unless (zerop (glfw:get-key glfw:+key-esc+))
23 (return-from glfw:do-window))
25 (setf t1 (glfw:get-time))
27 (when (or (> (- t1 t0) 1.0)
28 (zerop frames))
29 (glfw:set-window-title (format nil "Spinning Triangle (~,1f FPS)" (/ frames (- t1 t0))))
30 (setf frames 0)
31 (setf t0 t1))
33 (incf frames)
35 (gl:clear-color 0.0 0.0 0.0 0.0)
36 (gl:clear gl:+color-buffer-bit+)
38 (destructuring-bind (width height) (glfw:get-window-size)
39 (setf height (max height 1))
40 (gl:viewport 0 0 width height)
42 (gl:with-setup-projection
43 (glu:perspective 65.0d0 (coerce (/ width height) 'double-float) 1.0d0 50.0d0))
44 (gl:load-identity)
45 (glu:look-at 0.0d0 3.0d0 -20.0d0
46 0.0d0 -4.0d0 -11.0d0
47 0.0d0 1.0d0 0.0d0))
50 (destructuring-bind (x y) (glfw:get-mouse-pos)
51 (declare (ignore y))
52 (gl:rotate-f (+ (* x 0.05)
53 (* t1 5.0))
54 0 1 0))
56 (gl:with-begin gl:+quads+
57 (gl:tex-coord-2f -20.0 20.0) (gl:vertex-3f -50.0 0.0 -50.0)
58 (gl:tex-coord-2f 20.0 20.0) (gl:vertex-3f 50.0 0.0 -50.0)
59 (gl:tex-coord-2f 20.0 -20.0) (gl:vertex-3f 50.0 0.0 50.0)
60 (gl:tex-coord-2f -20.0 -20.0) (gl:vertex-3f -50.0 0.0 50.0))))