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