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