mirror of
https://github.com/g-truc/glm.git
synced 2025-04-08 06:43:10 +00:00
Added integer log2 implementation with compute_log2 class
This commit is contained in:
parent
c004d95bdf
commit
742013f6d3
2 changed files with 13 additions and 14 deletions
|
@ -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.
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Reference in a new issue