Update of /project/pal/cvsroot/pal
In directory clnet:/tmp/cvs-serv13046
Modified Files:
ffi.lisp package.lisp pal-macros.lisp pal.lisp todo.txt
vector.lisp
Log Message:
Minor fixes. Added HANDLE-EVENTS
--- /project/pal/cvsroot/pal/ffi.lisp 2007/07/30 10:38:12 1.16
+++ /project/pal/cvsroot/pal/ffi.lisp 2007/08/15 14:36:21 1.17
@@ -1,5 +1,5 @@
(declaim (optimize (speed 3)
- (safety 0)))
+ (safety 1)))
(in-package :pal-ffi)
@@ -456,42 +456,67 @@
(defgeneric register-resource (resource))
(defgeneric free-resource (resource))
+(defgeneric holdsp (holder resource))
+
+
+
+(defmethod holdsp (holder resource)
+ nil)
+
+(defun heldp (resource)
+ (find-if (lambda (holder) (holdsp holder resource)) *resources*))
(defmethod register-resource (resource)
(assert (resource-p resource))
(push resource *resources*)
resource)
-(defmethod free-resource :before (resource)
- (assert (typep resource 'resource)))
-(defmethod free-resource :after (resource)
- (pal::reset-tags :resource resource)
- (setf *resources* (remove resource *resources*)))
+
+(defmethod free-resource :around (resource)
+ (assert (typep resource 'resource))
+ (when (and (not (heldp resource)) (find resource *resources*))
+ (call-next-method)
+ (pal::reset-tags :resource resource)
+ (setf *resources* (remove resource *resources*))))
+
+
(defmethod free-resource ((resource music))
- (when (music-music resource)
- (free-music (music-music resource))
- (setf (music-music resource) nil)))
+ (assert (music-music resource))
+ (free-music (music-music resource))
+ (setf (music-music resource) nil))
+
+
(defmethod free-resource ((resource font))
- (when (font-image resource)
- (free-resource (font-image resource))
- (setf (font-image resource) nil)))
+ (assert (font-image resource))
+ (let ((image (font-image resource)))
+ (setf (font-image resource) nil)
+ (free-resource image)))
+
+(defmethod holdsp ((font font) (image image))
+ (eq (font-image font) image))
+
+
(defmethod free-resource ((resource image))
- (when (> (image-texture resource) 0)
- (gl-delete-texture (image-texture resource))
- (setf (image-texture resource) 0)))
+ (assert (> (image-texture resource) 0))
+ (gl-delete-texture (image-texture resource))
+ (setf (image-texture resource) 0))
+
+
(defmethod free-resource ((resource sample))
- (when (sample-chunk resource)
- (free-chunk (sample-chunk resource))
- (setf (sample-chunk resource) nil)))
+ (assert (sample-chunk resource))
+ (free-chunk (sample-chunk resource))
+ (setf (sample-chunk resource) nil))
+
+
(defun free-all-resources ()
- (dolist (r *resources*)
- (free-resource r))
+ (loop while *resources* do
+ (free-resource (first *resources*)))
(assert (null *resources*)))
--- /project/pal/cvsroot/pal/package.lisp 2007/07/29 21:53:52 1.14
+++ /project/pal/cvsroot/pal/package.lisp 2007/08/15 14:36:21 1.15
@@ -367,6 +367,7 @@
#:free-resource
#:free-all-resources
#:define-tags
+ #:add-tag
#:tag
#:sample
#:music
@@ -386,6 +387,7 @@
#:do-n
#:curry
+ #:handle-events
#:key-pressed-p
#:keysym-char
#:test-keys
--- /project/pal/cvsroot/pal/pal-macros.lisp 2007/07/30 10:38:12 1.12
+++ /project/pal/cvsroot/pal/pal-macros.lisp 2007/08/15 14:36:21 1.13
@@ -1,5 +1,5 @@
(declaim (optimize (speed 3)
- (safety 2)))
+ (safety 1)))
(in-package :pal)
@@ -9,10 +9,15 @@
(defmacro define-tags (&body tags)
`(progn
,@(mapcar (lambda (r)
- `(setf (gethash ',(first r) *tags*)
- (cons (lambda () ,(second r)) nil)))
+ `(add-tag ',(first r) (lambda () ,(second r))))
(loop for (a b) on tags by #'cddr collect (list a b)))))
+
+(defun add-tag (tag fn)
+ (assert (and (symbolp tag) (functionp fn)))
+ (setf (gethash tag *tags*)
+ (cons fn nil)))
+
(defun reset-tags (&key resource)
(maphash (if resource
(lambda (k v)
@@ -61,7 +66,7 @@
(declare ,@decls)
,@body))))
-
+;; (declaim (ftype (function (double-float double-float) double-float) sss))
(defmacro with-resource ((resource init-form) &body body)
`(let ((,resource ,init-form))
@@ -170,6 +175,7 @@
(declaim (inline funcall?))
(defun funcall? (fn &rest args)
+ (declare (type (or function symbol) fn) (dynamic-extent args))
(if (null fn)
nil
(apply fn args)))
--- /project/pal/cvsroot/pal/pal.lisp 2007/07/30 10:38:12 1.25
+++ /project/pal/cvsroot/pal/pal.lisp 2007/08/15 14:36:21 1.26
@@ -2,13 +2,13 @@
;; smoothed polygons, guess circle segment count, add start/end args to draw-circle, use triangle-fan
;; calculate max-texture-size
;; fix the fps
-;; clean up the do-event
;; check for redundant close-quads, make sure rotations etc. are optimised.
;; newline support for draw-text
+;; optimise gl state handling
(declaim (optimize (speed 3)
- (safety 2)))
+ (safety 1)))
(in-package :pal)
@@ -62,7 +62,6 @@
(pal-ffi:open-audio 22050 pal-ffi:+audio-s16+ 0 2048)
(pal-ffi:gl-set-attribute pal-ffi:+gl-depth-size+ 0)
(pal-ffi:gl-set-attribute pal-ffi:+gl-doublebuffer+ 1)
- (pal-ffi:gl-pixel-store pal-ffi:+gl-pack-alignment+ 1)
(let ((surface (pal-ffi::set-video-mode
width
height
@@ -104,6 +103,7 @@
(pal-ffi:gl-ortho 0d0 (coerce *width* 'double-float) (coerce *height* 'double-float) 0d0 -1d0 1d0)
(pal-ffi:gl-matrix-mode pal-ffi:+gl-modelview+)
(pal-ffi:gl-load-identity)
+ (pal-ffi:gl-pixel-store pal-ffi:+gl-pack-alignment+ 1)
(clear-screen 0 0 0)
(reset-tags)
(define-tags default-font (load-font "default-font"))
@@ -195,7 +195,7 @@
(defun get-mouse-y ()
*mouse-y*)
-(defun dispatch-event (&key key-up-fn key-down-fn mouse-motion-fn quit-fn)
+(defun handle-events (&key key-up-fn key-down-fn mouse-motion-fn quit-fn)
(block event-loop
(cffi:with-foreign-object (event :char 500)
(do-event event key-up-fn key-down-fn mouse-motion-fn quit-fn))))
@@ -214,20 +214,15 @@
;; Screen
-(declaim (inline draw-messages))
(defun draw-messages ()
- (let ((y 0)
- (fh (get-font-height)))
+ (let ((fh (get-font-height))
+ (y 0))
(declare (type u11 y fh))
(dolist (m *messages*)
(declare (type simple-string m))
(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)
@@ -243,7 +238,11 @@
(with-default-settings
(draw-image *cursor* (v- (get-mouse-pos) *cursor-offset*))
(draw-messages)))
- (pal-ffi:gl-swap-buffers))
+ (close-quads)
+ (pal-ffi:gl-swap-buffers)
+ (let ((e (pal-ffi:gl-get-error)))
+ (unless (= e 0)
+ (error "GL error ~a" e))))
(declaim (inline get-screen-width))
(defun get-screen-width ()
@@ -879,5 +878,5 @@
(defun message (object)
(setf *messages* (append *messages* (list (prin1-to-string object))))
- (when (> (length *messages*) (- (truncate (get-screen-height) (get-font-height)) 2))
+ (when (> (length *messages*) (- (truncate (get-screen-height) (get-font-height)) 1))
(pop *messages*)))
\ No newline at end of file
--- /project/pal/cvsroot/pal/todo.txt 2007/07/28 13:13:15 1.15
+++ /project/pal/cvsroot/pal/todo.txt 2007/08/15 14:36:21 1.16
@@ -9,8 +9,6 @@
- Box/box/line/circle etc. overlap functions, faster v-dist.
-- Improved texture handling.
-
- Fix the FPS limiter, the results could be a lot smoother.
- Correct aspect ratio when fullscreen on widescreen displays.
--- /project/pal/cvsroot/pal/vector.lisp 2007/07/30 10:38:12 1.7
+++ /project/pal/cvsroot/pal/vector.lisp 2007/08/15 14:36:21 1.8
@@ -1,5 +1,5 @@
(declaim (optimize (speed 3)
- (safety 2)))
+ (safety 1)))
(in-package :pal)