Need help with glam-rs?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

bitshifter
426 Stars 42 Forks Other 592 Commits 17 Opened issues

Description

A simple and fast linear algebra library for games and graphics

Services available

!
?

Need anything else?

Contributors list

# 98,842
Rust
Shell
sse2
vulkan
464 commits
# 125,043
shadert...
texture...
test-fr...
webasse...
15 commits
# 120,224
Rust
Shell
sse2
kafka
11 commits
# 505,855
Shell
sse2
simd
C++
6 commits
# 307,906
Shell
C
Rust
sse2
6 commits
# 124,096
Firebas...
React
CSS
React N...
4 commits
# 536,643
Rust
Shell
sse2
rasteri...
4 commits
# 37,055
Rust
Django
Windows
Linux
4 commits
# 142,764
Rust
C
sse2
unix
3 commits
# 137,529
Rust
sse2
vue3
ant-des...
3 commits
# 112,903
Rust
Shell
gameeng...
crates
2 commits
# 245,866
OCaml
Shell
sse2
React
2 commits
# 72,054
unittes...
Rust
python-...
testing...
2 commits
# 26,476
Rust
vulkan
IPFS
gameeng...
1 commit
# 12,496
hlsl
glsl
webasse...
wii
1 commit
# 691,623
Rust
Shell
sse2
simd
1 commit
# 308,758
Shell
sse2
HTML
C
1 commit
# 83,777
sse2
Docker
nginx
Haxe
1 commit
# 174,128
Rust
Shell
sse2
webwork...
1 commit
# 363,331
sse2
mopidy
vlc
mpd
1 commit

glam

Build Status Coverage Status Latest Version docs

A simple and fast 3D math library for games and graphics.

Development status

glam
is in beta stage. Base functionality has been implemented and the look and feel of the API has solidified.

Features

  • f32
    types
    • vectors:
      Vec2
      ,
      Vec3
      ,
      Vec3A
      and
      Vec4
    • square matrices:
      Mat2
      ,
      Mat3
      and
      Mat4
    • a quaternion type:
      Quat
  • f64
    types
    • vectors:
      DVec2
      ,
      DVec3
      and
      DVec4
    • square matrices:
      DMat2
      ,
      DMat3
      and
      DMat4
    • a quaternion type:
      DQuat
  • i32
    types
    • vectors:
      IVec2
      ,
      IVec3
      and
      IVec4
  • u32
    types
    • vectors:
      UVec2
      ,
      UVec3
      and
      UVec4
  • bool
    types
    • vectors:
      BVec2
      ,
      BVec3
      and
      BVec4

SIMD

The

Vec3A
,
Vec4
and
Quat
types use SSE2 on x86/x86_64 architectures.
Mat2
,
Mat3
and
Mat4
also use SSE2 for some functionality. Not everything has a SIMD implementation yet.

Note that this does result in some wasted space in the case of

Vec3A
as the SIMD vector type is 16 bytes large and 16 byte aligned.

glam
outperforms similar Rust libraries for common operations as tested by the
mathbench
project.

no_std
support

no_std
support can be enabled by compiling with
--no-default-features
to disable
std
support and
--features libm
for math functions that are only defined in
std
. For example:
[dependencies]
glam = { version = "0.13.0", default-features = false, features = ["libm"] }

To support both

std
and
no_std
builds in project, you can use the following in your
Cargo.toml
:
[features]
default = ["std"]

std = ["glam/std"] libm = ["glam/libm"]

[dependencies] glam = { version = "0.13.0", default-features = false }

Optional features

  • bytemuck
    - for casting into slices of bytes
  • libm
    - required to compile with
    no_std
  • mint
    - for interoperating with other 3D math libraries
  • num-traits
    - required to compile
    no_std
    , will be included when enabling the
    libm
    feature
  • rand
    - implementations of
    Distribution
    trait for all
    glam
    types. This is primarily used for unit testing
  • serde
    - implementations of
    Serialize
    and
    Deserialize
    for all
    glam
    types. Note that serialization should work between builds of
    glam
    with and without SIMD enabled

Feature gates

  • scalar-math
    - compiles with SIMD support disabled
  • debug-glam-assert
    - adds assertions in debug builds which check the validity of parameters passed to
    glam
    to help catch runtime errors
  • glam-assert
    - adds validation assertions to all builds

Minimum Supported Version of Rust (MSVR)

The minimum supported version of Rust for

glam
is
1.36.0
.

Conventions

Column vectors

glam
interprets vectors as column matrices (also known as "column vectors") meaning when transforming a vector with a matrix the matrix goes on the left, e.g.
v' = Mv
. DirectX uses row vectors, OpenGL uses column vectors. There are pros and cons to both.

Column-major order

Matrices are stored in column major format. Each column vector is stored in contiguous memory.

Co-ordinate system

glam
is co-ordinate system agnostic and intends to support both right handed and left handed conventions.

Design Philosophy

The design of this library is guided by a desire for simplicity and good performance.

  • No generics and minimal traits in the public API for simplicity of usage
  • All dependencies are optional (e.g.
    mint
    ,
    rand
    and
    serde
    )
  • Follows the Rust API Guidelines where possible
  • Aiming for 100% test coverage
  • Common functionality is benchmarked using Criterion.rs

Future work

  • Experiment with a using a 4x3 matrix as a 3D transform type that can be more efficient than
    Mat4
    for certain operations like inverse and multiplies
  • wasm
    support

Inspirations

There were many inspirations for the interface and internals of glam from the Rust and C++ worlds. In particular:

License

Licensed under either of

  • Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
  • MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)

at your option.

Contribution

Contributions in any form (issues, pull requests, etc.) to this project must adhere to Rust's Code of Conduct.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Thank you to all of the

glam
contributors!

Support

If you are interested in contributing or have a request or suggestion start a discussion on github. See CONTRIBUTING.md for more information for contributors.

The Game Development in Rust Discord and Bevy Engine Discord servers can are also good places to ask for help with

glam
.

Attribution

glam
contains code ported from the following C++ libraries:
  • DirectXMath - MIT License - Copyright (c) 2011-2020 Microsoft Corp
  • Realtime Math - MIT License - Copyright (c) 2018 Nicholas Frechette
  • GLM - MIT License - Copyright (c) 2005 - G-Truc Creation

See ATTRIBUTION.md for details.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.