48 lines
1.3 KiB
Scheme
48 lines
1.3 KiB
Scheme
(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)))
|
|
)
|