|
|
@@ -8,6 +8,44 @@
|
|
|
#include "_vectorize.hpp"
|
|
|
#include <limits>
|
|
|
|
|
|
+namespace glm
|
|
|
+{
|
|
|
+ // abs
|
|
|
+ template <>
|
|
|
+ GLM_FUNC_QUALIFIER int32 abs(int32 x)
|
|
|
+ {
|
|
|
+ int32 const y = x >> 31;
|
|
|
+ return (x ^ y) - y;
|
|
|
+ }
|
|
|
+
|
|
|
+ // round
|
|
|
+# if GLM_HAS_CXX11_STL
|
|
|
+ using ::std::round;
|
|
|
+# else
|
|
|
+ template <typename genType>
|
|
|
+ GLM_FUNC_QUALIFIER genType round(genType x)
|
|
|
+ {
|
|
|
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'round' only accept floating-point inputs");
|
|
|
+
|
|
|
+ return x < static_cast<genType>(0) ? static_cast<genType>(int(x - static_cast<genType>(0.5))) : static_cast<genType>(int(x + static_cast<genType>(0.5)));
|
|
|
+ }
|
|
|
+# endif
|
|
|
+
|
|
|
+ // trunc
|
|
|
+# if GLM_HAS_CXX11_STL
|
|
|
+ using ::std::trunc;
|
|
|
+# else
|
|
|
+ template <typename genType>
|
|
|
+ GLM_FUNC_QUALIFIER genType trunc(genType x)
|
|
|
+ {
|
|
|
+ GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'trunc' only accept floating-point inputs");
|
|
|
+
|
|
|
+ return x < static_cast<genType>(0) ? -floor(-x) : floor(x);
|
|
|
+ }
|
|
|
+# endif
|
|
|
+
|
|
|
+}//namespace glm
|
|
|
+
|
|
|
namespace glm{
|
|
|
namespace detail
|
|
|
{
|
|
|
@@ -152,7 +190,7 @@ namespace detail
|
|
|
{
|
|
|
GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x)
|
|
|
{
|
|
|
- return detail::functor1<T, T, P, vecType>::call(floor, x);
|
|
|
+ return detail::functor1<T, T, P, vecType>::call(std::floor, x);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
@@ -161,7 +199,7 @@ namespace detail
|
|
|
{
|
|
|
GLM_FUNC_QUALIFIER static vecType<T, P> call(vecType<T, P> const & x)
|
|
|
{
|
|
|
- return detail::functor1<T, T, P, vecType>::call(ceil, x);
|
|
|
+ return detail::functor1<T, T, P, vecType>::call(std::ceil, x);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
@@ -203,14 +241,6 @@ namespace detail
|
|
|
};
|
|
|
}//namespace detail
|
|
|
|
|
|
- // abs
|
|
|
- template <>
|
|
|
- GLM_FUNC_QUALIFIER int32 abs(int32 x)
|
|
|
- {
|
|
|
- int32 const y = x >> 31;
|
|
|
- return (x ^ y) - y;
|
|
|
- }
|
|
|
-
|
|
|
template <typename genFIType>
|
|
|
GLM_FUNC_QUALIFIER genFIType abs(genFIType x)
|
|
|
{
|
|
|
@@ -254,19 +284,6 @@ namespace detail
|
|
|
return detail::compute_floor<T, P, vecType>::call(x);
|
|
|
}
|
|
|
|
|
|
- // trunc
|
|
|
-# if GLM_HAS_CXX11_STL
|
|
|
- using ::std::trunc;
|
|
|
-# else
|
|
|
- template <typename genType>
|
|
|
- GLM_FUNC_QUALIFIER genType trunc(genType x)
|
|
|
- {
|
|
|
- GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'trunc' only accept floating-point inputs");
|
|
|
-
|
|
|
- return x < static_cast<genType>(0) ? -floor(-x) : floor(x);
|
|
|
- }
|
|
|
-# endif
|
|
|
-
|
|
|
template <typename T, precision P, template <typename, precision> class vecType>
|
|
|
GLM_FUNC_QUALIFIER vecType<T, P> trunc(vecType<T, P> const & x)
|
|
|
{
|
|
|
@@ -274,19 +291,6 @@ namespace detail
|
|
|
return detail::compute_trunc<T, P, vecType>::call(x);
|
|
|
}
|
|
|
|
|
|
- // round
|
|
|
-# if GLM_HAS_CXX11_STL
|
|
|
- using ::std::round;
|
|
|
-# else
|
|
|
- template <typename genType>
|
|
|
- GLM_FUNC_QUALIFIER genType round(genType x)
|
|
|
- {
|
|
|
- GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, "'round' only accept floating-point inputs");
|
|
|
-
|
|
|
- return x < static_cast<genType>(0) ? static_cast<genType>(int(x - static_cast<genType>(0.5))) : static_cast<genType>(int(x + static_cast<genType>(0.5)));
|
|
|
- }
|
|
|
-# endif
|
|
|
-
|
|
|
template <typename T, precision P, template <typename, precision> class vecType>
|
|
|
GLM_FUNC_QUALIFIER vecType<T, P> round(vecType<T, P> const & x)
|
|
|
{
|