(module (imugi resource) () (import scheme (chicken base) (chicken module) (chicken gc) raylib (srfi 69) (engine core)) (export font) (define fonts (make-hash-table)) (define (font filename) (assert (string? filename)) (if (hash-table-exists? fonts filename) (hash-table-ref fonts filename) (let ((f (make-resource 'font '() #f (lambda (res) (set-resource-contents! res (load-font filename)) (set-resource-initialized! res #t)) (lambda (res) (hash-table-delete! fonts filename) (unload-font (resource-contents res)) (set-resource-initialized! res #f))))) (hash-table-set! fonts filename f) f))) (export texture) (define textures (make-hash-table)) (define (texture filename) (assert (string? filename)) (if (hash-table-exists? textures filename) (hash-table-ref textures filename) (let ((t (make-resource 'texture '() #f (lambda (res) (set-resource-contents! res (load-texture filename)) (set-resource-initialized! res #t)) (lambda (res) (hash-table-delete! textures filename) ;; TODO: uncomment this when possible ;; (unload-texture (resource-contents res)) ; at time of writing, this is not yet in the raylib egg (set-resource-initialized! res #f))))) (hash-table-set! textures filename t) t))) )