aboutsummaryrefslogtreecommitdiff
path: root/src/libraries/glm/gtx/fast_square_root.inl
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@gmail.com>2026-08-24 11:16:07 +0200
committerFelix Morgner <felix.morgner@gmail.com>2026-08-24 11:16:07 +0200
commitc068f22329d5cc722622a2183bbb22eef2093df7 (patch)
tree12d56c1aede67988a55e241364606bfbb4dba933 /src/libraries/glm/gtx/fast_square_root.inl
downloadopenparsec-c068f22329d5cc722622a2183bbb22eef2093df7.tar.xz
openparsec-c068f22329d5cc722622a2183bbb22eef2093df7.zip
initial importHEADmain
Diffstat (limited to 'src/libraries/glm/gtx/fast_square_root.inl')
-rwxr-xr-xsrc/libraries/glm/gtx/fast_square_root.inl136
1 files changed, 136 insertions, 0 deletions
diff --git a/src/libraries/glm/gtx/fast_square_root.inl b/src/libraries/glm/gtx/fast_square_root.inl
new file mode 100755
index 0000000..b904381
--- /dev/null
+++ b/src/libraries/glm/gtx/fast_square_root.inl
@@ -0,0 +1,136 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// OpenGL Mathematics Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net)
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Created : 2006-01-04
+// Updated : 2011-10-14
+// Licence : This source is under MIT License
+// File : glm/gtx/fast_square_root.inl
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+namespace glm
+{
+ // fastSqrt
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType fastSqrt
+ (
+ genType const & x
+ )
+ {
+ GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'fastSqrt' only accept floating-point input");
+
+ return genType(1) / fastInverseSqrt(x);
+ }
+
+ VECTORIZE_VEC(fastSqrt)
+
+ // fastInversesqrt
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType fastInverseSqrt
+ (
+ genType const & x
+ )
+ {
+ genType tmp = x;
+ float xhalf = 0.5f * float(tmp);
+ uint i = *(uint*)&x;
+ i = 0x5f375a86 - (i >> 1);
+ //x = *(float*)&i;
+ //x = *((float*)(char*)&i);
+ tmp = detail::uif(i).f;
+ tmp = tmp * (1.5f - xhalf * tmp * tmp);
+ return genType(tmp);
+ }
+
+ VECTORIZE_VEC(fastInverseSqrt)
+
+ // fastLength
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType fastLength
+ (
+ genType const & x
+ )
+ {
+ return abs(x);
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER valType fastLength
+ (
+ detail::tvec2<valType> const & x
+ )
+ {
+ valType sqr = x.x * x.x + x.y * x.y;
+ return fastSqrt(sqr);
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER valType fastLength
+ (
+ detail::tvec3<valType> const & x
+ )
+ {
+ valType sqr = x.x * x.x + x.y * x.y + x.z * x.z;
+ return fastSqrt(sqr);
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER valType fastLength
+ (
+ detail::tvec4<valType> const & x
+ )
+ {
+ valType sqr = x.x * x.x + x.y * x.y + x.z * x.z + x.w * x.w;
+ return fastSqrt(sqr);
+ }
+
+ // fastDistance
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType fastDistance
+ (
+ genType const & x,
+ genType const & y
+ )
+ {
+ return fastLength(y - x);
+ }
+
+ // fastNormalize
+ template <typename genType>
+ GLM_FUNC_QUALIFIER genType fastNormalize
+ (
+ genType const & x
+ )
+ {
+ return x > genType(0) ? genType(1) : -genType(1);
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec2<valType> fastNormalize
+ (
+ detail::tvec2<valType> const & x
+ )
+ {
+ valType sqr = x.x * x.x + x.y * x.y;
+ return x * fastInverseSqrt(sqr);
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec3<valType> fastNormalize
+ (
+ detail::tvec3<valType> const & x
+ )
+ {
+ valType sqr = x.x * x.x + x.y * x.y + x.z * x.z;
+ return x * fastInverseSqrt(sqr);
+ }
+
+ template <typename valType>
+ GLM_FUNC_QUALIFIER detail::tvec4<valType> fastNormalize
+ (
+ detail::tvec4<valType> const & x
+ )
+ {
+ valType sqr = x.x * x.x + x.y * x.y + x.z * x.z + x.w * x.w;
+ return x * fastInverseSqrt(sqr);
+ }
+}//namespace glm