Update of /project/pal/cvsroot/pal In directory clnet:/tmp/cvs-serv8365
Modified Files: pal-macros.lisp pal.lisp Log Message: Eliminated some of the unnecessary gl-begins.
--- /project/pal/cvsroot/pal/pal-macros.lisp 2007/07/24 12:55:06 1.10 +++ /project/pal/cvsroot/pal/pal-macros.lisp 2007/07/29 19:11:44 1.11 @@ -79,6 +79,7 @@
(defmacro with-blend ((&key (mode t) color) &body body) `(progn + (close-quads) (pal-ffi:gl-push-attrib (logior pal-ffi:+gl-color-buffer-bit+ pal-ffi:+gl-current-bit+ pal-ffi:+gl-enable-bit+)) ,(unless (eq mode t) `(set-blend-mode ,mode)) @@ -86,6 +87,7 @@ `(set-blend-color (first ,color) (second ,color) (third ,color) (fourth ,color))) (prog1 (progn ,@body) + (close-quads) (pal-ffi:gl-pop-attrib))))
(defmacro with-clipping ((x y width height) &body body) @@ -97,6 +99,7 @@
(defmacro with-transformation ((&key pos angle scale) &body body) `(progn + (close-quads) (pal-ffi:gl-push-matrix) ,(when pos `(translate ,pos)) @@ -108,16 +111,23 @@ (scale ,s ,s)))) (prog1 (progn ,@body) + (close-quads) (pal-ffi:gl-pop-matrix))))
(defmacro with-gl (mode &body body) - `(progn - (pal-ffi:gl-begin ,mode) - ,@body - (pal-ffi:gl-end))) + (if (eq mode 'pal-ffi:+gl-quads+) + `(progn + (open-quads) + ,@body) + `(progn + (close-quads) + (pal-ffi:gl-begin ,mode) + ,@body + (pal-ffi:gl-end))))
(defmacro with-line-settings (smoothp size r g b a &body body) `(progn + (close-quads) (pal-ffi:gl-push-attrib (logior pal-ffi:+gl-current-bit+ pal-ffi:+gl-line-bit+ pal-ffi:+gl-enable-bit+)) (pal-ffi:gl-disable pal-ffi:+gl-texture-2d+) (set-blend-color ,r ,g ,b ,a) --- /project/pal/cvsroot/pal/pal.lisp 2007/07/27 22:48:40 1.22 +++ /project/pal/cvsroot/pal/pal.lisp 2007/07/29 19:11:44 1.23 @@ -3,7 +3,6 @@ ;; calculate max-texture-size ;; fix the fps ;; clean up the do-event -;; open quads and other optimisations
(declaim (optimize (speed 3) @@ -33,6 +32,8 @@ (defvar *mouse-y* 0) (defvar *current-image* nil) (defvar *max-texture-size* 0) +(defvar *quads-open* nil) +
(declaim (type list *messages*) (type list *clip-stack*) @@ -47,6 +48,7 @@ (type fixnum *fps*) (type u11 *max-fps*) (type u11 *delay*) + (type boolean *quads-open*) (type (or boolean image) *cursor*) (type (or boolean image) *current-image*))
@@ -79,6 +81,7 @@ *max-fps* (truncate 1000 fps) *ticks* (pal-ffi:get-tick) *clip-stack* nil + *quads-open* nil *fps* 1 *delay* 0 *new-fps* 0 @@ -220,10 +223,10 @@ (draw-text m (v 0 (incf y fh))))))
(defun update-screen () + (close-quads) (let ((e (pal-ffi:gl-get-error))) (unless (= e 0) (error "GL error ~a" e))) - (setf *new-fps* (max 1 (the fixnum (- (pal-ffi:get-tick) *ticks*)))) (setf *fps* (truncate (+ *fps* *new-fps*) 2)) (if (> *delay* 1) @@ -239,7 +242,6 @@ (with-default-settings (draw-image *cursor* (v- (get-mouse-pos) *cursor-offset*)) (draw-messages))) - (pal-ffi:gl-swap-buffers))
(declaim (inline get-screen-width)) @@ -257,6 +259,7 @@ (declaim (inline clear-screen)) (defunct clear-screen (r g b) (u8 r u8 g u8 b) + (close-quads) (pal-ffi:gl-clear-color (/ r 255f0) (/ g 255f0) (/ b 255f0) @@ -286,11 +289,13 @@
(defunct push-clip (x y width height) (u16 x u16 y u16 width u16 height) + (close-quads) (pal-ffi:gl-scissor x y width height) (pal-ffi:gl-enable pal-ffi:+gl-scissor-test+) (push (vector x y width height) *clip-stack*))
(defun pop-clip () + (close-quads) (pop *clip-stack*) (if *clip-stack* (let ((r (first *clip-stack*))) @@ -302,9 +307,23 @@
;; State
+ +(declaim (inline open-quads)) +(defun open-quads () + (unless *quads-open* + (pal-ffi:gl-begin pal-ffi:+gl-quads+) + (setf *quads-open* t))) + +(declaim (inline close-quads)) +(defun close-quads () + (when *quads-open* + (pal-ffi:gl-end) + (setf *quads-open* nil))) + (declaim (inline set-blend-mode)) (defunct set-blend-mode (mode) (symbol mode) + (close-quads) (case mode ((nil) (pal-ffi:gl-disable pal-ffi:+gl-blend+)) (:blend (pal-ffi:gl-enable pal-ffi:+gl-blend+) @@ -315,20 +334,24 @@ (declaim (inline rotate)) (defunct rotate (angle) (single-float angle) + (close-quads) (pal-ffi:gl-rotatef angle 0f0 0f0 1f0))
(declaim (inline scale)) (defunct scale (x y) (single-float x single-float y) + (close-quads) (pal-ffi:gl-scalef x y 1f0))
(declaim (inline translate)) (defunct translate (vec) (vec vec) + (close-quads) (pal-ffi:gl-translatef (vx vec) (vy vec) 0f0))
(declaim (inline reset-blend-mode)) (defun reset-blend-mode () + (close-quads) (set-blend-mode :blend) (set-blend-color 255 255 255 255))
@@ -341,12 +364,12 @@ (defunct set-image (image) (image image) (unless (eq image *current-image*) + (close-quads) (setf *current-image* image) (pal-ffi:gl-bind-texture pal-ffi:+gl-texture-2d+ (pal-ffi::image-texture image))))
- ;; Images
(defun surface-get-pixel (image x y) @@ -385,6 +408,7 @@ (fourth pixel))))))
(defun image-from-fn (width height smoothp fn) + (close-quads) (let* ((mode pal-ffi:+gl-rgb+) (width (min 1024 width)) (height (min 1024 height)) @@ -452,6 +476,7 @@
(defunct screen-to-array (pos width height) (vec pos u16 width u16 height) + (close-quads) (let* ((x (truncate (vx pos))) (y (truncate (vy pos))) (rowsize (* width 4)) @@ -480,7 +505,6 @@ 3)))))) array)))
- (defunct draw-image (image pos &key angle scale valign halign) (image image vec pos (or boolean number) angle (or boolean number) scale symbol halign symbol valign) (set-image image) @@ -514,17 +538,19 @@ (pal-ffi:gl-vertex2f (+ x width) (+ y height)) (pal-ffi:gl-tex-coord2f 0f0 ty2) (pal-ffi:gl-vertex2f x (+ y height))))) - (let ((x (vx pos)) - (y (vy pos))) + (let* ((x (vx pos)) + (y (vy pos)) + (width (+ x width)) + (height (+ y height))) (with-gl pal-ffi:+gl-quads+ (pal-ffi:gl-tex-coord2f 0f0 0f0) (pal-ffi:gl-vertex2f x y) (pal-ffi:gl-tex-coord2f tx2 0f0) - (pal-ffi:gl-vertex2f (+ x width) y) + (pal-ffi:gl-vertex2f width y) (pal-ffi:gl-tex-coord2f tx2 ty2) - (pal-ffi:gl-vertex2f (+ x width) (+ y height)) + (pal-ffi:gl-vertex2f width height) (pal-ffi:gl-tex-coord2f 0f0 ty2) - (pal-ffi:gl-vertex2f x (+ y height))))))) + (pal-ffi:gl-vertex2f x height))))))
(defunct draw-image* (image from-pos to-pos width height) @@ -577,6 +603,7 @@ (declaim (inline draw-point)) (defunct draw-point (pos r g b a &key (size 1f0) smoothp) (vec pos u8 r u8 g u8 b u8 a single-float size boolean smoothp) + (close-quads) (pal-ffi:gl-push-attrib (logior pal-ffi:+gl-current-bit+ pal-ffi:+gl-enable-bit+)) (pal-ffi:gl-disable pal-ffi:+gl-texture-2d+) (if smoothp @@ -607,6 +634,7 @@ (pal-ffi:gl-vertex2f (+ (vx pos) width) (+ (vy pos) height)) (pal-ffi:gl-vertex2f (vx pos) (+ (vy pos) height))))) (t + (close-quads) (pal-ffi:gl-push-attrib (logior pal-ffi:+gl-current-bit+ pal-ffi:+gl-enable-bit+)) (pal-ffi:gl-disable pal-ffi:+gl-texture-2d+) (pal-ffi:gl-color4ub r g b a) @@ -617,6 +645,7 @@ (list points u8 r u8 g u8 b u8 a (or image boolean) fill single-float size) (cond ((image-p fill) + (close-quads) (pal-ffi:gl-push-attrib (logior pal-ffi:+gl-current-bit+)) (set-image fill) (pal-ffi:gl-color4ub r g b a) @@ -643,6 +672,7 @@ (dolist (p points) (pal-ffi:gl-vertex2f (vx p) (vy p)))))) (t + (close-quads) (pal-ffi:gl-push-attrib (logior pal-ffi:+gl-current-bit+ pal-ffi:+gl-enable-bit+)) (pal-ffi:gl-color4ub r g b a) (pal-ffi:gl-disable pal-ffi:+gl-texture-2d+) @@ -653,6 +683,7 @@
(defunct draw-polygon* (points &key image tex-coords colors) (list points list tex-coords list colors (or boolean image) image) + (close-quads) (pal-ffi:gl-push-attrib (logior pal-ffi:+gl-current-bit+ pal-ffi:+gl-enable-bit+)) (cond ((and image tex-coords)