Write SDL2 rendering functions
This commit is contained in:
parent
08f3ed8411
commit
a3cc49fae5
36
drawing.lisp
36
drawing.lisp
@ -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)))))
|
||||
|
Loading…
x
Reference in New Issue
Block a user