Browse Source

Merge branch '0.9.8'

Christophe Riccio 9 years ago
parent
commit
48ab7db993
4 changed files with 48 additions and 1 deletions
  1. 23 0
      glm/gtc/quaternion.hpp
  2. 16 0
      glm/gtc/quaternion.inl
  3. 8 0
      readme.md
  4. 1 1
      test/core/core_func_common.cpp

+ 23 - 0
glm/gtc/quaternion.hpp

@@ -368,6 +368,29 @@ namespace glm
 	/// @see gtc_quaternion
 	template <typename T, precision P>
 	GLM_FUNC_DECL tvec4<bool, P> notEqual(tquat<T, P> const & x, tquat<T, P> const & y);
+
+	/// Returns true if x holds a NaN (not a number)
+	/// representation in the underlying implementation's set of
+	/// floating point representations. Returns false otherwise,
+	/// including for implementations with no NaN
+	/// representations.
+	/// 
+	/// /!\ When using compiler fast math, this function may fail.
+	/// 
+	/// @tparam genType Floating-point scalar or vector types.
+	template <typename T, precision P>
+	GLM_FUNC_DECL tvec4<bool, P> isnan(tquat<T, P> const & x);
+
+	/// Returns true if x holds a positive infinity or negative
+	/// infinity representation in the underlying implementation's
+	/// set of floating point representations. Returns false
+	/// otherwise, including for implementations with no infinity
+	/// representations.
+	/// 
+	/// @tparam genType Floating-point scalar or vector types.
+	template <typename T, precision P>
+	GLM_FUNC_DECL tvec4<bool, P> isinf(tquat<T, P> const & x);
+
 	/// @}
 } //namespace glm
 

+ 16 - 0
glm/gtc/quaternion.inl

@@ -777,6 +777,22 @@ namespace detail
 			Result[i] = x[i] != y[i];
 		return Result;
 	}
+
+	template <typename T, precision P>
+	GLM_FUNC_QUALIFIER tvec4<bool, P> isnan(tquat<T, P> const& q)
+	{
+		GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'isnan' only accept floating-point inputs");
+
+		return tvec4<bool, P>(isnan(q.x), isnan(q.y), isnan(q.z), isnan(q.w));
+	}
+
+	template <typename T, precision P>
+	GLM_FUNC_QUALIFIER tvec4<bool, P> isinf(tquat<T, P> const& q)
+	{
+		GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'isinf' only accept floating-point inputs");
+
+		return tvec4<bool, P>(isinf(q.x), isinf(q.y), isinf(q.z), isinf(q.w));
+	}
 }//namespace glm
 
 #if GLM_ARCH != GLM_ARCH_PURE && GLM_HAS_UNRESTRICTED_UNIONS

+ 8 - 0
readme.md

@@ -78,6 +78,7 @@ glm::mat4 camera(float Translate, glm::vec2 const & Rotate)
 - Added 'aligned' qualifiers
 - Added GTC_type_aligned with aligned *vec* types
 - Added GTC_functions extension
+- Added quaternion version of isnan and isinf #521
 
 ##### Improvements:
 - Improved SIMD and swizzle operators interactions with GCC and Clang #474
@@ -108,6 +109,7 @@ glm::mat4 camera(float Translate, glm::vec2 const & Rotate)
 - Deprecated GLM_GTX_simd_mat4 extension
 - Deprecated GLM_GTX_simd_quat extension
 
+--------------------------------------------------------------------------------
 #### [GLM 0.9.7.6](https://github.com/g-truc/glm/releases/tag/0.9.7.6) - 2016-07-16
 ##### Improvements:
 - Added pkg-config file #509
@@ -120,6 +122,7 @@ glm::mat4 camera(float Translate, glm::vec2 const & Rotate)
 - Fixed long long warnings when using C++98 on GCC and Clang #482
 - Fixed scalar reciprocal functions (GTC_reciprocal) #520
 
+--------------------------------------------------------------------------------
 #### [GLM 0.9.7.5](https://github.com/g-truc/glm/releases/tag/0.9.7.5) - 2016-05-24
 ##### Improvements:
 - Added Visual C++ Clang toolset detection
@@ -133,6 +136,7 @@ glm::mat4 camera(float Translate, glm::vec2 const & Rotate)
 - Fixed GTX_extended_min_max filename typo #386
 - Fixed intersectRayTriangle to not do any unintentional backface culling
 
+--------------------------------------------------------------------------------
 #### [GLM 0.9.7.4](https://github.com/g-truc/glm/releases/tag/0.9.7.4) - 2016-03-19
 ##### Fixes:
 - Fixed asinh and atanh warning with C++98 STL #484
@@ -143,6 +147,7 @@ glm::mat4 camera(float Translate, glm::vec2 const & Rotate)
 - Fixed missing GLM_PLATFORM_CYGWIN declaration #495
 - Fixed various undefined reference errors #490
 
+--------------------------------------------------------------------------------
 #### [GLM 0.9.7.3](https://github.com/g-truc/glm/releases/tag/0.9.7.3) - 2016-02-21
 ##### Improvements:
 - Added AVX512 detection
@@ -153,6 +158,7 @@ glm::mat4 camera(float Translate, glm::vec2 const & Rotate)
 - Fixed Clang build on Windows #479
 - Fixed 64 bits constants warnings on GCC #463
 
+--------------------------------------------------------------------------------
 #### [GLM 0.9.7.2](https://github.com/g-truc/glm/releases/tag/0.9.7.2) - 2016-01-03
 ##### Fixes:
 - Fixed GTC_round floorMultiple/ceilMultiple #412
@@ -166,6 +172,7 @@ glm::mat4 camera(float Translate, glm::vec2 const & Rotate)
 - Fixed missing unary + operator #435
 - Fixed Cygwin build errors when using C++11 #405
 
+--------------------------------------------------------------------------------
 #### [GLM 0.9.7.1](https://github.com/g-truc/glm/releases/tag/0.9.7.1) - 2015-09-07
 ##### Improvements:
 - Improved constexpr for constant functions coverage #198
@@ -182,6 +189,7 @@ glm::mat4 camera(float Translate, glm::vec2 const & Rotate)
 - Fixed builtin bitscan never being used #392
 - Removed unused func_noise.* files #398
 
+--------------------------------------------------------------------------------
 #### [GLM 0.9.7.0](https://github.com/g-truc/glm/releases/tag/0.9.7.0) - 2015-08-02
 ##### Features:
 - Added GTC_color_space: convertLinearToSRGB and convertSRGBToLinear functions

+ 1 - 1
test/core/core_func_common.cpp

@@ -1212,7 +1212,7 @@ int main()
 	glm::int32 const c(1);
 	glm::int32 const d = ~c;
 
-#	if GLM_ARCH & GLM_ARCH_AVX_BIT
+#	if GLM_ARCH & GLM_ARCH_AVX_BIT && GLM_HAS_UNRESTRICTED_UNIONS
 	glm_vec4 const A = _mm_set_ps(4, 3, 2, 1);
 	glm_vec4 const B = glm_vec4_swizzle_xyzw(A);
 	glm_vec4 const C = _mm_permute_ps(A, _MM_SHUFFLE(3, 2, 1, 0));