diff --git a/glm/gtx/integer.hpp b/glm/gtx/integer.hpp index b33d7ea6..e0f10dcf 100644 --- a/glm/gtx/integer.hpp +++ b/glm/gtx/integer.hpp @@ -60,7 +60,8 @@ namespace glm //! Returns the log2 of x. Can be reliably using to compute mipmap count from the texture size. //! From GLM_GTX_integer extension. - unsigned int log2(unsigned int x); + template + genType log2(genType const & x); //! Returns the floor log2 of x. //! From GLM_GTX_integer extension. diff --git a/glm/gtx/integer.inl b/glm/gtx/integer.inl index e8be0e41..ecb4ac9c 100644 --- a/glm/gtx/integer.inl +++ b/glm/gtx/integer.inl @@ -53,23 +53,21 @@ namespace detail x += (x >> 16); return(x & 0x0000003f); } -}//namespace detail + template <> + struct compute_log2 + { + template + T operator() (T const & Value) const + { #if(GLM_COMPILER & (GLM_COMPILER_VC | GLM_COMPILER_GCC)) - -GLM_FUNC_QUALIFIER unsigned int log2(unsigned int x) -{ - return x <= 1 ? 0 : unsigned(32) - nlz(x - 1u); -} - + return Value <= T(1) ? T(0) : T(32) - nlz(Value - T(1)); #else - -GLM_FUNC_QUALIFIER unsigned int log2(unsigned int x) -{ - return unsigned(32) - nlz(x - 1u); -} - + return T(32) - nlz(Value - T(1)); #endif + } + }; +}//namespace detail // Henry Gordon Dietz: http://aggregate.org/MAGIC/ unsigned int floor_log2(unsigned int x)