1 /////////////////////////////////////////////////////////////////////////////////////////////////// 2 // OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net) 3 /////////////////////////////////////////////////////////////////////////////////////////////////// 4 // Created : 2006-04-19 5 // Updated : 2009-02-19 6 // Licence : This source is under MIT License 7 // File : glm/gtx/matrix_major_storage.inl 8 /////////////////////////////////////////////////////////////////////////////////////////////////// 9 10 namespace glm 11 { 12 template <typename T, precision P> 13 GLM_FUNC_QUALIFIER detail::tmat2x2<T, P> rowMajor2 14 ( 15 detail::tvec2<T, P> const & v1, 16 detail::tvec2<T, P> const & v2 17 ) 18 { 19 detail::tmat2x2<T, P> Result; 20 Result[0][0] = v1.x; 21 Result[1][0] = v1.y; 22 Result[0][1] = v2.x; 23 Result[1][1] = v2.y; 24 return Result; 25 } 26 27 template <typename T, precision P> 28 GLM_FUNC_QUALIFIER detail::tmat2x2<T, P> rowMajor2( 29 const detail::tmat2x2<T, P>& m) 30 { 31 detail::tmat2x2<T, P> Result; 32 Result[0][0] = m[0][0]; 33 Result[0][1] = m[1][0]; 34 Result[1][0] = m[0][1]; 35 Result[1][1] = m[1][1]; 36 return Result; 37 } 38 39 template <typename T, precision P> 40 GLM_FUNC_QUALIFIER detail::tmat3x3<T, P> rowMajor3( 41 const detail::tvec3<T, P>& v1, 42 const detail::tvec3<T, P>& v2, 43 const detail::tvec3<T, P>& v3) 44 { 45 detail::tmat3x3<T, P> Result; 46 Result[0][0] = v1.x; 47 Result[1][0] = v1.y; 48 Result[2][0] = v1.z; 49 Result[0][1] = v2.x; 50 Result[1][1] = v2.y; 51 Result[2][1] = v2.z; 52 Result[0][2] = v3.x; 53 Result[1][2] = v3.y; 54 Result[2][2] = v3.z; 55 return Result; 56 } 57 58 template <typename T, precision P> 59 GLM_FUNC_QUALIFIER detail::tmat3x3<T, P> rowMajor3( 60 const detail::tmat3x3<T, P>& m) 61 { 62 detail::tmat3x3<T, P> Result; 63 Result[0][0] = m[0][0]; 64 Result[0][1] = m[1][0]; 65 Result[0][2] = m[2][0]; 66 Result[1][0] = m[0][1]; 67 Result[1][1] = m[1][1]; 68 Result[1][2] = m[2][1]; 69 Result[2][0] = m[0][2]; 70 Result[2][1] = m[1][2]; 71 Result[2][2] = m[2][2]; 72 return Result; 73 } 74 75 template <typename T, precision P> 76 GLM_FUNC_QUALIFIER detail::tmat4x4<T, P> rowMajor4( 77 const detail::tvec4<T, P>& v1, 78 const detail::tvec4<T, P>& v2, 79 const detail::tvec4<T, P>& v3, 80 const detail::tvec4<T, P>& v4) 81 { 82 detail::tmat4x4<T, P> Result; 83 Result[0][0] = v1.x; 84 Result[1][0] = v1.y; 85 Result[2][0] = v1.z; 86 Result[3][0] = v1.w; 87 Result[0][1] = v2.x; 88 Result[1][1] = v2.y; 89 Result[2][1] = v2.z; 90 Result[3][1] = v2.w; 91 Result[0][2] = v3.x; 92 Result[1][2] = v3.y; 93 Result[2][2] = v3.z; 94 Result[3][2] = v3.w; 95 Result[0][3] = v4.x; 96 Result[1][3] = v4.y; 97 Result[2][3] = v4.z; 98 Result[3][3] = v4.w; 99 return Result; 100 } 101 102 template <typename T, precision P> 103 GLM_FUNC_QUALIFIER detail::tmat4x4<T, P> rowMajor4( 104 const detail::tmat4x4<T, P>& m) 105 { 106 detail::tmat4x4<T, P> Result; 107 Result[0][0] = m[0][0]; 108 Result[0][1] = m[1][0]; 109 Result[0][2] = m[2][0]; 110 Result[0][3] = m[3][0]; 111 Result[1][0] = m[0][1]; 112 Result[1][1] = m[1][1]; 113 Result[1][2] = m[2][1]; 114 Result[1][3] = m[3][1]; 115 Result[2][0] = m[0][2]; 116 Result[2][1] = m[1][2]; 117 Result[2][2] = m[2][2]; 118 Result[2][3] = m[3][2]; 119 Result[3][0] = m[0][3]; 120 Result[3][1] = m[1][3]; 121 Result[3][2] = m[2][3]; 122 Result[3][3] = m[3][3]; 123 return Result; 124 } 125 126 template <typename T, precision P> 127 GLM_FUNC_QUALIFIER detail::tmat2x2<T, P> colMajor2( 128 const detail::tvec2<T, P>& v1, 129 const detail::tvec2<T, P>& v2) 130 { 131 return detail::tmat2x2<T, P>(v1, v2); 132 } 133 134 template <typename T, precision P> 135 GLM_FUNC_QUALIFIER detail::tmat2x2<T, P> colMajor2( 136 const detail::tmat2x2<T, P>& m) 137 { 138 return detail::tmat2x2<T, P>(m); 139 } 140 141 template <typename T, precision P> 142 GLM_FUNC_QUALIFIER detail::tmat3x3<T, P> colMajor3( 143 const detail::tvec3<T, P>& v1, 144 const detail::tvec3<T, P>& v2, 145 const detail::tvec3<T, P>& v3) 146 { 147 return detail::tmat3x3<T, P>(v1, v2, v3); 148 } 149 150 template <typename T, precision P> 151 GLM_FUNC_QUALIFIER detail::tmat3x3<T, P> colMajor3( 152 const detail::tmat3x3<T, P>& m) 153 { 154 return detail::tmat3x3<T, P>(m); 155 } 156 157 template <typename T, precision P> 158 GLM_FUNC_QUALIFIER detail::tmat4x4<T, P> colMajor4( 159 const detail::tvec4<T, P>& v1, 160 const detail::tvec4<T, P>& v2, 161 const detail::tvec4<T, P>& v3, 162 const detail::tvec4<T, P>& v4) 163 { 164 return detail::tmat4x4<T, P>(v1, v2, v3, v4); 165 } 166 167 template <typename T, precision P> 168 GLM_FUNC_QUALIFIER detail::tmat4x4<T, P> colMajor4( 169 const detail::tmat4x4<T, P>& m) 170 { 171 return detail::tmat4x4<T, P>(m); 172 } 173 }//namespace glm 174