5# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE
6 template<
typename T, qualifier Q>
7 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat()
8# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST
9 : value{col_type(1, 0, 0, 0), col_type(0, 1, 0, 0)}
12# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION
13 this->value[0] = col_type(1, 0, 0, 0);
14 this->value[1] = col_type(0, 1, 0, 0);
19 template<
typename T, qualifier Q>
21 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<2, 4, T, P>
const& m)
22# if GLM_HAS_INITIALIZER_LISTS
26# if !GLM_HAS_INITIALIZER_LISTS
27 this->value[0] = m[0];
28 this->value[1] = m[1];
32 template<
typename T, qualifier Q>
33 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(T s)
34# if GLM_HAS_INITIALIZER_LISTS
35 : value{col_type(s, 0, 0, 0), col_type(0, s, 0, 0)}
38# if !GLM_HAS_INITIALIZER_LISTS
39 this->value[0] = col_type(s, 0, 0, 0);
40 this->value[1] = col_type(0, s, 0, 0);
44 template<
typename T, qualifier Q>
45 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat
47 T x0, T y0, T z0, T w0,
48 T x1, T y1, T z1, T w1
50# if GLM_HAS_INITIALIZER_LISTS
51 : value{col_type(x0, y0, z0, w0), col_type(x1, y1, z1, w1)}
54# if !GLM_HAS_INITIALIZER_LISTS
55 this->value[0] = col_type(x0, y0, z0, w0);
56 this->value[1] = col_type(x1, y1, z1, w1);
60 template<
typename T, qualifier Q>
61 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(col_type
const& v0, col_type
const& v1)
62# if GLM_HAS_INITIALIZER_LISTS
63 : value{col_type(v0), col_type(v1)}
66# if !GLM_HAS_INITIALIZER_LISTS
74 template<
typename T, qualifier Q>
76 typename X1,
typename Y1,
typename Z1,
typename W1,
77 typename X2,
typename Y2,
typename Z2,
typename W2>
78 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat
80 X1 x1, Y1 y1, Z1 z1, W1 w1,
81 X2 x2, Y2 y2, Z2 z2, W2 w2
83# if GLM_HAS_INITIALIZER_LISTS
85 col_type(x1, y1, z1, w1),
86 col_type(x2, y2, z2, w2)}
89# if !GLM_HAS_INITIALIZER_LISTS
90 this->value[0] = col_type(x1, y1, z1, w1);
91 this->value[1] = col_type(x2, y2, z2, w2);
95 template<
typename T, qualifier Q>
96 template<
typename V1,
typename V2>
97 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(vec<4, V1, Q>
const& v1, vec<4, V2, Q>
const& v2)
98# if GLM_HAS_INITIALIZER_LISTS
99 : value{col_type(v1), col_type(v2)}
102# if !GLM_HAS_INITIALIZER_LISTS
103 this->value[0] = col_type(v1);
104 this->value[1] = col_type(v2);
110 template<
typename T, qualifier Q>
111 template<
typename U, qualifier P>
112 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<2, 4, U, P>
const& m)
113# if GLM_HAS_INITIALIZER_LISTS
114 : value{col_type(m[0]), col_type(m[1])}
117# if !GLM_HAS_INITIALIZER_LISTS
118 this->value[0] = col_type(m[0]);
119 this->value[1] = col_type(m[1]);
123 template<
typename T, qualifier Q>
124 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<2, 2, T, Q>
const& m)
125# if GLM_HAS_INITIALIZER_LISTS
126 : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0)}
129# if !GLM_HAS_INITIALIZER_LISTS
130 this->value[0] = col_type(m[0], 0, 0);
131 this->value[1] = col_type(m[1], 0, 0);
135 template<
typename T, qualifier Q>
136 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<3, 3, T, Q>
const& m)
137# if GLM_HAS_INITIALIZER_LISTS
138 : value{col_type(m[0], 0), col_type(m[1], 0)}
141# if !GLM_HAS_INITIALIZER_LISTS
142 this->value[0] = col_type(m[0], 0);
143 this->value[1] = col_type(m[1], 0);
147 template<
typename T, qualifier Q>
148 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<4, 4, T, Q>
const& m)
149# if GLM_HAS_INITIALIZER_LISTS
150 : value{col_type(m[0]), col_type(m[1])}
153# if !GLM_HAS_INITIALIZER_LISTS
154 this->value[0] = col_type(m[0]);
155 this->value[1] = col_type(m[1]);
159 template<
typename T, qualifier Q>
160 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<2, 3, T, Q>
const& m)
161# if GLM_HAS_INITIALIZER_LISTS
162 : value{col_type(m[0], 0), col_type(m[1], 0)}
165# if !GLM_HAS_INITIALIZER_LISTS
166 this->value[0] = col_type(m[0], 0);
167 this->value[1] = col_type(m[1], 0);
171 template<
typename T, qualifier Q>
172 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<3, 2, T, Q>
const& m)
173# if GLM_HAS_INITIALIZER_LISTS
174 : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0)}
177# if !GLM_HAS_INITIALIZER_LISTS
178 this->value[0] = col_type(m[0], 0, 0);
179 this->value[1] = col_type(m[1], 0, 0);
183 template<
typename T, qualifier Q>
184 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<3, 4, T, Q>
const& m)
185# if GLM_HAS_INITIALIZER_LISTS
186 : value{col_type(m[0]), col_type(m[1])}
189# if !GLM_HAS_INITIALIZER_LISTS
190 this->value[0] = col_type(m[0]);
191 this->value[1] = col_type(m[1]);
195 template<
typename T, qualifier Q>
196 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<4, 2, T, Q>
const& m)
197# if GLM_HAS_INITIALIZER_LISTS
198 : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0)}
201# if !GLM_HAS_INITIALIZER_LISTS
202 this->value[0] = col_type(m[0], 0, 0);
203 this->value[1] = col_type(m[1], 0, 0);
207 template<
typename T, qualifier Q>
208 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<4, 3, T, Q>
const& m)
209# if GLM_HAS_INITIALIZER_LISTS
210 : value{col_type(m[0], 0), col_type(m[1], 0)}
213# if !GLM_HAS_INITIALIZER_LISTS
214 this->value[0] = col_type(m[0], 0);
215 this->value[1] = col_type(m[1], 0);
221 template<
typename T, qualifier Q>
222 GLM_FUNC_QUALIFIER
typename mat<2, 4, T, Q>::col_type & mat<2, 4, T, Q>::operator[](
typename mat<2, 4, T, Q>::length_type i)
224 assert(i < this->length());
225 return this->value[i];
228 template<
typename T, qualifier Q>
229 GLM_FUNC_QUALIFIER GLM_CONSTEXPR
typename mat<2, 4, T, Q>::col_type
const& mat<2, 4, T, Q>::operator[](
typename mat<2, 4, T, Q>::length_type i)
const
231 assert(i < this->length());
232 return this->value[i];
237 template<
typename T, qualifier Q>
239 GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator=(mat<2, 4, U, Q>
const& m)
241 this->value[0] = m[0];
242 this->value[1] = m[1];
246 template<
typename T, qualifier Q>
248 GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator+=(U s)
255 template<
typename T, qualifier Q>
257 GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator+=(mat<2, 4, U, Q>
const& m)
259 this->value[0] += m[0];
260 this->value[1] += m[1];
264 template<
typename T, qualifier Q>
266 GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator-=(U s)
273 template<
typename T, qualifier Q>
275 GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator-=(mat<2, 4, U, Q>
const& m)
277 this->value[0] -= m[0];
278 this->value[1] -= m[1];
282 template<
typename T, qualifier Q>
284 GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator*=(U s)
291 template<
typename T, qualifier Q>
293 GLM_FUNC_QUALIFIER mat<2, 4, T, Q> & mat<2, 4, T, Q>::operator/=(U s)
302 template<
typename T, qualifier Q>
303 GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator++()
310 template<
typename T, qualifier Q>
311 GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator--()
318 template<
typename T, qualifier Q>
319 GLM_FUNC_QUALIFIER mat<2, 4, T, Q> mat<2, 4, T, Q>::operator++(
int)
321 mat<2, 4, T, Q> Result(*
this);
326 template<
typename T, qualifier Q>
327 GLM_FUNC_QUALIFIER mat<2, 4, T, Q> mat<2, 4, T, Q>::operator--(
int)
329 mat<2, 4, T, Q> Result(*
this);
336 template<
typename T, qualifier Q>
337 GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator+(mat<2, 4, T, Q>
const& m)
342 template<
typename T, qualifier Q>
343 GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator-(mat<2, 4, T, Q>
const& m)
345 return mat<2, 4, T, Q>(
352 template<
typename T, qualifier Q>
353 GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator+(mat<2, 4, T, Q>
const& m, T scalar)
355 return mat<2, 4, T, Q>(
360 template<
typename T, qualifier Q>
361 GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator+(mat<2, 4, T, Q>
const& m1, mat<2, 4, T, Q>
const& m2)
363 return mat<2, 4, T, Q>(
368 template<
typename T, qualifier Q>
369 GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator-(mat<2, 4, T, Q>
const& m, T scalar)
371 return mat<2, 4, T, Q>(
376 template<
typename T, qualifier Q>
377 GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator-(mat<2, 4, T, Q>
const& m1, mat<2, 4, T, Q>
const& m2)
379 return mat<2, 4, T, Q>(
384 template<
typename T, qualifier Q>
385 GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(mat<2, 4, T, Q>
const& m, T scalar)
387 return mat<2, 4, T, Q>(
392 template<
typename T, qualifier Q>
393 GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(T scalar, mat<2, 4, T, Q>
const& m)
395 return mat<2, 4, T, Q>(
400 template<
typename T, qualifier Q>
401 GLM_FUNC_QUALIFIER
typename mat<2, 4, T, Q>::col_type operator*(mat<2, 4, T, Q>
const& m,
typename mat<2, 4, T, Q>::row_type
const& v)
403 return typename mat<2, 4, T, Q>::col_type(
404 m[0][0] * v.x + m[1][0] * v.y,
405 m[0][1] * v.x + m[1][1] * v.y,
406 m[0][2] * v.x + m[1][2] * v.y,
407 m[0][3] * v.x + m[1][3] * v.y);
410 template<
typename T, qualifier Q>
411 GLM_FUNC_QUALIFIER
typename mat<2, 4, T, Q>::row_type operator*(
typename mat<2, 4, T, Q>::col_type
const& v, mat<2, 4, T, Q>
const& m)
413 return typename mat<2, 4, T, Q>::row_type(
414 v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2] + v.w * m[0][3],
415 v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2] + v.w * m[1][3]);
418 template<
typename T, qualifier Q>
419 GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(mat<2, 4, T, Q>
const& m1, mat<4, 2, T, Q>
const& m2)
439 mat<4, 4, T, Q> Result;
440 Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01;
441 Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01;
442 Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01;
443 Result[0][3] = SrcA03 * SrcB00 + SrcA13 * SrcB01;
444 Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11;
445 Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11;
446 Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11;
447 Result[1][3] = SrcA03 * SrcB10 + SrcA13 * SrcB11;
448 Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21;
449 Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21;
450 Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21;
451 Result[2][3] = SrcA03 * SrcB20 + SrcA13 * SrcB21;
452 Result[3][0] = SrcA00 * SrcB30 + SrcA10 * SrcB31;
453 Result[3][1] = SrcA01 * SrcB30 + SrcA11 * SrcB31;
454 Result[3][2] = SrcA02 * SrcB30 + SrcA12 * SrcB31;
455 Result[3][3] = SrcA03 * SrcB30 + SrcA13 * SrcB31;
459 template<
typename T, qualifier Q>
460 GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(mat<2, 4, T, Q>
const& m1, mat<2, 2, T, Q>
const& m2)
462 return mat<2, 4, T, Q>(
463 m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],
464 m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],
465 m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1],
466 m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1],
467 m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],
468 m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1],
469 m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1],
470 m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1]);
473 template<
typename T, qualifier Q>
474 GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(mat<2, 4, T, Q>
const& m1, mat<3, 2, T, Q>
const& m2)
476 return mat<3, 4, T, Q>(
477 m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],
478 m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],
479 m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1],
480 m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1],
481 m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],
482 m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1],
483 m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1],
484 m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1],
485 m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1],
486 m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1],
487 m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1],
488 m1[0][3] * m2[2][0] + m1[1][3] * m2[2][1]);
491 template<
typename T, qualifier Q>
492 GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator/(mat<2, 4, T, Q>
const& m, T scalar)
494 return mat<2, 4, T, Q>(
499 template<
typename T, qualifier Q>
500 GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator/(T scalar, mat<2, 4, T, Q>
const& m)
502 return mat<2, 4, T, Q>(
509 template<
typename T, qualifier Q>
510 GLM_FUNC_QUALIFIER
bool operator==(mat<2, 4, T, Q>
const& m1, mat<2, 4, T, Q>
const& m2)
512 return (m1[0] == m2[0]) && (m1[1] == m2[1]);
515 template<
typename T, qualifier Q>
516 GLM_FUNC_QUALIFIER
bool operator!=(mat<2, 4, T, Q>
const& m1, mat<2, 4, T, Q>
const& m2)
518 return (m1[0] != m2[0]) || (m1[1] != m2[1]);
Core features
Definition common.hpp:21