tried converting cube to sdl... and tried adding fps counter to 3bb

This commit is contained in:
Dan Ballard 2011-06-30 09:08:12 -07:00
parent 5b0900ca93
commit 763300daf0
2 changed files with 35 additions and 4 deletions

View File

@ -36,6 +36,9 @@
(rotate-vertex (second tri) time) (rotate-vertex (second tri) time)
(rotate-vertex (third tri) time))) (rotate-vertex (third tri) time)))
(defparameter *last-time* nil)
(defparameter *num-frames* 0)
(defun draw () (defun draw ()
"draw a frame" "draw a frame"
(let* ((time (- (wall-time) *start-time*)) (let* ((time (- (wall-time) *start-time*))
@ -61,7 +64,18 @@
;; finish the frame ;; finish the frame
(gl:flush) (gl:flush)
(sdl:update-display))) (sdl:update-display)
(incf *num-frames*)
;(if (not (eql (floor *last-time*) time))
(let* ((short-interval (- time (if *last-time* *last-time* time)))
(long-interval (- time *start-time*))
(short-fps (if (zerop short-interval) 0 (/ 1 short-interval)))
(long-fps (if (zerop long-interval) 0 (/ *num-frames* long-interval))))
(format t "FPS since last:~a->~a since start:~a/~a->~a ~%" short-interval short-fps *num-frames* long-interval long-fps))))
(setf *last-time* (wall-time)))

View File

@ -1,3 +1,9 @@
(defmacro restartable (&body body)
`(restart-case
(progn ,@body)
(continue () :report "Continue")))
(defparameter *light-diffuse* (vector 1.0 0.0 0.0 1.0)) ;; red diffuse light (defparameter *light-diffuse* (vector 1.0 0.0 0.0 1.0)) ;; red diffuse light
(defparameter *light-position* (vector 1.0 1.0 1.0 0.0)) ;; infinite light position (defparameter *light-position* (vector 1.0 1.0 1.0 0.0)) ;; infinite light position
@ -27,10 +33,13 @@
(dotimes (x 4) (dotimes (x 4)
(gl:vertex (3delt face x *v* 0) (3delt face x *v* 1) (3delt face x *v* 1))))))) (gl:vertex (3delt face x *v* 0) (3delt face x *v* 1) (3delt face x *v* 1)))))))
(cffi:defcallback display :void () ;(cffi:defcallback display :void ()
(defun display ()
(gl:clear :color-buffer-bit :depth-buffer-bit) (gl:clear :color-buffer-bit :depth-buffer-bit)
(draw-box) (draw-box)
;;glut:swap-buffers ;;glut:swap-buffers
(gl:flush)
(sdl:update-display)
) )
(defun init () (defun init ()
@ -55,7 +64,7 @@
(gl:rotate 60 1.0 0.0 0.0) (gl:rotate 60 1.0 0.0 0.0)
(gl:rotate -20 0.0 0.0 1.0)) (gl:rotate -20 0.0 0.0 1.0))
(defun cube-main () (defun cube-main-glut ()
(glut:init "Cube") (glut:init "Cube")
(glut:init-display-mode :double :rgb :depth) (glut:init-display-mode :double :rgb :depth)
(glut:create-window "red 3D lighted cube") (glut:create-window "red 3D lighted cube")
@ -63,4 +72,12 @@
(init) (init)
(glut:main-loop) (glut:main-loop)
) )
(defun cube-main-sdl ()
(sdl:with-init ()
(sdl:window 320 240 :flags sdl:sdl-opengl)
(setf cl-opengl-bindings:*gl-get-proc-address* #'sdl-cffi::sdl-gl-get-proc-address)
(sdl:with-events ()
(:quit-event () t)
(:idle ()
(restartable (display))))))