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