OSDN Git Service

graphics: sdl2:rects freed after use
[rulp/rulp.git] / graphics / view.lisp
index 4303e4a..49650be 100644 (file)
@@ -46,7 +46,7 @@ DEBUG-INFO can be used to display the content on screen for test and debug purpo
   (sdl2:with-init (:video)
     (with-playground (window *renderer* :title title)
       (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
-                                (font-surface (sdl2-ttf:render-text-solid font *tr-string* 0 0 0 0))
+                                (font-surface (sdl2-ttf:render-utf8-solid font *tr-string* 0 0 0 0))
                                 (font-texture (sdl2:create-texture-from-surface *renderer* font-surface)))
                            (sdl2:free-surface font-surface)
                            font-texture))
@@ -58,8 +58,7 @@ DEBUG-INFO can be used to display the content on screen for test and debug purpo
                                                     2 (width +plane+) (height +plane+))))
         (sdl2:with-event-loop (:method :poll)
           (:quit () t)
-          (:keydown (:keysym keysym)
-                    (declare (ignore keysym))
+          (:keydown ()
                     ;; FIXME: incorporate into input.lisp. check for input every now and then outside keydown
                     (when (sdl2:keyboard-state-p :scancode-up) (setf (cdr *viewpoint-offset*) (+ (cdr *viewpoint-offset*) 10)))
                     (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
                     (when (sdl2:keyboard-state-p :scancode-p) (setf *viewpoint-zoom* (+ *viewpoint-zoom* 0.2))) ; FIXME: find the scancode for the plus sign
                     (when (sdl2:keyboard-state-p :scancode-m) (setf *viewpoint-zoom* (+ *viewpoint-zoom* -0.2)))
                     )
-          (:mousebuttondown (:x x :y y :state state)
+          (:mousebuttondown ()
                             (setf *is-mouse-hold* t)
                             )
           (:mousebuttonup ()
@@ -99,7 +98,6 @@ DEBUG-INFO can be used to display the content on screen for test and debug purpo
                  (multiple-value-bind (x y) (sdl2:mouse-state)
                    (setf *mouse-position* (cons x y)))
                  ;; mouse-holding-event
-                 ;; FIXME: absolutely horrible. to be moved inside input.lisp for better functionalities
                  (when *is-mouse-hold*
                    (loop :for action :in (mouse-actions *mouse-keybinds*)
                          :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
                  (sdl2:render-clear *renderer*)
 
                  ;; local viewpoint
+                 ;; NOTE: generalize
                  (sdl2:set-render-target *renderer* viewpoint-texture)
                  (sdl2:render-clear *renderer*)
                  (render-plane-and-contents *renderer* +plane+)
-                 ;; NOTE: grid-render supports multiple colors for grids
-                 (grid-render *renderer* +plane+ (car *viewpoint-offset*) (cdr *viewpoint-offset*)
-                     (floor (* (width +plane+) *viewpoint-zoom*))
-                     (floor (* (height +plane+) *viewpoint-zoom*)))
-                 (indexes-render *renderer* +plane+ (car *viewpoint-offset*) (cdr *viewpoint-offset*)
-                     (floor (* (width +plane+) *viewpoint-zoom*))
-                     (floor (* (height +plane+) *viewpoint-zoom*)))
+                 (when *is-grid*
+                   (grid-render *renderer* +plane+ (car *viewpoint-offset*) (cdr *viewpoint-offset*)
+                       (floor (* (width +plane+) *viewpoint-zoom*))
+                       (floor (* (height +plane+) *viewpoint-zoom*))))
+                 (when *is-indexes*
+                   (indexes-render *renderer* +plane+ (car *viewpoint-offset*) (cdr *viewpoint-offset*)
+                       (floor (* (width +plane+) *viewpoint-zoom*))
+                       (floor (* (height +plane+) *viewpoint-zoom*))))
+                 (sdl2:set-render-draw-color *renderer* 0 255 0 155)
+                 (sdl2:set-render-draw-color *renderer* 0 0 0 255)
                  (sdl2:set-render-target *renderer* window-texture)
-                 (sdl2:render-copy *renderer* viewpoint-texture
-                                   :source-rect nil
-                                   :dest-rect (sdl2:make-rect (car *viewpoint-offset*)
-                                                              (cdr *viewpoint-offset*)
-                                                              (floor (* (width +plane+) *viewpoint-zoom*)) ; NOTE: hardcoded to +plane+, change to dynamic
-                                                              (floor (* (height +plane+) *viewpoint-zoom*)))
-                                   )
-                 ;; Grid creation
-                 ;; NOTE: grid creation should be done before, so to render on global, but it should be limited with actual viewpoint restrictions
-                 ;; to reduce cycles
-                 ;; (when *is-grid*
-                 ;;   (grid-render *renderer* +plane+))
-                 ;; Indexes creation
-                 ;; (when *is-indexes*
-                 ;;   (indexes-render *renderer* +plane+))
+                 (let ((viewpoint-rectangle (sdl2:make-rect (car *viewpoint-offset*)
+                                                            (cdr *viewpoint-offset*)
+                                                            (floor (* (width +plane+) *viewpoint-zoom*)) ; NOTE: hardcoded +plane+ usage
+                                                            (floor (* (height +plane+) *viewpoint-zoom*)))))
+                   (sdl2:render-copy *renderer* viewpoint-texture
+                                     :source-rect nil
+                                     :dest-rect viewpoint-rectangle)
+                   (sdl2:free-rect viewpoint-rectangle))
+
                  ;; pointer section
                  (when *pointer*
                    (sdl2:set-render-draw-color *renderer* 128 250 33 255)
                    (let ((select-rectangle (screen-destination (nth *pointer* (entities-list +plane+)) +plane+)))
-                     (sdl2:render-draw-rect *renderer* select-rectangle))
+                     (sdl2:render-draw-rect *renderer* select-rectangle)
+                     (sdl2:free-rect select-rectangle))
                    )
                  ;; entries generation
                  ;; (loop :for entry :in (reverse *entries-list*)