|
|
|
@ -42,8 +42,20 @@ |
|
|
|
|
#pragma once |
|
|
|
|
|
|
|
|
|
// Dependency:
|
|
|
|
|
#include "../detail/precision.hpp" |
|
|
|
|
#include "../detail/setup.hpp" |
|
|
|
|
#include "../detail/type_vec2.hpp" |
|
|
|
|
#include "../detail/type_vec3.hpp" |
|
|
|
|
#include "../detail/type_vec4.hpp" |
|
|
|
|
#include "../detail/type_mat2x2.hpp" |
|
|
|
|
#include "../detail/type_mat2x3.hpp" |
|
|
|
|
#include "../detail/type_mat2x4.hpp" |
|
|
|
|
#include "../detail/type_mat3x2.hpp" |
|
|
|
|
#include "../detail/type_mat3x3.hpp" |
|
|
|
|
#include "../detail/type_mat3x4.hpp" |
|
|
|
|
#include "../detail/type_mat4x2.hpp" |
|
|
|
|
#include "../detail/type_mat4x3.hpp" |
|
|
|
|
#include "../detail/type_mat4x4.hpp" |
|
|
|
|
#include "../gtc/quaternion.hpp" |
|
|
|
|
#include "../gtx/dual_quaternion.hpp" |
|
|
|
|
|
|
|
|
|
#if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED)) |
|
|
|
|
# pragma message("GLM: GLM_GTX_type_trait extension included") |
|
|
|
@ -54,188 +66,213 @@ namespace glm |
|
|
|
|
/// @addtogroup gtx_type_trait
|
|
|
|
|
/// @{
|
|
|
|
|
|
|
|
|
|
template <typename T, precision P> struct tvec1; |
|
|
|
|
template <typename T, precision P> struct tvec2; |
|
|
|
|
template <typename T, precision P> struct tvec3; |
|
|
|
|
template <typename T, precision P> struct tvec4; |
|
|
|
|
|
|
|
|
|
template <typename T, precision P> struct tmat2x2; |
|
|
|
|
template <typename T, precision P> struct tmat2x3; |
|
|
|
|
template <typename T, precision P> struct tmat2x4; |
|
|
|
|
template <typename T, precision P> struct tmat3x2; |
|
|
|
|
template <typename T, precision P> struct tmat3x3; |
|
|
|
|
template <typename T, precision P> struct tmat3x4; |
|
|
|
|
template <typename T, precision P> struct tmat4x2; |
|
|
|
|
template <typename T, precision P> struct tmat4x3; |
|
|
|
|
template <typename T, precision P> struct tmat4x4; |
|
|
|
|
|
|
|
|
|
template <typename T, precision P> struct tquat; |
|
|
|
|
template <typename T, precision P> struct tdualquat; |
|
|
|
|
|
|
|
|
|
template <template <typename, precision> class genType> |
|
|
|
|
template <template <typename, precision> class genType, typename T, precision P> |
|
|
|
|
struct type |
|
|
|
|
{ |
|
|
|
|
static bool const is_vec = false; |
|
|
|
|
static bool const is_mat = false; |
|
|
|
|
static bool const is_quat = false; |
|
|
|
|
static GLM_RELAXED_CONSTEXPR length_t components = 0; |
|
|
|
|
static GLM_RELAXED_CONSTEXPR length_t cols = 0; |
|
|
|
|
static GLM_RELAXED_CONSTEXPR length_t rows = 0; |
|
|
|
|
static length_t const components = 0; |
|
|
|
|
static length_t const cols = 0; |
|
|
|
|
static length_t const rows = 0; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template <> |
|
|
|
|
struct type<tvec1> |
|
|
|
|
template <typename T, precision P> |
|
|
|
|
struct type<tvec1, T, P> |
|
|
|
|
{ |
|
|
|
|
static bool const is_vec = true; |
|
|
|
|
static bool const is_mat = false; |
|
|
|
|
static bool const is_quat = false; |
|
|
|
|
static GLM_RELAXED_CONSTEXPR length_t components = 1; |
|
|
|
|
static GLM_RELAXED_CONSTEXPR length_t cols = 1; |
|
|
|
|
static GLM_RELAXED_CONSTEXPR length_t rows = 1; |
|
|
|
|
enum
|
|
|
|
|
{ |
|
|
|
|
components = 1 |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template <> |
|
|
|
|
struct type<tvec2> |
|
|
|
|
template <typename T, precision P> |
|
|
|
|
struct type<tvec2, T, P> |
|
|
|
|
{ |
|
|
|
|
static bool const is_vec = true; |
|
|
|
|
static bool const is_mat = false; |
|
|
|
|
static bool const is_quat = false; |
|
|
|
|
static GLM_RELAXED_CONSTEXPR length_t components = 2; |
|
|
|
|
enum
|
|
|
|
|
{ |
|
|
|
|
components = 2 |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template <> |
|
|
|
|
struct type<tvec3> |
|
|
|
|
template <typename T, precision P> |
|
|
|
|
struct type<tvec3, T, P> |
|
|
|
|
{ |
|
|
|
|
static bool const is_vec = true; |
|
|
|
|
static bool const is_mat = false; |
|
|
|
|
static bool const is_quat = false; |
|
|
|
|
static GLM_RELAXED_CONSTEXPR length_t components = 3; |
|
|
|
|
enum
|
|
|
|
|
{ |
|
|
|
|
components = 3 |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template <> |
|
|
|
|
struct type<tvec4> |
|
|
|
|
template <typename T, precision P> |
|
|
|
|
struct type<tvec4, T, P> |
|
|
|
|
{ |
|
|
|
|
static bool const is_vec = true; |
|
|
|
|
static bool const is_mat = false; |
|
|
|
|
static bool const is_quat = false; |
|
|
|
|
static GLM_RELAXED_CONSTEXPR length_t components = 4; |
|
|
|
|
enum
|
|
|
|
|
{ |
|
|
|
|
components = 4 |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template <> |
|
|
|
|
struct type<tmat2x2> |
|
|
|
|
template <typename T, precision P> |
|
|
|
|
struct type<tmat2x2, T, P> |
|
|
|
|
{ |
|
|
|
|
static bool const is_vec = false; |
|
|
|
|
static bool const is_mat = true; |
|
|
|
|
static bool const is_quat = false; |
|
|
|
|
static GLM_RELAXED_CONSTEXPR length_t components = 2; |
|
|
|
|
static GLM_RELAXED_CONSTEXPR length_t cols = 2; |
|
|
|
|
static GLM_RELAXED_CONSTEXPR length_t rows = 2; |
|
|
|
|
enum
|
|
|
|
|
{ |
|
|
|
|
components = 2, |
|
|
|
|
cols = 2, |
|
|
|
|
rows = 2 |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template <> |
|
|
|
|
struct type<tmat2x3> |
|
|
|
|
template <typename T, precision P> |
|
|
|
|
struct type<tmat2x3, T, P> |
|
|
|
|
{ |
|
|
|
|
static bool const is_vec = false; |
|
|
|
|
static bool const is_mat = true; |
|
|
|
|
static bool const is_quat = false; |
|
|
|
|
static GLM_RELAXED_CONSTEXPR length_t components = 2; |
|
|
|
|
static GLM_RELAXED_CONSTEXPR length_t cols = 2; |
|
|
|
|
static GLM_RELAXED_CONSTEXPR length_t rows = 3; |
|
|
|
|
enum
|
|
|
|
|
{ |
|
|
|
|
components = 2, |
|
|
|
|
cols = 2, |
|
|
|
|
rows = 3 |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template <> |
|
|
|
|
struct type<tmat2x4> |
|
|
|
|
template <typename T, precision P> |
|
|
|
|
struct type<tmat2x4, T, P> |
|
|
|
|
{ |
|
|
|
|
static bool const is_vec = false; |
|
|
|
|
static bool const is_mat = true; |
|
|
|
|
static bool const is_quat = false; |
|
|
|
|
static GLM_RELAXED_CONSTEXPR length_t components = 2; |
|
|
|
|
static GLM_RELAXED_CONSTEXPR length_t cols = 2; |
|
|
|
|
static GLM_RELAXED_CONSTEXPR length_t rows = 4; |
|
|
|
|
enum
|
|
|
|
|
{ |
|
|
|
|
components = 2, |
|
|
|
|
cols = 2, |
|
|
|
|
rows = 4 |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template <> |
|
|
|
|
struct type<tmat3x2> |
|
|
|
|
template <typename T, precision P> |
|
|
|
|
struct type<tmat3x2, T, P> |
|
|
|
|
{ |
|
|
|
|
static bool const is_vec = false; |
|
|
|
|
static bool const is_mat = true; |
|
|
|
|
static bool const is_quat = false; |
|
|
|
|
static GLM_RELAXED_CONSTEXPR length_t components = 3; |
|
|
|
|
static GLM_RELAXED_CONSTEXPR length_t cols = 3; |
|
|
|
|
static GLM_RELAXED_CONSTEXPR length_t rows = 2; |
|
|
|
|
enum
|
|
|
|
|
{ |
|
|
|
|
components = 3, |
|
|
|
|
cols = 3, |
|
|
|
|
rows = 2 |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template <> |
|
|
|
|
struct type<tmat3x3> |
|
|
|
|
template <typename T, precision P> |
|
|
|
|
struct type<tmat3x3, T, P> |
|
|
|
|
{ |
|
|
|
|
static bool const is_vec = false; |
|
|
|
|
static bool const is_mat = true; |
|
|
|
|
static bool const is_quat = false; |
|
|
|
|
static GLM_RELAXED_CONSTEXPR length_t components = 3; |
|
|
|
|
static GLM_RELAXED_CONSTEXPR length_t cols = 3; |
|
|
|
|
static GLM_RELAXED_CONSTEXPR length_t rows = 3; |
|
|
|
|
enum
|
|
|
|
|
{ |
|
|
|
|
components = 3, |
|
|
|
|
cols = 3, |
|
|
|
|
rows = 3 |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template <> |
|
|
|
|
struct type<tmat3x4> |
|
|
|
|
template <typename T, precision P> |
|
|
|
|
struct type<tmat3x4, T, P> |
|
|
|
|
{ |
|
|
|
|
static bool const is_vec = false; |
|
|
|
|
static bool const is_mat = true; |
|
|
|
|
static bool const is_quat = false; |
|
|
|
|
static GLM_RELAXED_CONSTEXPR length_t components = 3; |
|
|
|
|
static GLM_RELAXED_CONSTEXPR length_t cols = 3; |
|
|
|
|
static GLM_RELAXED_CONSTEXPR length_t rows = 4; |
|
|
|
|
enum
|
|
|
|
|
{ |
|
|
|
|
components = 3, |
|
|
|
|
cols = 3, |
|
|
|
|
rows = 4 |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template <> |
|
|
|
|
struct type<tmat4x2> |
|
|
|
|
template <typename T, precision P> |
|
|
|
|
struct type<tmat4x2, T, P> |
|
|
|
|
{ |
|
|
|
|
static bool const is_vec = false; |
|
|
|
|
static bool const is_mat = true; |
|
|
|
|
static bool const is_quat = false; |
|
|
|
|
static GLM_RELAXED_CONSTEXPR length_t components = 4; |
|
|
|
|
static GLM_RELAXED_CONSTEXPR length_t cols = 4; |
|
|
|
|
static GLM_RELAXED_CONSTEXPR length_t rows = 2; |
|
|
|
|
enum
|
|
|
|
|
{ |
|
|
|
|
components = 4, |
|
|
|
|
cols = 4, |
|
|
|
|
rows = 2 |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template <> |
|
|
|
|
struct type<tmat4x3> |
|
|
|
|
template <typename T, precision P> |
|
|
|
|
struct type<tmat4x3, T, P> |
|
|
|
|
{ |
|
|
|
|
static bool const is_vec = false; |
|
|
|
|
static bool const is_mat = true; |
|
|
|
|
static bool const is_quat = false; |
|
|
|
|
static GLM_RELAXED_CONSTEXPR length_t components = 4; |
|
|
|
|
static GLM_RELAXED_CONSTEXPR length_t cols = 4; |
|
|
|
|
static GLM_RELAXED_CONSTEXPR length_t rows = 3; |
|
|
|
|
enum
|
|
|
|
|
{ |
|
|
|
|
components = 4, |
|
|
|
|
cols = 4, |
|
|
|
|
rows = 3 |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template <> |
|
|
|
|
struct type<tmat4x4> |
|
|
|
|
template <typename T, precision P> |
|
|
|
|
struct type<tmat4x4, T, P> |
|
|
|
|
{ |
|
|
|
|
static bool const is_vec = false; |
|
|
|
|
static bool const is_mat = true; |
|
|
|
|
static bool const is_quat = false; |
|
|
|
|
static GLM_RELAXED_CONSTEXPR length_t components = 4; |
|
|
|
|
static GLM_RELAXED_CONSTEXPR length_t cols = 4; |
|
|
|
|
static GLM_RELAXED_CONSTEXPR length_t rows = 4; |
|
|
|
|
enum
|
|
|
|
|
{ |
|
|
|
|
components = 4, |
|
|
|
|
cols = 4, |
|
|
|
|
rows = 4 |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template <> |
|
|
|
|
struct type<tquat> |
|
|
|
|
template <typename T, precision P> |
|
|
|
|
struct type<tquat, T, P> |
|
|
|
|
{ |
|
|
|
|
static bool const is_vec = false; |
|
|
|
|
static bool const is_mat = false; |
|
|
|
|
static bool const is_quat = true; |
|
|
|
|
static GLM_RELAXED_CONSTEXPR length_t components = 4; |
|
|
|
|
enum
|
|
|
|
|
{ |
|
|
|
|
components = 4 |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
template <> |
|
|
|
|
struct type<tdualquat> |
|
|
|
|
template <typename T, precision P> |
|
|
|
|
struct type<tdualquat, T, P> |
|
|
|
|
{ |
|
|
|
|
static bool const is_vec = false; |
|
|
|
|
static bool const is_mat = false; |
|
|
|
|
static bool const is_quat = true; |
|
|
|
|
static GLM_RELAXED_CONSTEXPR length_t components = 8; |
|
|
|
|
enum
|
|
|
|
|
{ |
|
|
|
|
components = 8 |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
/// @}
|
|
|
|
|