|
|
@@ -80,7 +80,7 @@ namespace detail
|
|
|
template<length_t L, typename T, typename U, qualifier Q, bool Aligned>
|
|
|
struct compute_mix_vector
|
|
|
{
|
|
|
- GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, U, Q> const& a)
|
|
|
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, U, Q> const& a)
|
|
|
{
|
|
|
GLM_STATIC_ASSERT(std::numeric_limits<U>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'mix' only accept floating-point inputs for the interpolator a");
|
|
|
|
|
|
@@ -91,7 +91,7 @@ namespace detail
|
|
|
template<length_t L, typename T, qualifier Q, bool Aligned>
|
|
|
struct compute_mix_vector<L, T, bool, Q, Aligned>
|
|
|
{
|
|
|
- GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, bool, Q> const& a)
|
|
|
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, bool, Q> const& a)
|
|
|
{
|
|
|
vec<L, T, Q> Result;
|
|
|
for(length_t i = 0; i < x.length(); ++i)
|
|
|
@@ -103,7 +103,7 @@ namespace detail
|
|
|
template<length_t L, typename T, typename U, qualifier Q, bool Aligned>
|
|
|
struct compute_mix_scalar
|
|
|
{
|
|
|
- GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& y, U const& a)
|
|
|
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& y, U const& a)
|
|
|
{
|
|
|
GLM_STATIC_ASSERT(std::numeric_limits<U>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'mix' only accept floating-point inputs for the interpolator a");
|
|
|
|
|
|
@@ -114,7 +114,7 @@ namespace detail
|
|
|
template<length_t L, typename T, qualifier Q, bool Aligned>
|
|
|
struct compute_mix_scalar<L, T, bool, Q, Aligned>
|
|
|
{
|
|
|
- GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& y, bool const& a)
|
|
|
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& y, bool const& a)
|
|
|
{
|
|
|
return a ? y : x;
|
|
|
}
|
|
|
@@ -123,7 +123,7 @@ namespace detail
|
|
|
template<typename T, typename U>
|
|
|
struct compute_mix
|
|
|
{
|
|
|
- GLM_FUNC_QUALIFIER static T call(T const& x, T const& y, U const& a)
|
|
|
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR static T call(T const& x, T const& y, U const& a)
|
|
|
{
|
|
|
GLM_STATIC_ASSERT(std::numeric_limits<U>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'mix' only accept floating-point inputs for the interpolator a");
|
|
|
|
|
|
@@ -134,7 +134,7 @@ namespace detail
|
|
|
template<typename T>
|
|
|
struct compute_mix<T, bool>
|
|
|
{
|
|
|
- GLM_FUNC_QUALIFIER static T call(T const& x, T const& y, bool const& a)
|
|
|
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR static T call(T const& x, T const& y, bool const& a)
|
|
|
{
|
|
|
return a ? y : x;
|
|
|
}
|
|
|
@@ -143,7 +143,7 @@ namespace detail
|
|
|
template<length_t L, typename T, qualifier Q, bool isFloat, bool Aligned>
|
|
|
struct compute_sign
|
|
|
{
|
|
|
- GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x)
|
|
|
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<L, T, Q> call(vec<L, T, Q> const& x)
|
|
|
{
|
|
|
return vec<L, T, Q>(glm::lessThan(vec<L, T, Q>(0), x)) - vec<L, T, Q>(glm::lessThan(x, vec<L, T, Q>(0)));
|
|
|
}
|
|
|
@@ -153,7 +153,7 @@ namespace detail
|
|
|
template<length_t L, typename T, qualifier Q, bool Aligned>
|
|
|
struct compute_sign<L, T, Q, false, Aligned>
|
|
|
{
|
|
|
- GLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x)
|
|
|
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<L, T, Q> call(vec<L, T, Q> const& x)
|
|
|
{
|
|
|
T const Shift(static_cast<T>(sizeof(T) * 8 - 1));
|
|
|
vec<L, T, Q> const y(vec<L, typename detail::make_unsigned<T>::type, Q>(-x) >> typename detail::make_unsigned<T>::type(Shift));
|
|
|
@@ -281,7 +281,7 @@ namespace detail
|
|
|
// sign
|
|
|
// fast and works for any type
|
|
|
template<typename genFIType>
|
|
|
- GLM_FUNC_QUALIFIER genFIType sign(genFIType x)
|
|
|
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR genFIType sign(genFIType x)
|
|
|
{
|
|
|
GLM_STATIC_ASSERT(
|
|
|
std::numeric_limits<genFIType>::is_iec559 || (std::numeric_limits<genFIType>::is_signed && std::numeric_limits<genFIType>::is_integer),
|
|
|
@@ -292,7 +292,7 @@ namespace detail
|
|
|
}
|
|
|
|
|
|
template<length_t L, typename T, qualifier Q>
|
|
|
- GLM_FUNC_QUALIFIER vec<L, T, Q> sign(vec<L, T, Q> const& x)
|
|
|
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> sign(vec<L, T, Q> const& x)
|
|
|
{
|
|
|
GLM_STATIC_ASSERT(
|
|
|
std::numeric_limits<T>::is_iec559 || (std::numeric_limits<T>::is_signed && std::numeric_limits<T>::is_integer),
|
|
|
@@ -523,19 +523,19 @@ namespace detail
|
|
|
}
|
|
|
|
|
|
template<typename genTypeT, typename genTypeU>
|
|
|
- GLM_FUNC_QUALIFIER genTypeT mix(genTypeT x, genTypeT y, genTypeU a)
|
|
|
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR genTypeT mix(genTypeT x, genTypeT y, genTypeU a)
|
|
|
{
|
|
|
return detail::compute_mix<genTypeT, genTypeU>::call(x, y, a);
|
|
|
}
|
|
|
|
|
|
template<length_t L, typename T, typename U, qualifier Q>
|
|
|
- GLM_FUNC_QUALIFIER vec<L, T, Q> mix(vec<L, T, Q> const& x, vec<L, T, Q> const& y, U a)
|
|
|
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> mix(vec<L, T, Q> const& x, vec<L, T, Q> const& y, U a)
|
|
|
{
|
|
|
return detail::compute_mix_scalar<L, T, U, Q, detail::is_aligned<Q>::value>::call(x, y, a);
|
|
|
}
|
|
|
|
|
|
template<length_t L, typename T, typename U, qualifier Q>
|
|
|
- GLM_FUNC_QUALIFIER vec<L, T, Q> mix(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, U, Q> const& a)
|
|
|
+ GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> mix(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, U, Q> const& a)
|
|
|
{
|
|
|
return detail::compute_mix_vector<L, T, U, Q, detail::is_aligned<Q>::value>::call(x, y, a);
|
|
|
}
|