Browse Source

Added integer log2 implementation with compute_log2 class

Christophe Riccio 14 years ago
parent
commit
742013f6d3
2 changed files with 13 additions and 14 deletions
  1. 2 1
      glm/gtx/integer.hpp
  2. 11 13
      glm/gtx/integer.inl

+ 2 - 1
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 <typename genType>
+	genType log2(genType const & x);
 
 	//! Returns the floor log2 of x.
 	//! From GLM_GTX_integer extension.

+ 11 - 13
glm/gtx/integer.inl

@@ -53,23 +53,21 @@ namespace detail
 		x += (x >> 16);
 		return(x & 0x0000003f);
 	}
-}//namespace detail
 
+	template <>
+	struct compute_log2<float_or_int_value::INT>
+	{
+		template <typename T>
+		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)