;; this file: ;; https://dataswamp.org/~incal/common-lisp/2d-demo/2d-demo.lisp ;; ;; compile: ;; CL-USER> (asdf:clear-configuration) ;; CL-USER> (asdf:load-system "2d-demo") (require :rect) (require :sdl2) (defun clear (rend &optional (r 0) (g 0) (b 0) (a 255)) (sdl2:set-render-draw-color rend r g b a) (sdl2:render-clear rend) ) (defun delay (&optional (plen 33)) (when (< 0 plen) (sdl2:delay plen) )) (defun 2d-demo () (sdl2:with-init (:everything) (sdl2:with-window (win :title "SBCL/SDL2 demo" :flags '(:shown)) (sdl2:with-renderer (rend win :flags '(:accelerated)) (let ((draw t)) (sdl2:with-event-loop (:method :poll) (:keydown (:keysym ks) (let ((scv (sdl2:scancode-value ks)) (symv (sdl2:sym-value ks)) (modv (sdl2:mod-value ks)) ) (cond ((sdl2:scancode= scv :scancode-p) ;; [P] draw (setf draw (not draw))) ((sdl2:scancode= scv :scancode-q) ;; [Q] quit (sdl2:push-event :quit)) ) (format t "key: ~a ~a ~a~%" scv symv modv) )) (:idle () (when draw (clear rend) (draw-rect rend 100 100 200 200 0 255 0) (tile rend 1 1) (sdl2:render-present rend) ) (delay) ) (:quit () t) )))))) (provide :2d-demo)