diff options
author | LaG1924 <12997935+LaG1924@users.noreply.github.com> | 2017-05-12 15:49:50 +0200 |
---|---|---|
committer | LaG1924 <12997935+LaG1924@users.noreply.github.com> | 2017-05-12 15:49:50 +0200 |
commit | e62817b8252974b8a98393275874ee303840bf13 (patch) | |
tree | 4565935f06e369f4a84410b0c098958e07a750c7 /depedencies/include/glm/gtx/common.inl | |
parent | 2017-05-10 (diff) | |
download | AltCraft-e62817b8252974b8a98393275874ee303840bf13.tar AltCraft-e62817b8252974b8a98393275874ee303840bf13.tar.gz AltCraft-e62817b8252974b8a98393275874ee303840bf13.tar.bz2 AltCraft-e62817b8252974b8a98393275874ee303840bf13.tar.lz AltCraft-e62817b8252974b8a98393275874ee303840bf13.tar.xz AltCraft-e62817b8252974b8a98393275874ee303840bf13.tar.zst AltCraft-e62817b8252974b8a98393275874ee303840bf13.zip |
Diffstat (limited to 'depedencies/include/glm/gtx/common.inl')
-rw-r--r-- | depedencies/include/glm/gtx/common.inl | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/depedencies/include/glm/gtx/common.inl b/depedencies/include/glm/gtx/common.inl new file mode 100644 index 0000000..6c9cb65 --- /dev/null +++ b/depedencies/include/glm/gtx/common.inl @@ -0,0 +1,112 @@ +/// @ref gtx_common +/// @file glm/gtx/common.inl + +#include <cmath> + +namespace glm{ +namespace detail +{ + template <typename T, precision P, template <class, precision> class vecType, bool isFloat = true> + struct compute_fmod + { + GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & a, vecType<T, P> const & b) + { + return detail::functor2<T, P, vecType>::call(std::fmod, a, b); + } + }; + + template <typename T, precision P, template <class, precision> class vecType> + struct compute_fmod<T, P, vecType, false> + { + GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & a, vecType<T, P> const & b) + { + return a % b; + } + }; +}//namespace detail + + template <typename T> + GLM_FUNC_QUALIFIER bool isdenormal(T const & x) + { + GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'isdenormal' only accept floating-point inputs"); + +# if GLM_HAS_CXX11_STL + return std::fpclassify(x) == FP_SUBNORMAL; +# else + return x != static_cast<T>(0) && std::fabs(x) < std::numeric_limits<T>::min(); +# endif + } + + template <typename T, precision P> + GLM_FUNC_QUALIFIER typename tvec1<T, P>::bool_type isdenormal + ( + tvec1<T, P> const & x + ) + { + GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'isdenormal' only accept floating-point inputs"); + + return typename tvec1<T, P>::bool_type( + isdenormal(x.x)); + } + + template <typename T, precision P> + GLM_FUNC_QUALIFIER typename tvec2<T, P>::bool_type isdenormal + ( + tvec2<T, P> const & x + ) + { + GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'isdenormal' only accept floating-point inputs"); + + return typename tvec2<T, P>::bool_type( + isdenormal(x.x), + isdenormal(x.y)); + } + + template <typename T, precision P> + GLM_FUNC_QUALIFIER typename tvec3<T, P>::bool_type isdenormal + ( + tvec3<T, P> const & x + ) + { + GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'isdenormal' only accept floating-point inputs"); + + return typename tvec3<T, P>::bool_type( + isdenormal(x.x), + isdenormal(x.y), + isdenormal(x.z)); + } + + template <typename T, precision P> + GLM_FUNC_QUALIFIER typename tvec4<T, P>::bool_type isdenormal + ( + tvec4<T, P> const & x + ) + { + GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'isdenormal' only accept floating-point inputs"); + + return typename tvec4<T, P>::bool_type( + isdenormal(x.x), + isdenormal(x.y), + isdenormal(x.z), + isdenormal(x.w)); + } + + // fmod + template <typename genType> + GLM_FUNC_QUALIFIER genType fmod(genType x, genType y) + { + return fmod(tvec1<genType>(x), y).x; + } + + template <typename T, precision P, template <typename, precision> class vecType> + GLM_FUNC_QUALIFIER vecType<T, P> fmod(vecType<T, P> const & x, T y) + { + return detail::compute_fmod<T, P, vecType, std::numeric_limits<T>::is_iec559>::call(x, vecType<T, P>(y)); + } + + template <typename T, precision P, template <typename, precision> class vecType> + GLM_FUNC_QUALIFIER vecType<T, P> fmod(vecType<T, P> const & x, vecType<T, P> const & y) + { + return detail::compute_fmod<T, P, vecType, std::numeric_limits<T>::is_iec559>::call(x, y); + } +}//namespace glm |