|
|
@@ -3,8 +3,61 @@
|
|
|
#include "../integer.hpp"
|
|
|
#include "../ext/vector_integer.hpp"
|
|
|
|
|
|
-namespace glm
|
|
|
+namespace glm{
|
|
|
+namespace detail
|
|
|
{
|
|
|
+ template<bool is_float, bool is_signed>
|
|
|
+ struct compute_roundMultiple {};
|
|
|
+
|
|
|
+ template<>
|
|
|
+ struct compute_roundMultiple<true, true>
|
|
|
+ {
|
|
|
+ template<typename genType>
|
|
|
+ GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple)
|
|
|
+ {
|
|
|
+ if (Source >= genType(0))
|
|
|
+ return Source - std::fmod(Source, Multiple);
|
|
|
+ else
|
|
|
+ {
|
|
|
+ genType Tmp = Source + genType(1);
|
|
|
+ return Tmp - std::fmod(Tmp, Multiple) - Multiple;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ template<>
|
|
|
+ struct compute_roundMultiple<false, false>
|
|
|
+ {
|
|
|
+ template<typename genType>
|
|
|
+ GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple)
|
|
|
+ {
|
|
|
+ if (Source >= genType(0))
|
|
|
+ return Source - Source % Multiple;
|
|
|
+ else
|
|
|
+ {
|
|
|
+ genType Tmp = Source + genType(1);
|
|
|
+ return Tmp - Tmp % Multiple - Multiple;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ template<>
|
|
|
+ struct compute_roundMultiple<false, true>
|
|
|
+ {
|
|
|
+ template<typename genType>
|
|
|
+ GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple)
|
|
|
+ {
|
|
|
+ if (Source >= genType(0))
|
|
|
+ return Source - Source % Multiple;
|
|
|
+ else
|
|
|
+ {
|
|
|
+ genType Tmp = Source + genType(1);
|
|
|
+ return Tmp - Tmp % Multiple - Multiple;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
+}//namespace detail
|
|
|
+
|
|
|
//////////////////
|
|
|
// ceilPowerOfTwo
|
|
|
|