1 /// @ref core
2 /// @file glm/detail/type_vec.hpp
3 
4 #pragma once
5 
6 #include "qualifier.hpp"
7 #include "type_int.hpp"
8 #include "compute_vector_relational.hpp"
9 
10 namespace glm{
11 namespace detail
12 {
13 	template<typename T, std::size_t size, bool aligned>
14 	struct storage
15 	{
16 		typedef struct type {
17 			uint8 data[size];
18 		} type;
19 	};
20 
21 	#define GLM_ALIGNED_STORAGE_TYPE_STRUCT(x) \
22 		template<typename T> \
23 		struct storage<T, x, true> { \
24 			GLM_ALIGNED_STRUCT(x) type { \
25 				uint8 data[x]; \
26 			}; \
27 		};
28 
29 	GLM_ALIGNED_STORAGE_TYPE_STRUCT(1)
30 	GLM_ALIGNED_STORAGE_TYPE_STRUCT(2)
31 	GLM_ALIGNED_STORAGE_TYPE_STRUCT(4)
32 	GLM_ALIGNED_STORAGE_TYPE_STRUCT(8)
33 	GLM_ALIGNED_STORAGE_TYPE_STRUCT(16)
34 	GLM_ALIGNED_STORAGE_TYPE_STRUCT(32)
35 	GLM_ALIGNED_STORAGE_TYPE_STRUCT(64)
36 
37 #	if GLM_ARCH & GLM_ARCH_SSE2_BIT
38 		template<>
39 		struct storage<float, 16, true>
40 		{
41 			typedef glm_vec4 type;
42 		};
43 
44 		template<>
45 		struct storage<int, 16, true>
46 		{
47 			typedef glm_ivec4 type;
48 		};
49 
50 		template<>
51 		struct storage<unsigned int, 16, true>
52 		{
53 			typedef glm_uvec4 type;
54 		};
55 /*
56 #	else
57 		typedef union __declspec(align(16)) glm_128
58 		{
59 			unsigned __int8 data[16];
60 		} glm_128;
61 
62 		template<>
63 		struct storage<float, 16, true>
64 		{
65 			typedef glm_128 type;
66 		};
67 
68 		template<>
69 		struct storage<int, 16, true>
70 		{
71 			typedef glm_128 type;
72 		};
73 
74 		template<>
75 		struct storage<unsigned int, 16, true>
76 		{
77 			typedef glm_128 type;
78 		};
79 */
80 #	endif
81 
82 #	if (GLM_ARCH & GLM_ARCH_AVX_BIT)
83 		template<>
84 		struct storage<double, 32, true>
85 		{
86 			typedef glm_dvec4 type;
87 		};
88 #	endif
89 
90 #	if (GLM_ARCH & GLM_ARCH_AVX2_BIT)
91 		template<>
92 		struct storage<int64, 32, true>
93 		{
94 			typedef glm_i64vec4 type;
95 		};
96 
97 		template<>
98 		struct storage<uint64, 32, true>
99 		{
100 			typedef glm_u64vec4 type;
101 		};
102 #	endif
103 }//namespace detail
104 
105 #if GLM_HAS_TEMPLATE_ALIASES
106 	template <typename T, qualifier Q = defaultp> using tvec2 = vec<2, T, Q>;
107 	template <typename T, qualifier Q = defaultp> using tvec3 = vec<3, T, Q>;
108 	template <typename T, qualifier Q = defaultp> using tvec4 = vec<4, T, Q>;
109 #endif//GLM_HAS_TEMPLATE_ALIASES
110 
111 	/// @addtogroup core_precision
112 	/// @{
113 
114 	/// 2 components vector of high single-qualifier floating-point numbers.
115 	/// There is no guarantee on the actual qualifier.
116 	///
117 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
118 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
119 	typedef vec<2, float, highp>		highp_vec2;
120 
121 	/// 2 components vector of medium single-qualifier floating-point numbers.
122 	/// There is no guarantee on the actual qualifier.
123 	///
124 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
125 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
126 	typedef vec<2, float, mediump>	mediump_vec2;
127 
128 	/// 2 components vector of low single-qualifier floating-point numbers.
129 	/// There is no guarantee on the actual qualifier.
130 	///
131 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
132 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
133 	typedef vec<2, float, lowp>		lowp_vec2;
134 
135 	/// 2 components vector of high double-qualifier floating-point numbers.
136 	/// There is no guarantee on the actual qualifier.
137 	///
138 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
139 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
140 	typedef vec<2, double, highp>	highp_dvec2;
141 
142 	/// 2 components vector of medium double-qualifier floating-point numbers.
143 	/// There is no guarantee on the actual qualifier.
144 	///
145 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
146 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
147 	typedef vec<2, double, mediump>	mediump_dvec2;
148 
149 	/// 2 components vector of low double-qualifier floating-point numbers.
150 	/// There is no guarantee on the actual qualifier.
151 	///
152 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
153 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
154 	typedef vec<2, double, lowp>		lowp_dvec2;
155 
156 	/// 2 components vector of high qualifier signed integer numbers.
157 	/// There is no guarantee on the actual qualifier.
158 	///
159 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
160 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
161 	typedef vec<2, int, highp>		highp_ivec2;
162 
163 	/// 2 components vector of medium qualifier signed integer numbers.
164 	/// There is no guarantee on the actual qualifier.
165 	///
166 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
167 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
168 	typedef vec<2, int, mediump>		mediump_ivec2;
169 
170 	/// 2 components vector of low qualifier signed integer numbers.
171 	/// There is no guarantee on the actual qualifier.
172 	///
173 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
174 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
175 	typedef vec<2, int, lowp>		lowp_ivec2;
176 
177 	/// 2 components vector of high qualifier unsigned integer numbers.
178 	/// There is no guarantee on the actual qualifier.
179 	///
180 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
181 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
182 	typedef vec<2, uint, highp>		highp_uvec2;
183 
184 	/// 2 components vector of medium qualifier unsigned integer numbers.
185 	/// There is no guarantee on the actual qualifier.
186 	///
187 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
188 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
189 	typedef vec<2, uint, mediump>	mediump_uvec2;
190 
191 	/// 2 components vector of low qualifier unsigned integer numbers.
192 	/// There is no guarantee on the actual qualifier.
193 	///
194 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
195 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
196 	typedef vec<2, uint, lowp>		lowp_uvec2;
197 
198 	/// 2 components vector of high qualifier bool numbers.
199 	/// There is no guarantee on the actual qualifier.
200 	///
201 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
202 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
203 	typedef vec<2, bool, highp>		highp_bvec2;
204 
205 	/// 2 components vector of medium qualifier bool numbers.
206 	/// There is no guarantee on the actual qualifier.
207 	///
208 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
209 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
210 	typedef vec<2, bool, mediump>	mediump_bvec2;
211 
212 	/// 2 components vector of low qualifier bool numbers.
213 	/// There is no guarantee on the actual qualifier.
214 	///
215 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
216 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
217 	typedef vec<2, bool, lowp>		lowp_bvec2;
218 
219 	/// @}
220 
221 	/// @addtogroup core_precision
222 	/// @{
223 
224 	/// 3 components vector of high single-qualifier floating-point numbers.
225 	/// There is no guarantee on the actual qualifier.
226 	///
227 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
228 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
229 	typedef vec<3, float, highp>		highp_vec3;
230 
231 	/// 3 components vector of medium single-qualifier floating-point numbers.
232 	/// There is no guarantee on the actual qualifier.
233 	///
234 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
235 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
236 	typedef vec<3, float, mediump>	mediump_vec3;
237 
238 	/// 3 components vector of low single-qualifier floating-point numbers.
239 	/// There is no guarantee on the actual qualifier.
240 	///
241 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
242 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
243 	typedef vec<3, float, lowp>		lowp_vec3;
244 
245 	/// 3 components vector of high double-qualifier floating-point numbers.
246 	/// There is no guarantee on the actual qualifier.
247 	///
248 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
249 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
250 	typedef vec<3, double, highp>	highp_dvec3;
251 
252 	/// 3 components vector of medium double-qualifier floating-point numbers.
253 	/// There is no guarantee on the actual qualifier.
254 	///
255 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
256 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
257 	typedef vec<3, double, mediump>	mediump_dvec3;
258 
259 	/// 3 components vector of low double-qualifier floating-point numbers.
260 	/// There is no guarantee on the actual qualifier.
261 	///
262 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
263 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
264 	typedef vec<3, double, lowp>		lowp_dvec3;
265 
266 	/// 3 components vector of high qualifier signed integer numbers.
267 	/// There is no guarantee on the actual qualifier.
268 	///
269 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
270 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
271 	typedef vec<3, int, highp>		highp_ivec3;
272 
273 	/// 3 components vector of medium qualifier signed integer numbers.
274 	/// There is no guarantee on the actual qualifier.
275 	///
276 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
277 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
278 	typedef vec<3, int, mediump>		mediump_ivec3;
279 
280 	/// 3 components vector of low qualifier signed integer numbers.
281 	/// There is no guarantee on the actual qualifier.
282 	///
283 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
284 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
285 	typedef vec<3, int, lowp>		lowp_ivec3;
286 
287 	/// 3 components vector of high qualifier unsigned integer numbers.
288 	/// There is no guarantee on the actual qualifier.
289 	///
290 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
291 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
292 	typedef vec<3, uint, highp>		highp_uvec3;
293 
294 	/// 3 components vector of medium qualifier unsigned integer numbers.
295 	/// There is no guarantee on the actual qualifier.
296 	///
297 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
298 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
299 	typedef vec<3, uint, mediump>	mediump_uvec3;
300 
301 	/// 3 components vector of low qualifier unsigned integer numbers.
302 	/// There is no guarantee on the actual qualifier.
303 	///
304 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
305 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
306 	typedef vec<3, uint, lowp>		lowp_uvec3;
307 
308 	/// 3 components vector of high qualifier bool numbers.
309 	///
310 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
311 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
312 	typedef vec<3, bool, highp>		highp_bvec3;
313 
314 	/// 3 components vector of medium qualifier bool numbers.
315 	///
316 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
317 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
318 	typedef vec<3, bool, mediump>	mediump_bvec3;
319 
320 	/// 3 components vector of low qualifier bool numbers.
321 	///
322 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
323 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
324 	typedef vec<3, bool, lowp>		lowp_bvec3;
325 
326 	/// @}
327 
328 	/// @addtogroup core_precision
329 	/// @{
330 
331 	/// 4 components vector of high single-qualifier floating-point numbers.
332 	///
333 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
334 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
335 	typedef vec<4, float, highp>		highp_vec4;
336 
337 	/// 4 components vector of medium single-qualifier floating-point numbers.
338 	///
339 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
340 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
341 	typedef vec<4, float, mediump>	mediump_vec4;
342 
343 	/// 4 components vector of low single-qualifier floating-point numbers.
344 	///
345 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
346 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
347 	typedef vec<4, float, lowp>		lowp_vec4;
348 
349 	/// 4 components vector of high double-qualifier floating-point numbers.
350 	///
351 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
352 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
353 	typedef vec<4, double, highp>	highp_dvec4;
354 
355 	/// 4 components vector of medium double-qualifier floating-point numbers.
356 	///
357 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
358 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
359 	typedef vec<4, double, mediump>	mediump_dvec4;
360 
361 	/// 4 components vector of low double-qualifier floating-point numbers.
362 	///
363 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
364 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
365 	typedef vec<4, double, lowp>		lowp_dvec4;
366 
367 	/// 4 components vector of high qualifier signed integer numbers.
368 	///
369 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
370 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
371 	typedef vec<4, int, highp>		highp_ivec4;
372 
373 	/// 4 components vector of medium qualifier signed integer numbers.
374 	///
375 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
376 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
377 	typedef vec<4, int, mediump>		mediump_ivec4;
378 
379 	/// 4 components vector of low qualifier signed integer numbers.
380 	///
381 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
382 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
383 	typedef vec<4, int, lowp>		lowp_ivec4;
384 
385 	/// 4 components vector of high qualifier unsigned integer numbers.
386 	///
387 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
388 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
389 	typedef vec<4, uint, highp>		highp_uvec4;
390 
391 	/// 4 components vector of medium qualifier unsigned integer numbers.
392 	///
393 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
394 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
395 	typedef vec<4, uint, mediump>	mediump_uvec4;
396 
397 	/// 4 components vector of low qualifier unsigned integer numbers.
398 	///
399 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
400 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
401 	typedef vec<4, uint, lowp>		lowp_uvec4;
402 
403 	/// 4 components vector of high qualifier bool numbers.
404 	///
405 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
406 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
407 	typedef vec<4, bool, highp>		highp_bvec4;
408 
409 	/// 4 components vector of medium qualifier bool numbers.
410 	///
411 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
412 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
413 	typedef vec<4, bool, mediump>	mediump_bvec4;
414 
415 	/// 4 components vector of low qualifier bool numbers.
416 	///
417 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
418 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
419 	typedef vec<4, bool, lowp>		lowp_bvec4;
420 
421 	/// @}
422 
423 	/// @addtogroup core_types
424 	/// @{
425 
426 	// -- Default float definition --
427 
428 #if(defined(GLM_PRECISION_LOWP_FLOAT))
429 	typedef lowp_vec2			vec2;
430 	typedef lowp_vec3			vec3;
431 	typedef lowp_vec4			vec4;
432 #elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
433 	typedef mediump_vec2		vec2;
434 	typedef mediump_vec3		vec3;
435 	typedef mediump_vec4		vec4;
436 #else //defined(GLM_PRECISION_HIGHP_FLOAT)
437 	/// 2 components vector of floating-point numbers.
438 	///
439 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
440 	typedef highp_vec2			vec2;
441 
442 	//! 3 components vector of floating-point numbers.
443 	///
444 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
445 	typedef highp_vec3			vec3;
446 
447 	//! 4 components vector of floating-point numbers.
448 	///
449 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
450 	typedef highp_vec4			vec4;
451 #endif//GLM_PRECISION
452 
453 	// -- Default double definition --
454 
455 #if(defined(GLM_PRECISION_LOWP_DOUBLE))
456 	typedef lowp_dvec2			dvec2;
457 	typedef lowp_dvec3			dvec3;
458 	typedef lowp_dvec4			dvec4;
459 #elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))
460 	typedef mediump_dvec2		dvec2;
461 	typedef mediump_dvec3		dvec3;
462 	typedef mediump_dvec4		dvec4;
463 #else //defined(GLM_PRECISION_HIGHP_DOUBLE)
464 	/// 2 components vector of double-qualifier floating-point numbers.
465 	///
466 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
467 	typedef highp_dvec2			dvec2;
468 
469 	//! 3 components vector of double-qualifier floating-point numbers.
470 	///
471 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
472 	typedef highp_dvec3			dvec3;
473 
474 	//! 4 components vector of double-qualifier floating-point numbers.
475 	///
476 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
477 	typedef highp_dvec4			dvec4;
478 #endif//GLM_PRECISION
479 
480 	// -- Signed integer definition --
481 
482 #if(defined(GLM_PRECISION_LOWP_INT))
483 	typedef lowp_ivec2			ivec2;
484 	typedef lowp_ivec3			ivec3;
485 	typedef lowp_ivec4			ivec4;
486 #elif(defined(GLM_PRECISION_MEDIUMP_INT))
487 	typedef mediump_ivec2		ivec2;
488 	typedef mediump_ivec3		ivec3;
489 	typedef mediump_ivec4		ivec4;
490 #else //defined(GLM_PRECISION_HIGHP_INT)
491 	/// 2 components vector of signed integer numbers.
492 	///
493 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
494 	typedef highp_ivec2			ivec2;
495 
496 	/// 3 components vector of signed integer numbers.
497 	///
498 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
499 	typedef highp_ivec3			ivec3;
500 
501 	/// 4 components vector of signed integer numbers.
502 	///
503 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
504 	typedef highp_ivec4			ivec4;
505 #endif//GLM_PRECISION
506 
507 	// -- Unsigned integer definition --
508 
509 #if(defined(GLM_PRECISION_LOWP_UINT))
510 	typedef lowp_uvec2			uvec2;
511 	typedef lowp_uvec3			uvec3;
512 	typedef lowp_uvec4			uvec4;
513 #elif(defined(GLM_PRECISION_MEDIUMP_UINT))
514 	typedef mediump_uvec2		uvec2;
515 	typedef mediump_uvec3		uvec3;
516 	typedef mediump_uvec4		uvec4;
517 #else //defined(GLM_PRECISION_HIGHP_UINT)
518 	/// 2 components vector of unsigned integer numbers.
519 	///
520 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
521 	typedef highp_uvec2			uvec2;
522 
523 	/// 3 components vector of unsigned integer numbers.
524 	///
525 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
526 	typedef highp_uvec3			uvec3;
527 
528 	/// 4 components vector of unsigned integer numbers.
529 	///
530 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
531 	typedef highp_uvec4			uvec4;
532 #endif//GLM_PRECISION
533 
534 	// -- Boolean definition --
535 
536 #if(defined(GLM_PRECISION_LOWP_BOOL))
537 	typedef lowp_bvec2			bvec2;
538 	typedef lowp_bvec3			bvec3;
539 	typedef lowp_bvec4			bvec4;
540 #elif(defined(GLM_PRECISION_MEDIUMP_BOOL))
541 	typedef mediump_bvec2		bvec2;
542 	typedef mediump_bvec3		bvec3;
543 	typedef mediump_bvec4		bvec4;
544 #else //defined(GLM_PRECISION_HIGHP_BOOL)
545 	/// 2 components vector of boolean.
546 	///
547 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
548 	typedef highp_bvec2			bvec2;
549 
550 	/// 3 components vector of boolean.
551 	///
552 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
553 	typedef highp_bvec3			bvec3;
554 
555 	/// 4 components vector of boolean.
556 	///
557 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>
558 	typedef highp_bvec4			bvec4;
559 #endif//GLM_PRECISION
560 
561 	/// @}
562 }//namespace glm
563