Browse Source

Fixed fastDistance ambiguity #215

Christophe Riccio 11 years ago
parent
commit
7fe8a1944c
4 changed files with 51 additions and 3 deletions
  1. 1 2
      glm/detail/func_geometric.inl
  2. 31 1
      glm/gtx/fast_square_root.inl
  3. 1 0
      readme.txt
  4. 18 0
      test/gtx/gtx_fast_square_root.cpp

+ 1 - 2
glm/detail/func_geometric.inl

@@ -92,8 +92,7 @@ namespace detail
 	{
 	{
 		GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'length' only accept floating-point inputs");
 		GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'length' only accept floating-point inputs");
 
 
-		genType sqr = x * x;
-		return sqrt(sqr);
+		return abs(x);
 	}
 	}
 
 
 	template <typename T, precision P>
 	template <typename T, precision P>

+ 31 - 1
glm/gtx/fast_square_root.inl

@@ -101,13 +101,43 @@ namespace glm
 	template <typename genType>
 	template <typename genType>
 	GLM_FUNC_QUALIFIER genType fastDistance
 	GLM_FUNC_QUALIFIER genType fastDistance
 	(
 	(
-		genType const & x, 
+		genType const & x,
 		genType const & y
 		genType const & y
 	)
 	)
 	{
 	{
 		return fastLength(y - x);
 		return fastLength(y - x);
 	}
 	}
 
 
+	template <typename valType, precision P>
+	GLM_FUNC_QUALIFIER valType fastDistance
+	(
+		detail::tvec2<valType, P> const & x,
+		detail::tvec2<valType, P> const & y
+	)
+	{
+		return fastLength(y - x);
+	}
+
+	template <typename valType, precision P>
+	GLM_FUNC_QUALIFIER valType fastDistance
+	(
+		detail::tvec3<valType, P> const & x,
+		detail::tvec3<valType, P> const & y
+	)
+	{
+		return fastLength(y - x);
+	}
+
+	template <typename valType, precision P>
+	GLM_FUNC_QUALIFIER valType fastDistance
+	(
+		detail::tvec4<valType, P> const & x,
+		detail::tvec4<valType, P> const & y
+	)
+	{
+		return fastLength(y - x);
+	}
+
 	// fastNormalize
 	// fastNormalize
 	template <typename genType>
 	template <typename genType>
 	GLM_FUNC_QUALIFIER genType fastNormalize
 	GLM_FUNC_QUALIFIER genType fastNormalize

+ 1 - 0
readme.txt

@@ -50,6 +50,7 @@ GLM 0.9.5.4: 2014-0X-XX
 - Fixed orientate3 function #207
 - Fixed orientate3 function #207
 - Fixed lerp when cosTheta is close to 1 in quaternion slerp #210
 - Fixed lerp when cosTheta is close to 1 in quaternion slerp #210
 - Added GTX_io for io with <iostream> #144
 - Added GTX_io for io with <iostream> #144
+- Fixed fastDistance ambiguity #215
 
 
 ================================================================================
 ================================================================================
 GLM 0.9.5.3: 2014-04-02
 GLM 0.9.5.3: 2014-04-02

+ 18 - 0
test/gtx/gtx_fast_square_root.cpp

@@ -27,11 +27,29 @@ int test_fastInverseSqrt()
 	return 0;
 	return 0;
 }
 }
 
 
+int test_fastDistance()
+{
+	int Error(0);
+
+	glm::mediump_f32 A = glm::fastDistance(glm::mediump_f32(0.0f), glm::mediump_f32(1.0f));
+	glm::mediump_f32 B = glm::fastDistance(glm::mediump_f32vec2(0.0f), glm::mediump_f32vec2(1.0f, 0.0f));
+	glm::mediump_f32 C = glm::fastDistance(glm::mediump_f32vec3(0.0f), glm::mediump_f32vec3(1.0f, 0.0f, 0.0f));
+	glm::mediump_f32 D = glm::fastDistance(glm::mediump_f32vec4(0.0f), glm::mediump_f32vec4(1.0f, 0.0f, 0.0f, 0.0f));
+
+	Error += glm::epsilonEqual(A, glm::mediump_f32(1.0f), glm::mediump_f32(0.01f)) ? 0 : 1;
+	Error += glm::epsilonEqual(B, glm::mediump_f32(1.0f), glm::mediump_f32(0.01f)) ? 0 : 1;
+	Error += glm::epsilonEqual(C, glm::mediump_f32(1.0f), glm::mediump_f32(0.01f)) ? 0 : 1;
+	Error += glm::epsilonEqual(D, glm::mediump_f32(1.0f), glm::mediump_f32(0.01f)) ? 0 : 1;
+
+	return Error;
+}
+
 int main()
 int main()
 {
 {
 	int Error(0);
 	int Error(0);
 
 
 	Error += test_fastInverseSqrt();
 	Error += test_fastInverseSqrt();
+	Error += test_fastDistance();
 
 
 	return Error;
 	return Error;
 }
 }