[![crates.io](https://img.shields.io/crates/v/directx_math.svg)](https://crates.io/crates/directx_math)
[![docs.rs](https://docs.rs/directx_math/badge.svg)](https://docs.rs/directx_math)
[![tests](https://github.com/aloucks/directx_math/workflows/tests/badge.svg)](https://github.com/aloucks/directx_math/actions?query=workflow%3Atests)
# DirectXMath for Rust
A pure rust translation of [DirectXMath], an all inline SIMD linear algebra library for use in
games and graphics apps.
✔️ = Implemented, ❌ = Not yet implemented, 🚧 = In progress
## Implementation status
| Vector | ✔️ |
| Vector 2D | ✔️ |
| Vector 3D | ✔️ |
| Vector 4D | ✔️ |
| Quaternion | ✔️ |
| Matrix | ✔️ |
| Streaming Transforms | ❌ |
| Color | ❌ |
| Load/Store/Accessors | ✔️ † |
| Plane | ✔️ |
| Collision | ✔️ |
| Documentation | ✔️ 🚧 †† |
† Some alternate forms of the load/store operations are not yet implemented.
†† All functions have links to the [DirectXMath documentation].
## SIMD intrinsics
| ✔️ | ❌ (will fallback to no-intrinsics) | ✔️ |
Intrinsics may be disabled with the `no_intrinsics` feature. This is the implicit behavior
if SIMD intrinsics are not available on the target architecture.
Note that only `sse` and `sse2` are enabled by default for `x86` and `x86-64` targets.
The `sse3`, `sse4.1`, `avx`, `fma`, and `avx2` intrinsics may be enabled via [CPU target features].
### Example: enable all `x86/64` intrinsics
RUSTFLAGS="-C target-feature=+sse3,+sse4.1,+avx,+fma,+avx2" cargo build
## License
* [DirectXMath] is Copyright (c) Microsoft Corporation.
* DirectXMath for Rust is an independent translation and not affiliated with Microsoft Corporation.
* MIT license ([LICENSE-MIT] or http://opensource.org/licenses/MIT)
[LICENSE-MIT]: LICENSE-MIT
[DirectXMath]: https://github.com/microsoft/DirectXMath
[DirectXMath documentation]: https://docs.microsoft.com/en-us/windows/win32/dxmath/ovw-xnamath-reference
[CPU target features]: https://doc.rust-lang.org/reference/attributes/codegen.html#the-target_feature-attribute