Buckets:
| 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; | |
| } | |
| } | |
| export { arrayMin, arrayMax, arrayNeedsUint32, getTypedArray, createElementNS, createCanvasElement, warnOnce, probeAsync, toNormalizedProjectionMatrix, toReversedProjectionMatrix }; | |
Xet Storage Details
- Size:
- 2.68 kB
- Xet hash:
- 844ad12629c68fe55e12bde4a2c490b7ed46b458f7a7aa6ce6e6376e7304e430
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.