X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=gacela.lisp;h=6597f784cd0955e4ce38427859885fd4e1bde20f;hb=cf93286d937b7f635e9807d7f103807fb5813ca9;hp=45df43c9891388c4eb2a905a7474066d03c49eeb;hpb=870f146b156daf8910c0ee549df1bc47d509169e;p=gacela.git diff --git a/gacela.lisp b/gacela.lisp index 45df43c..6597f78 100644 --- a/gacela.lisp +++ b/gacela.lisp @@ -81,14 +81,6 @@ (glHint GL_PERSPECTIVE_CORRECTION_HINT GL_NICEST) t) -(defmacro progn-textures (&body code) - `(let (values) - (init-video-mode) - (glEnable GL_TEXTURE_2D) - (setq values (multiple-value-list (progn ,@code))) - (glDisable GL_TEXTURE_2D) - (apply #'values values))) - (defun init-lighting () (init-video-mode) (glEnable GL_LIGHTING)) @@ -156,21 +148,22 @@ ;;; Resources Manager -(defstruct resource plist free-function time) +(defstruct resource plist constructor destructor time) (defun make-resource-texture (&key filename min-filter mag-filter) `(:type texture :filename ,filename :min-filter ,min-filter :mag-filter ,mag-filter)) -(defun make-resource-font (&key filename size encoding) - `(:type font :filename ,filename :size ,size :enconding ,encoding)) +(defun make-resource-font (&key filename encoding) + `(:type font :filename ,filename :enconding ,encoding)) (let ((resources-table (make-hash-table :test 'equal))) - (defun set-resource (key plist free-function &key static) + (defun set-resource (key plist constructor destructor &key static) (setf (gethash key resources-table) (make-resource :plist plist - :free-function free-function - :time (if static -1 (SDL_GetTicks))))) + :constructor constructor + :destructor destructor + :time (if static t (SDL_GetTicks))))) (defun get-resource (key) (let ((resource (gethash key resources-table))) @@ -180,10 +173,12 @@ (setf (gethash key resources-table) resource))) (resource-plist resource))))) + (defun free-resource (key) + (funcall (resource-destructor (gethash key resources-table))) + (setf (resource-time (gethash key resources-table)) nil)) + (defun free-all-resources () - (maphash (lambda (key res) (funcall (resource-free-function res) (resource-address res))) - resources-table) - (clrhash resources-table))) + (maphash (lambda (key res) (free-resource key)) resources-table))) ;;; Connection with the GUI