12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- /**
- * Function indicating if a number is an exponent of 2
- * @param value defines the value to test
- * @returns true if the value is an exponent of 2
- */
- export function IsExponentOfTwo(value) {
- let count = 1;
- do {
- count *= 2;
- } while (count < value);
- return count === value;
- }
- /**
- * Interpolates between a and b via alpha
- * @param a The lower value (returned when alpha = 0)
- * @param b The upper value (returned when alpha = 1)
- * @param alpha The interpolation-factor
- * @returns The mixed value
- */
- export function Mix(a, b, alpha) {
- return a * (1 - alpha) + b * alpha;
- }
- /**
- * Find the nearest power of two.
- * @param x Number to start search from.
- * @returns Next nearest power of two.
- */
- export function NearestPOT(x) {
- const c = CeilingPOT(x);
- const f = FloorPOT(x);
- return c - x > x - f ? f : c;
- }
- /**
- * Find the next highest power of two.
- * @param x Number to start search from.
- * @returns Next highest power of two.
- */
- export function CeilingPOT(x) {
- x--;
- x |= x >> 1;
- x |= x >> 2;
- x |= x >> 4;
- x |= x >> 8;
- x |= x >> 16;
- x++;
- return x;
- }
- /**
- * Find the next lowest power of two.
- * @param x Number to start search from.
- * @returns Next lowest power of two.
- */
- export function FloorPOT(x) {
- x = x | (x >> 1);
- x = x | (x >> 2);
- x = x | (x >> 4);
- x = x | (x >> 8);
- x = x | (x >> 16);
- return x - (x >> 1);
- }
- /**
- * Get the closest exponent of two
- * @param value defines the value to approximate
- * @param max defines the maximum value to return
- * @param mode defines how to define the closest value
- * @returns closest exponent of two of the given value
- */
- export function GetExponentOfTwo(value, max, mode = 2) {
- let pot;
- switch (mode) {
- case 1:
- pot = FloorPOT(value);
- break;
- case 2:
- pot = NearestPOT(value);
- break;
- case 3:
- default:
- pot = CeilingPOT(value);
- break;
- }
- return Math.min(pot, max);
- }
- //# sourceMappingURL=tools.functions.js.map
|