From e6fded40dcdea81a10c0514b3efb35204b95c5f9 Mon Sep 17 00:00:00 2001 From: Christophe Riccio Date: Fri, 14 Oct 2011 11:16:13 +0100 Subject: [PATCH] Vectorize --- glm/core/_vectorize.hpp | 44 +- glm/core/func_common.inl | 276 +------ glm/core/func_exponential.inl | 256 +----- glm/core/func_integer.inl | 36 +- glm/core/func_packing.inl | 225 +++--- glm/core/func_trigonometric.inl | 1305 +++++++++++++++---------------- 6 files changed, 841 insertions(+), 1301 deletions(-) diff --git a/glm/core/_vectorize.hpp b/glm/core/_vectorize.hpp index bfabdf3b..31cf3341 100644 --- a/glm/core/_vectorize.hpp +++ b/glm/core/_vectorize.hpp @@ -26,7 +26,7 @@ /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// -#define VECTORIZE_1PARAM(func) \ +#define VECTORIZE_VEC(func) \ template \ GLM_FUNC_QUALIFIER detail::tvec2 func( \ detail::tvec2 const & v) \ @@ -57,7 +57,47 @@ func(v.w)); \ } -#define VECTORIZE_2PARAMS(func) \ +#define VECTORIZE_VEC_SCA(func) \ + template \ + GLM_FUNC_QUALIFIER detail::tvec2 func \ + ( \ + detail::tvec2 const & x, \ + typename detail::tvec2::value_type const & y \ + ) \ + { \ + return detail::tvec2( \ + func(x.x, y), \ + func(x.y, y)); \ + } \ + \ + template \ + GLM_FUNC_QUALIFIER detail::tvec3 func \ + ( \ + detail::tvec3 const & x, \ + typename detail::tvec3::value_type const & y \ + ) \ + { \ + return detail::tvec3( \ + func(x.x, y), \ + func(x.y, y), \ + func(x.z, y)); \ + } \ + \ + template \ + GLM_FUNC_QUALIFIER detail::tvec4 func \ + ( \ + detail::tvec4 const & x, \ + typename detail::tvec4::value_type const & y \ + ) \ + { \ + return detail::tvec4( \ + func(x.x, y), \ + func(x.y, y), \ + func(x.z, y), \ + func(x.w, y)); \ + } + +#define VECTORIZE_VEC_VEC(func) \ template \ GLM_FUNC_QUALIFIER detail::tvec2 func \ ( \ diff --git a/glm/core/func_common.inl b/glm/core/func_common.inl index dfb54431..430708bb 100644 --- a/glm/core/func_common.inl +++ b/glm/core/func_common.inl @@ -70,7 +70,7 @@ namespace detail return detail::Abs_::is_signed>::get(x); } - VECTORIZE_1PARAM(abs) + VECTORIZE_VEC(abs) // sign //Try something like based on x >> 31 to get the sign bit @@ -94,7 +94,7 @@ namespace detail return result; } - VECTORIZE_1PARAM(sign) + VECTORIZE_VEC(sign) // floor template <> @@ -111,7 +111,7 @@ namespace detail return ::std::floor(x); } - VECTORIZE_1PARAM(floor) + VECTORIZE_VEC(floor) // trunc template @@ -121,7 +121,7 @@ namespace detail return x < 0 ? -floor(-x) : floor(x); } - VECTORIZE_1PARAM(trunc) + VECTORIZE_VEC(trunc) // round template @@ -134,7 +134,7 @@ namespace detail return genType(int(x + genType(0.5))); } - VECTORIZE_1PARAM(round) + VECTORIZE_VEC(round) /* // roundEven @@ -161,7 +161,7 @@ namespace detail return genType(int(x + RoundValue)); } - VECTORIZE_1PARAM(roundEven) + VECTORIZE_VEC(roundEven) // ceil template @@ -172,7 +172,7 @@ namespace detail return ::std::ceil(x); } - VECTORIZE_1PARAM(ceil) + VECTORIZE_VEC(ceil) // fract template @@ -186,7 +186,7 @@ namespace detail return x - ::std::floor(x); } - VECTORIZE_1PARAM(fract) + VECTORIZE_VEC(fract) // mod template @@ -201,83 +201,8 @@ namespace detail return x - y * floor(x / y); } - template - GLM_FUNC_QUALIFIER detail::tvec2 mod - ( - detail::tvec2 const & x, - typename detail::tvec2::value_type const & y - ) - { - return detail::tvec2( - mod(x.x, y), - mod(x.y, y)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec3 mod - ( - detail::tvec3 const & x, - typename detail::tvec3::value_type const & y - ) - { - return detail::tvec3( - mod(x.x, y), - mod(x.y, y), - mod(x.z, y)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec4 mod - ( - detail::tvec4 const & x, - typename detail::tvec4::value_type const & y - ) - { - return detail::tvec4( - mod(x.x, y), - mod(x.y, y), - mod(x.z, y), - mod(x.w, y)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec2 mod - ( - detail::tvec2 const & x, - detail::tvec2 const & y - ) - { - return detail::tvec2( - mod(x.x, y.x), - mod(x.y, y.y)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec3 mod - ( - detail::tvec3 const & x, - detail::tvec3 const & y - ) - { - return detail::tvec3( - mod(x.x, y.x), - mod(x.y, y.y), - mod(x.z, y.z)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec4 mod - ( - detail::tvec4 const & x, - detail::tvec4 const & y - ) - { - return detail::tvec4( - mod(x.x, y.x), - mod(x.y, y.y), - mod(x.z, y.z), - mod(x.w, y.w)); - } + VECTORIZE_VEC_SCA(mod) + VECTORIZE_VEC_VEC(mod) // modf template @@ -298,39 +223,39 @@ namespace detail GLM_FUNC_QUALIFIER detail::tvec2 modf ( detail::tvec2 const & x, - detail::tvec2 const & y + detail::tvec2 & i ) { return detail::tvec2( - modf(x.x, y.x), - modf(x.y, y.y)); + modf(x.x, i.x), + modf(x.y, i.y)); } template GLM_FUNC_QUALIFIER detail::tvec3 modf ( detail::tvec3 const & x, - detail::tvec3 const & y + detail::tvec3 & i ) { return detail::tvec3( - modf(x.x, y.x), - modf(x.y, y.y), - modf(x.z, y.z)); + modf(x.x, i.x), + modf(x.y, i.y), + modf(x.z, i.z)); } template GLM_FUNC_QUALIFIER detail::tvec4 modf ( detail::tvec4 const & x, - detail::tvec4 const & y + detail::tvec4 & i ) { return detail::tvec4( - modf(x.x, y.x), - modf(x.y, y.y), - modf(x.z, y.z), - modf(x.w, y.w)); + modf(x.x, i.x), + modf(x.y, i.y), + modf(x.z, i.z), + modf(x.w, i.w)); } //// Only valid if (INT_MIN <= x-y <= INT_MAX) @@ -357,83 +282,8 @@ namespace detail return x < y ? x : y; } - template - GLM_FUNC_QUALIFIER detail::tvec2 min - ( - detail::tvec2 const & x, - typename detail::tvec2::value_type const & y - ) - { - return detail::tvec2( - min(x.x, y), - min(x.y, y)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec3 min - ( - detail::tvec3 const & x, - typename detail::tvec3::value_type const & y - ) - { - return detail::tvec3( - min(x.x, y), - min(x.y, y), - min(x.z, y)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec4 min - ( - detail::tvec4 const & x, - typename detail::tvec4::value_type const & y - ) - { - return detail::tvec4( - min(x.x, y), - min(x.y, y), - min(x.z, y), - min(x.w, y)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec2 min - ( - detail::tvec2 const & x, - detail::tvec2 const & y - ) - { - return detail::tvec2( - min(x.x, y.x), - min(x.y, y.y)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec3 min - ( - detail::tvec3 const & x, - detail::tvec3 const & y - ) - { - return detail::tvec3( - min(x.x, y.x), - min(x.y, y.y), - min(x.z, y.z)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec4 min - ( - detail::tvec4 const & x, - detail::tvec4 const & y - ) - { - return detail::tvec4( - min(x.x, y.x), - min(x.y, y.y), - min(x.z, y.z), - min(x.w, y.w)); - } + VECTORIZE_VEC_SCA(min) + VECTORIZE_VEC_VEC(min) // max template @@ -451,82 +301,8 @@ namespace detail return x > y ? x : y; } - template - GLM_FUNC_QUALIFIER detail::tvec2 max - ( - detail::tvec2 const & x, - typename detail::tvec2::value_type y - ) - { - return detail::tvec2( - max(x.x, y), - max(x.y, y)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec3 max - ( - detail::tvec3 const & x, - typename detail::tvec3::value_type y - ) - { - return detail::tvec3( - max(x.x, y), - max(x.y, y), - max(x.z, y)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec4 max - ( - detail::tvec4 const & x, - typename detail::tvec4::value_type y - ) - { - return detail::tvec4( - max(x.x, y), - max(x.y, y), - max(x.z, y), - max(x.w, y)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec2 max - ( - detail::tvec2 const & x, - detail::tvec2 const & y - ) - { - return detail::tvec2( - max(x.x, y.x), - max(x.y, y.y)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec3 max - ( - detail::tvec3 const & x, - detail::tvec3 const & y - ) - { - return detail::tvec3( - max(x.x, y.x), - max(x.y, y.y), - max(x.z, y.z)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec4 max - ( - detail::tvec4 const & x, - detail::tvec4 const & y) - { - return detail::tvec4( - max(x.x, y.x), - max(x.y, y.y), - max(x.z, y.z), - max(x.w, y.w)); - } + VECTORIZE_VEC_SCA(max) + VECTORIZE_VEC_VEC(max) // clamp template diff --git a/glm/core/func_exponential.inl b/glm/core/func_exponential.inl index a9a5a8c0..b214ecef 100644 --- a/glm/core/func_exponential.inl +++ b/glm/core/func_exponential.inl @@ -41,44 +41,7 @@ namespace glm return ::std::pow(x, y); } - template - GLM_FUNC_QUALIFIER detail::tvec2 pow - ( - detail::tvec2 const & x, - detail::tvec2 const & y - ) - { - return detail::tvec2( - pow(x.x, y.x), - pow(x.y, y.y)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec3 pow - ( - detail::tvec3 const & x, - detail::tvec3 const & y - ) - { - return detail::tvec3( - pow(x.x, y.x), - pow(x.y, y.y), - pow(x.z, y.z)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec4 pow - ( - detail::tvec4 const & x, - detail::tvec4 const & y - ) - { - return detail::tvec4( - pow(x.x, y.x), - pow(x.y, y.y), - pow(x.z, y.z), - pow(x.w, y.w)); - } + VECTORIZE_VEC_VEC(pow) // exp template @@ -92,41 +55,7 @@ namespace glm return ::std::exp(x); } - template - GLM_FUNC_QUALIFIER detail::tvec2 exp - ( - detail::tvec2 const & x - ) - { - return detail::tvec2( - exp(x.x), - exp(x.y)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec3 exp - ( - detail::tvec3 const & x - ) - { - return detail::tvec3( - exp(x.x), - exp(x.y), - exp(x.z)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec4 exp - ( - detail::tvec4 const & x - ) - { - return detail::tvec4( - exp(x.x), - exp(x.y), - exp(x.z), - exp(x.w)); - } + VECTORIZE_VEC(exp) // log template @@ -140,41 +69,7 @@ namespace glm return ::std::log(x); } - template - GLM_FUNC_QUALIFIER detail::tvec2 log - ( - detail::tvec2 const & x - ) - { - return detail::tvec2( - log(x.x), - log(x.y)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec3 log - ( - detail::tvec3 const & x - ) - { - return detail::tvec3( - log(x.x), - log(x.y), - log(x.z)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec4 log - ( - detail::tvec4 const & x - ) - { - return detail::tvec4( - log(x.x), - log(x.y), - log(x.z), - log(x.w)); - } + VECTORIZE_VEC(log) //exp2, ln2 = 0.69314718055994530941723212145818f template @@ -188,41 +83,7 @@ namespace glm return ::std::exp(genType(0.69314718055994530941723212145818) * x); } - template - GLM_FUNC_QUALIFIER detail::tvec2 exp2 - ( - detail::tvec2 const & x - ) - { - return detail::tvec2( - exp2(x.x), - exp2(x.y)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec3 exp2 - ( - detail::tvec3 const & x - ) - { - return detail::tvec3( - exp2(x.x), - exp2(x.y), - exp2(x.z)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec4 exp2 - ( - detail::tvec4 const & x - ) - { - return detail::tvec4( - exp2(x.x), - exp2(x.y), - exp2(x.z), - exp2(x.w)); - } + VECTORIZE_VEC(exp2) namespace detail { @@ -255,44 +116,11 @@ namespace detail genType const & x ) { + assert(x > genType(0)); // log2 is only defined on the range (0, inf] return detail::compute_log2::ID>()(x); } - template - GLM_FUNC_QUALIFIER detail::tvec2 log2 - ( - detail::tvec2 const & x - ) - { - return detail::tvec2( - log2(x.x), - log2(x.y)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec3 log2 - ( - detail::tvec3 const & x - ) - { - return detail::tvec3( - log2(x.x), - log2(x.y), - log2(x.z)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec4 log2 - ( - detail::tvec4 const & x - ) - { - return detail::tvec4( - log2(x.x), - log2(x.y), - log2(x.z), - log2(x.w)); - } + VECTORIZE_VEC(log2) // sqrt template @@ -306,41 +134,7 @@ namespace detail return genType(::std::sqrt(x)); } - template - GLM_FUNC_QUALIFIER detail::tvec2 sqrt - ( - detail::tvec2 const & x - ) - { - return detail::tvec2( - glm::sqrt(x.x), - glm::sqrt(x.y)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec3 sqrt - ( - detail::tvec3 const & x - ) - { - return detail::tvec3( - glm::sqrt(x.x), - glm::sqrt(x.y), - glm::sqrt(x.z)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec4 sqrt - ( - detail::tvec4 const & x - ) - { - return detail::tvec4( - glm::sqrt(x.x), - glm::sqrt(x.y), - glm::sqrt(x.z), - glm::sqrt(x.w)); - } + VECTORIZE_VEC(sqrt) template GLM_FUNC_QUALIFIER genType inversesqrt @@ -353,40 +147,6 @@ namespace detail return genType(1) / ::std::sqrt(x); } - template - GLM_FUNC_QUALIFIER detail::tvec2 inversesqrt - ( - detail::tvec2 const & x - ) - { - return detail::tvec2( - inversesqrt(x.x), - inversesqrt(x.y)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec3 inversesqrt - ( - detail::tvec3 const & x - ) - { - return detail::tvec3( - inversesqrt(x.x), - inversesqrt(x.y), - inversesqrt(x.z)); - } - - template - GLM_FUNC_QUALIFIER detail::tvec4 inversesqrt - ( - detail::tvec4 const & x - ) - { - return detail::tvec4( - inversesqrt(x.x), - inversesqrt(x.y), - inversesqrt(x.z), - inversesqrt(x.w)); - } + VECTORIZE_VEC(inversesqrt) }//namespace glm diff --git a/glm/core/func_integer.inl b/glm/core/func_integer.inl index 31f9684f..681bbabf 100644 --- a/glm/core/func_integer.inl +++ b/glm/core/func_integer.inl @@ -415,41 +415,7 @@ namespace glm return Out; } - template - GLM_FUNC_QUALIFIER detail::tvec2 bitfieldReverse - ( - detail::tvec2 const & value - ) - { - return detail::tvec2( - bitfieldReverse(value[0]), - bitfieldReverse(value[1])); - } - - template - GLM_FUNC_QUALIFIER detail::tvec3 bitfieldReverse - ( - detail::tvec3 const & value - ) - { - return detail::tvec3( - bitfieldReverse(value[0]), - bitfieldReverse(value[1]), - bitfieldReverse(value[2])); - } - - template - GLM_FUNC_QUALIFIER detail::tvec4 bitfieldReverse - ( - detail::tvec4 const & value - ) - { - return detail::tvec4( - bitfieldReverse(value[0]), - bitfieldReverse(value[1]), - bitfieldReverse(value[2]), - bitfieldReverse(value[3])); - } + VECTORIZE_VEC(bitfieldReverse) // bitCount template diff --git a/glm/core/func_packing.inl b/glm/core/func_packing.inl index 4b8c6bcd..844b5c53 100644 --- a/glm/core/func_packing.inl +++ b/glm/core/func_packing.inl @@ -26,134 +26,133 @@ /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// -namespace glm{ - -GLM_FUNC_QUALIFIER detail::uint32 packUnorm2x16(detail::tvec2 const & v) +namespace glm { - detail::uint16 A(detail::uint16(round(clamp(v.x, 0.0f, 1.0f) * 65535.0f))); - detail::uint16 B(detail::uint16(round(clamp(v.y, 0.0f, 1.0f) * 65535.0f))); - return detail::uint32((B << 16) | A); -} - -GLM_FUNC_QUALIFIER detail::tvec2 unpackUnorm2x16(detail::uint32 const & p) -{ - detail::uint32 Mask16((1 << 16) - 1); - detail::uint32 A((p >> 0) & Mask16); - detail::uint32 B((p >> 16) & Mask16); - return detail::tvec2( - A * 1.0f / 65535.0f, - B * 1.0f / 65535.0f); -} - -GLM_FUNC_QUALIFIER detail::uint32 packSnorm2x16(detail::tvec2 const & v) -{ - union iu + GLM_FUNC_QUALIFIER detail::uint32 packUnorm2x16(detail::tvec2 const & v) { - detail::int16 i; - detail::uint16 u; - } A, B; + detail::uint16 A(detail::uint16(round(clamp(v.x, 0.0f, 1.0f) * 65535.0f))); + detail::uint16 B(detail::uint16(round(clamp(v.y, 0.0f, 1.0f) * 65535.0f))); + return detail::uint32((B << 16) | A); + } + + GLM_FUNC_QUALIFIER detail::tvec2 unpackUnorm2x16(detail::uint32 const & p) + { + detail::uint32 Mask16((1 << 16) - 1); + detail::uint32 A((p >> 0) & Mask16); + detail::uint32 B((p >> 16) & Mask16); + return detail::tvec2( + A * 1.0f / 65535.0f, + B * 1.0f / 65535.0f); + } + + GLM_FUNC_QUALIFIER detail::uint32 packSnorm2x16(detail::tvec2 const & v) + { + union iu + { + detail::int16 i; + detail::uint16 u; + } A, B; - detail::tvec2 Unpack = clamp(v ,-1.0f, 1.0f) * 32767.0f; - A.i = detail::int16(round(Unpack.x)); - B.i = detail::int16(round(Unpack.y)); - detail::uint32 Pack = (detail::uint32(B.u) << 16) | (detail::uint32(A.u) << 0); - return Pack; -} + detail::tvec2 Unpack = clamp(v ,-1.0f, 1.0f) * 32767.0f; + A.i = detail::int16(round(Unpack.x)); + B.i = detail::int16(round(Unpack.y)); + detail::uint32 Pack = (detail::uint32(B.u) << 16) | (detail::uint32(A.u) << 0); + return Pack; + } -GLM_FUNC_QUALIFIER detail::tvec2 unpackSnorm2x16(detail::uint32 const & p) -{ - union iu + GLM_FUNC_QUALIFIER detail::tvec2 unpackSnorm2x16(detail::uint32 const & p) { - detail::int16 i; - detail::uint16 u; - } A, B; + union iu + { + detail::int16 i; + detail::uint16 u; + } A, B; - detail::uint32 Mask16((1 << 16) - 1); - A.u = detail::uint16((p >> 0) & Mask16); - B.u = detail::uint16((p >> 16) & Mask16); - detail::tvec2 Pack(A.i, B.i); + detail::uint32 Mask16((1 << 16) - 1); + A.u = detail::uint16((p >> 0) & Mask16); + B.u = detail::uint16((p >> 16) & Mask16); + detail::tvec2 Pack(A.i, B.i); - return clamp(Pack * 1.0f / 32767.0f, -1.0f, 1.0f); -} + return clamp(Pack * 1.0f / 32767.0f, -1.0f, 1.0f); + } -GLM_FUNC_QUALIFIER detail::uint32 packUnorm4x8(detail::tvec4 const & v) -{ - detail::uint8 A((detail::uint8)round(clamp(v.x, 0.0f, 1.0f) * 255.0f)); - detail::uint8 B((detail::uint8)round(clamp(v.y, 0.0f, 1.0f) * 255.0f)); - detail::uint8 C((detail::uint8)round(clamp(v.z, 0.0f, 1.0f) * 255.0f)); - detail::uint8 D((detail::uint8)round(clamp(v.w, 0.0f, 1.0f) * 255.0f)); - return detail::uint32((D << 24) | (C << 16) | (B << 8) | A); -} - -GLM_FUNC_QUALIFIER detail::tvec4 unpackUnorm4x8(detail::uint32 const & p) -{ - detail::uint32 Mask8((1 << 8) - 1); - detail::uint32 A((p >> 0) & Mask8); - detail::uint32 B((p >> 8) & Mask8); - detail::uint32 C((p >> 16) & Mask8); - detail::uint32 D((p >> 24) & Mask8); - return detail::tvec4( - A * 1.0f / 255.0f, - B * 1.0f / 255.0f, - C * 1.0f / 255.0f, - D * 1.0f / 255.0f); -} - -GLM_FUNC_QUALIFIER detail::uint32 packSnorm4x8(detail::tvec4 const & v) -{ - union iu + GLM_FUNC_QUALIFIER detail::uint32 packUnorm4x8(detail::tvec4 const & v) { - detail::int8 i; - detail::uint8 u; - } A, B, C, D; + detail::uint8 A((detail::uint8)round(clamp(v.x, 0.0f, 1.0f) * 255.0f)); + detail::uint8 B((detail::uint8)round(clamp(v.y, 0.0f, 1.0f) * 255.0f)); + detail::uint8 C((detail::uint8)round(clamp(v.z, 0.0f, 1.0f) * 255.0f)); + detail::uint8 D((detail::uint8)round(clamp(v.w, 0.0f, 1.0f) * 255.0f)); + return detail::uint32((D << 24) | (C << 16) | (B << 8) | A); + } + + GLM_FUNC_QUALIFIER detail::tvec4 unpackUnorm4x8(detail::uint32 const & p) + { + detail::uint32 Mask8((1 << 8) - 1); + detail::uint32 A((p >> 0) & Mask8); + detail::uint32 B((p >> 8) & Mask8); + detail::uint32 C((p >> 16) & Mask8); + detail::uint32 D((p >> 24) & Mask8); + return detail::tvec4( + A * 1.0f / 255.0f, + B * 1.0f / 255.0f, + C * 1.0f / 255.0f, + D * 1.0f / 255.0f); + } - detail::tvec4 Unpack = clamp(v ,-1.0f, 1.0f) * 127.0f; - A.i = detail::int8(round(Unpack.x)); - B.i = detail::int8(round(Unpack.y)); - C.i = detail::int8(round(Unpack.z)); - D.i = detail::int8(round(Unpack.w)); - detail::uint32 Pack = (detail::uint32(D.u) << 24) | (detail::uint32(C.u) << 16) | (detail::uint32(B.u) << 8) | (detail::uint32(A.u) << 0); - return Pack; -} - -GLM_FUNC_QUALIFIER detail::tvec4 unpackSnorm4x8(detail::uint32 const & p) -{ - union iu + GLM_FUNC_QUALIFIER detail::uint32 packSnorm4x8(detail::tvec4 const & v) { - detail::int8 i; - detail::uint8 u; - } A, B, C, D; + union iu + { + detail::int8 i; + detail::uint8 u; + } A, B, C, D; - detail::uint32 Mask8((1 << 8) - 1); - A.u = detail::uint8((p >> 0) & Mask8); - B.u = detail::uint8((p >> 8) & Mask8); - C.u = detail::uint8((p >> 16) & Mask8); - D.u = detail::uint8((p >> 24) & Mask8); - detail::tvec4 Pack(A.i, B.i, C.i, D.i); + detail::tvec4 Unpack = clamp(v ,-1.0f, 1.0f) * 127.0f; + A.i = detail::int8(round(Unpack.x)); + B.i = detail::int8(round(Unpack.y)); + C.i = detail::int8(round(Unpack.z)); + D.i = detail::int8(round(Unpack.w)); + detail::uint32 Pack = (detail::uint32(D.u) << 24) | (detail::uint32(C.u) << 16) | (detail::uint32(B.u) << 8) | (detail::uint32(A.u) << 0); + return Pack; + } - return clamp(Pack * 1.0f / 127.0f, -1.0f, 1.0f); -} + GLM_FUNC_QUALIFIER detail::tvec4 unpackSnorm4x8(detail::uint32 const & p) + { + union iu + { + detail::int8 i; + detail::uint8 u; + } A, B, C, D; + + detail::uint32 Mask8((1 << 8) - 1); + A.u = detail::uint8((p >> 0) & Mask8); + B.u = detail::uint8((p >> 8) & Mask8); + C.u = detail::uint8((p >> 16) & Mask8); + D.u = detail::uint8((p >> 24) & Mask8); + detail::tvec4 Pack(A.i, B.i, C.i, D.i); + + return clamp(Pack * 1.0f / 127.0f, -1.0f, 1.0f); + } -GLM_FUNC_QUALIFIER double packDouble2x32(detail::tvec2 const & v) -{ - return *(double*)&v; -} + GLM_FUNC_QUALIFIER double packDouble2x32(detail::tvec2 const & v) + { + return *(double*)&v; + } -GLM_FUNC_QUALIFIER detail::tvec2 unpackDouble2x32(double const & v) -{ - return *(detail::tvec2*)&v; -} + GLM_FUNC_QUALIFIER detail::tvec2 unpackDouble2x32(double const & v) + { + return *(detail::tvec2*)&v; + } -GLM_FUNC_QUALIFIER uint packHalf2x16(detail::tvec2 const & v) -{ - detail::tvec2 Pack(detail::toFloat16(v.x), detail::toFloat16(v.y)); - return *(uint*)&Pack; -} - -GLM_FUNC_QUALIFIER vec2 unpackHalf2x16(uint const & v) -{ - detail::tvec2 Unpack = *(detail::tvec2*)&v; - return vec2(detail::toFloat32(Unpack.x), detail::toFloat32(Unpack.y)); -} + GLM_FUNC_QUALIFIER uint packHalf2x16(detail::tvec2 const & v) + { + detail::tvec2 Pack(detail::toFloat16(v.x), detail::toFloat16(v.y)); + return *(uint*)&Pack; + } + GLM_FUNC_QUALIFIER vec2 unpackHalf2x16(uint const & v) + { + detail::tvec2 Unpack = *(detail::tvec2*)&v; + return vec2(detail::toFloat32(Unpack.x), detail::toFloat32(Unpack.y)); + } }//namespace glm diff --git a/glm/core/func_trigonometric.inl b/glm/core/func_trigonometric.inl index 9e83a8fa..76809916 100644 --- a/glm/core/func_trigonometric.inl +++ b/glm/core/func_trigonometric.inl @@ -26,732 +26,731 @@ /// @author Christophe Riccio /////////////////////////////////////////////////////////////////////////////////// -namespace glm{ - -// radians -template -GLM_FUNC_QUALIFIER genType radians -( - genType const & degrees -) +namespace glm { - GLM_STATIC_ASSERT(detail::type::is_float, "'radians' only accept floating-point input"); + // radians + template + GLM_FUNC_QUALIFIER genType radians + ( + genType const & degrees + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'radians' only accept floating-point input"); - const genType pi = genType(3.1415926535897932384626433832795); - return degrees * (pi / genType(180)); -} + const genType pi = genType(3.1415926535897932384626433832795); + return degrees * (pi / genType(180)); + } -template -GLM_FUNC_QUALIFIER detail::tvec2 radians -( - detail::tvec2 const & degrees -) -{ - return detail::tvec2( - radians(degrees.x), - radians(degrees.y)); -} + template + GLM_FUNC_QUALIFIER detail::tvec2 radians + ( + detail::tvec2 const & degrees + ) + { + return detail::tvec2( + radians(degrees.x), + radians(degrees.y)); + } -template -GLM_FUNC_QUALIFIER detail::tvec3 radians -( - detail::tvec3 const & degrees -) -{ - return detail::tvec3( - radians(degrees.x), - radians(degrees.y), - radians(degrees.z)); -} + template + GLM_FUNC_QUALIFIER detail::tvec3 radians + ( + detail::tvec3 const & degrees + ) + { + return detail::tvec3( + radians(degrees.x), + radians(degrees.y), + radians(degrees.z)); + } -template -GLM_FUNC_QUALIFIER detail::tvec4 radians -( - detail::tvec4 const & degrees -) -{ - return detail::tvec4( - radians(degrees.x), - radians(degrees.y), - radians(degrees.z), - radians(degrees.w)); -} + template + GLM_FUNC_QUALIFIER detail::tvec4 radians + ( + detail::tvec4 const & degrees + ) + { + return detail::tvec4( + radians(degrees.x), + radians(degrees.y), + radians(degrees.z), + radians(degrees.w)); + } -// degrees -template -GLM_FUNC_QUALIFIER genType degrees -( - genType const & radians -) -{ - GLM_STATIC_ASSERT(detail::type::is_float, "'degrees' only accept floating-point input"); + // degrees + template + GLM_FUNC_QUALIFIER genType degrees + ( + genType const & radians + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'degrees' only accept floating-point input"); - const genType pi = genType(3.1415926535897932384626433832795); - return radians * (genType(180) / pi); -} + const genType pi = genType(3.1415926535897932384626433832795); + return radians * (genType(180) / pi); + } -template -GLM_FUNC_QUALIFIER detail::tvec2 degrees -( - detail::tvec2 const & radians -) -{ - return detail::tvec2( - degrees(radians.x), - degrees(radians.y)); -} + template + GLM_FUNC_QUALIFIER detail::tvec2 degrees + ( + detail::tvec2 const & radians + ) + { + return detail::tvec2( + degrees(radians.x), + degrees(radians.y)); + } -template -GLM_FUNC_QUALIFIER detail::tvec3 degrees -( - detail::tvec3 const & radians -) -{ - return detail::tvec3( - degrees(radians.x), - degrees(radians.y), - degrees(radians.z)); -} + template + GLM_FUNC_QUALIFIER detail::tvec3 degrees + ( + detail::tvec3 const & radians + ) + { + return detail::tvec3( + degrees(radians.x), + degrees(radians.y), + degrees(radians.z)); + } -template -GLM_FUNC_QUALIFIER detail::tvec4 degrees -( - detail::tvec4 const & radians -) -{ - return detail::tvec4( - degrees(radians.x), - degrees(radians.y), - degrees(radians.z), - degrees(radians.w)); -} + template + GLM_FUNC_QUALIFIER detail::tvec4 degrees + ( + detail::tvec4 const & radians + ) + { + return detail::tvec4( + degrees(radians.x), + degrees(radians.y), + degrees(radians.z), + degrees(radians.w)); + } -// sin -template -GLM_FUNC_QUALIFIER genType sin -( - genType const & angle -) -{ - GLM_STATIC_ASSERT(detail::type::is_float, "'sin' only accept floating-point input"); + // sin + template + GLM_FUNC_QUALIFIER genType sin + ( + genType const & angle + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'sin' only accept floating-point input"); - return ::std::sin(angle); -} + return ::std::sin(angle); + } -template -GLM_FUNC_QUALIFIER detail::tvec2 sin -( - detail::tvec2 const & angle -) -{ - return detail::tvec2( - sin(angle.x), - sin(angle.y)); -} + template + GLM_FUNC_QUALIFIER detail::tvec2 sin + ( + detail::tvec2 const & angle + ) + { + return detail::tvec2( + sin(angle.x), + sin(angle.y)); + } -template -GLM_FUNC_QUALIFIER detail::tvec3 sin -( - detail::tvec3 const & angle -) -{ - return detail::tvec3( - sin(angle.x), - sin(angle.y), - sin(angle.z)); -} + template + GLM_FUNC_QUALIFIER detail::tvec3 sin + ( + detail::tvec3 const & angle + ) + { + return detail::tvec3( + sin(angle.x), + sin(angle.y), + sin(angle.z)); + } -template -GLM_FUNC_QUALIFIER detail::tvec4 sin -( - detail::tvec4 const & angle -) -{ - return detail::tvec4( - sin(angle.x), - sin(angle.y), - sin(angle.z), - sin(angle.w)); -} + template + GLM_FUNC_QUALIFIER detail::tvec4 sin + ( + detail::tvec4 const & angle + ) + { + return detail::tvec4( + sin(angle.x), + sin(angle.y), + sin(angle.z), + sin(angle.w)); + } -// cos -template -GLM_FUNC_QUALIFIER genType cos(genType const & angle) -{ - GLM_STATIC_ASSERT(detail::type::is_float, "'cos' only accept floating-point input"); + // cos + template + GLM_FUNC_QUALIFIER genType cos(genType const & angle) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'cos' only accept floating-point input"); - return ::std::cos(angle); -} + return ::std::cos(angle); + } -template -GLM_FUNC_QUALIFIER detail::tvec2 cos -( - detail::tvec2 const & angle -) -{ - return detail::tvec2( - cos(angle.x), - cos(angle.y)); -} + template + GLM_FUNC_QUALIFIER detail::tvec2 cos + ( + detail::tvec2 const & angle + ) + { + return detail::tvec2( + cos(angle.x), + cos(angle.y)); + } -template -GLM_FUNC_QUALIFIER detail::tvec3 cos -( - detail::tvec3 const & angle -) -{ - return detail::tvec3( - cos(angle.x), - cos(angle.y), - cos(angle.z)); -} + template + GLM_FUNC_QUALIFIER detail::tvec3 cos + ( + detail::tvec3 const & angle + ) + { + return detail::tvec3( + cos(angle.x), + cos(angle.y), + cos(angle.z)); + } -template -GLM_FUNC_QUALIFIER detail::tvec4 cos -( - detail::tvec4 const & angle -) -{ - return detail::tvec4( - cos(angle.x), - cos(angle.y), - cos(angle.z), - cos(angle.w)); -} + template + GLM_FUNC_QUALIFIER detail::tvec4 cos + ( + detail::tvec4 const & angle + ) + { + return detail::tvec4( + cos(angle.x), + cos(angle.y), + cos(angle.z), + cos(angle.w)); + } -// tan -template -GLM_FUNC_QUALIFIER genType tan -( - genType const & angle -) -{ - GLM_STATIC_ASSERT(detail::type::is_float, "'tan' only accept floating-point input"); + // tan + template + GLM_FUNC_QUALIFIER genType tan + ( + genType const & angle + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'tan' only accept floating-point input"); - return ::std::tan(angle); -} + return ::std::tan(angle); + } -template -GLM_FUNC_QUALIFIER detail::tvec2 tan -( - detail::tvec2 const & angle -) -{ - return detail::tvec2( - tan(angle.x), - tan(angle.y)); -} + template + GLM_FUNC_QUALIFIER detail::tvec2 tan + ( + detail::tvec2 const & angle + ) + { + return detail::tvec2( + tan(angle.x), + tan(angle.y)); + } -template -GLM_FUNC_QUALIFIER detail::tvec3 tan -( - detail::tvec3 const & angle -) -{ - return detail::tvec3( - tan(angle.x), - tan(angle.y), - tan(angle.z)); -} + template + GLM_FUNC_QUALIFIER detail::tvec3 tan + ( + detail::tvec3 const & angle + ) + { + return detail::tvec3( + tan(angle.x), + tan(angle.y), + tan(angle.z)); + } -template -GLM_FUNC_QUALIFIER detail::tvec4 tan -( - detail::tvec4 const & angle -) -{ - return detail::tvec4( - tan(angle.x), - tan(angle.y), - tan(angle.z), - tan(angle.w)); -} + template + GLM_FUNC_QUALIFIER detail::tvec4 tan + ( + detail::tvec4 const & angle + ) + { + return detail::tvec4( + tan(angle.x), + tan(angle.y), + tan(angle.z), + tan(angle.w)); + } -// asin -template -GLM_FUNC_QUALIFIER genType asin -( - genType const & x -) -{ - GLM_STATIC_ASSERT(detail::type::is_float, "'asin' only accept floating-point input"); + // asin + template + GLM_FUNC_QUALIFIER genType asin + ( + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'asin' only accept floating-point input"); - return ::std::asin(x); -} + return ::std::asin(x); + } -template -GLM_FUNC_QUALIFIER detail::tvec2 asin -( - detail::tvec2 const & x -) -{ - return detail::tvec2( - asin(x.x), - asin(x.y)); -} + template + GLM_FUNC_QUALIFIER detail::tvec2 asin + ( + detail::tvec2 const & x + ) + { + return detail::tvec2( + asin(x.x), + asin(x.y)); + } -template -GLM_FUNC_QUALIFIER detail::tvec3 asin -( - detail::tvec3 const & x -) -{ - return detail::tvec3( - asin(x.x), - asin(x.y), - asin(x.z)); -} + template + GLM_FUNC_QUALIFIER detail::tvec3 asin + ( + detail::tvec3 const & x + ) + { + return detail::tvec3( + asin(x.x), + asin(x.y), + asin(x.z)); + } -template -GLM_FUNC_QUALIFIER detail::tvec4 asin -( - detail::tvec4 const & x -) -{ - return detail::tvec4( - asin(x.x), - asin(x.y), - asin(x.z), - asin(x.w)); -} + template + GLM_FUNC_QUALIFIER detail::tvec4 asin + ( + detail::tvec4 const & x + ) + { + return detail::tvec4( + asin(x.x), + asin(x.y), + asin(x.z), + asin(x.w)); + } -// acos -template -GLM_FUNC_QUALIFIER genType acos -( - genType const & x -) -{ - GLM_STATIC_ASSERT(detail::type::is_float, "'acos' only accept floating-point input"); + // acos + template + GLM_FUNC_QUALIFIER genType acos + ( + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'acos' only accept floating-point input"); - return ::std::acos(x); -} + return ::std::acos(x); + } -template -GLM_FUNC_QUALIFIER detail::tvec2 acos -( - detail::tvec2 const & x -) -{ - return detail::tvec2( - acos(x.x), - acos(x.y)); -} + template + GLM_FUNC_QUALIFIER detail::tvec2 acos + ( + detail::tvec2 const & x + ) + { + return detail::tvec2( + acos(x.x), + acos(x.y)); + } -template -GLM_FUNC_QUALIFIER detail::tvec3 acos -( - detail::tvec3 const & x -) -{ - return detail::tvec3( - acos(x.x), - acos(x.y), - acos(x.z)); -} + template + GLM_FUNC_QUALIFIER detail::tvec3 acos + ( + detail::tvec3 const & x + ) + { + return detail::tvec3( + acos(x.x), + acos(x.y), + acos(x.z)); + } -template -GLM_FUNC_QUALIFIER detail::tvec4 acos -( - detail::tvec4 const & x -) -{ - return detail::tvec4( - acos(x.x), - acos(x.y), - acos(x.z), - acos(x.w)); -} + template + GLM_FUNC_QUALIFIER detail::tvec4 acos + ( + detail::tvec4 const & x + ) + { + return detail::tvec4( + acos(x.x), + acos(x.y), + acos(x.z), + acos(x.w)); + } -// atan -template -GLM_FUNC_QUALIFIER genType atan -( - genType const & y, - genType const & x -) -{ - GLM_STATIC_ASSERT(detail::type::is_float, "'atan' only accept floating-point input"); + // atan + template + GLM_FUNC_QUALIFIER genType atan + ( + genType const & y, + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'atan' only accept floating-point input"); - return ::std::atan2(y, x); -} + return ::std::atan2(y, x); + } -template -GLM_FUNC_QUALIFIER detail::tvec2 atan -( - detail::tvec2 const & y, - detail::tvec2 const & x -) -{ - return detail::tvec2( - atan(y.x, x.x), - atan(y.y, x.y)); -} + template + GLM_FUNC_QUALIFIER detail::tvec2 atan + ( + detail::tvec2 const & y, + detail::tvec2 const & x + ) + { + return detail::tvec2( + atan(y.x, x.x), + atan(y.y, x.y)); + } -template -GLM_FUNC_QUALIFIER detail::tvec3 atan -( - detail::tvec3 const & y, - detail::tvec3 const & x -) -{ - return detail::tvec3( - atan(y.x, x.x), - atan(y.y, x.y), - atan(y.z, x.z)); -} + template + GLM_FUNC_QUALIFIER detail::tvec3 atan + ( + detail::tvec3 const & y, + detail::tvec3 const & x + ) + { + return detail::tvec3( + atan(y.x, x.x), + atan(y.y, x.y), + atan(y.z, x.z)); + } -template -GLM_FUNC_QUALIFIER detail::tvec4 atan -( - detail::tvec4 const & y, - detail::tvec4 const & x -) -{ - return detail::tvec4( - atan(y.x, x.x), - atan(y.y, x.y), - atan(y.z, x.z), - atan(y.w, x.w)); -} + template + GLM_FUNC_QUALIFIER detail::tvec4 atan + ( + detail::tvec4 const & y, + detail::tvec4 const & x + ) + { + return detail::tvec4( + atan(y.x, x.x), + atan(y.y, x.y), + atan(y.z, x.z), + atan(y.w, x.w)); + } -template -GLM_FUNC_QUALIFIER genType atan -( - genType const & x -) -{ - GLM_STATIC_ASSERT(detail::type::is_float, "'atan' only accept floating-point input"); + template + GLM_FUNC_QUALIFIER genType atan + ( + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'atan' only accept floating-point input"); - return ::std::atan(x); -} + return ::std::atan(x); + } -template -GLM_FUNC_QUALIFIER detail::tvec2 atan -( - detail::tvec2 const & x -) -{ - return detail::tvec2( - atan(x.x), - atan(x.y)); -} + template + GLM_FUNC_QUALIFIER detail::tvec2 atan + ( + detail::tvec2 const & x + ) + { + return detail::tvec2( + atan(x.x), + atan(x.y)); + } -template -GLM_FUNC_QUALIFIER detail::tvec3 atan -( - detail::tvec3 const & x -) -{ - return detail::tvec3( - atan(x.x), - atan(x.y), - atan(x.z)); -} + template + GLM_FUNC_QUALIFIER detail::tvec3 atan + ( + detail::tvec3 const & x + ) + { + return detail::tvec3( + atan(x.x), + atan(x.y), + atan(x.z)); + } -template -GLM_FUNC_QUALIFIER detail::tvec4 atan -( - detail::tvec4 const & x -) -{ - return detail::tvec4( - atan(x.x), - atan(x.y), - atan(x.z), - atan(x.w)); -} + template + GLM_FUNC_QUALIFIER detail::tvec4 atan + ( + detail::tvec4 const & x + ) + { + return detail::tvec4( + atan(x.x), + atan(x.y), + atan(x.z), + atan(x.w)); + } -// sinh -template -GLM_FUNC_QUALIFIER genType sinh -( - genType const & angle -) -{ - GLM_STATIC_ASSERT(detail::type::is_float, "'sinh' only accept floating-point input"); + // sinh + template + GLM_FUNC_QUALIFIER genType sinh + ( + genType const & angle + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'sinh' only accept floating-point input"); - return std::sinh(angle); -} + return std::sinh(angle); + } -template -GLM_FUNC_QUALIFIER detail::tvec2 sinh -( - detail::tvec2 const & angle -) -{ - return detail::tvec2( - sinh(angle.x), - sinh(angle.y)); -} + template + GLM_FUNC_QUALIFIER detail::tvec2 sinh + ( + detail::tvec2 const & angle + ) + { + return detail::tvec2( + sinh(angle.x), + sinh(angle.y)); + } -template -GLM_FUNC_QUALIFIER detail::tvec3 sinh -( - detail::tvec3 const & angle -) -{ - return detail::tvec3( - sinh(angle.x), - sinh(angle.y), - sinh(angle.z)); -} + template + GLM_FUNC_QUALIFIER detail::tvec3 sinh + ( + detail::tvec3 const & angle + ) + { + return detail::tvec3( + sinh(angle.x), + sinh(angle.y), + sinh(angle.z)); + } -template -GLM_FUNC_QUALIFIER detail::tvec4 sinh -( - detail::tvec4 const & angle -) -{ - return detail::tvec4( - sinh(angle.x), - sinh(angle.y), - sinh(angle.z), - sinh(angle.w)); -} + template + GLM_FUNC_QUALIFIER detail::tvec4 sinh + ( + detail::tvec4 const & angle + ) + { + return detail::tvec4( + sinh(angle.x), + sinh(angle.y), + sinh(angle.z), + sinh(angle.w)); + } -// cosh -template -GLM_FUNC_QUALIFIER genType cosh -( - genType const & angle -) -{ - GLM_STATIC_ASSERT(detail::type::is_float, "'cosh' only accept floating-point input"); + // cosh + template + GLM_FUNC_QUALIFIER genType cosh + ( + genType const & angle + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'cosh' only accept floating-point input"); - return std::cosh(angle); -} + return std::cosh(angle); + } -template -GLM_FUNC_QUALIFIER detail::tvec2 cosh -( - detail::tvec2 const & angle -) -{ - return detail::tvec2( - cosh(angle.x), - cosh(angle.y)); -} + template + GLM_FUNC_QUALIFIER detail::tvec2 cosh + ( + detail::tvec2 const & angle + ) + { + return detail::tvec2( + cosh(angle.x), + cosh(angle.y)); + } -template -GLM_FUNC_QUALIFIER detail::tvec3 cosh -( - detail::tvec3 const & angle -) -{ - return detail::tvec3( - cosh(angle.x), - cosh(angle.y), - cosh(angle.z)); -} + template + GLM_FUNC_QUALIFIER detail::tvec3 cosh + ( + detail::tvec3 const & angle + ) + { + return detail::tvec3( + cosh(angle.x), + cosh(angle.y), + cosh(angle.z)); + } -template -GLM_FUNC_QUALIFIER detail::tvec4 cosh -( - detail::tvec4 const & angle -) -{ - return detail::tvec4( - cosh(angle.x), - cosh(angle.y), - cosh(angle.z), - cosh(angle.w)); -} + template + GLM_FUNC_QUALIFIER detail::tvec4 cosh + ( + detail::tvec4 const & angle + ) + { + return detail::tvec4( + cosh(angle.x), + cosh(angle.y), + cosh(angle.z), + cosh(angle.w)); + } -// tanh -template -GLM_FUNC_QUALIFIER genType tanh -( - genType const & angle -) -{ - GLM_STATIC_ASSERT(detail::type::is_float, "'tanh' only accept floating-point input"); + // tanh + template + GLM_FUNC_QUALIFIER genType tanh + ( + genType const & angle + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'tanh' only accept floating-point input"); - return std::tanh(angle); -} + return std::tanh(angle); + } -template -GLM_FUNC_QUALIFIER detail::tvec2 tanh -( - detail::tvec2 const & angle -) -{ - return detail::tvec2( - tanh(angle.x), - tanh(angle.y)); -} + template + GLM_FUNC_QUALIFIER detail::tvec2 tanh + ( + detail::tvec2 const & angle + ) + { + return detail::tvec2( + tanh(angle.x), + tanh(angle.y)); + } -template -GLM_FUNC_QUALIFIER detail::tvec3 tanh -( - detail::tvec3 const & angle -) -{ - return detail::tvec3( - tanh(angle.x), - tanh(angle.y), - tanh(angle.z)); -} + template + GLM_FUNC_QUALIFIER detail::tvec3 tanh + ( + detail::tvec3 const & angle + ) + { + return detail::tvec3( + tanh(angle.x), + tanh(angle.y), + tanh(angle.z)); + } -template -GLM_FUNC_QUALIFIER detail::tvec4 tanh -( - detail::tvec4 const & angle -) -{ - return detail::tvec4( - tanh(angle.x), - tanh(angle.y), - tanh(angle.z), - tanh(angle.w)); -} + template + GLM_FUNC_QUALIFIER detail::tvec4 tanh + ( + detail::tvec4 const & angle + ) + { + return detail::tvec4( + tanh(angle.x), + tanh(angle.y), + tanh(angle.z), + tanh(angle.w)); + } -// asinh -template -GLM_FUNC_QUALIFIER genType asinh -( - genType const & x -) -{ - GLM_STATIC_ASSERT(detail::type::is_float, "'asinh' only accept floating-point input"); + // asinh + template + GLM_FUNC_QUALIFIER genType asinh + ( + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'asinh' only accept floating-point input"); - return (x < genType(0) ? genType(-1) : (x > genType(0) ? genType(1) : genType(0))) * log(abs(x) + sqrt(genType(1) + x * x)); -} + return (x < genType(0) ? genType(-1) : (x > genType(0) ? genType(1) : genType(0))) * log(abs(x) + sqrt(genType(1) + x * x)); + } -template -GLM_FUNC_QUALIFIER detail::tvec2 asinh -( - detail::tvec2 const & x -) -{ - return detail::tvec2( - asinh(x.x), - asinh(x.y)); -} + template + GLM_FUNC_QUALIFIER detail::tvec2 asinh + ( + detail::tvec2 const & x + ) + { + return detail::tvec2( + asinh(x.x), + asinh(x.y)); + } -template -GLM_FUNC_QUALIFIER detail::tvec3 asinh -( - detail::tvec3 const & x -) -{ - return detail::tvec3( - asinh(x.x), - asinh(x.y), - asinh(x.z)); -} + template + GLM_FUNC_QUALIFIER detail::tvec3 asinh + ( + detail::tvec3 const & x + ) + { + return detail::tvec3( + asinh(x.x), + asinh(x.y), + asinh(x.z)); + } -template -GLM_FUNC_QUALIFIER detail::tvec4 asinh -( - detail::tvec4 const & x -) -{ - return detail::tvec4( - asinh(x.x), - asinh(x.y), - asinh(x.z), - asinh(x.w)); -} + template + GLM_FUNC_QUALIFIER detail::tvec4 asinh + ( + detail::tvec4 const & x + ) + { + return detail::tvec4( + asinh(x.x), + asinh(x.y), + asinh(x.z), + asinh(x.w)); + } -// acosh -template -GLM_FUNC_QUALIFIER genType acosh -( - genType const & x -) -{ - GLM_STATIC_ASSERT(detail::type::is_float, "'acosh' only accept floating-point input"); + // acosh + template + GLM_FUNC_QUALIFIER genType acosh + ( + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'acosh' only accept floating-point input"); - if(x < genType(1)) - return genType(0); - return log(x + sqrt(x * x - genType(1))); -} + if(x < genType(1)) + return genType(0); + return log(x + sqrt(x * x - genType(1))); + } -template -GLM_FUNC_QUALIFIER detail::tvec2 acosh -( - detail::tvec2 const & x -) -{ - return detail::tvec2( - acosh(x.x), - acosh(x.y)); -} + template + GLM_FUNC_QUALIFIER detail::tvec2 acosh + ( + detail::tvec2 const & x + ) + { + return detail::tvec2( + acosh(x.x), + acosh(x.y)); + } -template -GLM_FUNC_QUALIFIER detail::tvec3 acosh -( - detail::tvec3 const & x -) -{ - return detail::tvec3( - acosh(x.x), - acosh(x.y), - acosh(x.z)); -} + template + GLM_FUNC_QUALIFIER detail::tvec3 acosh + ( + detail::tvec3 const & x + ) + { + return detail::tvec3( + acosh(x.x), + acosh(x.y), + acosh(x.z)); + } -template -GLM_FUNC_QUALIFIER detail::tvec4 acosh -( - detail::tvec4 const & x -) -{ - return detail::tvec4( - acosh(x.x), - acosh(x.y), - acosh(x.z), - acosh(x.w)); -} + template + GLM_FUNC_QUALIFIER detail::tvec4 acosh + ( + detail::tvec4 const & x + ) + { + return detail::tvec4( + acosh(x.x), + acosh(x.y), + acosh(x.z), + acosh(x.w)); + } -// atanh -template -GLM_FUNC_QUALIFIER genType atanh -( - genType const & x -) -{ - GLM_STATIC_ASSERT(detail::type::is_float, "'atanh' only accept floating-point input"); + // atanh + template + GLM_FUNC_QUALIFIER genType atanh + ( + genType const & x + ) + { + GLM_STATIC_ASSERT(detail::type::is_float, "'atanh' only accept floating-point input"); - if(abs(x) >= genType(1)) - return 0; - return genType(0.5) * log((genType(1) + x) / (genType(1) - x)); -} + if(abs(x) >= genType(1)) + return 0; + return genType(0.5) * log((genType(1) + x) / (genType(1) - x)); + } -template -GLM_FUNC_QUALIFIER detail::tvec2 atanh -( - detail::tvec2 const & x -) -{ - return detail::tvec2( - atanh(x.x), - atanh(x.y)); -} + template + GLM_FUNC_QUALIFIER detail::tvec2 atanh + ( + detail::tvec2 const & x + ) + { + return detail::tvec2( + atanh(x.x), + atanh(x.y)); + } -template -GLM_FUNC_QUALIFIER detail::tvec3 atanh -( - detail::tvec3 const & x -) -{ - return detail::tvec3( - atanh(x.x), - atanh(x.y), - atanh(x.z)); -} - -template -GLM_FUNC_QUALIFIER detail::tvec4 atanh -( - detail::tvec4 const & x -) -{ - return detail::tvec4( - atanh(x.x), - atanh(x.y), - atanh(x.z), - atanh(x.w)); -} + template + GLM_FUNC_QUALIFIER detail::tvec3 atanh + ( + detail::tvec3 const & x + ) + { + return detail::tvec3( + atanh(x.x), + atanh(x.y), + atanh(x.z)); + } + template + GLM_FUNC_QUALIFIER detail::tvec4 atanh + ( + detail::tvec4 const & x + ) + { + return detail::tvec4( + atanh(x.x), + atanh(x.y), + atanh(x.z), + atanh(x.w)); + } }//namespace glm