summaryrefslogtreecommitdiff
path: root/chickadee/math/matrix.scm
diff options
context:
space:
mode:
Diffstat (limited to 'chickadee/math/matrix.scm')
-rw-r--r--chickadee/math/matrix.scm37
1 files changed, 28 insertions, 9 deletions
diff --git a/chickadee/math/matrix.scm b/chickadee/math/matrix.scm
index eab6cc6..e80eab6 100644
--- a/chickadee/math/matrix.scm
+++ b/chickadee/math/matrix.scm
@@ -31,6 +31,9 @@
make-null-matrix3
make-identity-matrix3
matrix3?
+ matrix3=
+ matrix3-copy!
+ matrix3-copy
matrix3-mult!
matrix3*
matrix3-identity!
@@ -49,6 +52,8 @@
make-identity-matrix4
matrix4?
matrix4=
+ matrix4-copy!
+ matrix4-copy
matrix4-mult!
matrix4*
matrix4-identity!
@@ -131,7 +136,7 @@
(matrix3-set! bv 2 2 cc)))
(define (make-null-matrix3)
- (let ((bv (make-f32vector 9)))
+ (let ((bv (make-bytevector 36)))
(%make-matrix3 bv)))
(define (make-matrix3 aa ab ac
@@ -146,6 +151,18 @@ column-major format."
ca cb cc)
matrix))
+(define (matrix3= m1 m2)
+ "Return #t if M1 is the same matrix as M2"
+ (equal? (matrix3-bv m1) (matrix3-bv m2)))
+
+(define (matrix3-copy! src dest)
+ "Copy the contents of matrix SRC to DEST."
+ (bytevector-copy! (matrix3-bv src) 0 (matrix3-bv dest) 0 36))
+
+(define (matrix3-copy matrix)
+ "Return a new 3x3 matrix that is a copy of MATRIX."
+ (%make-matrix3 (bytevector-copy (matrix3-bv matrix))))
+
(define (matrix3-mult! dest a b)
"Multiply matrices A and B, storing the result in DEST."
(let ((m1 (matrix3-bv a))
@@ -206,9 +223,6 @@ column-major format."
(* m1-2-1 m2-1-2)
(* m1-2-2 m2-2-2))))))
-(define (matrix3-copy matrix)
- (%make-matrix3 (bytevector-copy (matrix3-bv matrix))))
-
(define (matrix3* . matrices)
"Return the product of MATRICES."
(match matrices
@@ -407,7 +421,7 @@ column-major format."
(matrix4-set! bv 3 3 dd)))
(define (make-null-matrix4)
- (let ((bv (make-f32vector 16)))
+ (let ((bv (make-bytevector 64)))
(%make-matrix4 bv (bytevector->pointer bv))))
(define (make-matrix4 aa ab ac ad
@@ -428,6 +442,15 @@ column-major format."
"Return #t if M1 is the same matrix as M2"
(equal? (matrix4-bv m1) (matrix4-bv m2)))
+(define (matrix4-copy! src dest)
+ "Copy the contents of matrix SRC to DEST."
+ (bytevector-copy! (matrix4-bv src) 0 (matrix4-bv dest) 0 64))
+
+(define (matrix4-copy matrix)
+ "Return a new 4x4 matrix that is a copy of MATRIX."
+ (let ((bv (bytevector-copy (matrix4-bv matrix))))
+ (%make-matrix4 bv (bytevector->pointer bv))))
+
(define (matrix4-mult! dest a b)
"Multiply matrices A and B, storing the result in DEST."
(let ((m1 (matrix4-bv a))
@@ -546,10 +569,6 @@ column-major format."
(* m1-3-2 m2-2-3)
(* m1-3-3 m2-3-3))))))
-(define (matrix4-copy matrix)
- (let ((bv (bytevector-copy (matrix4-bv matrix))))
- (%make-matrix4 bv (bytevector->pointer bv))))
-
(define (matrix4* . matrices)
"Return the product of MATRICES."
(match matrices