UNPKG

@openhps/core

Version:

Open Hybrid Positioning System - Core component

106 lines (102 loc) 2.93 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.arrayMax = arrayMax; exports.arrayMin = arrayMin; exports.arrayNeedsUint32 = arrayNeedsUint32; exports.createCanvasElement = createCanvasElement; exports.createElementNS = createElementNS; exports.getTypedArray = getTypedArray; exports.probeAsync = probeAsync; exports.toNormalizedProjectionMatrix = toNormalizedProjectionMatrix; exports.toReversedProjectionMatrix = toReversedProjectionMatrix; exports.warnOnce = warnOnce; function arrayMin(array) { if (array.length === 0) return Infinity; let min = array[0]; for (let i = 1, l = array.length; i < l; ++i) { if (array[i] < min) min = array[i]; } return min; } function arrayMax(array) { if (array.length === 0) return -Infinity; let max = array[0]; for (let i = 1, l = array.length; i < l; ++i) { if (array[i] > max) max = array[i]; } return max; } function arrayNeedsUint32(array) { // assumes larger values usually on last for (let i = array.length - 1; i >= 0; --i) { if (array[i] >= 65535) return true; // account for PRIMITIVE_RESTART_FIXED_INDEX, #24565 } return false; } const TYPED_ARRAYS = { Int8Array: Int8Array, Uint8Array: Uint8Array, Uint8ClampedArray: Uint8ClampedArray, Int16Array: Int16Array, Uint16Array: Uint16Array, Int32Array: Int32Array, Uint32Array: Uint32Array, Float32Array: Float32Array, Float64Array: Float64Array }; function getTypedArray(type, buffer) { return new TYPED_ARRAYS[type](buffer); } function createElementNS(name) { return document.createElementNS('http://www.w3.org/1999/xhtml', name); } function createCanvasElement() { const canvas = createElementNS('canvas'); canvas.style.display = 'block'; return canvas; } const _cache = {}; function warnOnce(message) { if (message in _cache) return; _cache[message] = true; console.warn(message); } function probeAsync(gl, sync, interval) { return new Promise(function (resolve, reject) { function probe() { switch (gl.clientWaitSync(sync, gl.SYNC_FLUSH_COMMANDS_BIT, 0)) { case gl.WAIT_FAILED: reject(); break; case gl.TIMEOUT_EXPIRED: setTimeout(probe, interval); break; default: resolve(); } } setTimeout(probe, interval); }); } function toNormalizedProjectionMatrix(projectionMatrix) { const m = projectionMatrix.elements; // Convert [-1, 1] to [0, 1] projection matrix m[2] = 0.5 * m[2] + 0.5 * m[3]; m[6] = 0.5 * m[6] + 0.5 * m[7]; m[10] = 0.5 * m[10] + 0.5 * m[11]; m[14] = 0.5 * m[14] + 0.5 * m[15]; } function toReversedProjectionMatrix(projectionMatrix) { const m = projectionMatrix.elements; const isPerspectiveMatrix = m[11] === -1; // Reverse [0, 1] projection matrix if (isPerspectiveMatrix) { m[10] = -m[10] - 1; m[14] = -m[14]; } else { m[10] = -m[10]; m[14] = -m[14] + 1; } }