1impl super::F3lMatrix for glam::Mat3 {
2 type RowType = glam::Vec3;
3
4 #[inline]
5 fn cols(&self) -> usize {
6 3
7 }
8
9 #[inline]
10 fn rows(&self) -> usize {
11 3
12 }
13
14 #[inline]
15 fn row(&self, r: usize) -> Self::RowType {
16 glam::Vec3::new(self.x_axis[r], self.y_axis[r], self.z_axis[r])
17 }
18
19 #[inline]
20 fn get(&self, r: usize, c: usize) -> Option<f32> {
21 if r >= 3 {
22 return None;
23 }
24 match c {
25 0 => Some(self.x_axis[r]),
26 1 => Some(self.y_axis[r]),
27 2 => Some(self.z_axis[r]),
28 _ => None,
29 }
30 }
31
32 #[inline]
33 fn set_row<R: Into<Self::RowType> + Copy>(&mut self, row: usize, v: R) {
34 if row >= 3 {
35 return;
36 }
37 self.x_axis[row] = v.into()[0];
38 self.y_axis[row] = v.into()[1];
39 self.z_axis[row] = v.into()[2];
40 }
41
42 #[inline]
43 fn set_element(&mut self, pos: (usize, usize), v: f32) {
44 if pos.0 >= 3 || pos.1 >= 3 {
45 return;
46 }
47 match pos.1 {
48 0 => self.x_axis[pos.0] = v,
49 1 => self.y_axis[pos.0] = v,
50 2 => self.z_axis[pos.0] = v,
51 _ => {}
52 };
53 }
54}
55
56impl super::ArrayRowMajor for glam::Mat3 {
57 type Row = [f32; 9];
58
59 type Mat = [[f32; 3]; 3];
60
61 #[inline]
62 fn from_rows<R: std::ops::Index<usize, Output = f32>>(rows: &[R]) -> Self {
63 Self::from_cols_array(&[
64 rows[0][0], rows[1][0], rows[2][0], rows[0][1], rows[1][1], rows[2][1], rows[0][2],
65 rows[1][2], rows[2][2],
66 ])
67 }
68
69 #[inline]
70 fn from_rows_slice(m: &[f32]) -> Self {
71 Self::from_cols_array(&[m[0], m[3], m[6], m[1], m[4], m[7], m[2], m[5], m[8]])
72 }
73
74 #[inline]
75 fn to_rows_array(&self) -> Self::Row {
76 self.transpose().to_cols_array()
77 }
78
79 #[inline]
80 fn from_cols_array_2d(m: &Self::Mat) -> Self {
81 Self::from_cols_array(&[
82 m[0][0], m[1][0], m[2][0], m[0][1], m[1][1], m[2][1], m[0][2], m[1][2], m[2][2],
83 ])
84 }
85
86 #[inline]
87 fn to_rows_array_2d(&self) -> Self::Mat {
88 self.transpose().to_cols_array_2d()
89 }
90
91 #[inline]
92 fn write_rows_to_slice(self, slice: &mut [f32]) {
93 slice[0] = self.x_axis.x;
94 slice[1] = self.x_axis.y;
95 slice[2] = self.x_axis.z;
96 slice[3] = self.y_axis.x;
97 slice[4] = self.y_axis.y;
98 slice[5] = self.y_axis.z;
99 slice[6] = self.z_axis.x;
100 slice[7] = self.z_axis.y;
101 slice[8] = self.z_axis.z;
102 }
103}
104
105impl super::ArrayDimensions for glam::Mat3 {
106 fn nb_cols() -> usize {
107 3
108 }
109
110 fn nb_rows() -> usize {
111 3
112 }
113}
114impl super::GenericArray for glam::Mat3 {}