aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/assets
diff options
context:
space:
mode:
authorColin Okay <colin@cicadas.surf>2022-06-29 11:54:24 -0500
committerColin Okay <colin@cicadas.surf>2022-06-29 11:54:24 -0500
commit82f71b0d13788b1cff9a24c5b652effd11631523 (patch)
treef0ec127b2f10f46029983ee95b6c72ef29bc504c /src/assets
parent4d1ee56c96ce254134b692f0e3b3271c87a42b54 (diff)
[refactor] [structure] modularized project file structure
Diffstat (limited to 'src/assets')
-rw-r--r--src/assets/asset.lisp18
-rw-r--r--src/assets/font.lisp17
-rw-r--r--src/assets/png.lisp31
3 files changed, 66 insertions, 0 deletions
diff --git a/src/assets/asset.lisp b/src/assets/asset.lisp
new file mode 100644
index 0000000..5f847da
--- /dev/null
+++ b/src/assets/asset.lisp
@@ -0,0 +1,18 @@
+;;;; asset.lisp
+
+(in-package #:wheelwork)
+
+(defclass/std asset ()
+ ((path :with :ri :std (error "An asset requires a path"))
+ (loadedp :with :a)))
+
+(defmethod cleanup :around ((asset asset))
+ (when (asset-loadedp asset)
+ (call-next-method))
+ (setf (asset-loadedp asset) nil))
+
+(defmethod ensure-loaded :around ((thing asset))
+ (unless (asset-loadedp thing)
+ (call-next-method)
+ (setf (asset-loadedp thing) t))
+ thing)
diff --git a/src/assets/font.lisp b/src/assets/font.lisp
new file mode 100644
index 0000000..3ff29d5
--- /dev/null
+++ b/src/assets/font.lisp
@@ -0,0 +1,17 @@
+;;;; asset/font.lisp
+
+(in-package #:wheelwork)
+
+(define-symbol-macro +standard-font-chars+
+ "
+ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890\".,!?-'" )
+
+(defclass/std font (asset)
+ ((characters :i :std +standard-font-chars+)
+ (oversample :i :doc "ovesampling factor to pass to cl-fond:make-font")
+ (object :with :r :doc "The font as returned from cl-fond:make-font")))
+
+(defmethod ensure-loaded ((font font))
+ (with-slots (path characters oversample object) font
+ (setf object (cl-fond:make-font path characters :oversample oversample))))
+
diff --git a/src/assets/png.lisp b/src/assets/png.lisp
new file mode 100644
index 0000000..aa259f0
--- /dev/null
+++ b/src/assets/png.lisp
@@ -0,0 +1,31 @@
+;;;; png.lisp
+
+(in-package #:wheelwork)
+
+(defclass/std png (asset texture) ())
+
+(defmethod ensure-loaded ((png png))
+ (with-slots
+ (width height id wrap-s wrap-t min-filter mag-filter internal-format image-format)
+ png
+ (pngload:with-png-in-static-vector (data (asset-path png) :flip-y t)
+ (setf width (pngload:width data)
+ height (pngload:height data)
+ id (gl:gen-texture))
+ (gl:bind-texture :texture-2d id)
+ (gl:tex-parameter :texture-2d :texture-wrap-s wrap-s)
+ (gl:tex-parameter :texture-2d :texture-wrap-t wrap-t)
+ (gl:tex-parameter :texture-2d :texture-min-filter min-filter)
+ (gl:tex-parameter :texture-2d :texture-mag-filter mag-filter)
+ (gl:tex-image-2d :texture-2d
+ 0
+ internal-format
+ width
+ height
+ 0
+ image-format
+ :unsigned-byte
+ (pngload:data data))
+ (gl:bind-texture :texture-2d 0)
+ (when (texture-mipmap png)
+ (gl:generate-mipmap :texture-2d)))))