diff options
Diffstat (limited to 'sly/render')
-rw-r--r-- | sly/render/mesh.scm | 49 |
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)) |