master
ブランチ master
VulkanExample / dep / include / glm / detail / type_vec2.hpp
15.9 KB、406行 生 Blame 履歴
1/// @ref core
2/// @file glm/detail/type_vec2.hpp
3
4#pragma once
5
6#include "qualifier.hpp"
7#if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR
8# include "_swizzle.hpp"
9#elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION
10# include "_swizzle_func.hpp"
11#endif
12#include <cstddef>
13
14namespace glm
15{
16 template<typename T, qualifier Q>
17 struct vec<2, T, Q>
18 {
19 // -- Implementation detail --
20
21 typedef T value_type;
22 typedef vec<2, T, Q> type;
23 typedef vec<2, bool, Q> bool_type;
24 enum is_aligned
25 {
26 value = false
27 };
28
29 // -- Data --
30
31# if GLM_SILENT_WARNINGS == GLM_ENABLE
32# if GLM_COMPILER & GLM_COMPILER_GCC
33# pragma GCC diagnostic push
34# pragma GCC diagnostic ignored "-Wpedantic"
35# elif GLM_COMPILER & GLM_COMPILER_CLANG
36# pragma clang diagnostic push
37# pragma clang diagnostic ignored "-Wgnu-anonymous-struct"
38# pragma clang diagnostic ignored "-Wnested-anon-types"
39# elif GLM_COMPILER & GLM_COMPILER_VC
40# pragma warning(push)
41# pragma warning(disable: 4201) // nonstandard extension used : nameless struct/union
42# endif
43# endif
44
45# if GLM_CONFIG_XYZW_ONLY
46 T x, y;
47# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION
48 GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, Q, x, y)
49# endif//GLM_CONFIG_SWIZZLE
50# elif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE
51 union
52 {
53 struct{ T x, y; };
54 struct{ T r, g; };
55 struct{ T s, t; };
56
57 typename detail::storage<2, T, detail::is_aligned<Q>::value>::type data;
58
59# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR
60 GLM_SWIZZLE2_2_MEMBERS(T, Q, x, y)
61 GLM_SWIZZLE2_2_MEMBERS(T, Q, r, g)
62 GLM_SWIZZLE2_2_MEMBERS(T, Q, s, t)
63 GLM_SWIZZLE2_3_MEMBERS(T, Q, x, y)
64 GLM_SWIZZLE2_3_MEMBERS(T, Q, r, g)
65 GLM_SWIZZLE2_3_MEMBERS(T, Q, s, t)
66 GLM_SWIZZLE2_4_MEMBERS(T, Q, x, y)
67 GLM_SWIZZLE2_4_MEMBERS(T, Q, r, g)
68 GLM_SWIZZLE2_4_MEMBERS(T, Q, s, t)
69# endif
70 };
71# else
72 union {T x, r, s;};
73 union {T y, g, t;};
74
75# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION
76 GLM_SWIZZLE_GEN_VEC_FROM_VEC2(T, Q)
77# endif//GLM_CONFIG_SWIZZLE
78# endif
79
80# if GLM_SILENT_WARNINGS == GLM_ENABLE
81# if GLM_COMPILER & GLM_COMPILER_CLANG
82# pragma clang diagnostic pop
83# elif GLM_COMPILER & GLM_COMPILER_GCC
84# pragma GCC diagnostic pop
85# elif GLM_COMPILER & GLM_COMPILER_VC
86# pragma warning(pop)
87# endif
88# endif
89
90 // -- Component accesses --
91
92 /// Return the count of components of the vector
93 typedef length_t length_type;
94 GLM_FUNC_DECL static constexpr length_type length(){return 2;}
95
96 GLM_FUNC_DECL GLM_CONSTEXPR T& operator[](length_type i);
97 GLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const;
98
99 // -- Implicit basic constructors --
100
101 GLM_DEFAULTED_DEFAULT_CTOR_DECL GLM_CONSTEXPR vec() GLM_DEFAULT_CTOR;
102 GLM_CTOR_DECL vec(vec<2, T, Q> const& v) = default;
103 template<qualifier P>
104 GLM_CTOR_DECL vec(vec<2, T, P> const& v);
105
106 // -- Explicit basic constructors --
107
108 GLM_CTOR_DECL explicit vec(T scalar);
109 GLM_CTOR_DECL vec(T x, T y);
110
111 // -- Conversion constructors --
112
113 template<typename U, qualifier P>
114 GLM_CTOR_DECL explicit vec(vec<1, U, P> const& v);
115
116 /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
117 template<typename A, typename B>
118 GLM_CTOR_DECL vec(A x, B y);
119 template<typename A, typename B>
120 GLM_CTOR_DECL vec(vec<1, A, Q> const& x, B y);
121 template<typename A, typename B>
122 GLM_CTOR_DECL vec(A x, vec<1, B, Q> const& y);
123 template<typename A, typename B>
124 GLM_CTOR_DECL vec(vec<1, A, Q> const& x, vec<1, B, Q> const& y);
125
126 // -- Conversion vector constructors --
127
128 /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
129 template<typename U, qualifier P>
130 GLM_CTOR_DECL GLM_EXPLICIT vec(vec<3, U, P> const& v);
131 /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
132 template<typename U, qualifier P>
133 GLM_CTOR_DECL GLM_EXPLICIT vec(vec<4, U, P> const& v);
134
135 /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
136 template<typename U, qualifier P>
137 GLM_CTOR_DECL GLM_EXPLICIT vec(vec<2, U, P> const& v);
138
139 // -- Swizzle constructors --
140# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR
141 template<int E0, int E1>
142 GLM_FUNC_DISCARD_DECL vec(detail::_swizzle<2, T, Q, E0, E1,-1,-2> const& that)
143 {
144 *this = that();
145 }
146# endif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR
147
148 // -- Unary arithmetic operators --
149
150 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator=(vec const& v) = default;
151
152 template<typename U>
153 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator=(vec<2, U, Q> const& v);
154 template<typename U>
155 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator+=(U scalar);
156 template<typename U>
157 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator+=(vec<1, U, Q> const& v);
158 template<typename U>
159 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator+=(vec<2, U, Q> const& v);
160 template<typename U>
161 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator-=(U scalar);
162 template<typename U>
163 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator-=(vec<1, U, Q> const& v);
164 template<typename U>
165 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator-=(vec<2, U, Q> const& v);
166 template<typename U>
167 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator*=(U scalar);
168 template<typename U>
169 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator*=(vec<1, U, Q> const& v);
170 template<typename U>
171 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator*=(vec<2, U, Q> const& v);
172 template<typename U>
173 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator/=(U scalar);
174 template<typename U>
175 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator/=(vec<1, U, Q> const& v);
176 template<typename U>
177 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator/=(vec<2, U, Q> const& v);
178
179 // -- Increment and decrement operators --
180
181 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator++();
182 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator--();
183 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator++(int);
184 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator--(int);
185
186 // -- Unary bit operators --
187
188 template<typename U>
189 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator%=(U scalar);
190 template<typename U>
191 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator%=(vec<1, U, Q> const& v);
192 template<typename U>
193 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator%=(vec<2, U, Q> const& v);
194 template<typename U>
195 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator&=(U scalar);
196 template<typename U>
197 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator&=(vec<1, U, Q> const& v);
198 template<typename U>
199 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator&=(vec<2, U, Q> const& v);
200 template<typename U>
201 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator|=(U scalar);
202 template<typename U>
203 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator|=(vec<1, U, Q> const& v);
204 template<typename U>
205 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator|=(vec<2, U, Q> const& v);
206 template<typename U>
207 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator^=(U scalar);
208 template<typename U>
209 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator^=(vec<1, U, Q> const& v);
210 template<typename U>
211 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator^=(vec<2, U, Q> const& v);
212 template<typename U>
213 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator<<=(U scalar);
214 template<typename U>
215 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator<<=(vec<1, U, Q> const& v);
216 template<typename U>
217 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator<<=(vec<2, U, Q> const& v);
218 template<typename U>
219 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator>>=(U scalar);
220 template<typename U>
221 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator>>=(vec<1, U, Q> const& v);
222 template<typename U>
223 GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<2, T, Q> & operator>>=(vec<2, U, Q> const& v);
224 };
225
226 // -- Unary operators --
227
228 template<typename T, qualifier Q>
229 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v);
230
231 template<typename T, qualifier Q>
232 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v);
233
234 // -- Binary operators --
235
236 template<typename T, qualifier Q>
237 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v, T scalar);
238
239 template<typename T, qualifier Q>
240 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);
241
242 template<typename T, qualifier Q>
243 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(T scalar, vec<2, T, Q> const& v);
244
245 template<typename T, qualifier Q>
246 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);
247
248 template<typename T, qualifier Q>
249 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);
250
251 template<typename T, qualifier Q>
252 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v, T scalar);
253
254 template<typename T, qualifier Q>
255 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);
256
257 template<typename T, qualifier Q>
258 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(T scalar, vec<2, T, Q> const& v);
259
260 template<typename T, qualifier Q>
261 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);
262
263 template<typename T, qualifier Q>
264 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);
265
266 template<typename T, qualifier Q>
267 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v, T scalar);
268
269 template<typename T, qualifier Q>
270 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);
271
272 template<typename T, qualifier Q>
273 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(T scalar, vec<2, T, Q> const& v);
274
275 template<typename T, qualifier Q>
276 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);
277
278 template<typename T, qualifier Q>
279 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);
280
281 template<typename T, qualifier Q>
282 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v, T scalar);
283
284 template<typename T, qualifier Q>
285 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);
286
287 template<typename T, qualifier Q>
288 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(T scalar, vec<2, T, Q> const& v);
289
290 template<typename T, qualifier Q>
291 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);
292
293 template<typename T, qualifier Q>
294 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);
295
296 template<typename T, qualifier Q>
297 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v, T scalar);
298
299 template<typename T, qualifier Q>
300 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);
301
302 template<typename T, qualifier Q>
303 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(T scalar, vec<2, T, Q> const& v);
304
305 template<typename T, qualifier Q>
306 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);
307
308 template<typename T, qualifier Q>
309 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);
310
311 template<typename T, qualifier Q>
312 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v, T scalar);
313
314 template<typename T, qualifier Q>
315 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);
316
317 template<typename T, qualifier Q>
318 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(T scalar, vec<2, T, Q> const& v);
319
320 template<typename T, qualifier Q>
321 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);
322
323 template<typename T, qualifier Q>
324 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);
325
326 template<typename T, qualifier Q>
327 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v, T scalar);
328
329 template<typename T, qualifier Q>
330 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);
331
332 template<typename T, qualifier Q>
333 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(T scalar, vec<2, T, Q> const& v);
334
335 template<typename T, qualifier Q>
336 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);
337
338 template<typename T, qualifier Q>
339 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);
340
341 template<typename T, qualifier Q>
342 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v, T scalar);
343
344 template<typename T, qualifier Q>
345 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);
346
347 template<typename T, qualifier Q>
348 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(T scalar, vec<2, T, Q> const& v);
349
350 template<typename T, qualifier Q>
351 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);
352
353 template<typename T, qualifier Q>
354 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);
355
356 template<typename T, qualifier Q>
357 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v, T scalar);
358
359 template<typename T, qualifier Q>
360 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);
361
362 template<typename T, qualifier Q>
363 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(T scalar, vec<2, T, Q> const& v);
364
365 template<typename T, qualifier Q>
366 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);
367
368 template<typename T, qualifier Q>
369 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);
370
371 template<typename T, qualifier Q>
372 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v, T scalar);
373
374 template<typename T, qualifier Q>
375 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);
376
377 template<typename T, qualifier Q>
378 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(T scalar, vec<2, T, Q> const& v);
379
380 template<typename T, qualifier Q>
381 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);
382
383 template<typename T, qualifier Q>
384 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);
385
386 template<typename T, qualifier Q>
387 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator~(vec<2, T, Q> const& v);
388
389 // -- Boolean operators --
390
391 template<typename T, qualifier Q>
392 GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);
393
394 template<typename T, qualifier Q>
395 GLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);
396
397 template<qualifier Q>
398 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, bool, Q> operator&&(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2);
399
400 template<qualifier Q>
401 GLM_FUNC_DECL GLM_CONSTEXPR vec<2, bool, Q> operator||(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2);
402}//namespace glm
403
404#ifndef GLM_EXTERNAL_TEMPLATE
405#include "type_vec2.inl"
406#endif//GLM_EXTERNAL_TEMPLATE