Write SDL2 rendering functions

This commit is contained in:
Camden Dixie O'Brien 2025-05-29 01:14:30 +01:00
parent 08f3ed8411
commit a3cc49fae5

View File

@ -86,3 +86,39 @@
(sdl2:destroy-renderer renderer)
(sdl2:destroy-window window)
(sdl2:quit)))
(define-transform project-to-screen (screen-height)
:x-transform (round x)
:y-transform (round (- screen-height y)))
(defmethod display-frame ((ctx graphics-context) drawing)
(with-slots (renderer width height) ctx
(sdl2:set-render-draw-color renderer 255 255 255 255)
(sdl2:render-clear renderer)
(sdl2:set-render-draw-color renderer 0 0 0 255)
(draw renderer
(project-to-screen height
(translate (/ width 2) (/ height 2) drawing)))
(sdl2:render-present renderer)))
(defun draw (renderer drawing)
(defun draw-line (line)
(let ((points (line-points line)))
(sdl2:render-draw-line renderer
(aref points 0) (aref points 1)
(aref points 2) (aref points 3))))
(defun draw-polygon (polygon)
(let* ((points (polygon-points polygon))
(point-count (/ (length points) 2)))
(dotimes (i point-count)
(let* ((start (* i 2))
(end (if (= i (1- point-count)) 0 (+ start 2))))
(sdl2:render-draw-line renderer
(aref points start)
(aref points (1+ start))
(aref points end)
(aref points (1+ end)))))))
(dolist (primitive drawing)
(typecase primitive
(line (draw-line primitive))
(polygon (draw-polygon primitive)))))