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