Fixed missing vec1 overload to length2 and distance2 functions #431

master
Christophe Riccio ago%!(EXTRA string=9 years)
parent 0699896927
commit 7aca47b19e
  1. 31
      glm/gtx/norm.hpp
  2. 83
      glm/gtx/norm.inl
  3. 1
      readme.md

@ -26,31 +26,18 @@ namespace glm
/// @addtogroup gtx_norm /// @addtogroup gtx_norm
/// @{ /// @{
//! Returns the squared length of x. /// Returns the squared length of x.
//! From GLM_GTX_norm extension. /// From GLM_GTX_norm extension.
template <typename T> template <typename T, precision P, template <typename, precision> class vecType>
GLM_FUNC_DECL T length2( GLM_FUNC_DECL T length2(
T const & x); vecType<T, P> const & x);
//! Returns the squared length of x.
//! From GLM_GTX_norm extension.
template <typename genType>
GLM_FUNC_DECL typename genType::value_type length2(
genType const & x);
//! Returns the squared distance between p0 and p1, i.e., length2(p0 - p1). /// Returns the squared distance between p0 and p1, i.e., length2(p0 - p1).
//! From GLM_GTX_norm extension. /// From GLM_GTX_norm extension.
template <typename T> template <typename T, precision P, template <typename, precision> class vecType>
GLM_FUNC_DECL T distance2( GLM_FUNC_DECL T distance2(
T const & p0, vecType<T, P> const & p0,
T const & p1); vecType<T, P> const & p1);
//! Returns the squared distance between p0 and p1, i.e., length2(p0 - p1).
//! From GLM_GTX_norm extension.
template <typename genType>
GLM_FUNC_DECL typename genType::value_type distance2(
genType const & p0,
genType const & p1);
//! Returns the L1 norm between x and y. //! Returns the L1 norm between x and y.
//! From GLM_GTX_norm extension. //! From GLM_GTX_norm extension.

@ -1,81 +1,44 @@
/// @ref gtx_norm /// @ref gtx_norm
/// @file glm/gtx/norm.inl /// @file glm/gtx/norm.inl
namespace glm namespace glm{
namespace detail
{ {
template <typename T> template <template <typename, precision> class vecType, typename T, precision P, bool Aligned>
GLM_FUNC_QUALIFIER T length2 struct compute_length2
(
T const & x
)
{ {
return x * x; GLM_FUNC_QUALIFIER static T call(vecType<T, P> const & v)
} {
return dot(v, v);
}
};
}//namespace detail
template <typename T, precision P> template <typename genType>
GLM_FUNC_QUALIFIER T length2 GLM_FUNC_QUALIFIER genType length2(genType x)
(
tvec2<T, P> const & x
)
{ {
return dot(x, x); GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'length2' accepts only floating-point inputs");
} return x * x;
template <typename T, precision P>
GLM_FUNC_QUALIFIER T length2
(
tvec3<T, P> const & x
)
{
return dot(x, x);
} }
template <typename T, precision P> template <typename T, precision P, template <typename, precision> class vecType>
GLM_FUNC_QUALIFIER T length2 GLM_FUNC_QUALIFIER T length2(vecType<T, P> const & v)
(
tvec4<T, P> const & x
)
{ {
return dot(x, x); GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'length2' accepts only floating-point inputs");
return detail::compute_length2<vecType, T, P, detail::is_aligned<P>::value>::call(v);
} }
template <typename T> template <typename T>
GLM_FUNC_QUALIFIER T distance2 GLM_FUNC_QUALIFIER T distance2(T p0, T p1)
(
T const & p0,
T const & p1
)
{
return length2(p1 - p0);
}
template <typename T, precision P>
GLM_FUNC_QUALIFIER T distance2
(
tvec2<T, P> const & p0,
tvec2<T, P> const & p1
)
{
return length2(p1 - p0);
}
template <typename T, precision P>
GLM_FUNC_QUALIFIER T distance2
(
tvec3<T, P> const & p0,
tvec3<T, P> const & p1
)
{ {
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'distance2' accepts only floating-point inputs");
return length2(p1 - p0); return length2(p1 - p0);
} }
template <typename T, precision P> template <typename T, precision P, template <typename, precision> class vecType>
GLM_FUNC_QUALIFIER T distance2 GLM_FUNC_QUALIFIER T distance2(vecType<T, P> const & p0, vecType<T, P> const & p1)
(
tvec4<T, P> const & p0,
tvec4<T, P> const & p1
)
{ {
GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, "'distance2' accepts only floating-point inputs");
return length2(p1 - p0); return length2(p1 - p0);
} }

@ -84,6 +84,7 @@ glm::mat4 camera(float Translate, glm::vec2 const & Rotate)
- Fixed long long warnings when using C++98 on GCC and Clang #482 - Fixed long long warnings when using C++98 on GCC and Clang #482
- Fixed sign with signed integer function on non-x86 architecture - Fixed sign with signed integer function on non-x86 architecture
- Fixed strict aliaing warnings #473 - Fixed strict aliaing warnings #473
- Fixed missing vec1 overload to length2 and distance2 functions #431
##### Deprecation: ##### Deprecation:
- Removed GLM_FORCE_SIZE_FUNC define - Removed GLM_FORCE_SIZE_FUNC define

Loading…
Cancel
Save