1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
use number_traits::Num; #[inline] pub fn set<'a, T: Copy + Num>( out: &'a mut [T; 9], m11: T, m12: T, m13: T, m21: T, m22: T, m23: T, m31: T, m32: T, m33: T, ) -> &'a mut [T; 9] { out[0] = m11; out[1] = m21; out[2] = m31; out[3] = m12; out[4] = m22; out[5] = m32; out[6] = m13; out[7] = m23; out[8] = m33; out } #[inline] pub fn zero<'a, T: Copy + Num>(out: &'a mut [T; 9]) -> &'a mut [T; 9] { set( out, T::zero(), T::zero(), T::zero(), T::zero(), T::zero(), T::zero(), T::zero(), T::zero(), T::zero(), ) } #[inline] pub fn identity<'a, T: Copy + Num>(out: &'a mut [T; 9]) -> &'a mut [T; 9] { set( out, T::one(), T::zero(), T::zero(), T::zero(), T::one(), T::zero(), T::zero(), T::zero(), T::one(), ) } #[inline] pub fn from_mat2<'a, T: Copy + Num>(out: &'a mut [T; 9], m: &[T; 4]) -> &'a mut [T; 9] { set( out, m[0], m[2], T::zero(), m[1], m[3], T::zero(), T::zero(), T::zero(), T::one(), ) } #[inline] pub fn from_mat32<'a, T: Copy + Num>(out: &'a mut [T; 9], m: &[T; 6]) -> &'a mut [T; 9] { set( out, m[0], m[2], T::zero(), m[1], m[3], T::zero(), T::zero(), T::zero(), T::one(), ) } #[inline] pub fn from_mat3<'a, T: Copy + Num>(out: &'a mut [T; 9], m: &[T; 16]) -> &'a mut [T; 9] { set(out, m[0], m[4], m[8], m[1], m[5], m[9], m[2], m[6], m[10]) }