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