7# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE
8 template<
typename T, qualifier Q>
9 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat()
10# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST
11 : value{col_type(1, 0), col_type(0, 1)}
14# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION
15 this->value[0] = col_type(1, 0);
16 this->value[1] = col_type(0, 1);
21 template<
typename T, qualifier Q>
23 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<2, 2, T, P>
const& m)
24# if GLM_HAS_INITIALIZER_LISTS
28# if !GLM_HAS_INITIALIZER_LISTS
29 this->value[0] = m[0];
30 this->value[1] = m[1];
34 template<
typename T, qualifier Q>
35 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(T scalar)
36# if GLM_HAS_INITIALIZER_LISTS
37 : value{col_type(scalar, 0), col_type(0, scalar)}
40# if !GLM_HAS_INITIALIZER_LISTS
41 this->value[0] = col_type(scalar, 0);
42 this->value[1] = col_type(0, scalar);
46 template<
typename T, qualifier Q>
47 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat
49 T
const& x0, T
const& y0,
50 T
const& x1, T
const& y1
52# if GLM_HAS_INITIALIZER_LISTS
53 : value{col_type(x0, y0), col_type(x1, y1)}
56# if !GLM_HAS_INITIALIZER_LISTS
57 this->value[0] = col_type(x0, y0);
58 this->value[1] = col_type(x1, y1);
62 template<
typename T, qualifier Q>
63 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(col_type
const& v0, col_type
const& v1)
64# if GLM_HAS_INITIALIZER_LISTS
68# if !GLM_HAS_INITIALIZER_LISTS
76 template<
typename T, qualifier Q>
77 template<
typename X1,
typename Y1,
typename X2,
typename Y2>
78 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat
80 X1
const& x1, Y1
const& y1,
81 X2
const& x2, Y2
const& y2
83# if GLM_HAS_INITIALIZER_LISTS
84 : value{col_type(
static_cast<T
>(x1), value_type(y1)), col_type(
static_cast<T
>(x2), value_type(y2)) }
87# if !GLM_HAS_INITIALIZER_LISTS
88 this->value[0] = col_type(
static_cast<T
>(x1), value_type(y1));
89 this->value[1] = col_type(
static_cast<T
>(x2), value_type(y2));
93 template<
typename T, qualifier Q>
94 template<
typename V1,
typename V2>
95 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(vec<2, V1, Q>
const& v1, vec<2, V2, Q>
const& v2)
96# if GLM_HAS_INITIALIZER_LISTS
97 : value{col_type(v1), col_type(v2)}
100# if !GLM_HAS_INITIALIZER_LISTS
101 this->value[0] = col_type(v1);
102 this->value[1] = col_type(v2);
108 template<
typename T, qualifier Q>
109 template<
typename U, qualifier P>
110 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<2, 2, U, P>
const& m)
111# if GLM_HAS_INITIALIZER_LISTS
112 : value{col_type(m[0]), col_type(m[1])}
115# if !GLM_HAS_INITIALIZER_LISTS
116 this->value[0] = col_type(m[0]);
117 this->value[1] = col_type(m[1]);
121 template<
typename T, qualifier Q>
122 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<3, 3, T, Q>
const& m)
123# if GLM_HAS_INITIALIZER_LISTS
124 : value{col_type(m[0]), col_type(m[1])}
127# if !GLM_HAS_INITIALIZER_LISTS
128 this->value[0] = col_type(m[0]);
129 this->value[1] = col_type(m[1]);
133 template<
typename T, qualifier Q>
134 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<4, 4, T, Q>
const& m)
135# if GLM_HAS_INITIALIZER_LISTS
136 : value{col_type(m[0]), col_type(m[1])}
139# if !GLM_HAS_INITIALIZER_LISTS
140 this->value[0] = col_type(m[0]);
141 this->value[1] = col_type(m[1]);
145 template<
typename T, qualifier Q>
146 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<2, 3, T, Q>
const& m)
147# if GLM_HAS_INITIALIZER_LISTS
148 : value{col_type(m[0]), col_type(m[1])}
151# if !GLM_HAS_INITIALIZER_LISTS
152 this->value[0] = col_type(m[0]);
153 this->value[1] = col_type(m[1]);
157 template<
typename T, qualifier Q>
158 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<3, 2, T, Q>
const& m)
159# if GLM_HAS_INITIALIZER_LISTS
160 : value{col_type(m[0]), col_type(m[1])}
163# if !GLM_HAS_INITIALIZER_LISTS
164 this->value[0] = col_type(m[0]);
165 this->value[1] = col_type(m[1]);
169 template<
typename T, qualifier Q>
170 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<2, 4, T, Q>
const& m)
171# if GLM_HAS_INITIALIZER_LISTS
172 : value{col_type(m[0]), col_type(m[1])}
175# if !GLM_HAS_INITIALIZER_LISTS
176 this->value[0] = col_type(m[0]);
177 this->value[1] = col_type(m[1]);
181 template<
typename T, qualifier Q>
182 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<4, 2, T, Q>
const& m)
183# if GLM_HAS_INITIALIZER_LISTS
184 : value{col_type(m[0]), col_type(m[1])}
187# if !GLM_HAS_INITIALIZER_LISTS
188 this->value[0] = col_type(m[0]);
189 this->value[1] = col_type(m[1]);
193 template<
typename T, qualifier Q>
194 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<3, 4, T, Q>
const& m)
195# if GLM_HAS_INITIALIZER_LISTS
196 : value{col_type(m[0]), col_type(m[1])}
199# if !GLM_HAS_INITIALIZER_LISTS
200 this->value[0] = col_type(m[0]);
201 this->value[1] = col_type(m[1]);
205 template<
typename T, qualifier Q>
206 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<4, 3, T, Q>
const& m)
207# if GLM_HAS_INITIALIZER_LISTS
208 : value{col_type(m[0]), col_type(m[1])}
211# if !GLM_HAS_INITIALIZER_LISTS
212 this->value[0] = col_type(m[0]);
213 this->value[1] = col_type(m[1]);
219 template<
typename T, qualifier Q>
220 GLM_FUNC_QUALIFIER
typename mat<2, 2, T, Q>::col_type& mat<2, 2, T, Q>::operator[](
typename mat<2, 2, T, Q>::length_type i)
222 assert(i < this->length());
223 return this->value[i];
226 template<
typename T, qualifier Q>
227 GLM_FUNC_QUALIFIER GLM_CONSTEXPR
typename mat<2, 2, T, Q>::col_type
const& mat<2, 2, T, Q>::operator[](
typename mat<2, 2, T, Q>::length_type i)
const
229 assert(i < this->length());
230 return this->value[i];
235 template<
typename T, qualifier Q>
237 GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator=(mat<2, 2, U, Q>
const& m)
239 this->value[0] = m[0];
240 this->value[1] = m[1];
244 template<
typename T, qualifier Q>
246 GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator+=(U scalar)
248 this->value[0] += scalar;
249 this->value[1] += scalar;
253 template<
typename T, qualifier Q>
255 GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator+=(mat<2, 2, U, Q>
const& m)
257 this->value[0] += m[0];
258 this->value[1] += m[1];
262 template<
typename T, qualifier Q>
264 GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator-=(U scalar)
266 this->value[0] -= scalar;
267 this->value[1] -= scalar;
271 template<
typename T, qualifier Q>
273 GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator-=(mat<2, 2, U, Q>
const& m)
275 this->value[0] -= m[0];
276 this->value[1] -= m[1];
280 template<
typename T, qualifier Q>
282 GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator*=(U scalar)
284 this->value[0] *= scalar;
285 this->value[1] *= scalar;
289 template<
typename T, qualifier Q>
291 GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator*=(mat<2, 2, U, Q>
const& m)
293 return (*
this = *
this * m);
296 template<
typename T, qualifier Q>
298 GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator/=(U scalar)
300 this->value[0] /= scalar;
301 this->value[1] /= scalar;
305 template<
typename T, qualifier Q>
307 GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator/=(mat<2, 2, U, Q>
const& m)
314 template<
typename T, qualifier Q>
315 GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator++()
322 template<
typename T, qualifier Q>
323 GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator--()
330 template<
typename T, qualifier Q>
331 GLM_FUNC_QUALIFIER mat<2, 2, T, Q> mat<2, 2, T, Q>::operator++(
int)
333 mat<2, 2, T, Q> Result(*
this);
338 template<
typename T, qualifier Q>
339 GLM_FUNC_QUALIFIER mat<2, 2, T, Q> mat<2, 2, T, Q>::operator--(
int)
341 mat<2, 2, T, Q> Result(*
this);
348 template<
typename T, qualifier Q>
349 GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(mat<2, 2, T, Q>
const& m)
354 template<
typename T, qualifier Q>
355 GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(mat<2, 2, T, Q>
const& m)
357 return mat<2, 2, T, Q>(
364 template<
typename T, qualifier Q>
365 GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(mat<2, 2, T, Q>
const& m, T scalar)
367 return mat<2, 2, T, Q>(
372 template<
typename T, qualifier Q>
373 GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(T scalar, mat<2, 2, T, Q>
const& m)
375 return mat<2, 2, T, Q>(
380 template<
typename T, qualifier Q>
381 GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(mat<2, 2, T, Q>
const& m1, mat<2, 2, T, Q>
const& m2)
383 return mat<2, 2, T, Q>(
388 template<
typename T, qualifier Q>
389 GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(mat<2, 2, T, Q>
const& m, T scalar)
391 return mat<2, 2, T, Q>(
396 template<
typename T, qualifier Q>
397 GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(T scalar, mat<2, 2, T, Q>
const& m)
399 return mat<2, 2, T, Q>(
404 template<
typename T, qualifier Q>
405 GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(mat<2, 2, T, Q>
const& m1, mat<2, 2, T, Q>
const& m2)
407 return mat<2, 2, T, Q>(
412 template<
typename T, qualifier Q>
413 GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(mat<2, 2, T, Q>
const& m, T scalar)
415 return mat<2, 2, T, Q>(
420 template<
typename T, qualifier Q>
421 GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(T scalar, mat<2, 2, T, Q>
const& m)
423 return mat<2, 2, T, Q>(
428 template<
typename T, qualifier Q>
429 GLM_FUNC_QUALIFIER
typename mat<2, 2, T, Q>::col_type
operator*
431 mat<2, 2, T, Q>
const& m,
432 typename mat<2, 2, T, Q>::row_type
const& v
436 m[0][0] * v.x + m[1][0] * v.y,
437 m[0][1] * v.x + m[1][1] * v.y);
440 template<
typename T, qualifier Q>
441 GLM_FUNC_QUALIFIER
typename mat<2, 2, T, Q>::row_type
operator*
443 typename mat<2, 2, T, Q>::col_type
const& v,
444 mat<2, 2, T, Q>
const& m
448 v.x * m[0][0] + v.y * m[0][1],
449 v.x * m[1][0] + v.y * m[1][1]);
452 template<
typename T, qualifier Q>
453 GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(mat<2, 2, T, Q>
const& m1, mat<2, 2, T, Q>
const& m2)
455 return mat<2, 2, T, Q>(
456 m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],
457 m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],
458 m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],
459 m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1]);
462 template<
typename T, qualifier Q>
463 GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(mat<2, 2, T, Q>
const& m1, mat<3, 2, T, Q>
const& m2)
465 return mat<3, 2, T, Q>(
466 m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],
467 m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],
468 m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],
469 m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1],
470 m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1],
471 m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1]);
474 template<
typename T, qualifier Q>
475 GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(mat<2, 2, T, Q>
const& m1, mat<4, 2, T, Q>
const& m2)
477 return mat<4, 2, T, Q>(
478 m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],
479 m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],
480 m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],
481 m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1],
482 m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1],
483 m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1],
484 m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1],
485 m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1]);
488 template<
typename T, qualifier Q>
489 GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator/(mat<2, 2, T, Q>
const& m, T scalar)
491 return mat<2, 2, T, Q>(
496 template<
typename T, qualifier Q>
497 GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator/(T scalar, mat<2, 2, T, Q>
const& m)
499 return mat<2, 2, T, Q>(
504 template<
typename T, qualifier Q>
505 GLM_FUNC_QUALIFIER
typename mat<2, 2, T, Q>::col_type operator/(mat<2, 2, T, Q>
const& m,
typename mat<2, 2, T, Q>::row_type
const& v)
510 template<
typename T, qualifier Q>
511 GLM_FUNC_QUALIFIER
typename mat<2, 2, T, Q>::row_type operator/(
typename mat<2, 2, T, Q>::col_type
const& v, mat<2, 2, T, Q>
const& m)
516 template<
typename T, qualifier Q>
517 GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator/(mat<2, 2, T, Q>
const& m1, mat<2, 2, T, Q>
const& m2)
519 mat<2, 2, T, Q> m1_copy(m1);
520 return m1_copy /= m2;
525 template<
typename T, qualifier Q>
526 GLM_FUNC_QUALIFIER
bool operator==(mat<2, 2, T, Q>
const& m1, mat<2, 2, T, Q>
const& m2)
528 return (m1[0] == m2[0]) && (m1[1] == m2[1]);
531 template<
typename T, qualifier Q>
532 GLM_FUNC_QUALIFIER
bool operator!=(mat<2, 2, T, Q>
const& m1, mat<2, 2, T, Q>
const& m2)
534 return (m1[0] != m2[0]) || (m1[1] != m2[1]);
GLM_FUNC_QUALIFIER mat< C, R, T, Q > inverse(mat< C, R, T, Q > const &m)
Definition func_matrix.inl:388
Core features
Definition common.hpp:21