Commit MetaInfo

Revision9f21da385b7cdb222f226b9d5d22ef0c75154b24 (tree)
Time2023-01-17 21:57:21
AuthorGiulio De Stasio <giuliodestasio98@gmai...>
CommiterGiulio De Stasio

Log Message

graphics: sdl2:rects freed after use

Change Summary

Incremental Difference

--- a/graphics/render.lisp
+++ b/graphics/render.lisp
@@ -68,6 +68,7 @@ to render locally use sdl2:set-render-target before calling this macro."
6868 :do (when (displayp entity)
6969 (sdl2:render-copy ,renderer (texture entity)
7070 :source-rect (screen-source entity)
71- :dest-rect (screen-destination entity ,plane))))))
71+ :dest-rect (screen-destination entity ,plane))
72+ ))))
7273
7374 ;; NOTE: test if it is necessary to create render-plane-without-contents
--- a/graphics/text-rendering.lisp
+++ b/graphics/text-rendering.lisp
@@ -32,6 +32,10 @@
3232 `(let ((value-indexes (tr-parse-string ,value)))
3333 (loop :for character :in value-indexes
3434 :for character-position :from 0 :to (length value-indexes)
35- :do (sdl2:render-copy ,renderer *tr-texture*
36- :source-rect (sdl2:make-rect (* character 60) 0 60 130)
37- :dest-rect (sdl2:make-rect (+ ,x (* character-position ,width)) ,y ,width ,height)))))
35+ :do (let ((source-rectangle (sdl2:make-rect (* character 60) 0 60 130))
36+ (destination-rectangle (sdl2:make-rect (+ ,x (* character-position ,width)) ,y ,width ,height)))
37+ (sdl2:render-copy ,renderer *tr-texture*
38+ :source-rect source-rectangle
39+ :dest-rect destination-rectangle)
40+ (sdl2:free-rect source-rectangle)
41+ (sdl2:free-rect destination-rectangle)))))
--- a/graphics/view.lisp
+++ b/graphics/view.lisp
@@ -46,7 +46,7 @@ DEBUG-INFO can be used to display the content on screen for test and debug purpo
4646 (sdl2:with-init (:video)
4747 (with-playground (window *renderer* :title title)
4848 (setf *tr-texture* (let* ((font (sdl2-ttf:open-font "media/IBMPlex.ttf" 100)) ;; FIXME: this crashes the program under windows, throws error on linux but works anyway
49- (font-surface (sdl2-ttf:render-text-solid font *tr-string* 0 0 0 0))
49+ (font-surface (sdl2-ttf:render-utf8-solid font *tr-string* 0 0 0 0))
5050 (font-texture (sdl2:create-texture-from-surface *renderer* font-surface)))
5151 (sdl2:free-surface font-surface)
5252 font-texture))
@@ -58,8 +58,7 @@ DEBUG-INFO can be used to display the content on screen for test and debug purpo
5858 2 (width +plane+) (height +plane+))))
5959 (sdl2:with-event-loop (:method :poll)
6060 (:quit () t)
61- (:keydown (:keysym keysym)
62- (declare (ignore keysym))
61+ (:keydown ()
6362 ;; FIXME: incorporate into input.lisp. check for input every now and then outside keydown
6463 (when (sdl2:keyboard-state-p :scancode-up) (setf (cdr *viewpoint-offset*) (+ (cdr *viewpoint-offset*) 10)))
6564 (when (sdl2:keyboard-state-p :scancode-down) (setf (cdr *viewpoint-offset*) (+ (cdr *viewpoint-offset*) -10)))
@@ -68,7 +67,7 @@ DEBUG-INFO can be used to display the content on screen for test and debug purpo
6867 (when (sdl2:keyboard-state-p :scancode-p) (setf *viewpoint-zoom* (+ *viewpoint-zoom* 0.2))) ; FIXME: find the scancode for the plus sign
6968 (when (sdl2:keyboard-state-p :scancode-m) (setf *viewpoint-zoom* (+ *viewpoint-zoom* -0.2)))
7069 )
71- (:mousebuttondown (:x x :y y :state state)
70+ (:mousebuttondown ()
7271 (setf *is-mouse-hold* t)
7372 )
7473 (:mousebuttonup ()
@@ -99,7 +98,6 @@ DEBUG-INFO can be used to display the content on screen for test and debug purpo
9998 (multiple-value-bind (x y) (sdl2:mouse-state)
10099 (setf *mouse-position* (cons x y)))
101100 ;; mouse-holding-event
102- ;; FIXME: absolutely horrible. to be moved inside input.lisp for better functionalities
103101 (when *is-mouse-hold*
104102 (loop :for action :in (mouse-actions *mouse-keybinds*)
105103 :do (when action (eval (car action))) ; FIXME: replace eval with a more safer DSL eval
@@ -113,37 +111,36 @@ DEBUG-INFO can be used to display the content on screen for test and debug purpo
113111 (sdl2:render-clear *renderer*)
114112
115113 ;; local viewpoint
114+ ;; NOTE: generalize
116115 (sdl2:set-render-target *renderer* viewpoint-texture)
117116 (sdl2:render-clear *renderer*)
118117 (render-plane-and-contents *renderer* +plane+)
119- ;; NOTE: grid-render supports multiple colors for grids
120- (grid-render *renderer* +plane+ (car *viewpoint-offset*) (cdr *viewpoint-offset*)
121- (floor (* (width +plane+) *viewpoint-zoom*))
122- (floor (* (height +plane+) *viewpoint-zoom*)))
123- (indexes-render *renderer* +plane+ (car *viewpoint-offset*) (cdr *viewpoint-offset*)
124- (floor (* (width +plane+) *viewpoint-zoom*))
125- (floor (* (height +plane+) *viewpoint-zoom*)))
118+ (when *is-grid*
119+ (grid-render *renderer* +plane+ (car *viewpoint-offset*) (cdr *viewpoint-offset*)
120+ (floor (* (width +plane+) *viewpoint-zoom*))
121+ (floor (* (height +plane+) *viewpoint-zoom*))))
122+ (when *is-indexes*
123+ (indexes-render *renderer* +plane+ (car *viewpoint-offset*) (cdr *viewpoint-offset*)
124+ (floor (* (width +plane+) *viewpoint-zoom*))
125+ (floor (* (height +plane+) *viewpoint-zoom*))))
126+ (sdl2:set-render-draw-color *renderer* 0 255 0 155)
127+ (sdl2:set-render-draw-color *renderer* 0 0 0 255)
126128 (sdl2:set-render-target *renderer* window-texture)
127- (sdl2:render-copy *renderer* viewpoint-texture
128- :source-rect nil
129- :dest-rect (sdl2:make-rect (car *viewpoint-offset*)
130- (cdr *viewpoint-offset*)
131- (floor (* (width +plane+) *viewpoint-zoom*)) ; NOTE: hardcoded to +plane+, change to dynamic
132- (floor (* (height +plane+) *viewpoint-zoom*)))
133- )
134- ;; Grid creation
135- ;; NOTE: grid creation should be done before, so to render on global, but it should be limited with actual viewpoint restrictions
136- ;; to reduce cycles
137- ;; (when *is-grid*
138- ;; (grid-render *renderer* +plane+))
139- ;; Indexes creation
140- ;; (when *is-indexes*
141- ;; (indexes-render *renderer* +plane+))
129+ (let ((viewpoint-rectangle (sdl2:make-rect (car *viewpoint-offset*)
130+ (cdr *viewpoint-offset*)
131+ (floor (* (width +plane+) *viewpoint-zoom*)) ; NOTE: hardcoded +plane+ usage
132+ (floor (* (height +plane+) *viewpoint-zoom*)))))
133+ (sdl2:render-copy *renderer* viewpoint-texture
134+ :source-rect nil
135+ :dest-rect viewpoint-rectangle)
136+ (sdl2:free-rect viewpoint-rectangle))
137+
142138 ;; pointer section
143139 (when *pointer*
144140 (sdl2:set-render-draw-color *renderer* 128 250 33 255)
145141 (let ((select-rectangle (screen-destination (nth *pointer* (entities-list +plane+)) +plane+)))
146- (sdl2:render-draw-rect *renderer* select-rectangle))
142+ (sdl2:render-draw-rect *renderer* select-rectangle)
143+ (sdl2:free-rect select-rectangle))
147144 )
148145 ;; entries generation
149146 ;; (loop :for entry :in (reverse *entries-list*)
--- a/layers/screens.lisp
+++ b/layers/screens.lisp
@@ -59,6 +59,12 @@ where the screen should be displayed"))
5959 (path :accessor image-path
6060 :initarg :image
6161 :initform (merge-pathnames parameters:*rulp-share* "test.png"))
62+ (s-rect :initform nil
63+ :documentation "this value contains the source rectangle to be used, don't
64+interact directly with this but use screen-source instead")
65+ (d-rect :initform nil
66+ :documentation "this value contains the destination rectangle to be used, don't
67+interact directly with this but use screen-destination instead")
6268 ))
6369
6470 ;; Real space is the pixel grid of the screen, a position of (6 . 7) means
@@ -100,9 +106,28 @@ where the screen should be displayed"))
100106 "return the source rectangle, the portion of texture to display (standard all)"
101107 nil)
102108
109+;; FIXME: save and use the make-rect. destroy and create a new one when
110+;; info don't match
111+;; (defmethod screen-destination ((s screen) (p t))
112+;; "Without a plane of reference screens are printed full size offset of x and y
113+;; pixels from the upper left angle of the window"
114+;; (let ((rect (slot-value s 'd-rect)))
115+;; (if (and
116+;; rect
117+;; (equal (x s) (sdl2:rect-x rect))
118+;; (equal (y s) (sdl2:rect-y rect))
119+;; (equal (width s) (sdl2:rect-width rect))
120+;; (equal (height s) (sdl2:rect-height rect)))
121+;; (rect)
122+;; (progn (sdl2:free-rect (slot-value s 'd-rect))
123+;; (sdl2:make-rect (x s) (y s) (width s) (height s)))
124+;; ))
125+;; )
126+
127+;; FIXME: find a way to store rectangles to later use
103128 (defmethod screen-destination ((s screen) (p t))
104- "Without a plane of reference screens are printed full size offset of x and y
105-pixels from the upper left angle of the window"
129+ "without a plane of reference, a screen is just printed full size from the
130+top left of the window"
106131 (sdl2:make-rect (x s) (y s) (width s) (height s))
107132 )
108133
Show on old repository browser