Home | History | Annotate | Download | only in libGLESv2
      1 //
      2 // Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved.
      3 // Use of this source code is governed by a BSD-style license that can be
      4 // found in the LICENSE file.
      5 //
      6 
      7 // mathutil.h: Math and bit manipulation functions.
      8 
      9 #ifndef LIBGLESV2_MATHUTIL_H_
     10 #define LIBGLESV2_MATHUTIL_H_
     11 
     12 #include <math.h>
     13 
     14 namespace gl
     15 {
     16 inline bool isPow2(int x)
     17 {
     18     return (x & (x - 1)) == 0 && (x != 0);
     19 }
     20 
     21 inline int log2(int x)
     22 {
     23     int r = 0;
     24     while ((x >> r) > 1) r++;
     25     return r;
     26 }
     27 
     28 inline unsigned int ceilPow2(unsigned int x)
     29 {
     30     if (x != 0) x--;
     31     x |= x >> 1;
     32     x |= x >> 2;
     33     x |= x >> 4;
     34     x |= x >> 8;
     35     x |= x >> 16;
     36     x++;
     37 
     38     return x;
     39 }
     40 
     41 inline float clamp01(float x)
     42 {
     43     return x < 0 ? 0 : (x > 1 ? 1 : x);
     44 }
     45 
     46 template<const int n>
     47 inline unsigned int unorm(float x)
     48 {
     49     const unsigned int max = 0xFFFFFFFF >> (32 - n);
     50 
     51     if (x > 1)
     52     {
     53         return max;
     54     }
     55     else if (x < 0)
     56     {
     57         return 0;
     58     }
     59     else
     60     {
     61         return (unsigned int)(max * x + 0.5f);
     62     }
     63 }
     64 }
     65 
     66 #endif   // LIBGLESV2_MATHUTIL_H_
     67