From e62817b8252974b8a98393275874ee303840bf13 Mon Sep 17 00:00:00 2001 From: LaG1924 <12997935+LaG1924@users.noreply.github.com> Date: Fri, 12 May 2017 18:49:50 +0500 Subject: 2017-05-12 --- depedencies/include/glm/gtx/fast_square_root.inl | 81 ++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 depedencies/include/glm/gtx/fast_square_root.inl (limited to 'depedencies/include/glm/gtx/fast_square_root.inl') diff --git a/depedencies/include/glm/gtx/fast_square_root.inl b/depedencies/include/glm/gtx/fast_square_root.inl new file mode 100644 index 0000000..73950ae --- /dev/null +++ b/depedencies/include/glm/gtx/fast_square_root.inl @@ -0,0 +1,81 @@ +/// @ref gtx_fast_square_root +/// @file glm/gtx/fast_square_root.inl + +namespace glm +{ + // fastSqrt + template + GLM_FUNC_QUALIFIER genType fastSqrt(genType x) + { + GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fastSqrt' only accept floating-point input"); + + return genType(1) / fastInverseSqrt(x); + } + + template class vecType> + GLM_FUNC_QUALIFIER vecType fastSqrt(vecType const & x) + { + return detail::functor1::call(fastSqrt, x); + } + + // fastInversesqrt + template + GLM_FUNC_QUALIFIER genType fastInverseSqrt(genType x) + { +# ifdef __CUDACC__ // Wordaround for a CUDA compiler bug up to CUDA6 + tvec1 tmp(detail::compute_inversesqrt::value>::call(tvec1(x))); + return tmp.x; +# else + return detail::compute_inversesqrt::value>::call(tvec1(x)).x; +# endif + } + + template class vecType> + GLM_FUNC_QUALIFIER vecType fastInverseSqrt(vecType const & x) + { + return detail::compute_inversesqrt::value>::call(x); + } + + // fastLength + template + GLM_FUNC_QUALIFIER genType fastLength(genType x) + { + GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fastLength' only accept floating-point inputs"); + + return abs(x); + } + + template class vecType> + GLM_FUNC_QUALIFIER T fastLength(vecType const & x) + { + GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fastLength' only accept floating-point inputs"); + + return fastSqrt(dot(x, x)); + } + + // fastDistance + template + GLM_FUNC_QUALIFIER genType fastDistance(genType x, genType y) + { + return fastLength(y - x); + } + + template class vecType> + GLM_FUNC_QUALIFIER T fastDistance(vecType const & x, vecType const & y) + { + return fastLength(y - x); + } + + // fastNormalize + template + GLM_FUNC_QUALIFIER genType fastNormalize(genType x) + { + return x > genType(0) ? genType(1) : -genType(1); + } + + template class vecType> + GLM_FUNC_QUALIFIER vecType fastNormalize(vecType const & x) + { + return x * fastInverseSqrt(dot(x, x)); + } +}//namespace glm -- cgit v1.2.3