Skip to content

Latest commit

 

History

History
343 lines (240 loc) · 11.5 KB

CHANGELOG.md

File metadata and controls

343 lines (240 loc) · 11.5 KB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

0.10.0 - 2020-10-31

Added

  • Added From implementations to truncate to narrower vector types, e.g. Vec4 to Vec3A, Vec3 and Vec2 and from Vec3A and Vec3 to Vec2.
  • Added swizzles for Vec4, Vec3A, Vec3 and Vec2. These can be used to reorder elements in the same type and also to create larger or smaller vectors from the given vectors elements.
  • Added Quat operators Add<Quat>, Sub<Quat>, Mul<f32> and Div<f32. These are used by other crates for interpolation quaternions along splines. Note that these operations will not return unit length quaternions, thus the results must be normalized before performing other Quat operations.
  • Added Mat4::transform_point3a and Mat4::transform_vector3a.
  • Added AsRef<[f32; 9]> and AsMut<[f32; 9]> trait implementations to Mat3.
  • Added optional bytemuck support primarily for casting types to &[u8].
  • Added support for compiling with no_std by disabling the default std feature and adding the libm feature.
  • Added distance and distance_squared methods to Vec2, Vec3, Vec3A and Vec4.

Changed

  • Changed the return type of Vec4::truncate from Vec3A to Vec3. This is a breaking change.

0.9.5 - 2020-10-10

Added

  • glam uses SSE2 for some types which prevents constructor functions can not be made const fn. To work around this limitation the following macro functions have been added to support creating const values of glam types: const_mat2, const_mat3, const_mat4, const_quat, const_vec2, const_vec3, const_vec3a and const_vec4.
  • Added is_nan methods to Vec2, Vec3, Vec3A and Vec4 which return a mask.

Changed

  • Renamed the vector reciprocal and length_reciprocal methods to recip and length_recip to match the Rust standard library naming. The old methods have been deprecated.
  • Renamed the vector sign methods to signum match the Rust standard library naming. The new methods now check for NAN. The old methods have been deprecated.
  • Added SSE2 optimized implementations of Mat4::determinant and Mat4::inverse.

Removed

  • Removed deprecated function Mat4::perspective_glu_rh.

0.9.4 - 2020-08-31

Fixed

  • Fixed Mat4::transform_point3 to account for homogeneous w coordinate. Previously this would have been incorrect when the resulting homogeneous coordinate was not 1.0, e.g. when transforming by a perspective projection.
  • Fixed Mat3::transform_point2 to account for homogeneous z coordinate.

0.9.3 - 2020-08-11

Added

  • Added Mat4::perspective_rh.

0.9.2 - 2020-07-09

Added

  • Added Mat3::mul_vec3a and Quat::mul_vec3a.

Changed

  • Changed Quat::mul_vec3 to accept and return Vec3 instead of Vec3A.

0.9.1 - 2020-07-01

Added

  • Added Mat3 * Vec3A implementation.
  • Added Vec3A benches.

Changed

  • Some documentation improvements around the new Vec3A type.

0.9.0 - 2020-06-28

Added

  • Vec3 has been split into scalar Vec3 and 16 byte aligned Vec3A types. Only the Vec3A type currently uses SIMD optimizations.
  • Vec3Mask has been split into scalar Vec3Mask and 16 byte aligned Vec3AMask types.
  • Added mut column accessors to all matrix types, e.g. Mat2::x_axis_mut().
  • Added From trait implementations for Vec3AMask and Vec4Mask to __m128.

Changed

  • The Mat3 type is using the scalar Vec3 type for storage.
  • Simplified Debug trait output for Quat, Vec4 and Vec3A.

Removed

  • Removed the packed-vec3 feature flag as it is now redundant.

0.8.7 - 2020-04-28

Added

  • Added Quat::slerp - note that this uses a sin approximation.
  • Added angle_between method for Vec2 and Vec3.
  • Implemented Debug, Display, PartialEq, Eq, PartialOrd, Ord, Hash, and AsRef traits for Vec2Mask, Vec3Mask and Vec4Mask.
  • Added conversion functions from Vec2Mask, Vec3Mask and Vec4Mask to an array of [u32].
  • Added build.rs to simplify conditional feature compilation.

Changed

  • Increased test coverage.

Removed

  • Removed cfg-if dependency.

0.8.6 - 2020-02-18

Added

  • Added the packed-vec3 feature flag to disable using SIMD types for Vec3 and Mat3 types. This avoids wasting some space due to 16 byte alignment at the cost of some performance.
  • Added x_mut, y_mut, z_mut, w_mut where appropriate to Vec2, Vec3 and Vec4.
  • Added implementation of core::ops::Index and core::ops::IndexMut for Vec2, Vec3 and Vec4.

Changed

  • Merged SSE2 and scalar Vec3 and Vec4 implementations into single files using the cfg-if crate.

0.8.5 - 2020-01-02

Added

  • Added projection functions Mat4::perspective_lh, Mat4::perspective_infinite_lh, Mat4::perspective_infinite_reverse_lh, Mat4::orthgraphic_lh and Mat4::orthographic_rh.
  • Added round, ceil and floor methods to Vec2, Vec3 and Vec4.

0.8.4 - 2019-12-17

Added

  • Added Mat4::to_scale_rotation_translation for extracting scale, rotation and translation from a 4x4 homogeneous transformation matrix.
  • Added cargo-deny GitHub Action.

Changed

  • Renamed Quat::new to Quat::from_xyzw.

0.8.3 - 2019-11-27

Added

  • Added Mat4::orthographic_rh_gl.

Changed

  • Renamed Mat4::perspective_glu_rh to Mat4::perspective_rh_gl.
  • SSE2 optimizations for Mat2::determinant, Mat2::inverse, Mat2::transpose, Mat3::transpose, Quat::conjugate, Quat::lerp, Quat::mul_vec3, Quat::mul_quat and Quat::from_rotation_ypr.
  • Disabled optimizations to Mat4::transform_point3 and Mat4::transform_vector3 as they are probably incorrect and need investigating.
  • Added missing #[repr(C)] to Mat2, Mat3 and Mat4.
  • Benchmarks now store output of functions to better estimate the cost of a function call.

Removed

  • Removed deprecated functions Mat2::new, Mat3::new and Mat4::new.

0.8.2 - 2019-11-06

Changed

  • glam_assert! is no longer enabled by default in debug builds, it can be enabled in any configuration using the glam-assert feature or in debug builds only using the debug-glam-assert feature.

Removed

  • glam_assert!'s checking lerp is bounded between 0.0 and 1.0 and that matrix scales are non-zero have been removed.

0.8.1 - 2019-11-03

Added

  • Added Display trait implementations for Mat2, Mat3 and Mat4.

Changed

  • Disabled glam's SSE2 sin_cos implementation - it became less precise for large angle values.
  • Reduced the default epsilon used by the is_normalized! macro from std::f32::EPSILON to 1e-6.

0.8.0 - 2019-10-14

Removed

  • Removed the approx crate dependency. Each glam type has an abs_diff_eq method added which is used by unit tests for approximate floating point comparisons.
  • Removed the Angle type. All angles are now f32 and are expected to be in radians.
  • Removed the deprecated Vec2b, Vec3b and Vec4b types and the mask methods on Vec2Mask, Vec3Mask and Vec4Mask.

Changed

  • The rand crate dependency has been removed from default features. This was required for benchmarking but a simple random number generator has been added to the benches support module instead.
  • The From trait implementation converting between 1D and 2D f32 arrays and matrix types have been removed. It was ambiguous how array data would map to matrix columns so these have been replaced with explicit methods from_cols_array and from_cols_array_2d.
  • Matrix new methods have been renamed to from_cols to be consistent with the other methods that create matrices from data.
  • Renamed Mat4::perspective_glu to Mat4::perspective_glu_rh.

0.7.2 - 2019-09-22

Fixed

  • Fixed incorrect projection matrix methods Mat4::look_at_lh and Mat4::look_at_rh.

Added

  • Added support for building infinite projection matrices, including both standard and reverse depth Mat4::perspective_infinite_rh and Mat4::perspective_infinite_rh.
  • Added Vec2Mask::new, Vec3Mask::new and Vec4Mask::new methods.
  • Implemented std::ops BitAnd, BitAndAssign, BitOr, BitOrAssign and Not traits for Vec2Mask, Vec3Mask and Vec4Mask.
  • Added method documentation for Vec4 and Vec4Mask types.
  • Added missing serde implementations for Mat2, Mat3 and Mat4.
  • Updated rand and criterion versions.

0.7.1 - 2019-07-08

Fixed

  • The SSE2 implementation of Vec4 dot was missing a shuffle, meaning the dot, length, length_squared, length_reciprocal and normalize methods were sometimes incorrect.

Added

  • Added the glam_assert macro which behaves like Rust's debug_assert but can be enabled separately to debug_assert. This is used to perform asserts on correctness.
  • Added is_normalized method to Vec2, Vec3 and Vec4.

Changed

  • Replaced usage of std::mem::uninitialized with std::mem::MaybeUninit. This change requires stable Rust 1.36.
  • Renamed Vec2b to Vec2Mask, Vec3b to Vec3Mask and Vec4b to Vec4Mask. Old names are aliased to the new name and deprecated.
  • Deprecate VecNMask mask method, use new bitmask method instead
  • Made fallback version of VecNMask types the same size and alignment as the SIMD versions.
  • Added Default support to VecNMask types, will add more common traits in the future.
  • Added #[inline] to mat2, mat3 and mat4 functions.

0.7.0 - 2019-06-28

Added

  • Added Mat2 into [f32; 4], Mat3 into [f32; 9] and Mat4 into [f32; 16].

Removed

  • Removed impl Mul<&Vec2> for Mat2 and impl Mul<&Vec3> for Vec3 as these don't exist for any other types.

0.6.1 - 2019-06-22

Changed

  • Mat2 now uses a Vec4 internally which gives it some performance improvements when SSE2 is available.

0.6.0 - 2019-06-13

Changed

  • Switched from row vectors to column vectors
  • Vectors are now on the right of multiplications with matrices and quaternions.