summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Thompson <dthompson2@worcester.edu>2021-09-07 18:27:34 -0400
committerDavid Thompson <dthompson2@worcester.edu>2021-09-07 18:27:34 -0400
commit35fe2265e5a2732796bfe905ca7fcaf480adcb27 (patch)
tree35afbf80373adc447df6a6924bbc832b5977cf1b
parent8f57210d89f47398b8084bb1f3553f5dbfe2f3ca (diff)
graphics: shader: Add support for 3x3 matrices.
-rw-r--r--chickadee/graphics/shader.scm14
1 files changed, 14 insertions, 0 deletions
diff --git a/chickadee/graphics/shader.scm b/chickadee/graphics/shader.scm
index 08e8672..7def1f2 100644
--- a/chickadee/graphics/shader.scm
+++ b/chickadee/graphics/shader.scm
@@ -45,6 +45,7 @@
float-vec2
float-vec3
float-vec4
+ mat3
mat4
sampler-2d
sampler-cube
@@ -214,6 +215,18 @@
#:setter gl-uniform4fv
#:null (make-null-rect))
+(define-shader-primitive-type mat3
+ #:name 'mat3
+ #:size (* 3 3 4) ; 3 rows x 3 columns x 4 byte floats
+ #:validator matrix3?
+ #:serializer
+ (let ((matrix3-bv (@@ (chickadee math matrix) matrix3-bv)))
+ (lambda (bv i m)
+ (bytevector-copy! (matrix3-bv m) 0 bv i (* 3 3 4))))
+ #:setter (lambda (location count ptr)
+ (gl-uniform-matrix3fv location count #f ptr))
+ #:null (make-identity-matrix3))
+
(define-shader-primitive-type mat4
#:name 'mat4
#:size 64 ; 4 rows x 4 columns = 16 floats x 4 bytes each = 64 bytes
@@ -588,6 +601,7 @@ them into a GPU shader program."
((= type (version-2-0 float-vec2)) float-vec2)
((= type (version-2-0 float-vec3)) float-vec3)
((= type (version-2-0 float-vec4)) float-vec4)
+ ((= type (version-2-0 float-mat3)) mat3)
((= type (version-2-0 float-mat4)) mat4)
((= type (version-2-0 sampler-2d)) sampler-2d)
((= type (version-2-0 sampler-cube)) sampler-cube)