• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 ///////////////////////////////////////////////////////////////////////////////////
2 /// OpenGL Mathematics (glm.g-truc.net)
3 ///
4 /// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
5 /// Permission is hereby granted, free of charge, to any person obtaining a copy
6 /// of this software and associated documentation files (the "Software"), to deal
7 /// in the Software without restriction, including without limitation the rights
8 /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 /// copies of the Software, and to permit persons to whom the Software is
10 /// furnished to do so, subject to the following conditions:
11 ///
12 /// The above copyright notice and this permission notice shall be included in
13 /// all copies or substantial portions of the Software.
14 ///
15 /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 /// THE SOFTWARE.
22 ///
23 /// @ref core
24 /// @file glm/core/type_vec.hpp
25 /// @date 2010-01-26 / 2011-06-15
26 /// @author Christophe Riccio
27 ///////////////////////////////////////////////////////////////////////////////////
28 
29 #ifndef glm_core_type_vec
30 #define glm_core_type_vec
31 
32 #include "precision.hpp"
33 #include "type_int.hpp"
34 
35 namespace glm{
36 namespace detail
37 {
38 	template <typename T, precision P> struct tvec1;
39 	template <typename T, precision P> struct tvec2;
40 	template <typename T, precision P> struct tvec3;
41 	template <typename T, precision P> struct tvec4;
42 }//namespace detail
43 
44 	typedef detail::tvec1<float, highp>		highp_vec1_t;
45 	typedef detail::tvec1<float, mediump>	mediump_vec1_t;
46 	typedef detail::tvec1<float, lowp>		lowp_vec1_t;
47 	typedef detail::tvec1<int, highp>		highp_ivec1_t;
48 	typedef detail::tvec1<int, mediump>		mediump_ivec1_t;
49 	typedef detail::tvec1<int, lowp>		lowp_ivec1_t;
50 	typedef detail::tvec1<uint, highp>		highp_uvec1_t;
51 	typedef detail::tvec1<uint, mediump>	mediump_uvec1_t;
52 	typedef detail::tvec1<uint, lowp>		lowp_uvec1_t;
53 	typedef detail::tvec1<bool, highp>		highp_bvec1_t;
54 	typedef detail::tvec1<bool, mediump>	mediump_bvec1_t;
55 	typedef detail::tvec1<bool, lowp>		lowp_bvec1_t;
56 
57 	/// @addtogroup core_precision
58 	/// @{
59 
60 	/// 2 components vector of high single-precision floating-point numbers.
61 	/// There is no guarantee on the actual precision.
62 	///
63 	/// @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>
64 	/// @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>
65 	typedef detail::tvec2<float, highp>		highp_vec2;
66 
67 	/// 2 components vector of medium single-precision floating-point numbers.
68 	/// There is no guarantee on the actual precision.
69 	///
70 	/// @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>
71 	/// @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>
72 	typedef detail::tvec2<float, mediump>	mediump_vec2;
73 
74 	/// 2 components vector of low single-precision floating-point numbers.
75 	/// There is no guarantee on the actual precision.
76 	///
77 	/// @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>
78 	/// @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>
79 	typedef detail::tvec2<float, lowp>		lowp_vec2;
80 
81 	/// 2 components vector of high double-precision floating-point numbers.
82 	/// There is no guarantee on the actual precision.
83 	///
84 	/// @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>
85 	/// @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>
86 	typedef detail::tvec2<double, highp>	highp_dvec2;
87 
88 	/// 2 components vector of medium double-precision floating-point numbers.
89 	/// There is no guarantee on the actual precision.
90 	///
91 	/// @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>
92 	/// @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>
93 	typedef detail::tvec2<double, mediump>	mediump_dvec2;
94 
95 	/// 2 components vector of low double-precision floating-point numbers.
96 	/// There is no guarantee on the actual precision.
97 	///
98 	/// @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>
99 	/// @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>
100 	typedef detail::tvec2<double, lowp>		lowp_dvec2;
101 
102 	/// 2 components vector of high precision signed integer numbers.
103 	/// There is no guarantee on the actual precision.
104 	///
105 	/// @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>
106 	/// @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>
107 	typedef detail::tvec2<int, highp>		highp_ivec2;
108 
109 	/// 2 components vector of medium precision signed integer numbers.
110 	/// There is no guarantee on the actual precision.
111 	///
112 	/// @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>
113 	/// @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>
114 	typedef detail::tvec2<int, mediump>		mediump_ivec2;
115 
116 	/// 2 components vector of low precision signed integer numbers.
117 	/// There is no guarantee on the actual precision.
118 	///
119 	/// @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>
120 	/// @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>
121 	typedef detail::tvec2<int, lowp>		lowp_ivec2;
122 
123 	/// 2 components vector of high precision unsigned integer numbers.
124 	/// There is no guarantee on the actual precision.
125 	///
126 	/// @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>
127 	/// @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>
128 	typedef detail::tvec2<uint, highp>		highp_uvec2;
129 
130 	/// 2 components vector of medium precision unsigned integer 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 detail::tvec2<uint, mediump>	mediump_uvec2;
136 
137 	/// 2 components vector of low precision unsigned integer 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 detail::tvec2<uint, lowp>		lowp_uvec2;
143 
144 	/// 2 components vector of high precision bool 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 detail::tvec2<bool, highp>		highp_bvec2;
150 
151 	/// 2 components vector of medium precision bool 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 detail::tvec2<bool, mediump>	mediump_bvec2;
157 
158 	/// 2 components vector of low precision bool 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 detail::tvec2<bool, lowp>		lowp_bvec2;
164 
165 	/// @}
166 
167 
168 	/// @addtogroup core_precision
169 	/// @{
170 
171 	/// 3 components vector of high single-precision floating-point numbers.
172 	/// There is no guarantee on the actual precision.
173 	///
174 	/// @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>
175 	/// @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>
176 	typedef detail::tvec3<float, highp>		highp_vec3;
177 
178 	/// 3 components vector of medium single-precision floating-point numbers.
179 	/// There is no guarantee on the actual precision.
180 	///
181 	/// @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>
182 	/// @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>
183 	typedef detail::tvec3<float, mediump>	mediump_vec3;
184 
185 	/// 3 components vector of low single-precision floating-point numbers.
186 	/// There is no guarantee on the actual precision.
187 	///
188 	/// @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>
189 	/// @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>
190 	typedef detail::tvec3<float, lowp>		lowp_vec3;
191 
192 	/// 3 components vector of high double-precision floating-point numbers.
193 	/// There is no guarantee on the actual precision.
194 	///
195 	/// @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>
196 	/// @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>
197 	typedef detail::tvec3<double, highp>	highp_dvec3;
198 
199 	/// 3 components vector of medium double-precision floating-point numbers.
200 	/// There is no guarantee on the actual precision.
201 	///
202 	/// @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>
203 	/// @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>
204 	typedef detail::tvec3<double, mediump>	mediump_dvec3;
205 
206 	/// 3 components vector of low double-precision floating-point numbers.
207 	/// There is no guarantee on the actual precision.
208 	///
209 	/// @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>
210 	/// @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>
211 	typedef detail::tvec3<double, lowp>		lowp_dvec3;
212 
213 	/// 3 components vector of high precision signed integer numbers.
214 	/// There is no guarantee on the actual precision.
215 	///
216 	/// @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>
217 	/// @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>
218 	typedef detail::tvec3<int, highp>		highp_ivec3;
219 
220 	/// 3 components vector of medium precision signed integer numbers.
221 	/// There is no guarantee on the actual precision.
222 	///
223 	/// @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>
224 	/// @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>
225 	typedef detail::tvec3<int, mediump>		mediump_ivec3;
226 
227 	/// 3 components vector of low precision signed integer numbers.
228 	/// There is no guarantee on the actual precision.
229 	///
230 	/// @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>
231 	/// @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>
232 	typedef detail::tvec3<int, lowp>		lowp_ivec3;
233 
234 	/// 3 components vector of high precision unsigned integer numbers.
235 	/// There is no guarantee on the actual precision.
236 	///
237 	/// @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>
238 	/// @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>
239 	typedef detail::tvec3<uint, highp>		highp_uvec3;
240 
241 	/// 3 components vector of medium precision unsigned integer numbers.
242 	/// There is no guarantee on the actual precision.
243 	///
244 	/// @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>
245 	/// @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>
246 	typedef detail::tvec3<uint, mediump>	mediump_uvec3;
247 
248 	/// 3 components vector of low precision unsigned integer numbers.
249 	/// There is no guarantee on the actual precision.
250 	///
251 	/// @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>
252 	/// @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>
253 	typedef detail::tvec3<uint, lowp>		lowp_uvec3;
254 
255 	/// 3 components vector of high precision bool numbers.
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 detail::tvec3<bool, highp>		highp_bvec3;
260 
261 	/// 3 components vector of medium precision bool numbers.
262 	///
263 	/// @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>
264 	/// @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>
265 	typedef detail::tvec3<bool, mediump>	mediump_bvec3;
266 
267 	/// 3 components vector of low precision bool numbers.
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 detail::tvec3<bool, lowp>		lowp_bvec3;
272 
273 	/// @}
274 
275 	/// @addtogroup core_precision
276 	/// @{
277 
278 	/// 4 components vector of high single-precision floating-point numbers.
279 	///
280 	/// @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>
281 	/// @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>
282 	typedef detail::tvec4<float, highp>		highp_vec4;
283 
284 	/// 4 components vector of medium single-precision floating-point numbers.
285 	///
286 	/// @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>
287 	/// @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>
288 	typedef detail::tvec4<float, mediump>	mediump_vec4;
289 
290 	/// 4 components vector of low single-precision floating-point numbers.
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 detail::tvec4<float, lowp>		lowp_vec4;
295 
296 	/// 4 components vector of high double-precision floating-point numbers.
297 	///
298 	/// @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>
299 	/// @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>
300 	typedef detail::tvec4<double, highp>	highp_dvec4;
301 
302 	/// 4 components vector of medium double-precision floating-point numbers.
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 detail::tvec4<double, mediump>	mediump_dvec4;
307 
308 	/// 4 components vector of low double-precision floating-point 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 detail::tvec4<double, lowp>		lowp_dvec4;
313 
314 	/// 4 components vector of high precision signed integer 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 detail::tvec4<int, highp>		highp_ivec4;
319 
320 	/// 4 components vector of medium precision signed integer 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 detail::tvec4<int, mediump>		mediump_ivec4;
325 
326 	/// 4 components vector of low precision signed integer numbers.
327 	///
328 	/// @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>
329 	/// @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>
330 	typedef detail::tvec4<int, lowp>		lowp_ivec4;
331 
332 	/// 4 components vector of high precision unsigned integer numbers.
333 	///
334 	/// @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>
335 	/// @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>
336 	typedef detail::tvec4<uint, highp>		highp_uvec4;
337 
338 	/// 4 components vector of medium precision unsigned integer numbers.
339 	///
340 	/// @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>
341 	/// @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>
342 	typedef detail::tvec4<uint, mediump>	mediump_uvec4;
343 
344 	/// 4 components vector of low precision unsigned integer numbers.
345 	///
346 	/// @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>
347 	/// @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>
348 	typedef detail::tvec4<uint, lowp>		lowp_uvec4;
349 
350 	/// 4 components vector of high precision bool numbers.
351 	///
352 	/// @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>
353 	/// @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>
354 	typedef detail::tvec4<bool, highp>		highp_bvec4;
355 
356 	/// 4 components vector of medium precision bool numbers.
357 	///
358 	/// @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>
359 	/// @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>
360 	typedef detail::tvec4<bool, mediump>	mediump_bvec4;
361 
362 	/// 4 components vector of low precision bool numbers.
363 	///
364 	/// @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>
365 	/// @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>
366 	typedef detail::tvec4<bool, lowp>		lowp_bvec4;
367 
368 	/// @}
369 
370 	/// @addtogroup core_types
371 	/// @{
372 
373 	//////////////////////////
374 	// Default float definition
375 
376 #if(defined(GLM_PRECISION_LOWP_FLOAT))
377 	typedef lowp_vec2			vec2;
378 	typedef lowp_vec3			vec3;
379 	typedef lowp_vec4			vec4;
380 #elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
381 	typedef mediump_vec2		vec2;
382 	typedef mediump_vec3		vec3;
383 	typedef mediump_vec4		vec4;
384 #else //defined(GLM_PRECISION_HIGHP_FLOAT)
385 	/// 2 components vector of floating-point 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 	typedef highp_vec2			vec2;
389 
390 	//! 3 components vector of floating-point numbers.
391 	///
392 	/// @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>
393 	typedef highp_vec3			vec3;
394 
395 	//! 4 components vector of floating-point 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 	typedef highp_vec4			vec4;
399 #endif//GLM_PRECISION
400 
401 	//////////////////////////
402 	// Default double definition
403 
404 #if(defined(GLM_PRECISION_LOWP_DOUBLE))
405 	typedef lowp_dvec2			dvec2;
406 	typedef lowp_dvec3			dvec3;
407 	typedef lowp_dvec4			dvec4;
408 #elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))
409 	typedef mediump_dvec2		dvec2;
410 	typedef mediump_dvec3		dvec3;
411 	typedef mediump_dvec4		dvec4;
412 #else //defined(GLM_PRECISION_HIGHP_DOUBLE)
413 	/// 2 components vector of double-precision floating-point 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 	typedef highp_dvec2			dvec2;
417 
418 	//! 3 components vector of double-precision floating-point numbers.
419 	///
420 	/// @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>
421 	typedef highp_dvec3			dvec3;
422 
423 	//! 4 components vector of double-precision floating-point numbers.
424 	///
425 	/// @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>
426 	typedef highp_dvec4			dvec4;
427 #endif//GLM_PRECISION
428 
429 	//////////////////////////
430 	// Signed integer definition
431 
432 #if(defined(GLM_PRECISION_LOWP_INT))
433 	typedef lowp_ivec2			ivec2;
434 	typedef lowp_ivec3			ivec3;
435 	typedef lowp_ivec4			ivec4;
436 #elif(defined(GLM_PRECISION_MEDIUMP_INT))
437 	typedef mediump_ivec2		ivec2;
438 	typedef mediump_ivec3		ivec3;
439 	typedef mediump_ivec4		ivec4;
440 #else //defined(GLM_PRECISION_HIGHP_INT)
441 	//! 2 components vector of signed integer numbers.
442 	///
443 	/// @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>
444 	typedef highp_ivec2			ivec2;
445 
446 	//! 3 components vector of signed integer numbers.
447 	///
448 	/// @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>
449 	typedef highp_ivec3			ivec3;
450 
451 	//! 4 components vector of signed integer numbers.
452 	///
453 	/// @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>
454 	typedef highp_ivec4			ivec4;
455 #endif//GLM_PRECISION
456 
457 	//////////////////////////
458 	// Unsigned integer definition
459 
460 #if(defined(GLM_PRECISION_LOWP_UINT))
461 	typedef lowp_uvec2			uvec2;
462 	typedef lowp_uvec3			uvec3;
463 	typedef lowp_uvec4			uvec4;
464 #elif(defined(GLM_PRECISION_MEDIUMP_UINT))
465 	typedef mediump_uvec2		uvec2;
466 	typedef mediump_uvec3		uvec3;
467 	typedef mediump_uvec4		uvec4;
468 #else //defined(GLM_PRECISION_HIGHP_UINT)
469 	/// 2 components vector of unsigned integer 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_uvec2			uvec2;
473 
474 	/// 3 components vector of unsigned integer 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_uvec3			uvec3;
478 
479 	/// 4 components vector of unsigned integer numbers.
480 	///
481 	/// @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>
482 	typedef highp_uvec4			uvec4;
483 #endif//GLM_PRECISION
484 
485 	//////////////////////////
486 	// Boolean definition
487 
488 #if(defined(GLM_PRECISION_LOWP_BOOL))
489 	typedef lowp_bvec2			bvec2;
490 	typedef lowp_bvec3			bvec3;
491 	typedef lowp_bvec4			bvec4;
492 #elif(defined(GLM_PRECISION_MEDIUMP_BOOL))
493 	typedef mediump_bvec2		bvec2;
494 	typedef mediump_bvec3		bvec3;
495 	typedef mediump_bvec4		bvec4;
496 #else //defined(GLM_PRECISION_HIGHP_BOOL)
497 	//! 2 components vector of boolean.
498 	///
499 	/// @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>
500 	typedef highp_bvec2			bvec2;
501 
502 	//! 3 components vector of boolean.
503 	///
504 	/// @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>
505 	typedef highp_bvec3			bvec3;
506 
507 	//! 4 components vector of boolean.
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_bvec4			bvec4;
511 #endif//GLM_PRECISION
512 
513 	/// @}
514 }//namespace glm
515 
516 #endif//glm_core_type_vec
517