diff options
Diffstat (limited to 'ANGLE/src/libGLESv2/mathutil.h')
-rw-r--r-- | ANGLE/src/libGLESv2/mathutil.h | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/ANGLE/src/libGLESv2/mathutil.h b/ANGLE/src/libGLESv2/mathutil.h new file mode 100644 index 0000000..31fa16f --- /dev/null +++ b/ANGLE/src/libGLESv2/mathutil.h @@ -0,0 +1,66 @@ +// +// Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +// + +// mathutil.h: Math and bit manipulation functions. + +#ifndef LIBGLESV2_MATHUTIL_H_ +#define LIBGLESV2_MATHUTIL_H_ + +#include <math.h> + +namespace gl +{ +inline bool isPow2(int x) +{ + return (x & (x - 1)) == 0 && (x != 0); +} + +inline int log2(int x) +{ + int r = 0; + while ((x >> r) > 1) r++; + return r; +} + +inline unsigned int ceilPow2(unsigned int x) +{ + if (x != 0) x--; + x |= x >> 1; + x |= x >> 2; + x |= x >> 4; + x |= x >> 8; + x |= x >> 16; + x++; + + return x; +} + +inline float clamp01(float x) +{ + return x < 0 ? 0 : (x > 1 ? 1 : x); +} + +template<const int n> +inline unsigned int unorm(float x) +{ + const unsigned int max = 0xFFFFFFFF >> (32 - n); + + if (x > 1) + { + return max; + } + else if (x < 0) + { + return 0; + } + else + { + return (unsigned int)(max * x + 0.5f); + } +} +} + +#endif // LIBGLESV2_MATHUTIL_H_ |