master
ブランチ master
VulkanExample / dep / include / glm / detail / type_mat4x2.inl
12.9 KB、411行 生 Blame 履歴
1namespace glm
2{
3 // -- Constructors --
4
5# if GLM_CONFIG_CTOR_INIT == GLM_ENABLE
6 template<typename T, qualifier Q>
7 GLM_DEFAULTED_DEFAULT_CTOR_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat()
8 : value{col_type(1, 0), col_type(0, 1), col_type(0, 0), col_type(0, 0)}
9 {}
10# endif
11
12 template<typename T, qualifier Q>
13 template<qualifier P>
14 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<4, 2, T, P> const& m)
15 : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])}
16 {}
17
18 template<typename T, qualifier Q>
19 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(T s)
20 : value{col_type(s, 0), col_type(0, s), col_type(0, 0), col_type(0, 0)}
21 {}
22
23 template<typename T, qualifier Q>
24 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat
25 (
26 T x0, T y0,
27 T x1, T y1,
28 T x2, T y2,
29 T x3, T y3
30 )
31 : value{col_type(x0, y0), col_type(x1, y1), col_type(x2, y2), col_type(x3, y3)}
32 {}
33
34 template<typename T, qualifier Q>
35 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2, col_type const& v3)
36 : value{col_type(v0), col_type(v1), col_type(v2), col_type(v3)}
37 {}
38
39 // -- Conversion constructors --
40
41 template<typename T, qualifier Q>
42 template<
43 typename X0, typename Y0,
44 typename X1, typename Y1,
45 typename X2, typename Y2,
46 typename X3, typename Y3>
47 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat
48 (
49 X0 x0, Y0 y0,
50 X1 x1, Y1 y1,
51 X2 x2, Y2 y2,
52 X3 x3, Y3 y3
53 )
54 : value{col_type(x0, y0), col_type(x1, y1), col_type(x2, y2), col_type(x3, y3)}
55 {}
56
57 template<typename T, qualifier Q>
58 template<typename V0, typename V1, typename V2, typename V3>
59 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(vec<2, V0, Q> const& v0, vec<2, V1, Q> const& v1, vec<2, V2, Q> const& v2, vec<2, V3, Q> const& v3)
60 : value{col_type(v0), col_type(v1), col_type(v2), col_type(v3)}
61 {}
62
63 // -- Conversion --
64
65 template<typename T, qualifier Q>
66 template<typename U, qualifier P>
67 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<4, 2, U, P> const& m)
68 : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])}
69 {}
70
71 template<typename T, qualifier Q>
72 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<2, 2, T, Q> const& m)
73 : value{col_type(m[0]), col_type(m[1]), col_type(0), col_type(0)}
74 {}
75
76 template<typename T, qualifier Q>
77 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<3, 3, T, Q> const& m)
78 : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)}
79 {}
80
81 template<typename T, qualifier Q>
82 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<4, 4, T, Q> const& m)
83 : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])}
84 {}
85
86 template<typename T, qualifier Q>
87 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<2, 3, T, Q> const& m)
88 : value{col_type(m[0]), col_type(m[1]), col_type(0), col_type(0)}
89 {}
90
91 template<typename T, qualifier Q>
92 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<3, 2, T, Q> const& m)
93 : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)}
94 {}
95
96 template<typename T, qualifier Q>
97 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<2, 4, T, Q> const& m)
98 : value{col_type(m[0]), col_type(m[1]), col_type(0), col_type(0)}
99 {}
100
101 template<typename T, qualifier Q>
102 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<4, 3, T, Q> const& m)
103 : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])}
104 {}
105
106 template<typename T, qualifier Q>
107 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<3, 4, T, Q> const& m)
108 : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)}
109 {}
110
111 // -- Accesses --
112
113 template<typename T, qualifier Q>
114 GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<4, 2, T, Q>::col_type & mat<4, 2, T, Q>::operator[](typename mat<4, 2, T, Q>::length_type i) noexcept
115 {
116 GLM_ASSERT_LENGTH(i, this->length());
117 return this->value[i];
118 }
119
120 template<typename T, qualifier Q>
121 GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<4, 2, T, Q>::col_type const& mat<4, 2, T, Q>::operator[](typename mat<4, 2, T, Q>::length_type i) const noexcept
122 {
123 GLM_ASSERT_LENGTH(i, this->length());
124 return this->value[i];
125 }
126
127 // -- Unary updatable operators --
128
129 template<typename T, qualifier Q>
130 template<typename U>
131 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>& mat<4, 2, T, Q>::operator=(mat<4, 2, U, Q> const& m)
132 {
133 this->value[0] = m[0];
134 this->value[1] = m[1];
135 this->value[2] = m[2];
136 this->value[3] = m[3];
137 return *this;
138 }
139
140 template<typename T, qualifier Q>
141 template<typename U>
142 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator+=(U s)
143 {
144 this->value[0] += s;
145 this->value[1] += s;
146 this->value[2] += s;
147 this->value[3] += s;
148 return *this;
149 }
150
151 template<typename T, qualifier Q>
152 template<typename U>
153 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator+=(mat<4, 2, U, Q> const& m)
154 {
155 this->value[0] += m[0];
156 this->value[1] += m[1];
157 this->value[2] += m[2];
158 this->value[3] += m[3];
159 return *this;
160 }
161
162 template<typename T, qualifier Q>
163 template<typename U>
164 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator-=(U s)
165 {
166 this->value[0] -= s;
167 this->value[1] -= s;
168 this->value[2] -= s;
169 this->value[3] -= s;
170 return *this;
171 }
172
173 template<typename T, qualifier Q>
174 template<typename U>
175 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator-=(mat<4, 2, U, Q> const& m)
176 {
177 this->value[0] -= m[0];
178 this->value[1] -= m[1];
179 this->value[2] -= m[2];
180 this->value[3] -= m[3];
181 return *this;
182 }
183
184 template<typename T, qualifier Q>
185 template<typename U>
186 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator*=(U s)
187 {
188 this->value[0] *= s;
189 this->value[1] *= s;
190 this->value[2] *= s;
191 this->value[3] *= s;
192 return *this;
193 }
194
195 template<typename T, qualifier Q>
196 template<typename U>
197 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator/=(U s)
198 {
199 this->value[0] /= s;
200 this->value[1] /= s;
201 this->value[2] /= s;
202 this->value[3] /= s;
203 return *this;
204 }
205
206 // -- Increment and decrement operators --
207
208 template<typename T, qualifier Q>
209 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator++()
210 {
211 ++this->value[0];
212 ++this->value[1];
213 ++this->value[2];
214 ++this->value[3];
215 return *this;
216 }
217
218 template<typename T, qualifier Q>
219 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator--()
220 {
221 --this->value[0];
222 --this->value[1];
223 --this->value[2];
224 --this->value[3];
225 return *this;
226 }
227
228 template<typename T, qualifier Q>
229 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q> mat<4, 2, T, Q>::operator++(int)
230 {
231 mat<4, 2, T, Q> Result(*this);
232 ++*this;
233 return Result;
234 }
235
236 template<typename T, qualifier Q>
237 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q> mat<4, 2, T, Q>::operator--(int)
238 {
239 mat<4, 2, T, Q> Result(*this);
240 --*this;
241 return Result;
242 }
243
244 // -- Unary arithmetic operators --
245
246 template<typename T, qualifier Q>
247 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m)
248 {
249 return m;
250 }
251
252 template<typename T, qualifier Q>
253 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m)
254 {
255 return mat<4, 2, T, Q>(
256 -m[0],
257 -m[1],
258 -m[2],
259 -m[3]);
260 }
261
262 // -- Binary arithmetic operators --
263
264 template<typename T, qualifier Q>
265 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m, T scalar)
266 {
267 return mat<4, 2, T, Q>(
268 m[0] + scalar,
269 m[1] + scalar,
270 m[2] + scalar,
271 m[3] + scalar);
272 }
273
274 template<typename T, qualifier Q>
275 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2)
276 {
277 return mat<4, 2, T, Q>(
278 m1[0] + m2[0],
279 m1[1] + m2[1],
280 m1[2] + m2[2],
281 m1[3] + m2[3]);
282 }
283
284 template<typename T, qualifier Q>
285 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m, T scalar)
286 {
287 return mat<4, 2, T, Q>(
288 m[0] - scalar,
289 m[1] - scalar,
290 m[2] - scalar,
291 m[3] - scalar);
292 }
293
294 template<typename T, qualifier Q>
295 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2)
296 {
297 return mat<4, 2, T, Q>(
298 m1[0] - m2[0],
299 m1[1] - m2[1],
300 m1[2] - m2[2],
301 m1[3] - m2[3]);
302 }
303
304 template<typename T, qualifier Q>
305 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m, T scalar)
306 {
307 return mat<4, 2, T, Q>(
308 m[0] * scalar,
309 m[1] * scalar,
310 m[2] * scalar,
311 m[3] * scalar);
312 }
313
314 template<typename T, qualifier Q>
315 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q> operator*(T scalar, mat<4, 2, T, Q> const& m)
316 {
317 return mat<4, 2, T, Q>(
318 m[0] * scalar,
319 m[1] * scalar,
320 m[2] * scalar,
321 m[3] * scalar);
322 }
323
324 template<typename T, qualifier Q>
325 GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<4, 2, T, Q>::col_type operator*(mat<4, 2, T, Q> const& m, typename mat<4, 2, T, Q>::row_type const& v)
326 {
327 return typename mat<4, 2, T, Q>::col_type(
328 m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z + m[3][0] * v.w,
329 m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z + m[3][1] * v.w);
330 }
331
332 template<typename T, qualifier Q>
333 GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<4, 2, T, Q>::row_type operator*(typename mat<4, 2, T, Q>::col_type const& v, mat<4, 2, T, Q> const& m)
334 {
335 return typename mat<4, 2, T, Q>::row_type(
336 v.x * m[0][0] + v.y * m[0][1],
337 v.x * m[1][0] + v.y * m[1][1],
338 v.x * m[2][0] + v.y * m[2][1],
339 v.x * m[3][0] + v.y * m[3][1]);
340 }
341
342 template<typename T, qualifier Q>
343 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<2, 4, T, Q> const& m2)
344 {
345 return mat<2, 2, T, Q>(
346 m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3],
347 m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3],
348 m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3],
349 m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3]);
350 }
351
352 template<typename T, qualifier Q>
353 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<3, 4, T, Q> const& m2)
354 {
355 return mat<3, 2, T, Q>(
356 m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3],
357 m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3],
358 m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3],
359 m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3],
360 m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3],
361 m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3]);
362 }
363
364 template<typename T, qualifier Q>
365 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<4, 4, T, Q> const& m2)
366 {
367 return mat<4, 2, T, Q>(
368 m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3],
369 m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3],
370 m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3],
371 m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3],
372 m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3],
373 m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3],
374 m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2] + m1[3][0] * m2[3][3],
375 m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2] + m1[3][1] * m2[3][3]);
376 }
377
378 template<typename T, qualifier Q>
379 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q> operator/(mat<4, 2, T, Q> const& m, T scalar)
380 {
381 return mat<4, 2, T, Q>(
382 m[0] / scalar,
383 m[1] / scalar,
384 m[2] / scalar,
385 m[3] / scalar);
386 }
387
388 template<typename T, qualifier Q>
389 GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q> operator/(T scalar, mat<4, 2, T, Q> const& m)
390 {
391 return mat<4, 2, T, Q>(
392 scalar / m[0],
393 scalar / m[1],
394 scalar / m[2],
395 scalar / m[3]);
396 }
397
398 // -- Boolean operators --
399
400 template<typename T, qualifier Q>
401 GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2)
402 {
403 return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]) && (m1[3] == m2[3]);
404 }
405
406 template<typename T, qualifier Q>
407 GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2)
408 {
409 return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]) || (m1[3] != m2[3]);
410 }
411} //namespace glm