|
|
|
@ -15,51 +15,72 @@ namespace glm |
|
|
|
|
////////////////////// |
|
|
|
|
// higherMultiple |
|
|
|
|
|
|
|
|
|
template <typename genType> |
|
|
|
|
template <typename genType> |
|
|
|
|
GLM_FUNC_QUALIFIER genType higherMultiple |
|
|
|
|
( |
|
|
|
|
genType const & Source, |
|
|
|
|
genType const & Source, |
|
|
|
|
genType const & Multiple |
|
|
|
|
) |
|
|
|
|
{ |
|
|
|
|
genType Tmp = Source % Multiple; |
|
|
|
|
return Tmp ? Source + Multiple - Tmp : Source; |
|
|
|
|
assert(genType(0) <= Multiple); |
|
|
|
|
|
|
|
|
|
genType SourceSign = sign(Source); |
|
|
|
|
genType SourceAbs = abs(Source); |
|
|
|
|
|
|
|
|
|
genType Tmp = SourceAbs % Multiple; |
|
|
|
|
return (Tmp ? SourceAbs + Multiple - Tmp : SourceAbs) * SourceSign; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template <> |
|
|
|
|
template <> |
|
|
|
|
GLM_FUNC_QUALIFIER detail::half higherMultiple |
|
|
|
|
( |
|
|
|
|
detail::half const & SourceH, |
|
|
|
|
detail::half const & SourceH, |
|
|
|
|
detail::half const & MultipleH |
|
|
|
|
) |
|
|
|
|
{ |
|
|
|
|
float Source = SourceH.toFloat(); |
|
|
|
|
float Multiple = MultipleH.toFloat(); |
|
|
|
|
|
|
|
|
|
int Tmp = int(float(Source)) % int(Multiple); |
|
|
|
|
return detail::half(Tmp ? Source + Multiple - float(Tmp) : Source); |
|
|
|
|
assert(float(0) <= Multiple); |
|
|
|
|
|
|
|
|
|
float SourceSign = sign(Source); |
|
|
|
|
float SourceAbs = abs(Source); |
|
|
|
|
|
|
|
|
|
int Tmp = int(float(SourceAbs)) % int(Multiple); |
|
|
|
|
return detail::half( |
|
|
|
|
(Tmp ? SourceAbs + Multiple - float(Tmp) : SourceAbs) * SourceSign); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template <> |
|
|
|
|
template <> |
|
|
|
|
GLM_FUNC_QUALIFIER float higherMultiple |
|
|
|
|
( |
|
|
|
|
float const & Source, |
|
|
|
|
float const & Source, |
|
|
|
|
float const & Multiple |
|
|
|
|
) |
|
|
|
|
{ |
|
|
|
|
int Tmp = int(Source) % int(Multiple); |
|
|
|
|
return Tmp ? Source + Multiple - float(Tmp) : Source; |
|
|
|
|
assert(float(0) <= Multiple); |
|
|
|
|
|
|
|
|
|
float SourceSign = sign(Source); |
|
|
|
|
float SourceAbs = abs(Source); |
|
|
|
|
|
|
|
|
|
int Tmp = int(SourceAbs) % int(Multiple); |
|
|
|
|
return (Tmp ? SourceAbs + Multiple - float(Tmp) : SourceAbs) * SourceSign; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template <> |
|
|
|
|
template <> |
|
|
|
|
GLM_FUNC_QUALIFIER double higherMultiple |
|
|
|
|
( |
|
|
|
|
double const & Source, |
|
|
|
|
double const & Source, |
|
|
|
|
double const & Multiple |
|
|
|
|
) |
|
|
|
|
{ |
|
|
|
|
long Tmp = long(Source) % long(Multiple); |
|
|
|
|
return Tmp ? Source + Multiple - double(Tmp) : Source; |
|
|
|
|
assert(double(0) <= Multiple); |
|
|
|
|
|
|
|
|
|
double SourceSign = sign(Source); |
|
|
|
|
double SourceAbs = abs(Source); |
|
|
|
|
|
|
|
|
|
long Tmp = long(SourceAbs) % long(Multiple); |
|
|
|
|
return (Tmp ? SourceAbs + Multiple - double(Tmp) : SourceAbs) * SourceSign; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
VECTORIZE_VEC_VEC(higherMultiple) |
|
|
|
@ -67,10 +88,10 @@ namespace glm |
|
|
|
|
////////////////////// |
|
|
|
|
// lowerMultiple |
|
|
|
|
|
|
|
|
|
template <typename genType> |
|
|
|
|
template <typename genType> |
|
|
|
|
GLM_FUNC_QUALIFIER genType lowerMultiple |
|
|
|
|
( |
|
|
|
|
genType const & Source, |
|
|
|
|
genType const & Source, |
|
|
|
|
genType const & Multiple |
|
|
|
|
) |
|
|
|
|
{ |
|
|
|
@ -78,38 +99,44 @@ namespace glm |
|
|
|
|
return Tmp ? Source - Tmp : Source; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template <> |
|
|
|
|
template <> |
|
|
|
|
GLM_FUNC_QUALIFIER detail::half lowerMultiple |
|
|
|
|
( |
|
|
|
|
detail::half const & SourceH, |
|
|
|
|
detail::half const & SourceH, |
|
|
|
|
detail::half const & MultipleH |
|
|
|
|
) |
|
|
|
|
{ |
|
|
|
|
float Source = SourceH.toFloat(); |
|
|
|
|
float Multiple = MultipleH.toFloat(); |
|
|
|
|
|
|
|
|
|
assert(float(0) <= Multiple); |
|
|
|
|
|
|
|
|
|
int Tmp = int(float(Source)) % int(float(Multiple)); |
|
|
|
|
return detail::half(Tmp ? Source - float(Tmp) : Source); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template <> |
|
|
|
|
template <> |
|
|
|
|
GLM_FUNC_QUALIFIER float lowerMultiple |
|
|
|
|
( |
|
|
|
|
float const & Source, |
|
|
|
|
float const & Source, |
|
|
|
|
float const & Multiple |
|
|
|
|
) |
|
|
|
|
{ |
|
|
|
|
assert(float(0) <= Multiple); |
|
|
|
|
|
|
|
|
|
int Tmp = int(Source) % int(Multiple); |
|
|
|
|
return Tmp ? Source - float(Tmp) : Source; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
template <> |
|
|
|
|
template <> |
|
|
|
|
GLM_FUNC_QUALIFIER double lowerMultiple |
|
|
|
|
( |
|
|
|
|
double const & Source, |
|
|
|
|
double const & Source, |
|
|
|
|
double const & Multiple |
|
|
|
|
) |
|
|
|
|
{ |
|
|
|
|
assert(double(0) <= Multiple); |
|
|
|
|
|
|
|
|
|
long Tmp = long(Source) % long(Multiple); |
|
|
|
|
return Tmp ? Source - double(Tmp) : Source; |
|
|
|
|
} |
|
|
|
|