diff options
author | David Thompson <dthompson2@worcester.edu> | 2015-08-25 06:41:46 -0400 |
---|---|---|
committer | David Thompson <dthompson2@worcester.edu> | 2015-08-25 06:41:46 -0400 |
commit | a0b33ff9274b0fb682e36a42e3aa70ce5581df7c (patch) | |
tree | b34f0315c365e171c2245ed77367ccccd40111c2 /sly/render | |
parent | 273c77383226dcce24a2f5af461cb4afb7244f9f (diff) |
Optimize matrix operations.
Guile's array procedures are slow, so switch to using raw bytevectors
instead. Additionally, converting the bytevector to a pointer is also
slow, so the pointer is now cached for redundant calls.
There's more to be done, but this was low hanging fruit.
* sly/math/transform.scm (<transform>)[ptr]: New field.
(transform-ptr): New accessor.
(set-transform-ptr!): New setter.
(make-4x4-matrix): Implement using bytevectors.
(matrix-set!, matrix-ref): New procedures.
(make-transform, transform-vector2, transform-position): Use
'matrix-set!' and 'matrix-ref'.
(transpose, transform+, transform*): Use new transform constructor.
(transform->pointer): Cache pointer.
* sly/render/context.scm (copy-transform!): Use 'bytevector-copy!'
* sly/render/shader.scm: Use 'transform->pointer' in the transform
uniform setter.
Diffstat (limited to 'sly/render')
-rw-r--r-- | sly/render/context.scm | 5 | ||||
-rw-r--r-- | sly/render/shader.scm | 4 |
2 files changed, 5 insertions, 4 deletions
diff --git a/sly/render/context.scm b/sly/render/context.scm index fe16104..a83b612 100644 --- a/sly/render/context.scm +++ b/sly/render/context.scm @@ -22,6 +22,7 @@ ;;; Code: (define-module (sly render context) + #:use-module (rnrs bytevectors) #:use-module (ice-9 match) #:use-module (ice-9 q) #:use-module (srfi srfi-9) @@ -155,7 +156,9 @@ (compose q-pop! render-context-transform-stack)) (define (copy-transform! src dest) - (array-copy! (transform-matrix src) (transform-matrix dest))) + (bytevector-copy! (transform-matrix src) 0 + (transform-matrix dest) 0 + 64)) ;; emacs: (put 'with-transform-excursion 'scheme-indent-function 1) (define-syntax-rule (with-transform-excursion context body ...) diff --git a/sly/render/shader.scm b/sly/render/shader.scm index 9f80d2a..392ebc5 100644 --- a/sly/render/shader.scm +++ b/sly/render/shader.scm @@ -353,9 +353,7 @@ location." (register-uniform-setter! transform? (lambda (location t) - (let ((pointer - (bytevector->pointer - (array-contents (transform-matrix t))))) + (let ((pointer (transform->pointer t))) (glUniformMatrix4fv location 1 #f pointer)))) |