summaryrefslogtreecommitdiff
path: root/sly/math
Commit message (Collapse)AuthorAgeFilesLines
* math: Rewrite rect to use packed f64 bytevectors.David Thompson2016-02-271-45/+35
|
* math: Rewrite vector math library to use packed f64 bytevectors.David Thompson2016-02-274-141/+303
| | | | | | | | | | | | | | | | | | | | 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.
* math: transform: Perform matrix multiplication in Scheme.David Thompson2016-02-111-8/+136
| | | | | | | | No more GSL dependency! Thanks Andy Wingo, for unboxed floating point operations! * sly/math/transform.scm (matrix-ref, matrix-set!): Allow inlining. (transform*!): Reimplement in pure Scheme, no FFI call to GSL.
* math: rect: Fix rect-inflate implementation.David Thompson2016-01-011-2/+2
| | | | | * sly/math/rect.scm (%rect-inflate): Subtract, not add, the half width. D'oh!
* Optimize matrix operations.David Thompson2015-08-251-39/+52
| | | | | | | | | | | | | | | | | | | | | 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.
* math: rect: Update docstrings.David Thompson2014-12-131-8/+7
| | | | | * sly/math/rect.scm (rect-position, rect-inflate, rect-union, rect-clip, rect-contains?): Update docstrings.
* math: transform: Update docstrings.David Thompson2014-12-131-4/+4
| | | | * sly/math/transform (transform+, transform*): Update docstrings.
* math: rect: Invert y-axis.David Thompson2014-12-061-25/+27
| | | | | | | * sly/math/rect.scm (rect-top, rect-bottom): Swap. (rect-bottom-left, rect-top-left: Likewise. (rect-union, rect-clip, rect-within?, rect-intersects?, %rect-contains?): Swap top/bottom.
* math: rect: Add rect-clamp.David Thompson2014-12-061-0/+7
| | | | * sly/math/rect.scm (rect-clamp): New procedure.
* math: vector: Add vmap.David Thompson2014-12-061-1/+12
| | | | * sly/math/vector.scm (vmap): New procedure.
* math: tween: Memoize iterpolation procedure.David Thompson2014-11-301-1/+7
| | | | * sly/math/tween.scm (tween): Memoize interpolator.
* math: tween: Replace let* with let in ease-reflect.David Thompson2014-11-301-1/+1
| | | | * sly/math/tween.scm (ease-reflect): Use let instead of let*.
* math: Reimplement tween module formerly known as transition.David Thompson2014-11-301-0/+107
| | | | | | * sly/transition.scm: Delete. * sly/math/tween.scm: New file. * Makefile.am (SOURCES): Remove deleted file. Add new one.
* transform: Dedupe cblas-sgemm call.David Thompson2014-11-221-5/+1
| | | | | * sly/math/transform (transform*): Use 'transform*!' instead of direct 'cblas-sgemm' call.
* math: Move rect module to sly/math directory.David Thompson2014-11-081-0/+212
| | | | | | | | * sly/rect.scm: Delete. * sly/math/rect.scm: New file. * Makefile.am (SOURCES): Add new file. Delete old one. * sly/render/camera.scm: Use (sly math rect) module. * examples/simple.scm: Likewise.
* math: Move transform module to sly/math directory.David Thompson2014-11-081-0/+263
| | | | | | | | | | | | | * sly/transform.scm: Delete. * sly/render/transform.scm: New file. * Makefile.am (SOURCES): Add new file. Delete old one. * sly/render/camera.scm: Use (sly math transform). * sly/render/mesh.scm: Likewise. * sly/render/renderer.scm: Likewise. * sly/render/scene.scm: Likewise. * sly/render/shader.scm: Likewise. * sly/window.scm: Likewise. * examples/simple.scm: Likewise.
* math: Move quaternion module to sly/math directory.David Thompson2014-11-081-0/+112
| | | | | | | | * sly/quaternion.scm: Delete. * sly/math/quaternion.scm: New file. * Makefile.am (SOURCES): Add new file. Delete old one. * sly/transform.scm: Use (sly math quaternion). * sly/transition.scm: Likewise.
* transition: Move interpolation procedures to their relevant module.David Thompson2014-10-031-1/+3
| | | | | | | | | * sly/color.scm (color-lerp): New procedure. * sly/math.scm (make-lerp, lerp): New procedures. * sly/math/vector.scm (vlerp): New procedure. * sly/transition.scm (interpolator, number-interpolate, vector-interpolate, color-interpolate): Delete procedures. (guess-interpolator): Rewrite with 'match-lambda*'.
* Export vector record type identifiers for destructuring via 'match'.David Thompson2014-10-021-16/+12
| | | | | | | * sly/match/vector.scm: Export <vector2>, <vector3> and <vector4>. (vx, vy, vz): Use 'match' more wisely. * sly/mesh.scm (vertices-bytevector): Destructure vectors. * sly/transform.scm (translate, scale): Ditto.
* Rewrite vector math module.David Thompson2014-10-011-0/+159
* .gitignore: Ignore '*.log' files. * sly/vector.scm: Delete file. * sly/math/vector.scm: New file. * tests/math/vector.scm: New file. * Makefile.am: Add new file and remove the old one. * sly/font.scm: Remove import. * sly/game.scm: Change import. * sly/joystick.scm (make-directional-signal-raw, make-directional): Use 'vector2'. * sly/keyboard.scm (key-directions): Use 'vector2'. * sly/mesh.scm (vertices-bytevector): Use new vector procedures. * sly/mouse.scm (mouse-position): Use 'vector2'. * sly/quaternion.scm (axis-angle->quaternion, quaternion->vector, vector->quaternion): Use new vector procedures. * sly/rect.scm (rect-position, rect-top-right, rect-bottom-left, rect-bottom-right, rect-center, rect-size): Use 'vector2'. * sly/scene.scm (make-scene-node): Use 'vector2'. * sly/shader.scm: Change import. * sly/shape.scm (make-cube): Use new vector procedures. * sly/sprite.scm (make-sprite): Use new vector procedures. * sly/texture.scm (anchor-texture): Use 'vector2'. * sly/transform.scm (transform-vector2): Use 'vector2'. (translate, scale): Use new vector procedures. * sly/transition.scm (guess-interpolator): Use new vector procedures. * sly/window.scm (make-window, window-size, open-window): Use 'vector2'.