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