diff --git a/glm/gtc/quaternion.hpp b/glm/gtc/quaternion.hpp index 85ee7efc..b4762a87 100644 --- a/glm/gtc/quaternion.hpp +++ b/glm/gtc/quaternion.hpp @@ -368,6 +368,29 @@ namespace glm /// @see gtc_quaternion template GLM_FUNC_DECL tvec4 notEqual(tquat const & x, tquat 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 + GLM_FUNC_DECL tvec4 isnan(tquat 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 + GLM_FUNC_DECL tvec4 isinf(tquat const & x); + /// @} } //namespace glm diff --git a/glm/gtc/quaternion.inl b/glm/gtc/quaternion.inl index 06257994..60cae12f 100644 --- a/glm/gtc/quaternion.inl +++ b/glm/gtc/quaternion.inl @@ -777,6 +777,22 @@ namespace detail Result[i] = x[i] != y[i]; return Result; } + + template + GLM_FUNC_QUALIFIER tvec4 isnan(tquat const& q) + { + GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isnan' only accept floating-point inputs"); + + return tvec4(isnan(q.x), isnan(q.y), isnan(q.z), isnan(q.w)); + } + + template + GLM_FUNC_QUALIFIER tvec4 isinf(tquat const& q) + { + GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isinf' only accept floating-point inputs"); + + return tvec4(isinf(q.x), isinf(q.y), isinf(q.z), isinf(q.w)); + } }//namespace glm #if GLM_ARCH != GLM_ARCH_PURE && GLM_HAS_UNRESTRICTED_UNIONS diff --git a/readme.md b/readme.md index bfbf5343..d1b15301 100644 --- a/readme.md +++ b/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 diff --git a/test/core/core_func_common.cpp b/test/core/core_func_common.cpp index 80b7c01c..533c1ff9 100644 --- a/test/core/core_func_common.cpp +++ b/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));