token_value_map/math/
glam_impl.rs1pub type Vec2Impl = glam::Vec2;
6pub type Vec3Impl = glam::Vec3;
7pub type Mat3Impl = glam::Mat3;
8pub type Mat4Impl = glam::DMat4; pub type Point3Impl = Vec3Impl;
12
13#[inline(always)]
17pub fn vec2_zeros() -> Vec2Impl {
18 Vec2Impl::ZERO
19}
20
21#[inline(always)]
23pub fn vec3_zeros() -> Vec3Impl {
24 Vec3Impl::ZERO
25}
26
27#[inline(always)]
29pub fn vec2_as_slice(v: &Vec2Impl) -> &[f32] {
30 v.as_ref()
31}
32
33#[inline(always)]
35pub fn vec2_as_ref(v: &Vec2Impl) -> &[f32; 2] {
36 v.as_ref()
37}
38
39#[inline(always)]
41pub fn vec3_as_slice(v: &Vec3Impl) -> &[f32] {
42 v.as_ref()
43}
44
45#[inline(always)]
47pub fn vec3_as_ref(v: &Vec3Impl) -> &[f32; 3] {
48 v.as_ref()
49}
50
51#[inline(always)]
53pub fn vec3_normalized(v: &Vec3Impl) -> Vec3Impl {
54 v.normalize()
55}
56
57#[inline(always)]
59pub fn mat3_from_row_slice(data: &[f32]) -> Mat3Impl {
60 assert_eq!(data.len(), 9, "Matrix3 requires exactly 9 elements");
61 Mat3Impl::from_cols_array(&[
63 data[0], data[3], data[6], data[1], data[4], data[7], data[2], data[5], data[8], ])
67}
68
69#[inline(always)]
71pub fn mat3_from_column_slice(data: &[f32]) -> Mat3Impl {
72 assert_eq!(data.len(), 9, "Matrix3 requires exactly 9 elements");
73 Mat3Impl::from_cols_array(data.try_into().unwrap())
74}
75
76#[inline(always)]
78pub fn mat3_zeros() -> Mat3Impl {
79 Mat3Impl::ZERO
80}
81
82#[inline(always)]
84pub fn mat3_as_slice(m: &Mat3Impl) -> &[f32] {
85 m.as_ref()
86}
87
88#[inline(always)]
90pub fn mat3_iter(m: &Mat3Impl) -> impl Iterator<Item = &f32> {
91 m.as_ref().iter()
92}
93
94#[inline(always)]
96pub fn mat3_row(m: &Mat3Impl, i: usize) -> [f32; 3] {
97 let cols: &[f32; 9] = m.as_ref();
99 [cols[i], cols[i + 3], cols[i + 6]]
100}
101
102#[inline(always)]
104pub fn mat4_from_row_slice(data: &[f64]) -> Mat4Impl {
105 assert_eq!(data.len(), 16, "Matrix4 requires exactly 16 elements");
106 Mat4Impl::from_cols_array(&[
107 data[0], data[4], data[8], data[12], data[1], data[5], data[9], data[13], data[2], data[6], data[10], data[14], data[3], data[7], data[11], data[15], ])
112}
113
114#[inline(always)]
116pub fn mat4_sub(a: Mat4Impl, b: Mat4Impl) -> Mat4Impl {
117 a - b
118}
119
120#[inline(always)]
122pub fn mat4_zeros() -> Mat4Impl {
123 Mat4Impl::ZERO
124}
125
126#[inline(always)]
128pub fn mat4_iter(m: &Mat4Impl) -> impl Iterator<Item = &f64> {
129 m.as_ref().iter()
130}
131
132#[inline(always)]
134pub fn mat4_as_slice(m: &Mat4Impl) -> &[f64] {
135 m.as_ref()
136}
137
138#[inline(always)]
140pub fn point3_origin() -> Point3Impl {
141 Vec3Impl::ZERO
142}
143
144#[inline(always)]
146pub fn point3_as_slice(p: &Point3Impl) -> &[f32] {
147 p.as_ref()
148}
149
150#[inline(always)]
152pub fn point3_as_ref(p: &Point3Impl) -> &[f32; 3] {
153 p.as_ref()
154}
155
156#[inline(always)]
158pub fn mat3_identity() -> Mat3Impl {
159 Mat3Impl::IDENTITY
160}
161
162#[inline(always)]
164pub fn mat4_identity() -> Mat4Impl {
165 Mat4Impl::IDENTITY
166}
167
168#[inline(always)]
170pub fn mat3(m: &Mat3Impl, row: usize, col: usize) -> f32 {
171 m.col(col)[row]
173}
174
175#[inline(always)]
177pub fn mat4(m: &Mat4Impl, row: usize, col: usize) -> f64 {
178 m.col(col)[row]
180}
181
182#[inline(always)]
184pub fn mat3_sub(a: Mat3Impl, b: Mat3Impl) -> Mat3Impl {
185 a - b
186}
187
188#[inline(always)]
190pub fn mat3_from_diagonal_element(v: f32) -> Mat3Impl {
191 Mat3Impl::from_diagonal(glam::Vec3::splat(v))
192}