• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Changelog
2
3All notable changes to this project will be documented in this file.
4
5The format is based on [Keep a Changelog], and this project adheres to
6[Semantic Versioning].
7
8## [0.30.0] - 2025-02-18
9
10### Breaking changes
11
12* The `up` and `dir` vectors passed to affine and matrix `look_to_lh` and
13  `look_to_rh` methods must now be normalized. This was changed to be consistent
14  with other methods.
15
16* Updated the optional `rand` dependency to `0.9`
17
18* Updated the optional `rkyv` dependency to `0.8`
19
20### Added
21
22* Implemented `rand` `Uniform` distribution trait for  all vector types.
23
24* Added "swizzle assignment" support to vector swizzles, in the form of
25  `v.with_zx(ivec2(1, 2))` which will return a copy of `v` where the `z`
26  and `x` components are set to 1 and 2 respectively.
27
28* Added `Mat3` and `Quat` `look_at_lh` and `look_at_rh` methods.
29
30* Added `Quat` `look_to_lh` and `look_to_rh` methods.
31
32* Added 3D vector `slerp` method that performs a spherical linear interpolation
33  between a source and a target 3D vector.
34
35* Added `manhattan_distance`, `checked_manhattan_distance` and
36  `chebyshev_distance` methods to integer vector types which calculates the
37  Manhattan Distance and the Chebyshev Distance between two vectors.
38
39* Added 4x4 matrix `from_mat3_translation` method to have parity with the 3D
40  affine type.
41
42### Fixed
43
44* `Quat::rotate_towards()` now returns the target `Quat` if the angle is small.
45  Previously `self` was returned which could skip the rotation entirely.
46
47## [0.29.2] - 2024-11-05
48
49### Fixed
50
51* Fix regression in vector `write_to_slice` methods where the destination had to
52  be the same size as the input, but it should support writing to a slice that
53  is the same size or larger than the input.
54
55## [0.29.1] - 2024-10-30
56
57### Added
58
59* Added `i8` and `u8` vector types, `I8Vec2`, `I8Vec3`, `I8Vec4`,
60  `U8Vec2`, `U8Vec3` and `U8Vec4`.
61
62* Added `Mat4::project_point3a(Vec3A)` method transforming points by
63  perspective projections.
64
65### Changed
66
67* Removed normalized assertions from quaternion multiplies as sometimes this is
68  valid.
69
70* Include `Debug` and `Display` implementations on `spirv` targets.
71
72* Optimized vector `from_slice` and `write_to_slice` methods.
73
74* Improved `serde` error messages.
75
76## [0.29.0] - 2024-08-20
77
78### Breaking changes
79
80* `EulerRot` has been reimplemented and now has support for 24 different
81  rotation order enum values.
82
83### Fixed
84
85* Reduced the dot threshold at which quaternion slerp uses lerp to improve
86  accuracy.
87
88### Added
89
90* Added 3x3 matrix `from_mat4_minor()` and 2x2 matrix `from_mat3_minor()`
91  methods.
92
93* Added `bvec2`, `bvec3`, `bvec3a`, `bvec4` and `bvec4a` vector mask creation
94  functions.
95
96* Added all 24 possible intrinsic and extrinsic Euler angle rotation
97  combinations to `EulerRot` enum.
98
99* Added `is_finite_mask` method to vector types which returns a vector mask.
100
101* Added `reflect` and `refract` methods to vector types.
102
103* Added `to_euler` methods to matrix types which extracts Euler angles from a
104  rotation matrix for a given `EulerRot`.
105
106* Added generic `map` method to vector types which applies a functor to all
107  vector elements.
108
109* Vector arithmetic ops are now implemented on references.
110
111### Changed
112
113* Vector and quaternion lerp now uses a precise lerp algorithm.
114
115## [0.28.0] - 2024-06-10
116
117### Breaking changes
118
119* Removed derives from `glam::deref` types used by `Deref` on SIMD vector
120  types.  These unintentionally added support for traits like `PartialOrd` to
121  SIMD vector types. This may break existing code that was depending on this.
122  Please use `cmple().all()` etc. instead of `PartialOrd` methods.
123
124* Removed `impl From<Vec4> for Vec3A` as this violated the `From` trait
125  contract that conversions should be lossless. Please use the explicit
126  `Vec3A::from_vec4` method instead.
127
128* Renamed 2D vector `angle_between` to `angle_to` to differentiate from the 3D
129  `angle_between` which has different semantics to the 2D version.
130
131### Added
132
133* Added aarch64 neon support.
134
135* Added `rotate_towards` methods for 2D vectors and quaternions.
136
137* Added `Vec3A::from_vec4` method which can perform a no-op conversion when
138  SIMD is used. This replaces the `impl From<Vec4> for Vec3A` implementation.
139
140## [0.27.0] - 2024-03-23
141
142### Breaking changes
143
144* Changed implementation of vector `fract` method to match the Rust
145  implementation instead of the GLSL implementation, that is `self -
146  self.trunc()` instead of `self - self.floor()`.
147
148### Added
149
150* Added vector `fract_gl` which uses the GLSL specification of `fract`,
151 `self - self.floor()`.
152
153## [0.26.0] - 2024-03-18
154
155### Breaking changes
156
157* Minimum Supported Rust Version bumped to 1.68.2 for
158 `impl From<bool> for {f32,f64}` support.
159
160### Fixed
161
162* Respect precision format specifier in Display implementations. Previously it
163  was ignored.
164
165* Corrected precision documentation for vector `is_normalized` methods and
166  changed the internal check to use `2e-4` to better match the documented
167  precision value of `1e-4`.
168
169### Added
170
171 * Added `with_x`, `with_y`, etc. to vector types which returns a copy of
172   the vector with the new component value.
173
174 * Added `midpoint` method to vector types that returns the point between two
175   points.
176
177 * Added `move_towards` for float vector types.
178
179 * Added saturating add and sub methods for signed and unsigned integer vector
180   types.
181
182 * Added element wise sum and product methods for vector types.
183
184 * Added element wise absolute values method for matrix types.
185
186 * Added `from_array` method for boolean vector types.
187
188 * Added `normalize_or` method to vector types that returns the specified value
189   if normalization failed.
190
191 * Added `From<BVecN>` support for all vector types.
192
193 * Added `Div` and `DivAssign` by scalar implementations to matrix types.
194
195## [0.25.0] - 2023-12-19
196
197### Breaking changes
198
199* Changed `Vec4` to always used `BVec4A` as a mask type, regardless if the
200  target architecture has SIMD support in glam. Previously this was inconsistent
201  on different hardware like ARM. This will have a slight performance cost when
202  SIMD is not available. `Vec4` will continue to use `BVec4` as a mask type when
203  the `scalar-math` feature is used.
204
205### Fixed
206
207* Made `Affine2` implement the `bytemuck::AnyBitPattern` trait instead of
208  `bytemuck::Pod` as it contains internal padding due to `Mat2` being 16 byte
209  aligned.
210
211* Updated the `core-simd` implementation to build on latest nightly.
212
213### Added
214
215* Added `to_angle` method to 2D vectors.
216
217* Added `FloatExt` trait which adds `lerp`, `inverse_lerp` and `remap` methods
218  to `f32` and `f64` types.
219
220* Added `i16` and `u16` vector types, `I16Vec2`, `I16Vec3`, `I16Vec4`,
221  `U16Vec2`, `U16Vec3` and `U16Vec4`.
222
223### Changed
224
225* Renamed `Quat::as_f64()` to `Quat::as_dquat()` and `DQuat::as_f32()` to
226  `DQuat::as_quat()` to be consistent with other types. The old methods have
227  been deprecated.
228
229* Added the `#[must_use]` attribute to all pure functions following the
230  guidelines for the Rust standard library.
231
232## [0.24.2] - 2023-09-23
233
234### Fixed
235
236* Fixed singularities in `Quat::to_euler`.
237
238### Added
239
240* Added `div_euclid` and `rem_euclid` to integer vector types.
241
242* Added wrapping and saturating arithmetic operations to integer vector types.
243
244* Added `to_scale_angle_translation` to 2D affine types.
245
246* Added `mul_assign` ops to affine types.
247
248### Changed
249
250* Disable default features on optional `rkyv` dependency.
251
252## [0.24.1] - 2023-06-24
253
254### Added
255
256* Implemented missing `bytemuck`, `mint`, `rand`, `rkyv` and `serde` traits for
257  `i64` and `u64` types.
258
259* Added missing safe `From` conversions from `f32` vectors to `f64` vectors.
260
261* Added `TryFrom` implementations between different vector types.
262
263* Added `test` and `set` methods to `bool` vector types for testing and setting
264  individual mask elements.
265
266* Added `MIN`, `MAX`, `INFINITY` and `NEG_INFINITY` vector constants.
267
268## [0.24.0] - 2023-04-24
269
270### Breaking changes
271
272* Enabling `libm` in a `std` build now overrides the `std` math functions. This
273  is unlikely to break anything but it is a change in behavior.
274
275### Added
276
277* Added `i64` and `u64` vector types; `I64Vec2`, `I64Vec3`, `I64Vec4`,
278  `U64Vec2`, `U64Vec3` and `U64Vec4`.
279
280* Added `length_squared` method on signed and unsigned integer vector types.
281
282* Added `distance_squared` method on signed integer vector types.
283
284* Implemented the `bytemuck` `AnyBitPattern` trait on `Vec3A`, `Mat3A` and
285  `Affine3A`.
286
287### Changed
288
289* Changed quaternion `to_axis_angle` for improved numerical stability.
290
291### Removed
292
293* Removed dependency on `serde_derive` for improved compile times when using
294  `serde`.
295
296## [0.23.0] - 2023-02-22
297
298### Breaking changes
299
300* When the `scalar-math` feature is enabled the vector mask type for `Vec3A` was
301  changed from `BVec3` to `BVec3A`.
302
303### Added
304
305* Added `copysign` method to signed vector types.
306
307## [0.22.0] - 2022-10-24
308
309### Breaking changes
310
311* Added `u32` implementation of `BVec3A` and `BVec4` when SIMD is not available.
312  These are used instead of aliasing to the `bool` implementations.
313
314* Removed `Add`, `Sub`, and scalar `Mul` implementations from affine types as
315  they didn't make sense on these types.
316
317* Removed deprecated `const_*` macros. These have been replaced by `const fn`
318  methods.
319
320### Fixed
321
322* Fixed `neg` and `signum` to consistently handle negative zero across multiple
323  platforms.
324
325* Removed `register_attr` feature usage for SPIR-V targets.
326
327### Added
328
329* Added missing `Serialize`, `Deserialize` and `PartialEq` implementations.
330
331* Added `Sum<Self>` and `Product<Self>` implementations for all vector, matrix
332  and quaternion types.
333
334* Added 4x4 matrix methods `look_to_lh` and `look_to_rh`. These were previously
335  private.
336
337* Added `dot_into_vec` methods to vector which returns the result of the dot
338  product splatted to all vector lanes.
339
340* Added `is_negative_bitmask` to vector types which returns a `u32` of bits for
341  each negative vector lane.
342
343* Added `splat` method and `TRUE` and `FALSE` constants to all `BVec` types.
344
345* Added `from_mat3a` methods to `Affine2`, `Mat2`, `Mat4` and `Quat` types.
346
347### Changed
348
349* Disable `serde` default features.
350
351* Made `to_cols_array`, `to_cols_array_2d`, and `from_diagonal` methods
352 `const fn`.
353
354## [0.21.3] - 2022-08-02
355
356### Fixed
357
358* Fixed `glam_assert` being too restrictive in matrix transform point and
359  transform vector methods.
360
361### Added
362
363* Added experimental `core-simd` feature which enables SIMD support via the
364  unstable `core::simd` module.
365
366### Changed
367
368* Derive from `PartialEq` and `Eq` instead of providing a trait implementation
369  for all non SIMD types.
370
371## [0.21.2] - 2022-06-25
372
373### Fixed
374
375* Restore missing `$crate::` prefix in deprecated `const_*` macros.
376
377* Fixed some performance regressions in affine and matrix determinant and
378  inverses due to lack of inlining.
379
380* Fixed some performance regressions in the SSE2 `Vec3A` to `Vec3` from
381  conversion.
382
383### Added
384
385* Implemented `BitXor` and `BitXorAssign` traits for `bool` vectors.
386
387## [0.21.1] - 2022-06-22
388
389### Fixed
390
391* Fix compilation when FMA support is enabled.
392
393## [0.21.0] - 2022-06-22
394
395### Breaking changes
396
397* Minimum Supported Version of Rust bumped to 1.58.1 to allow `const` pointer
398  dereferences in constant evaluation.
399
400* The `abs_diff_eq` method on `Mat2` and `DMat2` now takes `other` by value
401  instead of reference. This is consistent with the other matrix types.
402
403* The `AsMut` and `Deref` trait implementations on `Quat` and `DQuat` was
404  removed. Quaternion fields are now public.
405
406* The `AsRef` trait implementations were removed from `BVec2`, `BVec3`,
407  `BVec3A`, `BVec4` and `BVec4A`.
408
409### Added
410
411* `NEG_ONE` constant was added to all signed vector types.
412
413* `NEG_X`, `NEG_Y`, `NEG_Z` and `NEG_W` negative axis vectors were added to
414  signed vector types.
415
416* The `rotate` and `from_angle` methods were added to `Vec2` and `DVec2`.
417  `from_angle` returns a 2D vector containing `[angle.cos(), angle.sin()]` that
418  can be used to `rotate` another 2D vector.
419
420* The `from_array` `const` function was added to all vector types.
421
422### Changed
423
424* Source code is now largely generated. This removes most usage of macros
425  internally to improve readability. There should be no change in API or
426  behavior other than what is documented here.
427
428* Many methods have been made `const fn`:
429  * `new`, `splat`, `from_slice`, `to_array` and `extend` on vector types
430  * `from_cols`, `from_cols_array`, `from_cols_array_2d`, `from_cols_slice` on
431    matrix types
432  * `from_xyzw` and `from_array` on quaternion types
433  * `from_cols` on affine types
434
435* The `const` new macros where deprecated.
436
437### Removed
438
439* Deleted deprecated `TransformRT` and `TransformSRT` types.
440
441## [0.20.5] - 2022-04-12
442
443### Fixed
444
445* Fixed a bug in the scalar implementation of 4D vector `max_element` method
446  where the `w` element check was incorrect.
447
448## [0.20.4] - 2022-04-11
449
450### Fixed
451
452* Fixed a bug with quaternion `slerp` with a rotation of tau.
453
454## [0.20.3] - 2022-03-28
455
456### Added
457
458* Added `to_array()` to `Quat` and `DQuat`.
459* Added `mul_add` method to all vector types - note that this will be slower
460  without hardware support enabled.
461* Added the `fast-math` flag which will sacrifice some float determinism for
462  speed.
463
464### Fixed
465
466* Fixed a bug in the `sse2` and `wasm32` implementations of
467  `Mat4::determinant()`.
468
469## [0.20.2] - 2021-12-20
470
471### Fixed
472
473* Fixed SPIR-V build which was broken due to a typo.
474
475## [0.20.1] - 2021-11-23
476
477### Added
478
479* Added the `from_rotation_arc_2d()` method to `Quat` and `DQuat` which will
480  return a rotation between two 2D vectors around the z axis.
481* Added impl of `Neg` operator for matrix types.
482* Added `cuda` feature which forces `glam` types to match cuda's alignment
483  requirements.
484
485### Changed
486
487* The `Quat` and `DQuat` methods `from_rotation_arc()` and
488  `from_rotation_arc_colinear()` are now available in `no_std`.
489* The `Vec3` and `DVec3` methods `any_orthogonal_vector()`,
490  `any_orthonormal_vector()` and `any_orthonormal_pair()` are now available in
491  `no_std`.
492* Added `repr(C)` attribute to affine types.
493
494### Removed
495
496* Removed deprecated `as_f32()`, `as_f64()`, `as_i32()` and `as_u32()` methods.
497
498## [0.20.0] - 2021-11-01
499
500### Breaking changes
501
502* Minimum Supported Version of Rust bumped to 1.52.1 for an update to the `mint`
503  crate.
504
505### Added
506
507* Added implementations for new `IntoMint` trait from the `mint` crate.
508* Added `mint` conversions for `Mat3A`.
509* Added `as_vec3a` cast methods to vector types.
510
511## [0.19.0] - 2021-10-05
512
513### Breaking changes
514
515* Removed truncating vector `From` implementations. Use `.truncate()` or swizzle
516  methods instead.
517
518### Added
519
520* Added `Not`, `Shl`, `Shr`, `BitAnd`, `BitOr` and `BitXor` implementations for
521  all `IVec` and `UVec` vector types.
522* Added `NAN` constant for all types.
523* Documented `glam`'s [architecture](ARCHITECTURE.md).
524
525### Changed
526
527* `Sum` and `Product` traits are now implemented in `no_std` builds.
528
529## [0.18.0] - 2021-08-26
530
531### Breaking changes
532
533* Minimum Supported Version of Rust bumped to 1.51.0 for `wasm-bindgen-test`
534  and `rustdoc` `alias` support.
535
536### Added
537
538* Added `wasm32` SIMD intrinsics support.
539* Added optional support for the `rkyv` serialization crate.
540* Added `Rem` and `RemAssign` implementations for all vector types.
541* Added quaternion `xyz()` method for returning the vector part of the
542  quaternion.
543* Added `From((Scalar, Vector3))` for 4D vector types.
544
545### Changed
546
547* Deprecated `as_f32()`, `as_f64()`, `as_i32()` and `as_u32()` methods in favor
548  of more specific methods such as `as_vec2()`, `as_dvec2()`, `as_ivec2()` and
549  `as_uvec2()` and so on.
550
551## [0.17.3] - 2021-07-18
552
553### Fixed
554
555* Fix alignment unit tests on non x86 platforms.
556
557## [0.17.2] - 2021-07-15
558
559### Fixed
560
561* Fix alignment unit tests on i686 and S390x.
562
563## [0.17.1] - 2021-06-29
564
565### Added
566
567* Added `serde` support for `Affine2`, `DAffine2`, `Affine3A` and `DAffine3`.
568
569## [0.17.0] - 2021-06-26
570
571### Breaking changes
572
573* The addition of `Add` and `Sub` implementations of scalar values for vector
574  types may create ambiguities with existing calls to `add` and `sub`.
575* Removed `From<Mat3>` implementation for `Mat2` and `From<DMat3>` for `DMat2`.
576  These have been replaced by `Mat2::from_mat3()` and `DMat2::from_mat3()`.
577* Removed `From<Mat4>` implementation for `Mat3` and `From<DMat4>` for `DMat3`.
578  These have been replaced by `Mat3::from_mat4()` and `DMat3::from_mat4()`.
579* Removed deprecated `from_slice_unaligned()`, `write_to_slice_unaligned()`,
580  `from_rotation_mat4` and `from_rotation_ypr()` methods.
581
582### Added
583
584* Added `col_mut()` method which returns a mutable reference to a matrix column
585  to all matrix types.
586* Added `AddAssign`, `MulAssign` and `SubAssign` implementations for all matrix
587  types.
588* Added `Add` and `Sub` implementations of scalar values for vector types.
589* Added more `glam_assert!` checks and documented methods where they are used.
590* Added vector projection and rejection methods `project_onto()`,
591  `project_onto_normalized()`, `reject_from()` and `reject_from_normalized()`.
592* Added `Mat2::from_mat3()`, `DMat2::from_mat3()`, `Mat3::from_mat4()`,
593  `DMat3::from_mat4()` which create a smaller matrix from a larger one,
594  discarding a final row and column of the input matrix.
595* Added `Mat3::from_mat2()`, `DMat3::from_mat2()`, `Mat4::from_mat3()` and
596  `DMat4::from_mat3()` which create an affine transform from a smaller linear
597  transform matrix.
598
599### Changed
600
601* Don't support `AsRef` and `AsMut` on SPIR-V targets. Also removed SPIR-V
602  support for some methods that used `as_ref()`, including `hash()`. Not a
603  breaking change as these methods would not have worked anyway.
604
605### Fixed
606
607* Fixed compile time alignment checks failing on i686 targets.
608
609## [0.16.0] - 2021-06-06
610
611### Breaking changes
612
613* `sprirv-std` dependency was removed, rust-gpu depends on glam internally
614  again for now.
615* Added `must_use` attribute to all `inverse()`, `normalize()`,
616  `try_normalize()`, `transpose()` and `conjugate()` methods.
617
618### Added
619
620* Added `fract()` method to float vector types which return a vector containing
621  `self - self.floor()`.
622* Added optional support for the `approx` crate. Note that all glam types
623  implement their own `abs_diff_eq()` method without requiring the `approx`
624  dependency.
625
626## [0.15.2] - 2021-05-20
627
628### Added
629
630* Added `from_cols()` methods to affine types.
631* Added methods for reading and writing affine types from and to arrays and
632  slices, including `from_cols_array()`, `to_cols_array()`,
633  `from_cols_array_2d()`, `to_cols_array_2d()`, `from_cols_slice()` and
634  `write_cols_to_slice()`.
635* Added `core::fmt::Display` trait implementations for affine types.
636* Added `core::ops::Add`, `core::ops::Mul` scalar and `core::ops::Sub` trait
637  implementations for affine types.
638* Added `from_array()` methods to quaternion types.
639
640### Changed
641
642* Renamed vector and quaternion `from_slice_unaligned()` and
643  `write_to_slice_unaligned()` methods to `from_slice()` and
644  `write_to_slice()`.
645* Removed usage of `_mm_rcp_ps` from SSE2 implementation of `Quat::slerp` as
646  this instruction is not deterministic between Intel and AMD chips.
647
648## [0.15.1] - 2021-05-14
649
650### Changed
651
652* Disable `const_assert_eq!` size and alignment checks for SPIR-V targets.
653
654## [0.15.0] - 2021-05-14
655
656### Breaking changes
657
658* Removed `PartialOrd` and `Ord` trait implementations for all `glam` types.
659* Removed deprecated `zero()`, `one()`, `unit_x()`, `unit_y()`, `unit_z()`,
660  `unit_w()`, `identity()` and `Mat2::scale()` methods.
661* Remove problematic `Quat` `From` trait conversions which would allow creating
662  a non-uniform quaternion without necessarily realizing, including from
663  `Vec4`, `(x, y, z, w)` and `[f32; 4]`.
664
665### Added
666
667* Added `EulerRot` enum for specifying Euler rotation order and
668  `Quat::from_euler()`, `Mat3::from_euler()` and `Mat4::from_euler()` which
669  support specifying a rotation order and angles of rotation.
670* Added `Quat::to_euler()` method for extracting Euler angles.
671* Added `Quat::from_vec4()` which is an explicit method for creating a
672  quaternion from a 4D vector. The method does not normalize the resulting
673  quaternion.
674* Added `Mat3A` type which uses `Vec3A` columns. It is 16 byte aligned and
675  contains internal padding but it generally faster than `Mat3` for most
676  operations if SIMD is available.
677* Added 3D affine transform types `Affine3A` and `DAffine3`. These are more
678  efficient than using `Mat4` and `DMat4` respectively when working with 3D
679  affine transforms.
680* Added 2D affine transform types `Affine2` and `DAffine2`. These are more
681  efficient than using `Mat3` and `DMat3` respectively when working with 2D
682  affine transforms.
683* Added `Quat::from_affine3()` to create a quaternion from an affine transform
684  rotation.
685* Added explicit `to_array()` method to vector types to better match the matrix
686  methods.
687
688### Changed
689
690* Deprecated `Quat::from_rotation_ypr()`, `Mat3::from_rotation_ypr()` and
691  `Mat4::from_rotation_ypr()` in favor of new `from_euler()` methods.
692* Deprecated `Quat::from_rotation_mat3()` and `Quat::from_rotation_mat4()` in
693  favor of new `from_mat3` and `from_mat4` methods.
694* Deprecated `TransformSRT` and `TransformRT` which are under the
695  `transform-types` feature. These will be moved to a separate experimental
696  crate.
697* Updated `spirv-std` dependency version to `0.4.0-alpha7`.
698
699## [0.14.0] - 2021-04-09
700
701### Breaking changes
702
703* Minimum Supported Version of Rust bumped to 1.45.0 for the `spirv-std`
704  dependency.
705
706### Added
707
708* Added `AXES[]` constants to all vector types. These are arrays containing the
709  unit vector for each axis.
710* Added quaternion `from_scaled_axis` and `to_scaled_axis` methods.
711
712### Changed
713
714* Updated dependency versions of `bytemuck` to `1.5`, `rand` to `0.8`,
715  `rand_xoshiro` to `0.6` and `spirv-std` to `0.4.0-alpha4`.
716
717## [0.13.1] - 2021-03-24
718
719### Added
720
721* Added vector `clamp()` functions.
722* Added matrix column and row accessor methods, `col()` and `row()`.
723* Added SPIR-V module and dependency on `spirv-std` for the SPIR-V target.
724* Added matrix truncation from 4x4 to 3x3 and 3x3 to 2x2 via `From` impls.
725
726### Changed
727
728* Documentation corrections and improvements.
729
730## [0.13.0] - 2021-03-04
731
732### Breaking Changes
733
734* The behavior of the 4x4 matrix method `transform_point3()` was changed to not
735  perform the perspective divide. This is an optimization for use with affine
736  transforms where perspective correction is not required. The
737  `project_point3()` method was added for transforming points by perspective
738  projections.
739* The 3x3 matrix `from_scale()` method was changed to
740  create a affine transform containing a 2-dimensional non-uniform scale to be
741  consistent with the 4x4 matrix version. The
742  `from_diagonal()` method can be used to create a 3x3 scale matrix.
743* The 3x3 matrix methods `transform_point2_as_vec3a`,
744  `transform_vector2_as_vec3a` and `mul_vec3_as_vec3a` were unintentionally
745  `pub` and are no longer publicly accessible.
746
747### Added
748
749* Added `Vec2::X`, `Vec4::W` etc constants as a shorter versions of `unit_x()`
750  and friends.
751* Added `ONE` constants for vectors.
752* Added `IDENTITY` constants for `Mat2`, `Mat3`, `Mat4` and `Quat`.
753* Added `ZERO` constant for vectors and matrices.
754* Added `clamp_length()`, `clamp_length_max()`, and `clamp_length_min` methods
755  for `f32` and `f64` vector types.
756* Added `try_normalize()` and `normalize_or_zero()` for all real vector types.
757* Added `from_diagonal()` methods to all matrix types for creating diagonal
758  matrices from a vector.
759* Added `angle_between()`, `from_rotation_arc()` and
760  `from_rotation_arc_colinear()` to quaternion types.
761* Added quaternion `inverse()` which assumes the quaternion is already
762  normalized and returns the conjugate.
763* Added `from_translation()` and `from_angle()` methods to 3x3 matrix types.
764* Added `project_point3()` method to 4x4 matrix types. This method is for
765  transforming 3D vectors by perspective projection transforms.
766* Added `Eq` and `Hash` impls for integer vector types.
767
768### Changed
769
770* Deprecated `::unit_x/y/z()`, `::zero()`, `::one()`, `::identity()` functions
771  in favor of constants.
772
773## [0.12.0] - 2021-01-15
774
775### Breaking Changes
776
777* `Vec2Mask`, `Vec3Mask` and `Vec4Mask` have been replaced by `BVec2`, `BVec3`,
778  `BVec3A`, `BVec4` and `BVec4A`. These types are used by some vector methods
779  and are not typically referenced directly.
780
781### Added
782
783* Added `f64` primitive type support
784  * vectors: `DVec2`, `DVec3` and `DVec4`
785  * square matrices: `DMat2`, `DMat3` and `DMat4`
786  * a quaternion type: `DQuat`
787* Added `i32` primitive type support
788  * vectors: `IVec2`, `IVec3` and `IVec4`
789* Added `u32` primitive type support
790  * vectors: `UVec2`, `UVec3` and `UVec4`
791* Added `bool` primitive type support
792  * vectors: `BVec2`, `BVec3` and `BVec4`
793
794### Removed
795
796* `build.rs` has been removed.
797
798## [0.11.3] - 2020-12-29
799
800### Changed
801
802* Made `Vec3` `repr(simd)` for `spirv` targets.
803
804### Added
805
806* Added `From<(Vec2, f32)>` for `Vec3` and `From<(Vec3, f32)` for `Vec4`.
807
808## [0.11.2] - 2020-12-04
809
810### Changed
811
812* Compilation fixes for Rust 1.36.0.
813
814## [0.11.1] - 2020-12-03
815
816### Added
817
818* Added support for the [Rust GPU](https://github.com/EmbarkStudios/rust-gpu)
819  SPIR-V target architecture.
820
821## [0.11.0] - 2020-11-26
822
823### Added
824
825* Added `is_finite` method to all types which returns `true` if, and only if,
826  all contained elements are finite.
827* Added `exp` and `powf` methods for all vector types.
828
829### Changed
830
831* The `is_nan` method now returns a `bool` to match the new `is_finite` method
832  and to be consistent with the same methods on the `f32` and `f64` primitive
833  types.
834* Renamed `is_nan` which returns a vector mask to `is_nan_mask`.
835* Don't use the `cfg` definitions added by `build.rs` for defining structs as
836  `rust-analyzer` is not aware of them.
837
838### Removed
839
840* Removed deprecated accessor methods.
841
842## [0.10.2] - 2020-11-17
843
844### Changed
845
846* Deprecated element accessor members `.x()`, `.x_mut()`, `.set_x()`, etc. on
847  vector and quaternion types.
848* Deprecated column accessor members `.x_axis()`, `.x_axis_mut()`,
849  `.set_x_axis()`, etc. on matrix types.
850
851## [0.10.1] - 2020-11-15
852
853### Added
854
855* Added the `Vec2::perp` method which returns a `Vec2` perpendicular to `self`.
856
857### Changed
858
859* `Vec2` and `Vec3` types were changed to use public named fields for `.x`,
860  `.y`, and `.z` instead of accessors.
861* `Quat`, `Vec3A` and `Vec4` implement `Deref` and `DerefMut` for the new `XYZ`
862  and `XYZW` structs to emulate public named field access.
863* `Mat3` and `Mat4` had their axis members made public instead of needing
864  accessors.
865* `Mat2` implements `Deref` and `DerefMut` for the new `XYAxes` struct to
866  emulate public named field access.
867
868### Removed
869
870* Removed deprecated `length_reciprocal` and `sign` methods.
871
872### Fixed
873
874* Adding `glam` as a `no_std` dependency should now work as expected.
875
876## [0.10.0] - 2020-10-31
877
878### Breaking Changes
879
880* Changed the return type of `Vec4::truncate` from `Vec3A` to `Vec3`.
881
882### Added
883
884* Added `From` implementations to truncate to narrower vector types, e.g.
885  `Vec4` to `Vec3A`, `Vec3` and `Vec2` and from `Vec3A` and `Vec3` to `Vec2`.
886* Added swizzles for `Vec4`, `Vec3A`, `Vec3` and `Vec2`. These can be used to
887  reorder elements in the same type and also to create larger or smaller
888  vectors from the given vectors elements.
889* Added `Quat` operators `Add<Quat>`, `Sub<Quat>`, `Mul<f32>` and `Div<f32`.
890  These are used by other crates for interpolation quaternions along splines.
891  Note that these operations will not return unit length quaternions, thus the
892  results must be normalized before performing other `Quat` operations.
893* Added `Mat4::transform_point3a` and `Mat4::transform_vector3a`.
894* Added `AsRef<[f32; 9]>` and `AsMut<[f32; 9]>` trait implementations to `Mat3`.
895* Added optional `bytemuck` support primarily for casting types to `&[u8]`.
896* Added support for compiling with `no_std` by disabling the default `std`
897  feature and adding the `libm` feature.
898* Added `distance` and `distance_squared` methods to `Vec2`, `Vec3`, `Vec3A`
899  and `Vec4`.
900
901## [0.9.5] - 2020-10-10
902
903### Added
904
905* `glam` uses SSE2 for some types which prevents constructor functions can not
906  be made `const fn`. To work around this limitation the following macro
907  functions have been added to support creating `const` values of `glam` types:
908  `const_mat2`, `const_mat3`, `const_mat4`, `const_quat`, `const_vec2`,
909  `const_vec3`, `const_vec3a` and `const_vec4`.
910* Added `is_nan` methods to `Vec2`, `Vec3`, `Vec3A` and `Vec4` which return a
911  mask.
912
913## Changed
914
915* Renamed the vector `reciprocal` and `length_reciprocal` methods to `recip`
916  and `length_recip` to match the Rust standard library naming. The old methods
917  have been deprecated.
918* Renamed the vector `sign` methods to `signum` match the Rust standard library
919  naming. The new methods now check for `NAN`. The old methods have been
920  deprecated.
921* Added SSE2 optimized implementations of `Mat4::determinant` and
922  `Mat4::inverse`.
923
924### Removed
925
926* Removed deprecated function `Mat4::perspective_glu_rh`.
927
928## [0.9.4] - 2020-08-31
929
930### Fixed
931
932* Fixed `Mat4::transform_point3` to account for homogeneous w coordinate.
933  Previously this would have been incorrect when the resulting homogeneous
934  coordinate was not 1.0, e.g. when transforming by a perspective projection.
935* Fixed `Mat3::transform_point2` to account for homogeneous z coordinate.
936
937## [0.9.3] - 2020-08-11
938
939### Added
940
941* Added `Mat4::perspective_rh`.
942
943## [0.9.2] - 2020-07-09
944
945### Added
946
947* Added `Mat3::mul_vec3a` and `Quat::mul_vec3a`.
948
949### Changed
950
951* Changed `Quat::mul_vec3` to accept and return `Vec3` instead of `Vec3A`.
952
953## [0.9.1] - 2020-07-01
954
955### Added
956
957* Added `Mat3 * Vec3A` implementation.
958* Added `Vec3A` benches.
959
960### Changed
961
962* Some documentation improvements around the new `Vec3A` type.
963
964## [0.9.0] - 2020-06-28
965
966### Added
967
968* `Vec3` has been split into scalar `Vec3` and 16 byte aligned `Vec3A` types.
969  Only the `Vec3A` type currently uses SIMD optimizations.
970* `Vec3Mask` has been split into scalar `Vec3Mask` and 16 byte aligned
971  `Vec3AMask` types.
972* Added `mut` column accessors to all matrix types, e.g. `Mat2::x_axis_mut()`.
973* Added `From` trait implementations for `Vec3AMask` and `Vec4Mask` to `__m128`.
974
975### Changed
976
977* The `Mat3` type is using the scalar `Vec3` type for storage.
978* Simplified `Debug` trait output for `Quat`, `Vec4` and `Vec3A`.
979
980## Removed
981
982* Removed the `packed-vec3` feature flag as it is now redundant.
983
984## [0.8.7] - 2020-04-28
985
986### Added
987
988* Added `Quat::slerp` - note that this uses a `sin` approximation.
989* Added `angle_between` method for `Vec2` and `Vec3`.
990* Implemented `Debug`, `Display`, `PartialEq`, `Eq`, `PartialOrd`, `Ord`,
991  `Hash`, and `AsRef` traits for `Vec2Mask`, `Vec3Mask` and `Vec4Mask`.
992* Added conversion functions from `Vec2Mask`, `Vec3Mask` and `Vec4Mask` to an
993  array of `[u32]`.
994* Added `build.rs` to simplify conditional feature compilation.
995
996### Changed
997
998* Increased test coverage.
999
1000### Removed
1001
1002* Removed `cfg-if` dependency.
1003
1004## [0.8.6] - 2020-02-18
1005
1006### Added
1007
1008* Added the `packed-vec3` feature flag to disable using SIMD types for `Vec3`
1009  and `Mat3` types. This avoids wasting some space due to 16 byte alignment at
1010  the cost of some performance.
1011* Added `x_mut`, `y_mut`, `z_mut`, `w_mut` where appropriate to `Vec2`, `Vec3`
1012  and `Vec4`.
1013* Added implementation of `core::ops::Index` and `core::ops::IndexMut` for
1014  `Vec2`, `Vec3` and `Vec4`.
1015
1016### Changed
1017
1018* Merged SSE2 and scalar `Vec3` and `Vec4` implementations into single files
1019  using the `cfg-if` crate.
1020
1021## [0.8.5] - 2020-01-02
1022
1023### Added
1024
1025* Added projection functions `Mat4::perspective_lh`,
1026  `Mat4::perspective_infinite_lh`, `Mat4::perspective_infinite_reverse_lh`,
1027  `Mat4::orthgraphic_lh` and `Mat4::orthographic_rh`.
1028* Added `round`, `ceil` and `floor` methods to `Vec2`, `Vec3` and `Vec4`.
1029
1030## [0.8.4] - 2019-12-17
1031
1032### Added
1033
1034* Added `Mat4::to_scale_rotation_translation` for extracting scale, rotation and
1035  translation from a 4x4 homogeneous transformation matrix.
1036* Added `cargo-deny` GitHub Action.
1037
1038### Changed
1039
1040* Renamed `Quat::new` to `Quat::from_xyzw`.
1041
1042## [0.8.3] - 2019-11-27
1043
1044### Added
1045
1046* Added `Mat4::orthographic_rh_gl`.
1047
1048### Changed
1049
1050* Renamed `Mat4::perspective_glu_rh` to `Mat4::perspective_rh_gl`.
1051* SSE2 optimizations for `Mat2::determinant`, `Mat2::inverse`,
1052  `Mat2::transpose`, `Mat3::transpose`, `Quat::conjugate`, `Quat::lerp`,
1053  `Quat::mul_vec3`, `Quat::mul_quat` and `Quat::from_rotation_ypr`.
1054* Disabled optimizations to `Mat4::transform_point3` and
1055  `Mat4::transform_vector3` as they are probably incorrect and need
1056  investigating.
1057* Added missing `#[repr(C)]` to `Mat2`, `Mat3` and `Mat4`.
1058* Benchmarks now store output of functions to better estimate the cost of a
1059  function call.
1060
1061### Removed
1062
1063* Removed deprecated functions `Mat2::new`, `Mat3::new` and `Mat4::new`.
1064
1065## [0.8.2] - 2019-11-06
1066
1067### Changed
1068
1069* `glam_assert!` is no longer enabled by default in debug builds, it can be
1070  enabled in any configuration using the `glam-assert` feature or in debug
1071  builds only using the `debug-glam-assert` feature.
1072
1073### Removed
1074
1075* `glam_assert!`'s checking `lerp` is bounded between 0.0 and 1.0 and that
1076  matrix scales are non-zero have been removed.
1077
1078## [0.8.1] - 2019-11-03
1079
1080### Added
1081
1082* Added `Display` trait implementations for `Mat2`, `Mat3` and `Mat4`.
1083
1084### Changed
1085
1086* Disabled `glam`'s SSE2 `sin_cos` implementation - it became less precise for
1087  large angle values.
1088* Reduced the default epsilon used by the `is_normalized!` macro from
1089  `std::f32::EPSILON` to `1e-6`.
1090
1091## [0.8.0] - 2019-10-14
1092
1093### Removed
1094
1095* Removed the `approx` crate dependency. Each `glam` type has an `abs_diff_eq`
1096  method added which is used by unit tests for approximate floating point
1097  comparisons.
1098* Removed the `Angle` type. All angles are now `f32` and are expected to
1099  be in radians.
1100* Removed the deprecated `Vec2b`, `Vec3b` and `Vec4b` types and the `mask`
1101  methods on `Vec2Mask`, `Vec3Mask` and `Vec4Mask`.
1102
1103### Changed
1104
1105* The `rand` crate dependency has been removed from default features. This was
1106  required for benchmarking but a simple random number generator has been added
1107  to the benches `support` module instead.
1108* The `From` trait implementation converting between 1D and 2D `f32` arrays and
1109  matrix types have been removed. It was ambiguous how array data would map to
1110  matrix columns so these have been replaced with explicit methods
1111  `from_cols_array` and `from_cols_array_2d`.
1112* Matrix `new` methods have been renamed to `from_cols` to be consistent with
1113  the other methods that create matrices from data.
1114* Renamed `Mat4::perspective_glu` to `Mat4::perspective_glu_rh`.
1115
1116## [0.7.2] - 2019-09-22
1117
1118### Fixed
1119
1120* Fixed incorrect projection matrix methods `Mat4::look_at_lh`
1121  and `Mat4::look_at_rh`.
1122
1123### Added
1124
1125* Added support for building infinite projection matrices, including both
1126  standard and reverse depth `Mat4::perspective_infinite_rh` and
1127  `Mat4::perspective_infinite_rh`.
1128* Added `Vec2Mask::new`, `Vec3Mask::new` and `Vec4Mask::new` methods.
1129* Implemented `std::ops` `BitAnd`, `BitAndAssign`, `BitOr`, `BitOrAssign`
1130  and `Not` traits for `Vec2Mask`, `Vec3Mask` and `Vec4Mask`.
1131* Added method documentation for `Vec4` and `Vec4Mask` types.
1132* Added missing `serde` implementations for `Mat2`, `Mat3` and `Mat4`.
1133* Updated `rand` and `criterion` versions.
1134
1135## [0.7.1] - 2019-07-08
1136
1137### Fixed
1138
1139* The SSE2 implementation of `Vec4` `dot` was missing a shuffle, meaning the
1140  `dot`, `length`, `length_squared`, `length_reciprocal` and `normalize`
1141  methods were sometimes incorrect.
1142
1143### Added
1144
1145* Added the `glam_assert` macro which behaves like Rust's `debug_assert` but
1146  can be enabled separately to `debug_assert`. This is used to perform
1147  asserts on correctness.
1148* Added `is_normalized` method to `Vec2`, `Vec3` and `Vec4`.
1149
1150### Changed
1151
1152* Replaced usage of `std::mem::uninitialized` with `std::mem::MaybeUninit`. This
1153  change requires stable Rust 1.36.
1154* Renamed `Vec2b` to `Vec2Mask`, `Vec3b` to `Vec3Mask` and `Vec4b` to
1155  `Vec4Mask`. Old names are aliased to the new name and deprecated.
1156* Deprecate `VecNMask` `mask` method, use new `bitmask` method instead
1157* Made fallback version of `VecNMask` types the same size and alignment as the
1158  SIMD versions.
1159* Added `Default` support to `VecNMask` types, will add more common traits in
1160  the future.
1161* Added `#[inline]` to `mat2`, `mat3` and `mat4` functions.
1162
1163## [0.7.0] - 2019-06-28
1164
1165### Added
1166
1167* Added `Mat2` into `[f32; 4]`, `Mat3` into `[f32; 9]` and `Mat4` into
1168  `[f32; 16]`.
1169
1170### Removed
1171
1172* Removed `impl Mul<&Vec2> for Mat2` and `impl Mul<&Vec3> for Vec3` as these
1173  don't exist for any other types.
1174
1175## [0.6.1] - 2019-06-22
1176
1177### Changed
1178
1179* `Mat2` now uses a `Vec4` internally which gives it some performance
1180   improvements when SSE2 is available.
1181
1182## 0.6.0 - 2019-06-13
1183
1184### Changed
1185
1186* Switched from row vectors to column vectors
1187* Vectors are now on the right of multiplications with matrices and quaternions.
1188
1189[Keep a Changelog]: https://keepachangelog.com/
1190[Semantic Versioning]: https://semver.org/spec/v2.0.0.html
1191[Unreleased]: https://github.com/bitshifter/glam-rs/compare/0.30.0...HEAD
1192[0.30.0]: https://github.com/bitshifter/glam-rs/compare/0.29.2...0.30.0
1193[0.29.2]: https://github.com/bitshifter/glam-rs/compare/0.29.1...0.29.2
1194[0.29.1]: https://github.com/bitshifter/glam-rs/compare/0.29.0...0.29.1
1195[0.29.0]: https://github.com/bitshifter/glam-rs/compare/0.28.0...0.29.0
1196[0.28.0]: https://github.com/bitshifter/glam-rs/compare/0.27.0...0.28.0
1197[0.27.0]: https://github.com/bitshifter/glam-rs/compare/0.26.0...0.27.0
1198[0.26.0]: https://github.com/bitshifter/glam-rs/compare/0.25.0...0.26.0
1199[0.25.0]: https://github.com/bitshifter/glam-rs/compare/0.24.2...0.25.0
1200[0.24.2]: https://github.com/bitshifter/glam-rs/compare/0.24.1...0.24.2
1201[0.24.1]: https://github.com/bitshifter/glam-rs/compare/0.24.0...0.24.1
1202[0.24.0]: https://github.com/bitshifter/glam-rs/compare/0.23.0...0.24.0
1203[0.23.0]: https://github.com/bitshifter/glam-rs/compare/0.22.0...0.23.0
1204[0.22.0]: https://github.com/bitshifter/glam-rs/compare/0.21.3...0.22.0
1205[0.21.3]: https://github.com/bitshifter/glam-rs/compare/0.21.2...0.21.3
1206[0.21.2]: https://github.com/bitshifter/glam-rs/compare/0.21.1...0.21.2
1207[0.21.1]: https://github.com/bitshifter/glam-rs/compare/0.21.0...0.21.1
1208[0.21.0]: https://github.com/bitshifter/glam-rs/compare/0.20.5...0.21.0
1209[0.20.5]: https://github.com/bitshifter/glam-rs/compare/0.20.4...0.20.5
1210[0.20.4]: https://github.com/bitshifter/glam-rs/compare/0.20.3...0.20.4
1211[0.20.3]: https://github.com/bitshifter/glam-rs/compare/0.20.2...0.20.3
1212[0.20.2]: https://github.com/bitshifter/glam-rs/compare/0.20.1...0.20.2
1213[0.20.1]: https://github.com/bitshifter/glam-rs/compare/0.20.0...0.20.1
1214[0.20.0]: https://github.com/bitshifter/glam-rs/compare/0.19.0...0.20.0
1215[0.19.0]: https://github.com/bitshifter/glam-rs/compare/0.18.0...0.19.0
1216[0.18.0]: https://github.com/bitshifter/glam-rs/compare/0.17.3...0.18.0
1217[0.17.3]: https://github.com/bitshifter/glam-rs/compare/0.17.2...0.17.3
1218[0.17.2]: https://github.com/bitshifter/glam-rs/compare/0.17.1...0.17.2
1219[0.17.1]: https://github.com/bitshifter/glam-rs/compare/0.17.0...0.17.1
1220[0.17.0]: https://github.com/bitshifter/glam-rs/compare/0.16.0...0.17.0
1221[0.16.0]: https://github.com/bitshifter/glam-rs/compare/0.15.2...0.16.0
1222[0.15.2]: https://github.com/bitshifter/glam-rs/compare/0.15.1...0.15.2
1223[0.15.1]: https://github.com/bitshifter/glam-rs/compare/0.15.0...0.15.1
1224[0.15.0]: https://github.com/bitshifter/glam-rs/compare/0.14.0...0.15.0
1225[0.14.0]: https://github.com/bitshifter/glam-rs/compare/0.13.1...0.14.0
1226[0.13.1]: https://github.com/bitshifter/glam-rs/compare/0.13.0...0.13.1
1227[0.13.0]: https://github.com/bitshifter/glam-rs/compare/0.12.0...0.13.0
1228[0.12.0]: https://github.com/bitshifter/glam-rs/compare/0.11.3...0.12.0
1229[0.11.3]: https://github.com/bitshifter/glam-rs/compare/0.11.2...0.11.3
1230[0.11.2]: https://github.com/bitshifter/glam-rs/compare/0.11.1...0.11.2
1231[0.11.1]: https://github.com/bitshifter/glam-rs/compare/0.11.0...0.11.1
1232[0.11.0]: https://github.com/bitshifter/glam-rs/compare/0.10.2...0.11.0
1233[0.10.2]: https://github.com/bitshifter/glam-rs/compare/0.10.1...0.10.2
1234[0.10.1]: https://github.com/bitshifter/glam-rs/compare/0.10.0...0.10.1
1235[0.10.0]: https://github.com/bitshifter/glam-rs/compare/0.9.5...0.10.0
1236[0.9.5]: https://github.com/bitshifter/glam-rs/compare/0.9.4...0.9.5
1237[0.9.4]: https://github.com/bitshifter/glam-rs/compare/0.9.3...0.9.4
1238[0.9.3]: https://github.com/bitshifter/glam-rs/compare/0.9.2...0.9.3
1239[0.9.2]: https://github.com/bitshifter/glam-rs/compare/0.9.1...0.9.2
1240[0.9.1]: https://github.com/bitshifter/glam-rs/compare/0.9.0...0.9.1
1241[0.9.0]: https://github.com/bitshifter/glam-rs/compare/0.8.7...0.9.0
1242[0.8.7]: https://github.com/bitshifter/glam-rs/compare/0.8.6...0.8.7
1243[0.8.6]: https://github.com/bitshifter/glam-rs/compare/0.8.5...0.8.6
1244[0.8.5]: https://github.com/bitshifter/glam-rs/compare/0.8.4...0.8.5
1245[0.8.4]: https://github.com/bitshifter/glam-rs/compare/0.8.3...0.8.4
1246[0.8.3]: https://github.com/bitshifter/glam-rs/compare/0.8.2...0.8.3
1247[0.8.2]: https://github.com/bitshifter/glam-rs/compare/0.8.1...0.8.2
1248[0.8.1]: https://github.com/bitshifter/glam-rs/compare/0.8.0...0.8.1
1249[0.8.0]: https://github.com/bitshifter/glam-rs/compare/0.7.2...0.8.0
1250[0.7.2]: https://github.com/bitshifter/glam-rs/compare/0.7.1...0.7.2
1251[0.7.1]: https://github.com/bitshifter/glam-rs/compare/0.7.0...0.7.1
1252[0.7.0]: https://github.com/bitshifter/glam-rs/compare/0.6.1...0.7.0
1253[0.6.1]: https://github.com/bitshifter/glam-rs/compare/0.6.0...0.6.1
1254