diff --git a/engine/resource.scm b/engine/resource.scm new file mode 100644 index 0000000..8400856 --- /dev/null +++ b/engine/resource.scm @@ -0,0 +1,25 @@ +(module (engine resource) () +(import scheme + (chicken base) + (chicken gc) + raylib + (srfi 99)) + +(define-record-type + (int:make-resource type struct) + resource? + (type int:resource-type) + (struct int:resource-contents)) + +(define (resource-finalizer type) + (case type + ((font) unload-font) + (else identity))) + +(define (make-resource type struct) + (assert (member type '(texture font))) + (assert (record? struct)) + (let ((r (int:make-resource type struct))) + (set-finalizer! r (lambda (x) ((resource-finalizer type) x))))) + +)