ol
Version:
OpenLayers mapping library
42 lines (39 loc) • 1.47 kB
JavaScript
/**
* Utilities for encoding/decoding values to be used in shaders
* @module ol/render/webgl/encodeUtil
*/
/**
* Generates a color array based on a numerical id, and pack it just like the `packColor` function of 'ol/render/webgl/compileUtil.js'.
* Note: the range for each component is 0 to 1 with 256 steps
* @param {number} id Id
* @param {Array<number>} [array] Reusable array
* @return {Array<number>} Packed color array with two components
*/
export function colorEncodeIdAndPack(id, array) {
array = array || [];
const radix = 256;
const divide = radix - 1;
const r = Math.floor(id / radix / radix / radix) / divide;
const g = (Math.floor(id / radix / radix) % radix) / divide;
const b = (Math.floor(id / radix) % radix) / divide;
const a = (id % radix) / divide;
array[0] = r * 256 * 255 + g * 255;
array[1] = b * 256 * 255 + a * 255;
return array;
}
/**
* Reads an id from a color-encoded array
* Note: the expected range for each component is 0 to 1 with 256 steps.
* @param {Array<number>} color Color array containing the encoded id; color components are in the range 0 to 1
* @return {number} Decoded id
*/
export function colorDecodeId(color) {
let id = 0;
const radix = 256;
const mult = radix - 1;
id += Math.round(color[0] * radix * radix * radix * mult);
id += Math.round(color[1] * radix * radix * mult);
id += Math.round(color[2] * radix * mult);
id += Math.round(color[3] * mult);
return id;
}