• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /// @ref gtc_type_aligned
2 /// @file glm/gtc/type_aligned.hpp
3 ///
4 /// @see core (dependence)
5 ///
6 /// @defgroup gtc_type_aligned GLM_GTC_type_aligned
7 /// @ingroup gtc
8 ///
9 /// @brief Aligned types.
10 /// <glm/gtc/type_aligned.hpp> need to be included to use these features.
11 
12 #pragma once
13 
14 #if !GLM_HAS_ALIGNED_TYPE
15 #	error "GLM: Aligned types are not supported on this platform"
16 #endif
17 #if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
18 # pragma message("GLM: GLM_GTC_type_aligned extension included")
19 #endif
20 
21 #include "../vec2.hpp"
22 #include "../vec3.hpp"
23 #include "../vec4.hpp"
24 #include "../gtc/vec1.hpp"
25 
26 namespace glm
27 {
28 	template <typename T, precision P> struct tvec1;
29 	template <typename T, precision P> struct tvec2;
30 	template <typename T, precision P> struct tvec3;
31 	template <typename T, precision P> struct tvec4;
32 	/// @addtogroup gtc_type_aligned
33 	/// @{
34 
35 	// -- *vec1 --
36 
37 	typedef tvec1<float, aligned_highp>		aligned_highp_vec1;
38 	typedef tvec1<float, aligned_mediump>	aligned_mediump_vec1;
39 	typedef tvec1<float, aligned_lowp>		aligned_lowp_vec1;
40 	typedef tvec1<double, aligned_highp>	aligned_highp_dvec1;
41 	typedef tvec1<double, aligned_mediump>	aligned_mediump_dvec1;
42 	typedef tvec1<double, aligned_lowp>		aligned_lowp_dvec1;
43 	typedef tvec1<int, aligned_highp>		aligned_highp_ivec1;
44 	typedef tvec1<int, aligned_mediump>		aligned_mediump_ivec1;
45 	typedef tvec1<int, aligned_lowp>		aligned_lowp_ivec1;
46 	typedef tvec1<uint, aligned_highp>		aligned_highp_uvec1;
47 	typedef tvec1<uint, aligned_mediump>	aligned_mediump_uvec1;
48 	typedef tvec1<uint, aligned_lowp>		aligned_lowp_uvec1;
49 	typedef tvec1<bool, aligned_highp>		aligned_highp_bvec1;
50 	typedef tvec1<bool, aligned_mediump>	aligned_mediump_bvec1;
51 	typedef tvec1<bool, aligned_lowp>		aligned_lowp_bvec1;
52 
53 	typedef tvec1<float, packed_highp>		packed_highp_vec1;
54 	typedef tvec1<float, packed_mediump>	packed_mediump_vec1;
55 	typedef tvec1<float, packed_lowp>		packed_lowp_vec1;
56 	typedef tvec1<double, packed_highp>		packed_highp_dvec1;
57 	typedef tvec1<double, packed_mediump>	packed_mediump_dvec1;
58 	typedef tvec1<double, packed_lowp>		packed_lowp_dvec1;
59 	typedef tvec1<int, packed_highp>		packed_highp_ivec1;
60 	typedef tvec1<int, packed_mediump>		packed_mediump_ivec1;
61 	typedef tvec1<int, packed_lowp>			packed_lowp_ivec1;
62 	typedef tvec1<uint, packed_highp>		packed_highp_uvec1;
63 	typedef tvec1<uint, packed_mediump>		packed_mediump_uvec1;
64 	typedef tvec1<uint, packed_lowp>		packed_lowp_uvec1;
65 	typedef tvec1<bool, packed_highp>		packed_highp_bvec1;
66 	typedef tvec1<bool, packed_mediump>		packed_mediump_bvec1;
67 	typedef tvec1<bool, packed_lowp>		packed_lowp_bvec1;
68 
69 	// -- *vec2 --
70 
71 	/// 2 components vector of high single-precision floating-point numbers.
72 	/// There is no guarantee on the actual precision.
73 	typedef tvec2<float, aligned_highp>		aligned_highp_vec2;
74 
75 	/// 2 components vector of medium single-precision floating-point numbers.
76 	/// There is no guarantee on the actual precision.
77 	typedef tvec2<float, aligned_mediump>	aligned_mediump_vec2;
78 
79 	/// 2 components vector of low single-precision floating-point numbers.
80 	/// There is no guarantee on the actual precision.
81 	typedef tvec2<float, aligned_lowp>		aligned_lowp_vec2;
82 
83 	/// 2 components vector of high double-precision floating-point numbers.
84 	/// There is no guarantee on the actual precision.
85 	typedef tvec2<double, aligned_highp>	aligned_highp_dvec2;
86 
87 	/// 2 components vector of medium double-precision floating-point numbers.
88 	/// There is no guarantee on the actual precision.
89 	typedef tvec2<double, aligned_mediump>	aligned_mediump_dvec2;
90 
91 	/// 2 components vector of low double-precision floating-point numbers.
92 	/// There is no guarantee on the actual precision.
93 	typedef tvec2<double, aligned_lowp>		aligned_lowp_dvec2;
94 
95 	/// 2 components vector of high precision signed integer numbers.
96 	/// There is no guarantee on the actual precision.
97 	typedef tvec2<int, aligned_highp>		aligned_highp_ivec2;
98 
99 	/// 2 components vector of medium precision signed integer numbers.
100 	/// There is no guarantee on the actual precision.
101 	typedef tvec2<int, aligned_mediump>		aligned_mediump_ivec2;
102 
103 	/// 2 components vector of low precision signed integer numbers.
104 	/// There is no guarantee on the actual precision.
105 	typedef tvec2<int, aligned_lowp>		aligned_lowp_ivec2;
106 
107 	/// 2 components vector of high precision unsigned integer numbers.
108 	/// There is no guarantee on the actual precision.
109 	typedef tvec2<uint, aligned_highp>		aligned_highp_uvec2;
110 
111 	/// 2 components vector of medium precision unsigned integer numbers.
112 	/// There is no guarantee on the actual precision.
113 	typedef tvec2<uint, aligned_mediump>	aligned_mediump_uvec2;
114 
115 	/// 2 components vector of low precision unsigned integer numbers.
116 	/// There is no guarantee on the actual precision.
117 	typedef tvec2<uint, aligned_lowp>		aligned_lowp_uvec2;
118 
119 	/// 2 components vector of high precision bool numbers.
120 	/// There is no guarantee on the actual precision.
121 	typedef tvec2<bool, aligned_highp>		aligned_highp_bvec2;
122 
123 	/// 2 components vector of medium precision bool numbers.
124 	/// There is no guarantee on the actual precision.
125 	typedef tvec2<bool, aligned_mediump>	aligned_mediump_bvec2;
126 
127 	/// 2 components vector of low precision bool numbers.
128 	/// There is no guarantee on the actual precision.
129 	typedef tvec2<bool, aligned_lowp>		aligned_lowp_bvec2;
130 
131 	// -- *vec3 --
132 
133 	/// 3 components vector of high single-precision floating-point numbers.
134 	/// There is no guarantee on the actual precision.
135 	typedef tvec3<float, aligned_highp>		aligned_highp_vec3;
136 
137 	/// 3 components vector of medium single-precision floating-point numbers.
138 	/// There is no guarantee on the actual precision.
139 	typedef tvec3<float, aligned_mediump>	aligned_mediump_vec3;
140 
141 	/// 3 components vector of low single-precision floating-point numbers.
142 	/// There is no guarantee on the actual precision.
143 	typedef tvec3<float, aligned_lowp>		aligned_lowp_vec3;
144 
145 	/// 3 components vector of high double-precision floating-point numbers.
146 	/// There is no guarantee on the actual precision.
147 	typedef tvec3<double, aligned_highp>	aligned_highp_dvec3;
148 
149 	/// 3 components vector of medium double-precision floating-point numbers.
150 	/// There is no guarantee on the actual precision.
151 	typedef tvec3<double, aligned_mediump>	aligned_mediump_dvec3;
152 
153 	/// 3 components vector of low double-precision floating-point numbers.
154 	/// There is no guarantee on the actual precision.
155 	typedef tvec3<double, aligned_lowp>		aligned_lowp_dvec3;
156 
157 	/// 3 components vector of high precision signed integer numbers.
158 	/// There is no guarantee on the actual precision.
159 	typedef tvec3<int, aligned_highp>		aligned_highp_ivec3;
160 
161 	/// 3 components vector of medium precision signed integer numbers.
162 	/// There is no guarantee on the actual precision.
163 	typedef tvec3<int, aligned_mediump>		aligned_mediump_ivec3;
164 
165 	/// 3 components vector of low precision signed integer numbers.
166 	/// There is no guarantee on the actual precision.
167 	typedef tvec3<int, aligned_lowp>		aligned_lowp_ivec3;
168 
169 	/// 3 components vector of high precision unsigned integer numbers.
170 	/// There is no guarantee on the actual precision.
171 	typedef tvec3<uint, aligned_highp>		aligned_highp_uvec3;
172 
173 	/// 3 components vector of medium precision unsigned integer numbers.
174 	/// There is no guarantee on the actual precision.
175 	typedef tvec3<uint, aligned_mediump>	aligned_mediump_uvec3;
176 
177 	/// 3 components vector of low precision unsigned integer numbers.
178 	/// There is no guarantee on the actual precision.
179 	typedef tvec3<uint, aligned_lowp>		aligned_lowp_uvec3;
180 
181 	/// 3 components vector of high precision bool numbers.
182 	typedef tvec3<bool, aligned_highp>		aligned_highp_bvec3;
183 
184 	/// 3 components vector of medium precision bool numbers.
185 	typedef tvec3<bool, aligned_mediump>	aligned_mediump_bvec3;
186 
187 	/// 3 components vector of low precision bool numbers.
188 	typedef tvec3<bool, aligned_lowp>		aligned_lowp_bvec3;
189 
190 	// -- *vec4 --
191 
192 	/// 4 components vector of high single-precision floating-point numbers.
193 	typedef tvec4<float, aligned_highp>		aligned_highp_vec4;
194 
195 	/// 4 components vector of medium single-precision floating-point numbers.
196 	typedef tvec4<float, aligned_mediump>	aligned_mediump_vec4;
197 
198 	/// 4 components vector of low single-precision floating-point numbers.
199 	typedef tvec4<float, aligned_lowp>		aligned_lowp_vec4;
200 
201 	/// 4 components vector of high double-precision floating-point numbers.
202 	typedef tvec4<double, aligned_highp>	aligned_highp_dvec4;
203 
204 	/// 4 components vector of medium double-precision floating-point numbers.
205 	typedef tvec4<double, aligned_mediump>	aligned_mediump_dvec4;
206 
207 	/// 4 components vector of low double-precision floating-point numbers.
208 	typedef tvec4<double, aligned_lowp>		aligned_lowp_dvec4;
209 
210 	/// 4 components vector of high precision signed integer numbers.
211 	typedef tvec4<int, aligned_highp>		aligned_highp_ivec4;
212 
213 	/// 4 components vector of medium precision signed integer numbers.
214 	typedef tvec4<int, aligned_mediump>		aligned_mediump_ivec4;
215 
216 	/// 4 components vector of low precision signed integer numbers.
217 	typedef tvec4<int, aligned_lowp>		aligned_lowp_ivec4;
218 
219 	/// 4 components vector of high precision unsigned integer numbers.
220 	typedef tvec4<uint, aligned_highp>		aligned_highp_uvec4;
221 
222 	/// 4 components vector of medium precision unsigned integer numbers.
223 	typedef tvec4<uint, aligned_mediump>	aligned_mediump_uvec4;
224 
225 	/// 4 components vector of low precision unsigned integer numbers.
226 	typedef tvec4<uint, aligned_lowp>		aligned_lowp_uvec4;
227 
228 	/// 4 components vector of high precision bool numbers.
229 	typedef tvec4<bool, aligned_highp>		aligned_highp_bvec4;
230 
231 	/// 4 components vector of medium precision bool numbers.
232 	typedef tvec4<bool, aligned_mediump>	aligned_mediump_bvec4;
233 
234 	/// 4 components vector of low precision bool numbers.
235 	typedef tvec4<bool, aligned_lowp>		aligned_lowp_bvec4;
236 
237 	// -- default --
238 
239 #if(defined(GLM_PRECISION_LOWP_FLOAT))
240 	typedef aligned_lowp_vec1			aligned_vec1;
241 	typedef aligned_lowp_vec2			aligned_vec2;
242 	typedef aligned_lowp_vec3			aligned_vec3;
243 	typedef aligned_lowp_vec4			aligned_vec4;
244 #elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
245 	typedef aligned_mediump_vec1		aligned_vec1;
246 	typedef aligned_mediump_vec2		aligned_vec2;
247 	typedef aligned_mediump_vec3		aligned_vec3;
248 	typedef aligned_mediump_vec4		aligned_vec4;
249 #else //defined(GLM_PRECISION_HIGHP_FLOAT)
250 	/// 1 component vector of floating-point numbers.
251 	typedef aligned_highp_vec1			aligned_vec1;
252 
253 	/// 2 components vector of floating-point numbers.
254 	typedef aligned_highp_vec2			aligned_vec2;
255 
256 	/// 3 components vector of floating-point numbers.
257 	typedef aligned_highp_vec3			aligned_vec3;
258 
259 	/// 4 components vector of floating-point numbers.
260 	typedef aligned_highp_vec4			aligned_vec4;
261 #endif//GLM_PRECISION
262 
263 #if(defined(GLM_PRECISION_LOWP_DOUBLE))
264 	typedef aligned_lowp_dvec1			aligned_dvec1;
265 	typedef aligned_lowp_dvec2			aligned_dvec2;
266 	typedef aligned_lowp_dvec3			aligned_dvec3;
267 	typedef aligned_lowp_dvec4			aligned_dvec4;
268 #elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))
269 	typedef aligned_mediump_dvec1		aligned_dvec1;
270 	typedef aligned_mediump_dvec2		aligned_dvec2;
271 	typedef aligned_mediump_dvec3		aligned_dvec3;
272 	typedef aligned_mediump_dvec4		aligned_dvec4;
273 #else //defined(GLM_PRECISION_HIGHP_DOUBLE)
274 	/// 1 component vector of double-precision floating-point numbers.
275 	typedef aligned_highp_dvec1			aligned_dvec1;
276 
277 	/// 2 components vector of double-precision floating-point numbers.
278 	typedef aligned_highp_dvec2			aligned_dvec2;
279 
280 	/// 3 components vector of double-precision floating-point numbers.
281 	typedef aligned_highp_dvec3			aligned_dvec3;
282 
283 	/// 4 components vector of double-precision floating-point numbers.
284 	typedef aligned_highp_dvec4			aligned_dvec4;
285 #endif//GLM_PRECISION
286 
287 #if(defined(GLM_PRECISION_LOWP_INT))
288 	typedef aligned_lowp_ivec1			aligned_ivec1;
289 	typedef aligned_lowp_ivec2			aligned_ivec2;
290 	typedef aligned_lowp_ivec3			aligned_ivec3;
291 	typedef aligned_lowp_ivec4			aligned_ivec4;
292 #elif(defined(GLM_PRECISION_MEDIUMP_INT))
293 	typedef aligned_mediump_ivec1		aligned_ivec1;
294 	typedef aligned_mediump_ivec2		aligned_ivec2;
295 	typedef aligned_mediump_ivec3		aligned_ivec3;
296 	typedef aligned_mediump_ivec4		aligned_ivec4;
297 #else //defined(GLM_PRECISION_HIGHP_INT)
298 	/// 1 component vector of signed integer numbers.
299 	typedef aligned_highp_ivec1			aligned_ivec1;
300 
301 	/// 2 components vector of signed integer numbers.
302 	typedef aligned_highp_ivec2			aligned_ivec2;
303 
304 	/// 3 components vector of signed integer numbers.
305 	typedef aligned_highp_ivec3			aligned_ivec3;
306 
307 	/// 4 components vector of signed integer numbers.
308 	typedef aligned_highp_ivec4			aligned_ivec4;
309 #endif//GLM_PRECISION
310 
311 	// -- Unsigned integer definition --
312 
313 #if(defined(GLM_PRECISION_LOWP_UINT))
314 	typedef aligned_lowp_uvec1			aligned_uvec1;
315 	typedef aligned_lowp_uvec2			aligned_uvec2;
316 	typedef aligned_lowp_uvec3			aligned_uvec3;
317 	typedef aligned_lowp_uvec4			aligned_uvec4;
318 #elif(defined(GLM_PRECISION_MEDIUMP_UINT))
319 	typedef aligned_mediump_uvec1		aligned_uvec1;
320 	typedef aligned_mediump_uvec2		aligned_uvec2;
321 	typedef aligned_mediump_uvec3		aligned_uvec3;
322 	typedef aligned_mediump_uvec4		aligned_uvec4;
323 #else //defined(GLM_PRECISION_HIGHP_UINT)
324 	/// 1 component vector of unsigned integer numbers.
325 	typedef aligned_highp_uvec1			aligned_uvec1;
326 
327 	/// 2 components vector of unsigned integer numbers.
328 	typedef aligned_highp_uvec2			aligned_uvec2;
329 
330 	/// 3 components vector of unsigned integer numbers.
331 	typedef aligned_highp_uvec3			aligned_uvec3;
332 
333 	/// 4 components vector of unsigned integer numbers.
334 	typedef aligned_highp_uvec4			aligned_uvec4;
335 #endif//GLM_PRECISION
336 
337 #if(defined(GLM_PRECISION_LOWP_BOOL))
338 	typedef aligned_lowp_bvec1			aligned_bvec1;
339 	typedef aligned_lowp_bvec2			aligned_bvec2;
340 	typedef aligned_lowp_bvec3			aligned_bvec3;
341 	typedef aligned_lowp_bvec4			aligned_bvec4;
342 #elif(defined(GLM_PRECISION_MEDIUMP_BOOL))
343 	typedef aligned_mediump_bvec1		aligned_bvec1;
344 	typedef aligned_mediump_bvec2		aligned_bvec2;
345 	typedef aligned_mediump_bvec3		aligned_bvec3;
346 	typedef aligned_mediump_bvec4		aligned_bvec4;
347 #else //defined(GLM_PRECISION_HIGHP_BOOL)
348 	/// 1 component vector of boolean.
349 	typedef aligned_highp_bvec1			aligned_bvec1;
350 
351 	/// 2 components vector of boolean.
352 	typedef aligned_highp_bvec2			aligned_bvec2;
353 
354 	/// 3 components vector of boolean.
355 	typedef aligned_highp_bvec3			aligned_bvec3;
356 
357 	/// 4 components vector of boolean.
358 	typedef aligned_highp_bvec4			aligned_bvec4;
359 #endif//GLM_PRECISION
360 
361 	/// @}
362 }//namespace glm
363