From 2808a8974e2847211522c79f90782d5e66291624 Mon Sep 17 00:00:00 2001 From: TatriX Date: Thu, 29 Jul 2021 20:40:41 +0200 Subject: [PATCH] Refactor tutorial 08 --- 08-geometry-rendering.lisp | 60 ++++++++++++++++++++++++++++++++++++++ 08/tutorial-08.lisp | 52 --------------------------------- sdl2-tutorial.asd | 2 +- 3 files changed, 61 insertions(+), 53 deletions(-) create mode 100644 08-geometry-rendering.lisp delete mode 100644 08/tutorial-08.lisp diff --git a/08-geometry-rendering.lisp b/08-geometry-rendering.lisp new file mode 100644 index 0000000..976b6bc --- /dev/null +++ b/08-geometry-rendering.lisp @@ -0,0 +1,60 @@ +(defpackage #:sdl2-tutorial-08-geometry-rendering + (:use :cl) + (:export :run)) + +(in-package :sdl2-tutorial-08-geometry-rendering) + +(defparameter *screen-width* 640) +(defparameter *screen-height* 480) + +(defmacro with-window-renderer ((window renderer) &body body) + `(sdl2:with-init (:video) + (sdl2:with-window (,window + :title "SDL2 Tutorial 08" + :w *screen-width* + :h *screen-height* + :flags '(:shown)) + (sdl2:with-renderer (,renderer ,window :index -1 :flags '(:accelerated)) + ,@body)))) + +(defun run () + (with-window-renderer (window renderer) + (sdl2-image:init '(:png)) + (sdl2:with-event-loop (:method :poll) + (:quit () t) + (:idle () + ;; Clear screen + (sdl2:set-render-draw-color renderer #xFF #xFF #xFF #xFF) + (sdl2:render-clear renderer) + + ;; Render red filled quad + (sdl2:with-rects ((fill-rect (/ *screen-width* 4) + (/ *screen-height* 4) + (/ *screen-width* 2) + (/ *screen-height* 2))) + (sdl2:set-render-draw-color renderer #xFF #x00 #x00 #xFF) + (sdl2:render-fill-rect renderer fill-rect)) + + ;; Render green outlined quad + (sdl2:with-rects ((outline-rect (round (/ *screen-width* 6)) + (round (/ *screen-height* 8)) + (round (* 2/3 *screen-width*)) + (round (* 2/3 *screen-height*)))) + (sdl2:set-render-draw-color renderer #x00 #xFF #x00 #xFF) + (sdl2:render-draw-rect renderer outline-rect)) + + ;; Draw blue horizontal line + (sdl2:set-render-draw-color renderer #x00 #x00 #xFF #xFF) + (sdl2:render-draw-line renderer + 0 + (/ *screen-height* 2) + *screen-width* + (/ *screen-height* 2)) + + ;; Draw vertical line of yellow dots + (sdl2:set-render-draw-color renderer #xFF #xFF #x00 #xFF) + (loop for i from 0 below *screen-height* by 4 + do (sdl2::render-draw-point renderer (/ *screen-width* 2) i)) + + ;; Update screen + (sdl2:render-present renderer))))) diff --git a/08/tutorial-08.lisp b/08/tutorial-08.lisp deleted file mode 100644 index 47e4596..0000000 --- a/08/tutorial-08.lisp +++ /dev/null @@ -1,52 +0,0 @@ -(defpackage #:sdl2-tutorial-8 - (:use :common-lisp) - (:export :main)) - -(in-package :sdl2-tutorial-8) - -(defparameter *screen-width* 640) -(defparameter *screen-height* 480) - -(defmacro with-window-renderer ((window renderer) &body body) - `(sdl2:with-init (:video) - (sdl2:with-window (,window - :title "SDL2 Tutorial" - :w *screen-width* - :h *screen-height* - :flags '(:shown)) - (sdl2:with-renderer (,renderer ,window :index -1 :flags '(:accelerated)) - ,@body)))) - -(defun load-texture (renderer filename) - (sdl2:create-texture-from-surface renderer (sdl2-image:load-image filename))) - -(defun main() - (with-window-renderer (window renderer) - (sdl2-image:init '(:png)) - (sdl2:with-event-loop (:method :poll) - (:quit () t) - (:idle () - (sdl2:set-render-draw-color renderer #xFF #xFF #xFF #xFF) - (sdl2:render-clear renderer) - (sdl2:set-render-draw-color renderer #xFF #x00 #x00 #xFF) - (sdl2:render-fill-rect renderer - (sdl2:make-rect (/ *screen-width* 4) - (/ *screen-height* 4) - (/ *screen-width* 2) - (/ *screen-height* 2))) - (sdl2:set-render-draw-color renderer #x00 #xFF #x00 #xFF) - (sdl2:render-draw-rect renderer - (sdl2:make-rect (round (/ *screen-width* 6)) - (round (/ *screen-height* 8)) - (round (* 2/3 *screen-width*)) - (round (* 2/3 *screen-height*)))) - (sdl2:set-render-draw-color renderer #x00 #x00 #xFF #xFF) - (sdl2:render-draw-line renderer - 0 - (/ *screen-height* 2) - *screen-width* - (/ *screen-height* 2)) - (sdl2:set-render-draw-color renderer #xFF #xFF #x00 #xFF) - (loop for i from 0 below *screen-height* by 4 - do (sdl2::render-draw-point renderer (/ *screen-width* 2) i)) - (sdl2:render-present renderer))))) diff --git a/sdl2-tutorial.asd b/sdl2-tutorial.asd index f89bcd8..58d54c8 100644 --- a/sdl2-tutorial.asd +++ b/sdl2-tutorial.asd @@ -10,7 +10,7 @@ (:file "05-optimized-surface-loading-and-soft-stretching") (:file "06-extension-libraries-and-loading-other-image-formats.lisp") (:file "07-texture-loading-and-rendering.lisp") - (:file "08/tutorial-08") + (:file "08-geometry-rendering") (:file "09/tutorial-09") (:file "10/tutorial-10") (:file "11/tutorial-11")