mirror of
https://github.com/g-truc/glm.git
synced 2024-11-29 19:34:36 +00:00
- Added quaternion version of isnan and isinf #521
This commit is contained in:
parent
21a9d4ce18
commit
dc89797275
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -66,6 +66,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
|
||||
|
@ -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));
|
||||
|
Loading…
Reference in New Issue
Block a user