summaryrefslogtreecommitdiff
path: root/sly/render
diff options
context:
space:
mode:
authorDavid Thompson <dthompson2@worcester.edu>2016-02-27 20:45:09 -0500
committerDavid Thompson <dthompson2@worcester.edu>2016-02-27 20:45:09 -0500
commit873d00e01e7d714fd3cbbb86d3da88380c179145 (patch)
tree3f6d34fa1cdf08ec17475126451f93fd86847ecf /sly/render
parenta319acd01ac950d479d43d77c07d44a9af3012cd (diff)
math: Rewrite vector math library to use packed f64 bytevectors.
The big consequence of this change to the rest of the codebase is that we can no longer use record destructuring when pattern matching, so I had to rewrite every place where pattern matching was used. It was probably a bad idea to expose the record type descriptors publicly in the first place. * sly/math/vector.scm: Reimplement everything in terms of an f64 packed bytevector record type. Do not expose record type descriptors. * sly/game.scm (run-game-loop): Convert viewport width/height to exact numbers. * sly/window.scm (open-window): Likewise. * sly/input/mouse.scm (mouse-position): Rewrite pattern matching. * sly/math/quaternion (make-quaternion, vector->quaternion): Likewise. * sly/math/rect.scm (rect-clamp): Likewise. * sly/math/transform.scm (translate!, translate, scale): Likewise. * sly/render/mesh.scm (vertices-bytevector): Likewise. * examples/mines/mines.scm: Likewise.
Diffstat (limited to 'sly/render')
-rw-r--r--sly/render/mesh.scm49
1 files changed, 24 insertions, 25 deletions
diff --git a/sly/render/mesh.scm b/sly/render/mesh.scm
index 7f38b29..273019d 100644
--- a/sly/render/mesh.scm
+++ b/sly/render/mesh.scm
@@ -133,33 +133,32 @@
(bv (if index?
(make-u32vector (vector-length vertices))
(make-f32vector (* (vector-length vertices)
- (attribute-size elem)))))
- (setter (if index? u32vector-set! f32vector-set!)))
+ (attribute-size elem))))))
(vector-for-each
(match-lambda*
- ((i (? number? k))
- (setter bv i k))
- ((i ($ <vector2> x y))
- (let ((offset (* i 2)))
- (setter bv offset x)
- (setter bv (1+ offset) y)))
- ((i ($ <vector3> x y z))
- (let ((offset (* i 3)))
- (setter bv offset x)
- (setter bv (1+ offset) y)
- (setter bv (+ offset 2) z)))
- ((i ($ <vector4> x y z w))
- (let ((offset (* i 4)))
- (setter bv offset x)
- (setter bv (1+ offset) y)
- (setter bv (+ offset 2) z)
- (setter bv (+ offset 3) w)))
- ((i (color? c))
- (let ((offset (* i 4)))
- (setter bv offset (color-r c))
- (setter bv (1+ offset) (color-g c))
- (setter bv (+ offset 2) (color-b c))
- (setter bv (+ offset 3) (color-a c)))))
+ ((i (? number? k))
+ (u32vector-set! bv i k))
+ ((i (? vector2? v))
+ (let ((offset (* i 2)))
+ (f32vector-set! bv offset (vector2-x v))
+ (f32vector-set! bv (1+ offset) (vector2-y v))))
+ ((i (? vector3? v))
+ (let ((offset (* i 3)))
+ (f32vector-set! bv offset (vector3-x v))
+ (f32vector-set! bv (1+ offset) (vector3-y v))
+ (f32vector-set! bv (+ offset 2) (vector3-z v))))
+ ((i (? vector4? v))
+ (let ((offset (* i 4)))
+ (f32vector-set! bv offset (vector4-x v))
+ (f32vector-set! bv (1+ offset) (vector4-y v))
+ (f32vector-set! bv (+ offset 2) (vector4-z v))
+ (f32vector-set! bv (+ offset 3) (vector4-w v))))
+ ((i (color? c))
+ (let ((offset (* i 4)))
+ (f32vector-set! bv offset (color-r c))
+ (f32vector-set! bv (1+ offset) (color-g c))
+ (f32vector-set! bv (+ offset 2) (color-b c))
+ (f32vector-set! bv (+ offset 3) (color-a c)))))
vertices)
bv))