|
|
|
@ -7,110 +7,8 @@ |
|
|
|
|
#include "type_int.hpp" |
|
|
|
|
#include "compute_vector_relational.hpp" |
|
|
|
|
|
|
|
|
|
namespace glm{ |
|
|
|
|
namespace detail |
|
|
|
|
namespace glm |
|
|
|
|
{ |
|
|
|
|
template<length_t L, typename T, qualifier Q> |
|
|
|
|
struct storage_alignment |
|
|
|
|
{}; |
|
|
|
|
|
|
|
|
|
template<length_t L, typename T> |
|
|
|
|
struct alignas(L * sizeof(T)) storage_alignment<L, T, aligned_highp> |
|
|
|
|
{}; |
|
|
|
|
|
|
|
|
|
template<length_t L, typename T> |
|
|
|
|
struct alignas(L * sizeof(T)) storage_alignment<L, T, aligned_mediump> |
|
|
|
|
{}; |
|
|
|
|
|
|
|
|
|
template<length_t L, typename T> |
|
|
|
|
struct alignas(L * sizeof(T)) storage_alignment<L, T, aligned_lowp> |
|
|
|
|
{}; |
|
|
|
|
|
|
|
|
|
template<length_t L, typename T, bool is_aligned> |
|
|
|
|
struct storage |
|
|
|
|
{ |
|
|
|
|
typedef struct type { |
|
|
|
|
T data[L]; |
|
|
|
|
} type; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template<length_t L, typename T> |
|
|
|
|
struct storage<L, T, true> |
|
|
|
|
{ |
|
|
|
|
typedef struct alignas(L * sizeof(T)) type { |
|
|
|
|
T data[L]; |
|
|
|
|
} type; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template<typename T> |
|
|
|
|
struct storage<3, T, true> |
|
|
|
|
{ |
|
|
|
|
typedef struct alignas(4 * sizeof(T)) type { |
|
|
|
|
T data[4]; |
|
|
|
|
} type; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
# if GLM_ARCH & GLM_ARCH_SSE2_BIT |
|
|
|
|
template<> |
|
|
|
|
struct storage<4, float, true> |
|
|
|
|
{ |
|
|
|
|
typedef glm_f32vec4 type; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template<> |
|
|
|
|
struct storage<4, int32, true> |
|
|
|
|
{ |
|
|
|
|
typedef glm_i32vec4 type; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template<> |
|
|
|
|
struct storage<4, uint32, true> |
|
|
|
|
{ |
|
|
|
|
typedef glm_u32vec4 type; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template<> |
|
|
|
|
struct storage<2, double, true> |
|
|
|
|
{ |
|
|
|
|
typedef glm_f64vec2 type; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template<> |
|
|
|
|
struct storage<2, int64, true> |
|
|
|
|
{ |
|
|
|
|
typedef glm_i64vec2 type; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template<> |
|
|
|
|
struct storage<2, uint64, true> |
|
|
|
|
{ |
|
|
|
|
typedef glm_u64vec2 type; |
|
|
|
|
}; |
|
|
|
|
# endif |
|
|
|
|
|
|
|
|
|
# if (GLM_ARCH & GLM_ARCH_AVX_BIT) |
|
|
|
|
template<> |
|
|
|
|
struct storage<4, double, true> |
|
|
|
|
{ |
|
|
|
|
typedef glm_f64vec4 type; |
|
|
|
|
}; |
|
|
|
|
# endif |
|
|
|
|
|
|
|
|
|
# if (GLM_ARCH & GLM_ARCH_AVX2_BIT) |
|
|
|
|
template<> |
|
|
|
|
struct storage<4, int64, true> |
|
|
|
|
{ |
|
|
|
|
typedef glm_i64vec4 type; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template<> |
|
|
|
|
struct storage<4, uint64, true> |
|
|
|
|
{ |
|
|
|
|
typedef glm_u64vec4 type; |
|
|
|
|
}; |
|
|
|
|
# endif |
|
|
|
|
}//namespace detail
|
|
|
|
|
|
|
|
|
|
#if GLM_HAS_TEMPLATE_ALIASES |
|
|
|
|
template <typename T, qualifier Q = defaultp> using tvec2 = vec<2, T, Q>; |
|
|
|
|
template <typename T, qualifier Q = defaultp> using tvec3 = vec<3, T, Q>; |
|
|
|
|