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