diff --git a/glm/gtx/multiple.inl b/glm/gtx/multiple.inl index a8c2050f..bdf90280 100644 --- a/glm/gtx/multiple.inl +++ b/glm/gtx/multiple.inl @@ -22,13 +22,13 @@ namespace glm genType const & Multiple ) { - assert(genType(0) <= Multiple); - - genType SourceSign = sign(Source); - genType SourceAbs = abs(Source); - - genType Tmp = SourceAbs % Multiple; - return (Tmp ? SourceAbs + Multiple - Tmp : SourceAbs) * SourceSign; + if (Source > genType(0)) + { + genType Tmp = Source - genType(1); + return Tmp + (Multiple - (Tmp % Multiple)); + } + else + return Source + (-Source % Multiple); } template <> @@ -95,8 +95,13 @@ namespace glm genType const & Multiple ) { - genType Tmp = Source % Multiple; - return Tmp ? Source - Tmp : Source; + if (Source >= 0) + return Source - Source % Multiple; + else + { + genType Tmp = Source + 1; + return Tmp - Tmp % Multiple - Multiple; + } } template <> diff --git a/test/core/core_type_cast.cpp b/test/core/core_type_cast.cpp index 47b79333..cc5c600c 100644 --- a/test/core/core_type_cast.cpp +++ b/test/core/core_type_cast.cpp @@ -27,8 +27,8 @@ int test_vec2_cast() glm::mediump_vec2 G = static_cast(A); glm::highp_vec2 H = static_cast(A); - my_vec2 I; - glm::vec2 J = static_cast(I); + //my_vec2 I; + //glm::vec2 J = static_cast(I); int Error(0); diff --git a/test/gtx/gtx_multiple.cpp b/test/gtx/gtx_multiple.cpp index 06ca02e6..ea1c4592 100644 --- a/test/gtx/gtx_multiple.cpp +++ b/test/gtx/gtx_multiple.cpp @@ -14,16 +14,11 @@ int test_higher() { int Error(0); - int Higher0 = glm::higherMultiple(-5, 4); - Error += Higher0 == -8 ? 0 : 1; - int Higher1 = glm::higherMultiple(-4, 4); - Error += Higher1 == -4 ? 0 : 1; - int Higher2 = glm::higherMultiple(-3, 4); - Error += Higher2 == -4 ? 0 : 1; - int Higher3 = glm::higherMultiple(-2, 4); - Error += Higher3 == -4 ? 0 : 1; - int Higher4 = glm::higherMultiple(-1, 4); - Error += Higher4 == -4 ? 0 : 1; + Error += glm::higherMultiple(-5, 4) == -4 ? 0 : 1; + Error += glm::higherMultiple(-4, 4) == -4 ? 0 : 1; + Error += glm::higherMultiple(-3, 4) == 0 ? 0 : 1; + Error += glm::higherMultiple(-2, 4) == 0 ? 0 : 1; + Error += glm::higherMultiple(-1, 4) == 0 ? 0 : 1; Error += glm::higherMultiple(0, 4) == 0 ? 0 : 1; Error += glm::higherMultiple(1, 4) == 4 ? 0 : 1; Error += glm::higherMultiple(2, 4) == 4 ? 0 : 1; @@ -42,12 +37,15 @@ int test_Lower() { int Error(0); - Error += glm::lowerMultiple(-5, 4) == -4 ? 0 : 1; + Error += glm::lowerMultiple(-5, 4) == -8 ? 0 : 1; Error += glm::lowerMultiple(-4, 4) == -4 ? 0 : 1; - Error += glm::lowerMultiple(-3, 4) == 0 ? 0 : 1; - Error += glm::lowerMultiple(-2, 4) == 0 ? 0 : 1; - Error += glm::lowerMultiple(-1, 4) == 0 ? 0 : 1; + Error += glm::lowerMultiple(-3, 4) == -4 ? 0 : 1; + Error += glm::lowerMultiple(-2, 4) == -4 ? 0 : 1; + Error += glm::lowerMultiple(-1, 4) == -4 ? 0 : 1; Error += glm::lowerMultiple(0, 4) == 0 ? 0 : 1; + Error += glm::lowerMultiple(1, 4) == 0 ? 0 : 1; + Error += glm::lowerMultiple(2, 4) == 0 ? 0 : 1; + Error += glm::lowerMultiple(3, 4) == 0 ? 0 : 1; Error += glm::lowerMultiple(4, 4) == 4 ? 0 : 1; Error += glm::lowerMultiple(5, 4) == 4 ? 0 : 1; Error += glm::lowerMultiple(6, 4) == 4 ? 0 : 1;