geomancy-0.3.0.1: ChangeLog.md
# Changelog for geomancy
## 0.3.0.1
- Added Lift instances for data.
Opt-out by disabling the `th-lift` flag.
- Added Serialise instances for data.
Opt-out by disabling the `serialise` flag.
## 0.3.0.0
> `[0]` releases without row/col-major, handedness, and counter/clockwise confusion.
This release brings sanity and consistency around the transform stack.
- `Transform`s have proper *col-major* definitions.
- Operation ordering follows the GLSL convention.
* The composition order is `(p <> v <> m <> ...)` (from global to local).
Reverse your transforms to adjust.
* The application order is `m !* v` (with the operators becoming infixr 5, just under the `<>`).
It will do `Mᵀ * v` inside for SIMD reasons and to match what GLSL does for its `M * v` ops.
- `Geomancy.Vulkan.Projection` is right-handed, BUT produces *reverse-depth* range ([1; 0], In 3D infinite-Z converges to 0).
* Replace your depth tests with `OP_GREATER` and clear to `0.0` - get better precision for your migration troubles.
- `Geomancy.Vulkan.View` is *right-handed*, with +Z being forward.
* The intended up vector is still `vec3 0 (-1) 0` -- +Y down.
Silly as it sounds, this matches the XY plane of the window with XY plane in front of a "first person" camera.
- Axis rotations (using `rotateQ`) will appear clockwise when looking along the axis.
- Angle rotations follow Tait-Bryan angles (heading/elevation/bank or yaw/pitch/roll) in the y-x-z frame.
* `rotateZ (time * rate)` will follow the clock hands in 2D scenes and roll in 3D.
* `rotateX` will follow the sun from sunrise to sunset, pitching UP / increasing elevation.
* `rotateY` will turn you right, increasing yaw / heading eastwards.
- You're of course free to define your own transforms, just copy the modules and tune to your liking.
Just make sure that you use matching row/column constructors and the math layer will do the rest, fast.
- Added `webcolor-labels` instances for UVec3/Vec3/Vec4.
## 0.2.6.0
* `Geomancy.Gl.Block` extract to `gl-block` package as `Graphics.Gl.Block`.
* Added `convert` function to vector modules to facilitate type-changing operations like rounding.
* Added `Ix` instances for integral vectors.
* Added `dot` for integral vectors.
## 0.2.5.0
* Added Geomancy.Gl.Block to derive packed/std140/std430 layouts generically.
Originally a part of the unpublished `glow` package in the `codex` project by Edward Kmett.
Add `ptrdiff-0` to your stack resolvers.
## 0.2.4.2
* Support ARM/aarch64 SIMD.
## 0.2.4.1
* Support simple-affine-space-0.2
## 0.2.4.0
A bunch of experimental code to see what sticks.
+ Added `simple-affine-space` instances.
* The classes are re-exported from `Geomancy`, bringing stuff like `dot` and `normalize`.
+ Added `mono-traversable` instances and `Geomancy.Elementwise` wrapper.
+ Added `Point` wrapper and `PointN` aliases.
+ Added `Geomancy.Interpolate` with generic linear, quadratic and cubic functions.
- ⚠️ `VecN.lerp` has wrong (flipped) order of vector arguments. This is fixed in `linear`.
+ Added `Geomancy.Swizzle` overloaded labels.
+ Added `Geomancy.Gl.Funs` with kinda-GLSL math functions, appropriately overloaded.
## 0.2.3.0
- Vec4 moved to ByteArray#.
- Mat4 !* Vec4 is now SIMD too.
## 0.2.2.4
+ Add Transform trees.
## 0.2.2.3
+ Add IVec and UVec 32-bit integer vectors.
## 0.2.2.2
+ Fixed using Transform.apply with projection inverses.
## 0.2.2.1
+ Add Vec2.
+ Add pattern synonyms to `Geomancy` re-exports.
+ Add Fractional instances.
+ Add conversions from tuples and lower-dimension vecs.
## 0.2.2.0
+ Add pattern synonym alternatives to `withVecN`.
+ Add Mat4 converstion from `Linear.M44`.
- Hide `toList` and `toListTrans`.
+ Add `toList2d` and publish its element-order wrappers.
## 0.2.1.0
Transform rewrite
* Change perspective FoV to radians.
+ Add `infinitePerspective`.
+ Add `Transform.inverse`.
- Hide `mat4`, `withMat4`.
## 0.2.0.0
Mat4 rewrite
+ Add `rowMajor`, `withRowMajor`, `toListRowMajor`.
+ Add `colMajor`, `withColMajor`, `toListColMajor`.
+ Add `Mat4.inverse`.
* Expose `matrixProduct`.
+ Add `scalarMultiply`.
+ Add `Mat4.(!*)` to use with `Vec4`.
* Extract transformations to `Geomancy.Transform` and use column notation.
+ Add `Transform.(!.)` and `apply` to use with `Vec3`.
* Rename `scale` to `scale3`.
+ Add uniform `scale`.
+ Add `scaleXY` for flat meshes.
* Rename `mkTransformation` to `dirPos`.
+ Add `rotateQ` via `dirPos` with empty translation.
+ Add `Vec3.Packed` newtype without extra padding.
## 0.1.3.0
* Update tests
+ Add `zipWith`
* Rename `elementwise` to `pointwise`
* Rename `colMajor` to `toList`
* Rename `rowMajor` to `toListTrans`
## 0.1.2.1
+ Add Mat4 multiplication test via `linear`
+ Add `elementwise`, `colMajor`, `rowMajor`
## 0.1.2.0
* Move projections and views to Vulkan namespace.
## 0.1.1.2
* Fix bug in quaternion rotationBetween.
## 0.1.1.1
* Add lookAtUp and rotationBetween.