… | |
… | |
61 | // linear interpolation |
61 | // linear interpolation |
62 | template<typename T, typename U, typename P> |
62 | template<typename T, typename U, typename P> |
63 | static inline |
63 | static inline |
64 | T lerp (T a, U b, P p) |
64 | T lerp (T a, U b, P p) |
65 | { |
65 | { |
66 | return (int(a) * int(p) + int(b) * int(100 - p)) / 100; |
66 | return (long(a) * long(100 - p) + long(b) * long(p) + 50) / 100; |
67 | } |
67 | } |
68 | |
68 | |
69 | // some bit functions, xft fuck me plenty |
69 | // some bit functions, xft fuck me plenty |
70 | #if HAVE_GCC_BUILTINS |
70 | #if HAVE_GCC_BUILTINS |
71 | static inline int ctz (unsigned int x) CONST { return __builtin_ctz (x); } |
71 | static inline int ctz (unsigned int x) CONST { return __builtin_ctz (x); } |