| /// @ref gtx_type_trait |
| /// @file glm/gtx/type_trait.hpp |
| /// |
| /// @see core (dependence) |
| /// |
| /// @defgroup gtx_type_trait GLM_GTX_type_trait |
| /// @ingroup gtx |
| /// |
| /// @brief Defines traits for each type. |
| /// |
| /// <glm/gtx/type_trait.hpp> need to be included to use these functionalities. |
| |
| #pragma once |
| |
| // Dependency: |
| #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 GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED) |
| # pragma message("GLM: GLM_GTX_type_trait extension included") |
| #endif |
| |
| namespace glm |
| { |
| /// @addtogroup gtx_type_trait |
| /// @{ |
| |
| 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 length_t const components = 0; |
| static length_t const cols = 0; |
| static length_t const rows = 0; |
| }; |
| |
| 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; |
| enum |
| { |
| components = 1 |
| }; |
| }; |
| |
| 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; |
| enum |
| { |
| components = 2 |
| }; |
| }; |
| |
| 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; |
| enum |
| { |
| components = 3 |
| }; |
| }; |
| |
| 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; |
| enum |
| { |
| components = 4 |
| }; |
| }; |
| |
| 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; |
| enum |
| { |
| components = 2, |
| cols = 2, |
| rows = 2 |
| }; |
| }; |
| |
| 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; |
| enum |
| { |
| components = 2, |
| cols = 2, |
| rows = 3 |
| }; |
| }; |
| |
| 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; |
| enum |
| { |
| components = 2, |
| cols = 2, |
| rows = 4 |
| }; |
| }; |
| |
| 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; |
| enum |
| { |
| components = 3, |
| cols = 3, |
| rows = 2 |
| }; |
| }; |
| |
| 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; |
| enum |
| { |
| components = 3, |
| cols = 3, |
| rows = 3 |
| }; |
| }; |
| |
| 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; |
| enum |
| { |
| components = 3, |
| cols = 3, |
| rows = 4 |
| }; |
| }; |
| |
| 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; |
| enum |
| { |
| components = 4, |
| cols = 4, |
| rows = 2 |
| }; |
| }; |
| |
| 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; |
| enum |
| { |
| components = 4, |
| cols = 4, |
| rows = 3 |
| }; |
| }; |
| |
| 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; |
| enum |
| { |
| components = 4, |
| cols = 4, |
| rows = 4 |
| }; |
| }; |
| |
| 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; |
| enum |
| { |
| components = 4 |
| }; |
| }; |
| |
| 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; |
| enum |
| { |
| components = 8 |
| }; |
| }; |
| |
| /// @} |
| }//namespace glm |
| |
| #include "type_trait.inl" |