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