@loaders.gl/textures 4.3.0-beta.3 → 4.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -59691,7 +59691,7 @@ function getVersion() {
59691
59691
  );
59692
59692
  globalThis._loadersgl_.version = NPM_TAG;
59693
59693
  } else {
59694
- globalThis._loadersgl_.version = "4.3.0-beta.2";
59694
+ globalThis._loadersgl_.version = "4.3.0-beta.3";
59695
59695
  }
59696
59696
  }
59697
59697
  return globalThis._loadersgl_.version;
@@ -63356,7 +63356,7 @@ if (nodeVersion2 < 18) {
63356
63356
  }
63357
63357
 
63358
63358
  // src/lib/utils/version.ts
63359
- var VERSION2 = true ? "4.3.0-beta.2" : "latest";
63359
+ var VERSION2 = true ? "4.3.0-beta.3" : "latest";
63360
63360
 
63361
63361
  // src/lib/parsers/basis-module-loader.ts
63362
63362
  var BASIS_EXTERNAL_LIBRARIES = {
@@ -21,7 +21,7 @@
21
21
  );
22
22
  globalThis._loadersgl_.version = NPM_TAG;
23
23
  } else {
24
- globalThis._loadersgl_.version = "4.3.0-beta.2";
24
+ globalThis._loadersgl_.version = "4.3.0-beta.3";
25
25
  }
26
26
  }
27
27
  return globalThis._loadersgl_.version;
@@ -341,7 +341,7 @@
341
341
  }
342
342
 
343
343
  // src/lib/utils/version.ts
344
- var VERSION2 = true ? "4.3.0-beta.2" : "latest";
344
+ var VERSION2 = true ? "4.3.0-beta.3" : "latest";
345
345
 
346
346
  // src/lib/parsers/basis-module-loader.ts
347
347
  var BASIS_EXTERNAL_LIBRARIES = {
@@ -28,7 +28,7 @@
28
28
  );
29
29
  globalThis._loadersgl_.version = NPM_TAG;
30
30
  } else {
31
- globalThis._loadersgl_.version = "4.3.0-beta.2";
31
+ globalThis._loadersgl_.version = "4.3.0-beta.3";
32
32
  }
33
33
  }
34
34
  return globalThis._loadersgl_.version;
@@ -348,7 +348,7 @@
348
348
  }
349
349
 
350
350
  // src/lib/utils/version.ts
351
- var VERSION2 = true ? "4.3.0-beta.2" : "latest";
351
+ var VERSION2 = true ? "4.3.0-beta.3" : "latest";
352
352
 
353
353
  // ../../node_modules/ktx-parse/dist/ktx-parse.modern.js
354
354
  var KHR_SUPERCOMPRESSION_NONE = 0;
@@ -28,7 +28,7 @@
28
28
  );
29
29
  globalThis._loadersgl_.version = NPM_TAG;
30
30
  } else {
31
- globalThis._loadersgl_.version = "4.3.0-beta.2";
31
+ globalThis._loadersgl_.version = "4.3.0-beta.3";
32
32
  }
33
33
  }
34
34
  return globalThis._loadersgl_.version;
@@ -348,7 +348,7 @@
348
348
  }
349
349
 
350
350
  // src/lib/utils/version.ts
351
- var VERSION2 = true ? "4.3.0-beta.2" : "latest";
351
+ var VERSION2 = true ? "4.3.0-beta.3" : "latest";
352
352
 
353
353
  // src/crunch-loader.ts
354
354
  var CrunchLoader = {
package/dist/dist.min.js CHANGED
@@ -4,7 +4,7 @@
4
4
  else if (typeof define === 'function' && define.amd) define([], factory);
5
5
  else if (typeof exports === 'object') exports['loaders'] = factory();
6
6
  else root['loaders'] = factory();})(globalThis, function () {
7
- "use strict";var __exports__=(()=>{var Jt=Object.create;var k=Object.defineProperty;var Zt=Object.getOwnPropertyDescriptor;var qt=Object.getOwnPropertyNames;var Qt=Object.getPrototypeOf,eo=Object.prototype.hasOwnProperty;var we=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),to=(e,t)=>{for(var o in t)k(e,o,{get:t[o],enumerable:!0})},v=(e,t,o,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of qt(t))!eo.call(e,s)&&s!==o&&k(e,s,{get:()=>t[s],enumerable:!(r=Zt(t,s))||r.enumerable});return e},W=(e,t,o)=>(v(e,t,"default"),o&&v(o,t,"default")),se=(e,t,o)=>(o=e!=null?Jt(Qt(e)):{},v(t||!e||!e.__esModule?k(o,"default",{value:e,enumerable:!0}):o,e)),oo=e=>v(k({},"__esModule",{value:!0}),e);var He=we((yr,be)=>{be.exports=globalThis.loaders});var Re=we(()=>{});var V={};to(V,{BASIS_EXTERNAL_LIBRARIES:()=>F,BasisLoader:()=>st,BasisWorkerLoader:()=>ue,CRUNCH_EXTERNAL_LIBRARIES:()=>ut,CompressedTextureLoader:()=>Tt,CompressedTextureWorkerLoader:()=>me,CompressedTextureWriter:()=>Ot,CrunchLoader:()=>Oe,CrunchWorkerLoader:()=>Oe,GL_EXTENSIONS_CONSTANTS:()=>n,KTX2BasisWriter:()=>Ct,KTX2BasisWriterWorker:()=>Ur,NPYLoader:()=>Et,NPYWorkerLoader:()=>de,getSupportedGPUTextureFormats:()=>Y,loadImageTexture:()=>Lt,loadImageTextureArray:()=>It,loadImageTextureCube:()=>Nt,selectSupportedBasisFormat:()=>Ee});W(V,se(He(),1));var f="4.3.0-beta.2";function p(e,t){if(!e)throw new Error(t||"loader assertion failed.")}var C={self:typeof self<"u"&&self,window:typeof window<"u"&&window,global:typeof global<"u"&&global,document:typeof document<"u"&&document},ro=C.self||C.window||C.global||{},no=C.window||C.self||C.global||{},so=C.global||C.self||C.window||{},_o=C.document||{};var _e=Boolean(typeof process!="object"||String(process)!=="[object process]"||process.browser);var Ve=typeof process<"u"&&process.version&&/v([0-9]*)/.exec(process.version),ao=Ve&&parseFloat(Ve[1])||0;function ae(e){globalThis.loaders||={},globalThis.loaders.modules||={},Object.assign(globalThis.loaders.modules,e)}function ie(e){return globalThis.loaders?.modules?.[e]||null}function io(){return globalThis._loadersgl_?.version||(globalThis._loadersgl_=globalThis._loadersgl_||{},globalThis._loadersgl_.version="4.3.0-beta.2"),globalThis._loadersgl_.version}var Xe=io();function ve(e,t){if(!e)throw new Error(t||"loaders.gl assertion failed.")}var d={self:typeof self<"u"&&self,window:typeof window<"u"&&window,global:typeof global<"u"&&global,document:typeof document<"u"&&document},kr=d.self||d.window||d.global||{},Wr=d.window||d.self||d.global||{},zr=d.global||d.self||d.window||{},$r=d.document||{};var P=typeof process!="object"||String(process)!=="[object process]"||process.browser,z=typeof importScripts=="function",Yr=typeof window<"u"&&typeof window.orientation<"u",ke=typeof process<"u"&&process.version&&/v([0-9]*)/.exec(process.version),jr=ke&&parseFloat(ke[1])||0;var ce={};async function h(e,t=null,o={},r=null){return t&&(e=We(e,t,o,r)),ce[e]=ce[e]||co(e),await ce[e]}function We(e,t,o={},r=null){if(!o.useLocalLibraries&&e.startsWith("http"))return e;r=r||e;let s=o.modules||{};return s[r]?s[r]:P?o.CDN?(ve(o.CDN.startsWith("http")),`${o.CDN}/${t}@${Xe}/dist/libs/${r}`):z?`../src/libs/${r}`:`modules/${t}/src/libs/${r}`:`modules/${t}/dist/libs/${r}`}async function co(e){if(e.endsWith("wasm"))return await So(e);if(!P)try{let{requireFromFile:o}=globalThis.loaders||{};return await o?.(e)}catch(o){return console.error(o),null}if(z)return importScripts(e);let t=await lo(e);return Ro(t,e)}function Ro(e,t){if(!P){let{requireFromString:r}=globalThis.loaders||{};return r?.(e,t)}if(z)return eval.call(globalThis,e),null;let o=document.createElement("script");o.id=t;try{o.appendChild(document.createTextNode(e))}catch{o.text=e}return document.body.appendChild(o),null}async function So(e){let{readFileAsArrayBuffer:t}=globalThis.loaders||{};return P||!t||e.startsWith("http")?await(await fetch(e)).arrayBuffer():await t(e)}async function lo(e){let{readFileAsText:t}=globalThis.loaders||{};return P||!t||e.startsWith("http")?await(await fetch(e)).text():await t(e)}var je=se(Re(),1);var ze=se(Re(),1);function $e(e=3e3){return new Promise(t=>{ze.default.exec("lsof -i -P -n | grep LISTEN",(o,r)=>{if(o){t(e);return}let s=[],_=/:(\d+) \(LISTEN\)/;r.split(`
8
- `).forEach(i=>{let c=_.exec(i);c&&s.push(Number(c[1]))});let a=e;for(;s.includes(a);)a++;t(a)})})}var Ye={command:"",arguments:[],port:5e3,autoPort:!0,wait:2e3,onSuccess:e=>{console.log(`Started ${e.props.command}`)}},K=class{id;props={...Ye};childProcess=null;port=0;successTimer;constructor({id:t="browser-driver"}={}){this.id=t}async start(t){t={...Ye,...t},this.props=t;let o=[...t.arguments];return this.port=Number(t.port),t.portArg&&(t.autoPort&&(this.port=await $e(t.port)),o.push(t.portArg,String(this.port))),await new Promise((r,s)=>{try{this._setTimeout(()=>{t.onSuccess&&t.onSuccess(this),r({})}),console.log(`Spawning ${t.command} ${t.arguments.join(" ")}`);let _=(void 0)(t.command,o,t.spawn);this.childProcess=_,_.stdout.on("data",a=>{console.log(a.toString())}),_.stderr.on("data",a=>{console.log(`Child process wrote to stderr: "${a}".`),t.ignoreStderr||(this._clearTimeout(),s(new Error(a)))}),_.on("error",a=>{console.log(`Child process errored with ${a}`),this._clearTimeout(),s(a)}),_.on("close",a=>{console.log(`Child process exited with ${a}`),this.childProcess=null,this._clearTimeout(),r({})})}catch(_){s(_)}})}async stop(){this.childProcess&&(this.childProcess.kill(),this.childProcess=null)}async exit(t=0){try{await this.stop(),process.exit(t)}catch(o){console.error(o.message||o),process.exit(1)}}_setTimeout(t){Number(this.props.wait)>0&&(this.successTimer=setTimeout(t,this.props.wait))}_clearTimeout(){this.successTimer&&clearTimeout(this.successTimer)}};var Ao="",Je={};function Se(e){for(let t in Je)if(e.startsWith(t)){let o=Je[t];e=e.replace(t,o)}return!e.startsWith("http://")&&!e.startsWith("https://")&&(e=`${Ao}${e}`),e}var F={TRANSCODER:"basis_transcoder.js",TRANSCODER_WASM:"basis_transcoder.wasm",ENCODER:"basis_encoder.js",ENCODER_WASM:"basis_encoder.wasm"},Ze;async function Ae(e){ae(e.modules);let t=ie("basis");return t||(Ze||=To(e),await Ze)}async function To(e){let t=null,o=null;return[t,o]=await Promise.all([await h(F.TRANSCODER,"textures",e),await h(F.TRANSCODER_WASM,"textures",e)]),t=t||globalThis.BASIS,await fo(t,o)}function fo(e,t){let o={};return t&&(o.wasmBinary=t),new Promise(r=>{e(o).then(s=>{let{BasisFile:_,initializeBasis:a}=s;a(),r({BasisFile:_})})})}var le;async function U(e){let t=e.modules||{};return t.basisEncoder?t.basisEncoder:(le=le||Eo(e),await le)}async function Eo(e){let t=null,o=null;return[t,o]=await Promise.all([await h(F.ENCODER,"textures",e),await h(F.ENCODER_WASM,"textures",e)]),t=t||globalThis.BASIS,await uo(t,o)}function uo(e,t){let o={};return t&&(o.wasmBinary=t),new Promise(r=>{e(o).then(s=>{let{BasisFile:_,KTX2File:a,initializeBasis:i,BasisEncoder:c}=s;i(),r({BasisFile:_,KTX2File:a,BasisEncoder:c})})})}var n={COMPRESSED_RGB_S3TC_DXT1_EXT:33776,COMPRESSED_RGBA_S3TC_DXT1_EXT:33777,COMPRESSED_RGBA_S3TC_DXT3_EXT:33778,COMPRESSED_RGBA_S3TC_DXT5_EXT:33779,COMPRESSED_R11_EAC:37488,COMPRESSED_SIGNED_R11_EAC:37489,COMPRESSED_RG11_EAC:37490,COMPRESSED_SIGNED_RG11_EAC:37491,COMPRESSED_RGB8_ETC2:37492,COMPRESSED_RGBA8_ETC2_EAC:37493,COMPRESSED_SRGB8_ETC2:37494,COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:37495,COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:37496,COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:37497,COMPRESSED_RGB_PVRTC_4BPPV1_IMG:35840,COMPRESSED_RGBA_PVRTC_4BPPV1_IMG:35842,COMPRESSED_RGB_PVRTC_2BPPV1_IMG:35841,COMPRESSED_RGBA_PVRTC_2BPPV1_IMG:35843,COMPRESSED_RGB_ETC1_WEBGL:36196,COMPRESSED_RGB_ATC_WEBGL:35986,COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL:35987,COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL:34798,COMPRESSED_RGBA_ASTC_4X4_KHR:37808,COMPRESSED_RGBA_ASTC_5X4_KHR:37809,COMPRESSED_RGBA_ASTC_5X5_KHR:37810,COMPRESSED_RGBA_ASTC_6X5_KHR:37811,COMPRESSED_RGBA_ASTC_6X6_KHR:37812,COMPRESSED_RGBA_ASTC_8X5_KHR:37813,COMPRESSED_RGBA_ASTC_8X6_KHR:37814,COMPRESSED_RGBA_ASTC_8X8_KHR:37815,COMPRESSED_RGBA_ASTC_10X5_KHR:37816,COMPRESSED_RGBA_ASTC_10X6_KHR:37817,COMPRESSED_RGBA_ASTC_10X8_KHR:37818,COMPRESSED_RGBA_ASTC_10X10_KHR:37819,COMPRESSED_RGBA_ASTC_12X10_KHR:37820,COMPRESSED_RGBA_ASTC_12X12_KHR:37821,COMPRESSED_SRGB8_ALPHA8_ASTC_4X4_KHR:37840,COMPRESSED_SRGB8_ALPHA8_ASTC_5X4_KHR:37841,COMPRESSED_SRGB8_ALPHA8_ASTC_5X5_KHR:37842,COMPRESSED_SRGB8_ALPHA8_ASTC_6X5_KHR:37843,COMPRESSED_SRGB8_ALPHA8_ASTC_6X6_KHR:37844,COMPRESSED_SRGB8_ALPHA8_ASTC_8X5_KHR:37845,COMPRESSED_SRGB8_ALPHA8_ASTC_8X6_KHR:37846,COMPRESSED_SRGB8_ALPHA8_ASTC_8X8_KHR:37847,COMPRESSED_SRGB8_ALPHA8_ASTC_10X5_KHR:37848,COMPRESSED_SRGB8_ALPHA8_ASTC_10X6_KHR:37849,COMPRESSED_SRGB8_ALPHA8_ASTC_10X8_KHR:37850,COMPRESSED_SRGB8_ALPHA8_ASTC_10X10_KHR:37851,COMPRESSED_SRGB8_ALPHA8_ASTC_12X10_KHR:37852,COMPRESSED_SRGB8_ALPHA8_ASTC_12X12_KHR:37853,COMPRESSED_RED_RGTC1_EXT:36283,COMPRESSED_SIGNED_RED_RGTC1_EXT:36284,COMPRESSED_RED_GREEN_RGTC2_EXT:36285,COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT:36286,COMPRESSED_SRGB_S3TC_DXT1_EXT:35916,COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:35917,COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:35918,COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:35919};var mo=["","WEBKIT_","MOZ_"],qe={WEBGL_compressed_texture_s3tc:"dxt",WEBGL_compressed_texture_s3tc_srgb:"dxt-srgb",WEBGL_compressed_texture_etc1:"etc1",WEBGL_compressed_texture_etc:"etc2",WEBGL_compressed_texture_pvrtc:"pvrtc",WEBGL_compressed_texture_atc:"atc",WEBGL_compressed_texture_astc:"astc",EXT_texture_compression_rgtc:"rgtc"},$=null;function Y(e){if(!$){e=e||Oo()||void 0,$=new Set;for(let t of mo)for(let o in qe)if(e&&e.getExtension(`${t}${o}`)){let r=qe[o];$.add(r)}}return $}function Oo(){try{return document.createElement("canvas").getContext("webgl")}catch{return null}}var Te=class{constructor(){this.vkFormat=0,this.typeSize=1,this.pixelWidth=0,this.pixelHeight=0,this.pixelDepth=0,this.layerCount=0,this.faceCount=1,this.supercompressionScheme=0,this.levels=[],this.dataFormatDescriptor=[{vendorId:0,descriptorType:0,descriptorBlockSize:0,versionNumber:2,colorModel:0,colorPrimaries:1,transferFunction:2,flags:0,texelBlockDimension:[0,0,0,0],bytesPlane:[0,0,0,0,0,0,0,0],samples:[]}],this.keyValue={},this.globalData=null}},g=class{constructor(t,o,r,s){this._dataView=void 0,this._littleEndian=void 0,this._offset=void 0,this._dataView=new DataView(t.buffer,t.byteOffset+o,r),this._littleEndian=s,this._offset=0}_nextUint8(){let t=this._dataView.getUint8(this._offset);return this._offset+=1,t}_nextUint16(){let t=this._dataView.getUint16(this._offset,this._littleEndian);return this._offset+=2,t}_nextUint32(){let t=this._dataView.getUint32(this._offset,this._littleEndian);return this._offset+=4,t}_nextUint64(){let t=this._dataView.getUint32(this._offset,this._littleEndian),o=this._dataView.getUint32(this._offset+4,this._littleEndian),r=t+2**32*o;return this._offset+=8,r}_nextInt32(){let t=this._dataView.getInt32(this._offset,this._littleEndian);return this._offset+=4,t}_nextUint8Array(t){let o=new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+this._offset,t);return this._offset+=t,o}_skip(t){return this._offset+=t,this}_scan(t,o=0){let r=this._offset,s=0;for(;this._dataView.getUint8(this._offset)!==o&&s<t;)s++,this._offset++;return s<t&&this._offset++,new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+r,s)}};var gn=new Uint8Array([0]),l=[171,75,84,88,32,50,48,187,13,10,26,10];function Qe(e){return new TextDecoder().decode(e)}function et(e){let t=new Uint8Array(e.buffer,e.byteOffset,l.length);if(t[0]!==l[0]||t[1]!==l[1]||t[2]!==l[2]||t[3]!==l[3]||t[4]!==l[4]||t[5]!==l[5]||t[6]!==l[6]||t[7]!==l[7]||t[8]!==l[8]||t[9]!==l[9]||t[10]!==l[10]||t[11]!==l[11])throw new Error("Missing KTX 2.0 identifier.");let o=new Te,r=17*Uint32Array.BYTES_PER_ELEMENT,s=new g(e,l.length,r,!0);o.vkFormat=s._nextUint32(),o.typeSize=s._nextUint32(),o.pixelWidth=s._nextUint32(),o.pixelHeight=s._nextUint32(),o.pixelDepth=s._nextUint32(),o.layerCount=s._nextUint32(),o.faceCount=s._nextUint32();let _=s._nextUint32();o.supercompressionScheme=s._nextUint32();let a=s._nextUint32(),i=s._nextUint32(),c=s._nextUint32(),S=s._nextUint32(),A=s._nextUint64(),x=s._nextUint64(),yt=_*3*8,re=new g(e,l.length+r,yt,!0);for(let T=0;T<_;T++)o.levels.push({levelData:new Uint8Array(e.buffer,e.byteOffset+re._nextUint64(),re._nextUint64()),uncompressedByteLength:re._nextUint64()});let R=new g(e,a,i,!0),ne={vendorId:R._skip(4)._nextUint16(),descriptorType:R._nextUint16(),versionNumber:R._nextUint16(),descriptorBlockSize:R._nextUint16(),colorModel:R._nextUint8(),colorPrimaries:R._nextUint8(),transferFunction:R._nextUint8(),flags:R._nextUint8(),texelBlockDimension:[R._nextUint8(),R._nextUint8(),R._nextUint8(),R._nextUint8()],bytesPlane:[R._nextUint8(),R._nextUint8(),R._nextUint8(),R._nextUint8(),R._nextUint8(),R._nextUint8(),R._nextUint8(),R._nextUint8()],samples:[]},wt=6,bt=4,Ht=(ne.descriptorBlockSize/4-wt)/bt;for(let T=0;T<Ht;T++){let B={bitOffset:R._nextUint16(),bitLength:R._nextUint8(),channelType:R._nextUint8(),samplePosition:[R._nextUint8(),R._nextUint8(),R._nextUint8(),R._nextUint8()],sampleLower:-1/0,sampleUpper:1/0};B.channelType&64?(B.sampleLower=R._nextInt32(),B.sampleUpper=R._nextInt32()):(B.sampleLower=R._nextUint32(),B.sampleUpper=R._nextUint32()),ne.samples[T]=B}o.dataFormatDescriptor.length=0,o.dataFormatDescriptor.push(ne);let I=new g(e,c,S,!0);for(;I._offset<S;){let T=I._nextUint32(),B=I._scan(T),X=Qe(B);if(o.keyValue[X]=I._nextUint8Array(T-B.byteLength-1),X.match(/^ktx/i)){let ye=Qe(o.keyValue[X]);o.keyValue[X]=ye.substring(0,ye.lastIndexOf("\0"))}let jt=T%4?4-T%4:0;I._skip(jt)}if(x<=0)return o;let m=new g(e,A,x,!0),Vt=m._nextUint16(),Xt=m._nextUint16(),Ke=m._nextUint32(),Fe=m._nextUint32(),Ge=m._nextUint32(),vt=m._nextUint32(),Le=[];for(let T=0;T<_;T++)Le.push({imageFlags:m._nextUint32(),rgbSliceByteOffset:m._nextUint32(),rgbSliceByteLength:m._nextUint32(),alphaSliceByteOffset:m._nextUint32(),alphaSliceByteLength:m._nextUint32()});let Ie=A+m._offset,Ue=Ie+Ke,Ne=Ue+Fe,kt=Ne+Ge,Wt=new Uint8Array(e.buffer,e.byteOffset+Ie,Ke),zt=new Uint8Array(e.buffer,e.byteOffset+Ue,Fe),$t=new Uint8Array(e.buffer,e.byteOffset+Ne,Ge),Yt=new Uint8Array(e.buffer,e.byteOffset+kt,vt);return o.globalData={endpointCount:Vt,selectorCount:Xt,imageDescs:Le,endpointsData:Wt,selectorsData:zt,tablesData:$t,extendedData:Yt},o}function G(e,t){let o=new Array(t.mipMapLevels),r=t.width,s=t.height,_=0;for(let a=0;a<t.mipMapLevels;++a){let i=Co(t,r,s,e,a),c=po(e,a,_,i);o[a]={compressed:!0,format:t.internalFormat,data:c,width:r,height:s,levelSize:i},r=Math.max(1,r>>1),s=Math.max(1,s>>1),_+=i}return o}function po(e,t,o,r){return Array.isArray(e)?e[t].levelData:new Uint8Array(e.buffer,e.byteOffset+o,r)}function Co(e,t,o,r,s){return Array.isArray(r)?e.sizeFunction(r[s]):e.sizeFunction(t,o)}var Mo={131:n.COMPRESSED_RGB_S3TC_DXT1_EXT,132:n.COMPRESSED_SRGB_S3TC_DXT1_EXT,133:n.COMPRESSED_RGBA_S3TC_DXT1_EXT,134:n.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT,135:n.COMPRESSED_RGBA_S3TC_DXT3_EXT,136:n.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT,137:n.COMPRESSED_RGBA_S3TC_DXT5_EXT,138:n.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT,139:n.COMPRESSED_RED_RGTC1_EXT,140:n.COMPRESSED_SIGNED_RED_RGTC1_EXT,141:n.COMPRESSED_RED_GREEN_RGTC2_EXT,142:n.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT,147:n.COMPRESSED_RGB8_ETC2,148:n.COMPRESSED_SRGB8_ETC2,149:n.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2,150:n.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2,151:n.COMPRESSED_RGBA8_ETC2_EAC,152:n.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC,153:n.COMPRESSED_R11_EAC,154:n.COMPRESSED_SIGNED_R11_EAC,155:n.COMPRESSED_RG11_EAC,156:n.COMPRESSED_SIGNED_RG11_EAC,157:n.COMPRESSED_RGBA_ASTC_4x4_KHR,158:n.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR,159:n.COMPRESSED_RGBA_ASTC_5x4_KHR,160:n.COMPRESSED_SRGB8_ALPHA8_ASTC_5X4_KHR,161:n.COMPRESSED_RGBA_ASTC_5x5_KHR,162:n.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR,163:n.COMPRESSED_RGBA_ASTC_6x5_KHR,164:n.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR,165:n.COMPRESSED_RGBA_ASTC_6x6_KHR,166:n.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR,167:n.COMPRESSED_RGBA_ASTC_8x5_KHR,168:n.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR,169:n.COMPRESSED_RGBA_ASTC_8x6_KHR,170:n.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR,171:n.COMPRESSED_RGBA_ASTC_8x8_KHR,172:n.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR,173:n.COMPRESSED_RGBA_ASTC_10x5_KHR,174:n.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR,175:n.COMPRESSED_RGBA_ASTC_10x6_KHR,176:n.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR,177:n.COMPRESSED_RGBA_ASTC_10x8_KHR,178:n.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR,179:n.COMPRESSED_RGBA_ASTC_10x10_KHR,180:n.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR,181:n.COMPRESSED_RGBA_ASTC_12x10_KHR,182:n.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR,183:n.COMPRESSED_RGBA_ASTC_12x12_KHR,184:n.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR,1000054e3:n.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG,1000054001:n.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,1000066e3:n.COMPRESSED_RGBA_ASTC_4x4_KHR,1000066001:n.COMPRESSED_RGBA_ASTC_5x4_KHR,1000066002:n.COMPRESSED_RGBA_ASTC_5x5_KHR,1000066003:n.COMPRESSED_RGBA_ASTC_6x5_KHR,1000066004:n.COMPRESSED_RGBA_ASTC_6x6_KHR,1000066005:n.COMPRESSED_RGBA_ASTC_8x5_KHR,1000066006:n.COMPRESSED_RGBA_ASTC_8x6_KHR,1000066007:n.COMPRESSED_RGBA_ASTC_8x8_KHR,1000066008:n.COMPRESSED_RGBA_ASTC_10x5_KHR,1000066009:n.COMPRESSED_RGBA_ASTC_10x6_KHR,1000066010:n.COMPRESSED_RGBA_ASTC_10x8_KHR,1000066011:n.COMPRESSED_RGBA_ASTC_10x10_KHR,1000066012:n.COMPRESSED_RGBA_ASTC_12x10_KHR,1000066013:n.COMPRESSED_RGBA_ASTC_12x12_KHR};function tt(e){return Mo[e]}var E=[171,75,84,88,32,50,48,187,13,10,26,10];function j(e){let t=new Uint8Array(e);return!(t.byteLength<E.length||t[0]!==E[0]||t[1]!==E[1]||t[2]!==E[2]||t[3]!==E[3]||t[4]!==E[4]||t[5]!==E[5]||t[6]!==E[6]||t[7]!==E[7]||t[8]!==E[8]||t[9]!==E[9]||t[10]!==E[10]||t[11]!==E[11])}function ot(e){let t=new Uint8Array(e),o=et(t),r=Math.max(1,o.levels.length),s=o.pixelWidth,_=o.pixelHeight,a=tt(o.vkFormat);return G(o.levels,{mipMapLevels:r,width:s,height:_,sizeFunction:i=>i.uncompressedByteLength,internalFormat:a})}var xo={etc1:{basisFormat:0,compressed:!0,format:n.COMPRESSED_RGB_ETC1_WEBGL},etc2:{basisFormat:1,compressed:!0},bc1:{basisFormat:2,compressed:!0,format:n.COMPRESSED_RGB_S3TC_DXT1_EXT},bc3:{basisFormat:3,compressed:!0,format:n.COMPRESSED_RGBA_S3TC_DXT5_EXT},bc4:{basisFormat:4,compressed:!0},bc5:{basisFormat:5,compressed:!0},"bc7-m6-opaque-only":{basisFormat:6,compressed:!0},"bc7-m5":{basisFormat:7,compressed:!0},"pvrtc1-4-rgb":{basisFormat:8,compressed:!0,format:n.COMPRESSED_RGB_PVRTC_4BPPV1_IMG},"pvrtc1-4-rgba":{basisFormat:9,compressed:!0,format:n.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG},"astc-4x4":{basisFormat:10,compressed:!0,format:n.COMPRESSED_RGBA_ASTC_4X4_KHR},"atc-rgb":{basisFormat:11,compressed:!0},"atc-rgba-interpolated-alpha":{basisFormat:12,compressed:!0},rgba32:{basisFormat:13,compressed:!1},rgb565:{basisFormat:14,compressed:!1},bgr565:{basisFormat:15,compressed:!1},rgba4444:{basisFormat:16,compressed:!1}};async function J(e,t){if(t.basis.containerFormat==="auto"){if(j(e)){let r=await U(t);return rt(r.KTX2File,e,t)}let{BasisFile:o}=await Ae(t);return fe(o,e,t)}switch(t.basis.module){case"encoder":let o=await U(t);switch(t.basis.containerFormat){case"ktx2":return rt(o.KTX2File,e,t);case"basis":default:return fe(o.BasisFile,e,t)}case"transcoder":default:let{BasisFile:r}=await Ae(t);return fe(r,e,t)}}function fe(e,t,o){let r=new e(new Uint8Array(t));try{if(!r.startTranscoding())throw new Error("Failed to start basis transcoding");let s=r.getNumImages(),_=[];for(let a=0;a<s;a++){let i=r.getNumLevels(a),c=[];for(let S=0;S<i;S++)c.push(Bo(r,a,S,o));_.push(c)}return _}finally{r.close(),r.delete()}}function Bo(e,t,o,r){let s=e.getImageWidth(t,o),_=e.getImageHeight(t,o),a=e.getHasAlpha(),{compressed:i,format:c,basisFormat:S}=nt(r,a),A=e.getImageTranscodedSizeInBytes(t,o,S),x=new Uint8Array(A);if(!e.transcodeImage(x,t,o,S,0,0))throw new Error("failed to start Basis transcoding");return{width:s,height:_,data:x,compressed:i,format:c,hasAlpha:a}}function rt(e,t,o){let r=new e(new Uint8Array(t));try{if(!r.startTranscoding())throw new Error("failed to start KTX2 transcoding");let s=r.getLevels(),_=[];for(let a=0;a<s;a++)_.push(Do(r,a,o));return[_]}finally{r.close(),r.delete()}}function Do(e,t,o){let{alphaFlag:r,height:s,width:_}=e.getImageLevelInfo(t,0,0),{compressed:a,format:i,basisFormat:c}=nt(o,r),S=e.getImageTranscodedSizeInBytes(t,0,0,c),A=new Uint8Array(S);if(!e.transcodeImage(A,t,0,0,c,0,-1,-1))throw new Error("Failed to transcode KTX2 image");return{width:_,height:s,data:A,compressed:a,levelSize:S,hasAlpha:r,format:i}}function nt(e,t){let o=e&&e.basis&&e.basis.format;return o==="auto"&&(o=Ee()),typeof o=="object"&&(o=t?o.alpha:o.noAlpha),o=o.toLowerCase(),xo[o]}function Ee(){let e=Y();return e.has("astc")?"astc-4x4":e.has("dxt")?{alpha:"bc3",noAlpha:"bc1"}:e.has("pvrtc")?{alpha:"pvrtc1-4-rgba",noAlpha:"pvrtc1-4-rgb"}:e.has("etc1")?"etc1":e.has("etc2")?"etc2":"rgb565"}var ue={dataType:null,batchType:null,name:"Basis",id:"basis",module:"textures",version:f,worker:!0,extensions:["basis","ktx2"],mimeTypes:["application/octet-stream","image/ktx2"],tests:["sB"],binary:!0,options:{basis:{format:"auto",libraryPath:"libs/",containerFormat:"auto",module:"transcoder"}}},st={...ue,parse:J};var u={MAGIC_NUMBER:542327876,HEADER_LENGTH:31,MAGIC_NUMBER_INDEX:0,HEADER_SIZE_INDEX:1,HEADER_FLAGS_INDEX:2,HEADER_HEIGHT_INDEX:3,HEADER_WIDTH_INDEX:4,MIPMAPCOUNT_INDEX:7,HEADER_PF_FLAGS_INDEX:20,HEADER_PF_FOURCC_INDEX:21,DDSD_MIPMAPCOUNT:131072,DDPF_FOURCC:4},go={DXT1:n.COMPRESSED_RGB_S3TC_DXT1_EXT,DXT3:n.COMPRESSED_RGBA_S3TC_DXT3_EXT,DXT5:n.COMPRESSED_RGBA_S3TC_DXT5_EXT,"ATC ":n.COMPRESSED_RGB_ATC_WEBGL,ATCA:n.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL,ATCI:n.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL},Po=it,ho=Z,Ko=Z,Fo={DXT1:it,DXT3:Z,DXT5:Z,"ATC ":Po,ATCA:ho,ATCI:Ko};function _t(e){return new Uint32Array(e,0,u.HEADER_LENGTH)[u.MAGIC_NUMBER_INDEX]===u.MAGIC_NUMBER}function at(e){let t=new Int32Array(e,0,u.HEADER_LENGTH),o=t[u.HEADER_PF_FOURCC_INDEX];p(Boolean(t[u.HEADER_PF_FLAGS_INDEX]&u.DDPF_FOURCC),"DDS: Unsupported format, must contain a FourCC code");let r=Go(o),s=go[r],_=Fo[r];p(s&&_,`DDS: Unknown pixel format ${o}`);let a=1;t[u.HEADER_FLAGS_INDEX]&u.DDSD_MIPMAPCOUNT&&(a=Math.max(1,t[u.MIPMAPCOUNT_INDEX]));let i=t[u.HEADER_WIDTH_INDEX],c=t[u.HEADER_HEIGHT_INDEX],S=t[u.HEADER_SIZE_INDEX]+4,A=new Uint8Array(e,S);return G(A,{mipMapLevels:a,width:i,height:c,sizeFunction:_,internalFormat:s})}function it(e,t){return(e+3>>2)*(t+3>>2)*8}function Z(e,t){return(e+3>>2)*(t+3>>2)*16}function Go(e){return String.fromCharCode(e&255,e>>8&255,e>>16&255,e>>24&255)}var O={MAGIC_NUMBER:55727696,MAGIC_NUMBER_EXTRA:1347834371,HEADER_LENGTH:13,HEADER_SIZE:52,MAGIC_NUMBER_INDEX:0,PIXEL_FORMAT_INDEX:2,COLOUR_SPACE_INDEX:4,HEIGHT_INDEX:6,WIDTH_INDEX:7,MIPMAPCOUNT_INDEX:11,METADATA_SIZE_INDEX:12},Lo={0:[n.COMPRESSED_RGB_PVRTC_2BPPV1_IMG],1:[n.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG],2:[n.COMPRESSED_RGB_PVRTC_4BPPV1_IMG],3:[n.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG],6:[n.COMPRESSED_RGB_ETC1_WEBGL],7:[n.COMPRESSED_RGB_S3TC_DXT1_EXT],9:[n.COMPRESSED_RGBA_S3TC_DXT3_EXT],11:[n.COMPRESSED_RGBA_S3TC_DXT5_EXT],22:[n.COMPRESSED_RGB8_ETC2],23:[n.COMPRESSED_RGBA8_ETC2_EAC],24:[n.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2],25:[n.COMPRESSED_R11_EAC],26:[n.COMPRESSED_RG11_EAC],27:[n.COMPRESSED_RGBA_ASTC_4X4_KHR,n.COMPRESSED_SRGB8_ALPHA8_ASTC_4X4_KHR],28:[n.COMPRESSED_RGBA_ASTC_5X4_KHR,n.COMPRESSED_SRGB8_ALPHA8_ASTC_5X4_KHR],29:[n.COMPRESSED_RGBA_ASTC_5X5_KHR,n.COMPRESSED_SRGB8_ALPHA8_ASTC_5X5_KHR],30:[n.COMPRESSED_RGBA_ASTC_6X5_KHR,n.COMPRESSED_SRGB8_ALPHA8_ASTC_6X5_KHR],31:[n.COMPRESSED_RGBA_ASTC_6X6_KHR,n.COMPRESSED_SRGB8_ALPHA8_ASTC_6X6_KHR],32:[n.COMPRESSED_RGBA_ASTC_8X5_KHR,n.COMPRESSED_SRGB8_ALPHA8_ASTC_8X5_KHR],33:[n.COMPRESSED_RGBA_ASTC_8X6_KHR,n.COMPRESSED_SRGB8_ALPHA8_ASTC_8X6_KHR],34:[n.COMPRESSED_RGBA_ASTC_8X8_KHR,n.COMPRESSED_SRGB8_ALPHA8_ASTC_8X8_KHR],35:[n.COMPRESSED_RGBA_ASTC_10X5_KHR,n.COMPRESSED_SRGB8_ALPHA8_ASTC_10X5_KHR],36:[n.COMPRESSED_RGBA_ASTC_10X6_KHR,n.COMPRESSED_SRGB8_ALPHA8_ASTC_10X6_KHR],37:[n.COMPRESSED_RGBA_ASTC_10X8_KHR,n.COMPRESSED_SRGB8_ALPHA8_ASTC_10X8_KHR],38:[n.COMPRESSED_RGBA_ASTC_10X10_KHR,n.COMPRESSED_SRGB8_ALPHA8_ASTC_10X10_KHR],39:[n.COMPRESSED_RGBA_ASTC_12X10_KHR,n.COMPRESSED_SRGB8_ALPHA8_ASTC_12X10_KHR],40:[n.COMPRESSED_RGBA_ASTC_12X12_KHR,n.COMPRESSED_SRGB8_ALPHA8_ASTC_12X12_KHR]},Io={0:ct,1:ct,2:Rt,3:Rt,6:N,7:N,9:y,11:y,22:N,23:y,24:N,25:N,26:y,27:y,28:Uo,29:No,30:yo,31:wo,32:bo,33:Ho,34:Vo,35:Xo,36:vo,37:ko,38:Wo,39:zo,40:$o};function St(e){let o=new Uint32Array(e,0,O.HEADER_LENGTH)[O.MAGIC_NUMBER_INDEX];return o===O.MAGIC_NUMBER||o===O.MAGIC_NUMBER_EXTRA}function lt(e){let t=new Uint32Array(e,0,O.HEADER_LENGTH),o=t[O.PIXEL_FORMAT_INDEX],r=t[O.COLOUR_SPACE_INDEX],s=Lo[o]||[],_=s.length>1&&r?s[1]:s[0],a=Io[o],i=t[O.MIPMAPCOUNT_INDEX],c=t[O.WIDTH_INDEX],S=t[O.HEIGHT_INDEX],A=O.HEADER_SIZE+t[O.METADATA_SIZE_INDEX],x=new Uint8Array(e,A);return G(x,{mipMapLevels:i,width:c,height:S,sizeFunction:a,internalFormat:_})}function ct(e,t){return e=Math.max(e,16),t=Math.max(t,8),e*t/4}function Rt(e,t){return e=Math.max(e,8),t=Math.max(t,8),e*t/2}function N(e,t){return Math.floor((e+3)/4)*Math.floor((t+3)/4)*8}function y(e,t){return Math.floor((e+3)/4)*Math.floor((t+3)/4)*16}function Uo(e,t){return Math.floor((e+4)/5)*Math.floor((t+3)/4)*16}function No(e,t){return Math.floor((e+4)/5)*Math.floor((t+4)/5)*16}function yo(e,t){return Math.floor((e+5)/6)*Math.floor((t+4)/5)*16}function wo(e,t){return Math.floor((e+5)/6)*Math.floor((t+5)/6)*16}function bo(e,t){return Math.floor((e+7)/8)*Math.floor((t+4)/5)*16}function Ho(e,t){return Math.floor((e+7)/8)*Math.floor((t+5)/6)*16}function Vo(e,t){return Math.floor((e+7)/8)*Math.floor((t+7)/8)*16}function Xo(e,t){return Math.floor((e+9)/10)*Math.floor((t+4)/5)*16}function vo(e,t){return Math.floor((e+9)/10)*Math.floor((t+5)/6)*16}function ko(e,t){return Math.floor((e+9)/10)*Math.floor((t+7)/8)*16}function Wo(e,t){return Math.floor((e+9)/10)*Math.floor((t+9)/10)*16}function zo(e,t){return Math.floor((e+11)/12)*Math.floor((t+9)/10)*16}function $o(e,t){return Math.floor((e+11)/12)*Math.floor((t+11)/12)*16}function At(e){if(j(e))return ot(e);if(_t(e))return at(e);if(St(e))return lt(e);throw new Error("Texture container format not recognized")}var me={dataType:null,batchType:null,name:"Texture Containers",id:"compressed-texture",module:"textures",version:f,worker:!0,extensions:["ktx","ktx2","dds","pvr"],mimeTypes:["image/ktx2","image/ktx","image/vnd-ms.dds","image/x-dds","application/octet-stream"],binary:!0,options:{"compressed-texture":{libraryPath:"libs/",useBasis:!1}}},Tt={...me,parse:async(e,t)=>t?.["compressed-texture"]?.useBasis?(t.basis={format:{alpha:"BC3",noAlpha:"BC1"},...t.basis,containerFormat:"ktx2",module:"encoder"},(await J(e,t))[0]):At(e)};var Oe={dataType:null,batchType:null,id:"crunch",name:"Crunch",module:"textures",version:f,worker:!0,extensions:["crn"],mimeTypes:["image/crn","image/x-crn","application/octet-stream"],binary:!0,options:{crunch:{libraryPath:"libs/"}}};var pe=new Uint32Array([305419896]),Yo=new Uint8Array(pe.buffer,pe.byteOffset,pe.byteLength),jo=Yo[0]!==18,ft=jo,Jo={u1:Uint8Array,i1:Int8Array,u2:Uint16Array,i2:Int16Array,u4:Uint32Array,i4:Int32Array,f4:Float32Array,f8:Float64Array};function Ce(e,t){let o=new DataView(e),{header:r,headerEndOffset:s}=Zo(o),_=r.descr,a=Jo[_.slice(1,3)];if(!a)throw new Error(`Unimplemented type ${_}`);let c=r.shape?.reduce((A,x)=>A*x)*a.BYTES_PER_ELEMENT;if(e.byteLength<s+c)throw new Error("Buffer overflow");let S=new a(e.slice(s,s+c));if(_[0]===">"&&ft||_[0]==="<"&&!ft)throw new Error("Incorrect endianness");return{data:S,header:r}}function Zo(e){let t=e.getUint8(6),o=8,r;t>=2?(r=e.getUint32(o,!0),o+=4):(r=e.getUint16(o,!0),o+=2);let s=t<=2?"latin1":"utf-8",_=new TextDecoder(s),a=new Uint8Array(e.buffer,o,r),i=_.decode(a);return o+=r,{header:JSON.parse(i.replace(/'/g,'"').replace("False","false").replace("(","[").replace(/,*\),*/g,"]")),headerEndOffset:o}}var qo=new Uint8Array([147,78,85,77,80,89]),de={dataType:null,batchType:null,name:"NPY",id:"npy",module:"textures",version:f,worker:!0,extensions:["npy"],mimeTypes:[],tests:[qo.buffer],options:{npy:{}}},Et={...de,parseSync:Ce,parse:async(e,t)=>Ce(e,t)};var ut={DECODER:"crunch.js"};async function mt(e,t,o){let r=["texture-compressor","--type","s3tc","--compression","DXT1","--quality","normal","--input",e,"--output",t];return await new K().start({command:"npx",arguments:r,spawn:o}),t}var Ot={name:"DDS Texture Container",id:"dds",module:"textures",version:f,extensions:["dds"],options:{texture:{format:"auto",compression:"auto",quality:"auto",mipmap:!1,flipY:!1,toolFlags:""}},encodeURLtoURL:mt,encode(){throw new Error("Not implemented")}};async function pt(e,t={}){let{useSRGB:o=!1,qualityLevel:r=10,encodeUASTC:s=!1,mipmaps:_=!1}=t?.["ktx2-basis-writer"]||{},{BasisEncoder:a}=await U(t),i=new a;try{let c=new Uint8Array(e.width*e.height*4);i.setCreateKTX2File(!0),i.setKTX2UASTCSupercompression(!0),i.setKTX2SRGBTransferFunc(!0),i.setSliceSourceImage(0,e.data,e.width,e.height,!1),i.setPerceptual(o),i.setMipSRGB(o),i.setQualityLevel(r),i.setUASTC(s),i.setMipGen(_);let S=i.encode(c);return c.subarray(0,S).buffer}catch(c){throw console.error("Basis Universal Supercompressed GPU Texture encoder Error: ",c),c}finally{i.delete()}}var Ct={name:"Basis Universal Supercompressed GPU Texture",id:"ktx2-basis-writer",module:"textures",version:f,extensions:["ktx2"],options:{["ktx2-basis-writer"]:{useSRGB:!1,qualityLevel:10,encodeUASTC:!1,mipmaps:!1}},encode:pt};var dt="4.3.0-beta.2";var Qo=globalThis.loaders?.parseImageNode,Me=typeof Image<"u",xe=typeof ImageBitmap<"u",er=Boolean(Qo),Be=_e?!0:er;function Mt(e){switch(e){case"auto":return xe||Me||Be;case"imagebitmap":return xe;case"image":return Me;case"data":return Be;default:throw new Error(`@loaders.gl/images: image ${e} not supported in this environment`)}}function xt(){if(xe)return"imagebitmap";if(Me)return"image";if(Be)return"data";throw new Error("Install '@loaders.gl/polyfills' to parse images under Node.js")}function Bt(e){let t=tr(e);if(!t)throw new Error("Not an image");return t}function De(e){return q(e)}function q(e){switch(Bt(e)){case"data":return e;case"image":case"imagebitmap":let t=document.createElement("canvas"),o=t.getContext("2d");if(!o)throw new Error("getImageData");return t.width=e.width,t.height=e.height,o.drawImage(e,0,0),o.getImageData(0,0,e.width,e.height);default:throw new Error("getImageData")}}function tr(e){return typeof ImageBitmap<"u"&&e instanceof ImageBitmap?"imagebitmap":typeof Image<"u"&&e instanceof Image?"image":e&&typeof e=="object"&&e.data&&e.width&&e.height?"data":null}var or=/^data:image\/svg\+xml/,rr=/\.svg((\?|#).*)?$/;function Q(e){return e&&(or.test(e)||rr.test(e))}function Dt(e,t){if(Q(t)){let r=new TextDecoder().decode(e);try{typeof unescape=="function"&&typeof encodeURIComponent=="function"&&(r=unescape(encodeURIComponent(r)))}catch(_){throw new Error(_.message)}return`data:image/svg+xml;base64,${btoa(r)}`}return ge(e,t)}function ge(e,t){if(Q(t))throw new Error("SVG cannot be parsed directly to imagebitmap");return new Blob([new Uint8Array(e)])}async function ee(e,t,o){let r=Dt(e,o),s=self.URL||self.webkitURL,_=typeof r!="string"&&s.createObjectURL(r);try{return await nr(_||r,t)}finally{_&&s.revokeObjectURL(_)}}async function nr(e,t){let o=new Image;return o.src=e,t.image&&t.image.decode&&o.decode?(await o.decode(),o):await new Promise((r,s)=>{try{o.onload=()=>r(o),o.onerror=_=>{let a=_ instanceof Error?_.message:"error";s(new Error(a))}}catch(_){s(_)}})}var sr={},gt=!0;async function Pt(e,t,o){let r;Q(o)?r=await ee(e,t,o):r=ge(e,o);let s=t&&t.imagebitmap;return await _r(r,s)}async function _r(e,t=null){if((ar(t)||!gt)&&(t=null),t)try{return await createImageBitmap(e,t)}catch(o){console.warn(o),gt=!1}return await createImageBitmap(e)}function ar(e){for(let t in e||sr)return!1;return!0}function ht(e){return!Sr(e,"ftyp",4)||!(e[8]&96)?null:ir(e)}function ir(e){switch(cr(e,8,12).replace("\0"," ").trim()){case"avif":case"avis":return{extension:"avif",mimeType:"image/avif"};default:return null}}function cr(e,t,o){return String.fromCharCode(...e.slice(t,o))}function Rr(e){return[...e].map(t=>t.charCodeAt(0))}function Sr(e,t,o=0){let r=Rr(t);for(let s=0;s<r.length;++s)if(r[s]!==e[s+o])return!1;return!0}var M=!1,w=!0;function te(e){let t=b(e);return Ar(t)||Er(t)||Tr(t)||fr(t)||lr(t)}function lr(e){let t=new Uint8Array(e instanceof DataView?e.buffer:e),o=ht(t);return o?{mimeType:o.mimeType,width:0,height:0}:null}function Ar(e){let t=b(e);return t.byteLength>=24&&t.getUint32(0,M)===2303741511?{mimeType:"image/png",width:t.getUint32(16,M),height:t.getUint32(20,M)}:null}function Tr(e){let t=b(e);return t.byteLength>=10&&t.getUint32(0,M)===1195984440?{mimeType:"image/gif",width:t.getUint16(6,w),height:t.getUint16(8,w)}:null}function fr(e){let t=b(e);return t.byteLength>=14&&t.getUint16(0,M)===16973&&t.getUint32(2,w)===t.byteLength?{mimeType:"image/bmp",width:t.getUint32(18,w),height:t.getUint32(22,w)}:null}function Er(e){let t=b(e);if(!(t.byteLength>=3&&t.getUint16(0,M)===65496&&t.getUint8(2)===255))return null;let{tableMarkers:r,sofMarkers:s}=ur(),_=2;for(;_+9<t.byteLength;){let a=t.getUint16(_,M);if(s.has(a))return{mimeType:"image/jpeg",height:t.getUint16(_+5,M),width:t.getUint16(_+7,M)};if(!r.has(a))return null;_+=2,_+=t.getUint16(_,M)}return null}function ur(){let e=new Set([65499,65476,65484,65501,65534]);for(let o=65504;o<65520;++o)e.add(o);return{tableMarkers:e,sofMarkers:new Set([65472,65473,65474,65475,65477,65478,65479,65481,65482,65483,65485,65486,65487,65502])}}function b(e){if(e instanceof DataView)return e;if(ArrayBuffer.isView(e))return new DataView(e.buffer);if(e instanceof ArrayBuffer)return new DataView(e);throw new Error("toDataView")}async function Kt(e,t){let{mimeType:o}=te(e)||{},r=globalThis.loaders?.parseImageNode;return p(r),await r(e,o)}async function Ft(e,t,o){t=t||{};let s=(t.image||{}).type||"auto",{url:_}=o||{},a=mr(s),i;switch(a){case"imagebitmap":i=await Pt(e,t,_);break;case"image":i=await ee(e,t,_);break;case"data":i=await Kt(e,t);break;default:p(!1)}return s==="data"&&(i=q(i)),i}function mr(e){switch(e){case"auto":case"data":return xt();default:return Mt(e),e}}var Or=["png","jpg","jpeg","gif","webp","bmp","ico","svg","avif"],pr=["image/png","image/jpeg","image/gif","image/webp","image/avif","image/bmp","image/vnd.microsoft.icon","image/svg+xml"],Cr={image:{type:"auto",decode:!0}},D={dataType:null,batchType:null,id:"image",module:"images",name:"Images",version:dt,mimeTypes:pr,extensions:Or,parse:Ft,tests:[e=>Boolean(te(new DataView(e)))],options:Cr};function oe(e,t,o){let r=typeof e=="function"?e({...t,...o}):e,s=t.baseUrl;return s&&(r=s[s.length-1]==="/"?`${s}${r}`:`${s}/${r}`),Se(r)}var dr=e=>e&&typeof e=="object";async function Gt(e,t,o={}){return await Pe(e,t,o)}async function Pe(e,t,o){return Array.isArray(e)?await xr(e,t,o):dr(e)?await Mr(e,t,o):await t(e,o)}async function Mr(e,t,o){let r=[],s={};for(let _ in e){let a=e[_],i=Pe(a,t,o).then(c=>{s[_]=c});r.push(i)}return await Promise.all(r),s}async function xr(e,t,o={}){let r=e.map(s=>Pe(s,t,o));return await Promise.all(r)}async function L(e,t,o){return await Gt(e,r=>he(r,t,o))}async function he(e,t,o){let s=await(await fetch(e,o.fetch)).arrayBuffer();return await t(s,o)}async function Lt(e,t={}){let o=await H(e,t);return await L(o,D.parse,t)}async function H(e,t,o={}){let r=t&&t.image&&t.image.mipLevels||0;return r!==0?await Br(e,r,t,o):oe(e,t,o)}async function Br(e,t,o,r){let s=[];if(t==="auto"){let _=oe(e,o,{...r,lod:0}),a=await he(_,D.parse,o),{width:i,height:c}=De(a);t=Dr({width:i,height:c}),s.push(_)}p(t>0);for(let _=s.length;_<t;++_){let a=oe(e,o,{...r,lod:_});s.push(a)}return s}function Dr(e){return 1+Math.floor(Math.log2(Math.max(e.width,e.height)))}async function It(e,t,o={}){let r=await gr(e,t,o);return await L(r,D.parse,o)}async function gr(e,t,o={}){let r=[];for(let s=0;s<e;s++){let _=H(t,o,{index:s});r.push(_)}return await Promise.all(r)}var Pr=34069,hr=34070,Kr=34071,Fr=34072,Gr=34073,Lr=34074,Ut=[{face:Pr,direction:"right",axis:"x",sign:"positive"},{face:hr,direction:"left",axis:"x",sign:"negative"},{face:Kr,direction:"top",axis:"y",sign:"positive"},{face:Fr,direction:"bottom",axis:"y",sign:"negative"},{face:Gr,direction:"front",axis:"z",sign:"positive"},{face:Lr,direction:"back",axis:"z",sign:"negative"}];async function Ir(e,t){let o={},r=[],s=0;for(let _=0;_<Ut.length;++_){let a=Ut[s],i=H(e,t,{...a,index:s++}).then(c=>{o[a.face]=c});r.push(i)}return await Promise.all(r),o}async function Nt(e,t={}){let o=await Ir(e,t);return await L(o,D.parse,t)}var Ur={name:"Basis Universal Supercompressed GPU Texture",id:"ktx2-basis-writer",module:"textures",version:f,extensions:["ktx2"],worker:!0,options:{useSRGB:!1,qualityLevel:10,encodeUASTC:!1,mipmaps:!1}};return oo(V);})();
7
+ "use strict";var __exports__=(()=>{var Jt=Object.create;var k=Object.defineProperty;var Zt=Object.getOwnPropertyDescriptor;var qt=Object.getOwnPropertyNames;var Qt=Object.getPrototypeOf,eo=Object.prototype.hasOwnProperty;var we=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),to=(e,t)=>{for(var o in t)k(e,o,{get:t[o],enumerable:!0})},v=(e,t,o,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of qt(t))!eo.call(e,s)&&s!==o&&k(e,s,{get:()=>t[s],enumerable:!(r=Zt(t,s))||r.enumerable});return e},W=(e,t,o)=>(v(e,t,"default"),o&&v(o,t,"default")),se=(e,t,o)=>(o=e!=null?Jt(Qt(e)):{},v(t||!e||!e.__esModule?k(o,"default",{value:e,enumerable:!0}):o,e)),oo=e=>v(k({},"__esModule",{value:!0}),e);var He=we((yr,be)=>{be.exports=globalThis.loaders});var Re=we(()=>{});var V={};to(V,{BASIS_EXTERNAL_LIBRARIES:()=>F,BasisLoader:()=>st,BasisWorkerLoader:()=>ue,CRUNCH_EXTERNAL_LIBRARIES:()=>ut,CompressedTextureLoader:()=>Tt,CompressedTextureWorkerLoader:()=>me,CompressedTextureWriter:()=>Ot,CrunchLoader:()=>Oe,CrunchWorkerLoader:()=>Oe,GL_EXTENSIONS_CONSTANTS:()=>n,KTX2BasisWriter:()=>Ct,KTX2BasisWriterWorker:()=>Ur,NPYLoader:()=>Et,NPYWorkerLoader:()=>de,getSupportedGPUTextureFormats:()=>Y,loadImageTexture:()=>Lt,loadImageTextureArray:()=>It,loadImageTextureCube:()=>Nt,selectSupportedBasisFormat:()=>Ee});W(V,se(He(),1));var f="4.3.0-beta.3";function p(e,t){if(!e)throw new Error(t||"loader assertion failed.")}var C={self:typeof self<"u"&&self,window:typeof window<"u"&&window,global:typeof global<"u"&&global,document:typeof document<"u"&&document},ro=C.self||C.window||C.global||{},no=C.window||C.self||C.global||{},so=C.global||C.self||C.window||{},_o=C.document||{};var _e=Boolean(typeof process!="object"||String(process)!=="[object process]"||process.browser);var Ve=typeof process<"u"&&process.version&&/v([0-9]*)/.exec(process.version),ao=Ve&&parseFloat(Ve[1])||0;function ae(e){globalThis.loaders||={},globalThis.loaders.modules||={},Object.assign(globalThis.loaders.modules,e)}function ie(e){return globalThis.loaders?.modules?.[e]||null}function io(){return globalThis._loadersgl_?.version||(globalThis._loadersgl_=globalThis._loadersgl_||{},globalThis._loadersgl_.version="4.3.0-beta.3"),globalThis._loadersgl_.version}var Xe=io();function ve(e,t){if(!e)throw new Error(t||"loaders.gl assertion failed.")}var d={self:typeof self<"u"&&self,window:typeof window<"u"&&window,global:typeof global<"u"&&global,document:typeof document<"u"&&document},kr=d.self||d.window||d.global||{},Wr=d.window||d.self||d.global||{},zr=d.global||d.self||d.window||{},$r=d.document||{};var P=typeof process!="object"||String(process)!=="[object process]"||process.browser,z=typeof importScripts=="function",Yr=typeof window<"u"&&typeof window.orientation<"u",ke=typeof process<"u"&&process.version&&/v([0-9]*)/.exec(process.version),jr=ke&&parseFloat(ke[1])||0;var ce={};async function h(e,t=null,o={},r=null){return t&&(e=We(e,t,o,r)),ce[e]=ce[e]||co(e),await ce[e]}function We(e,t,o={},r=null){if(!o.useLocalLibraries&&e.startsWith("http"))return e;r=r||e;let s=o.modules||{};return s[r]?s[r]:P?o.CDN?(ve(o.CDN.startsWith("http")),`${o.CDN}/${t}@${Xe}/dist/libs/${r}`):z?`../src/libs/${r}`:`modules/${t}/src/libs/${r}`:`modules/${t}/dist/libs/${r}`}async function co(e){if(e.endsWith("wasm"))return await So(e);if(!P)try{let{requireFromFile:o}=globalThis.loaders||{};return await o?.(e)}catch(o){return console.error(o),null}if(z)return importScripts(e);let t=await lo(e);return Ro(t,e)}function Ro(e,t){if(!P){let{requireFromString:r}=globalThis.loaders||{};return r?.(e,t)}if(z)return eval.call(globalThis,e),null;let o=document.createElement("script");o.id=t;try{o.appendChild(document.createTextNode(e))}catch{o.text=e}return document.body.appendChild(o),null}async function So(e){let{readFileAsArrayBuffer:t}=globalThis.loaders||{};return P||!t||e.startsWith("http")?await(await fetch(e)).arrayBuffer():await t(e)}async function lo(e){let{readFileAsText:t}=globalThis.loaders||{};return P||!t||e.startsWith("http")?await(await fetch(e)).text():await t(e)}var je=se(Re(),1);var ze=se(Re(),1);function $e(e=3e3){return new Promise(t=>{ze.default.exec("lsof -i -P -n | grep LISTEN",(o,r)=>{if(o){t(e);return}let s=[],_=/:(\d+) \(LISTEN\)/;r.split(`
8
+ `).forEach(i=>{let c=_.exec(i);c&&s.push(Number(c[1]))});let a=e;for(;s.includes(a);)a++;t(a)})})}var Ye={command:"",arguments:[],port:5e3,autoPort:!0,wait:2e3,onSuccess:e=>{console.log(`Started ${e.props.command}`)}},K=class{id;props={...Ye};childProcess=null;port=0;successTimer;constructor({id:t="browser-driver"}={}){this.id=t}async start(t){t={...Ye,...t},this.props=t;let o=[...t.arguments];return this.port=Number(t.port),t.portArg&&(t.autoPort&&(this.port=await $e(t.port)),o.push(t.portArg,String(this.port))),await new Promise((r,s)=>{try{this._setTimeout(()=>{t.onSuccess&&t.onSuccess(this),r({})}),console.log(`Spawning ${t.command} ${t.arguments.join(" ")}`);let _=(void 0)(t.command,o,t.spawn);this.childProcess=_,_.stdout.on("data",a=>{console.log(a.toString())}),_.stderr.on("data",a=>{console.log(`Child process wrote to stderr: "${a}".`),t.ignoreStderr||(this._clearTimeout(),s(new Error(a)))}),_.on("error",a=>{console.log(`Child process errored with ${a}`),this._clearTimeout(),s(a)}),_.on("close",a=>{console.log(`Child process exited with ${a}`),this.childProcess=null,this._clearTimeout(),r({})})}catch(_){s(_)}})}async stop(){this.childProcess&&(this.childProcess.kill(),this.childProcess=null)}async exit(t=0){try{await this.stop(),process.exit(t)}catch(o){console.error(o.message||o),process.exit(1)}}_setTimeout(t){Number(this.props.wait)>0&&(this.successTimer=setTimeout(t,this.props.wait))}_clearTimeout(){this.successTimer&&clearTimeout(this.successTimer)}};var Ao="",Je={};function Se(e){for(let t in Je)if(e.startsWith(t)){let o=Je[t];e=e.replace(t,o)}return!e.startsWith("http://")&&!e.startsWith("https://")&&(e=`${Ao}${e}`),e}var F={TRANSCODER:"basis_transcoder.js",TRANSCODER_WASM:"basis_transcoder.wasm",ENCODER:"basis_encoder.js",ENCODER_WASM:"basis_encoder.wasm"},Ze;async function Ae(e){ae(e.modules);let t=ie("basis");return t||(Ze||=To(e),await Ze)}async function To(e){let t=null,o=null;return[t,o]=await Promise.all([await h(F.TRANSCODER,"textures",e),await h(F.TRANSCODER_WASM,"textures",e)]),t=t||globalThis.BASIS,await fo(t,o)}function fo(e,t){let o={};return t&&(o.wasmBinary=t),new Promise(r=>{e(o).then(s=>{let{BasisFile:_,initializeBasis:a}=s;a(),r({BasisFile:_})})})}var le;async function U(e){let t=e.modules||{};return t.basisEncoder?t.basisEncoder:(le=le||Eo(e),await le)}async function Eo(e){let t=null,o=null;return[t,o]=await Promise.all([await h(F.ENCODER,"textures",e),await h(F.ENCODER_WASM,"textures",e)]),t=t||globalThis.BASIS,await uo(t,o)}function uo(e,t){let o={};return t&&(o.wasmBinary=t),new Promise(r=>{e(o).then(s=>{let{BasisFile:_,KTX2File:a,initializeBasis:i,BasisEncoder:c}=s;i(),r({BasisFile:_,KTX2File:a,BasisEncoder:c})})})}var n={COMPRESSED_RGB_S3TC_DXT1_EXT:33776,COMPRESSED_RGBA_S3TC_DXT1_EXT:33777,COMPRESSED_RGBA_S3TC_DXT3_EXT:33778,COMPRESSED_RGBA_S3TC_DXT5_EXT:33779,COMPRESSED_R11_EAC:37488,COMPRESSED_SIGNED_R11_EAC:37489,COMPRESSED_RG11_EAC:37490,COMPRESSED_SIGNED_RG11_EAC:37491,COMPRESSED_RGB8_ETC2:37492,COMPRESSED_RGBA8_ETC2_EAC:37493,COMPRESSED_SRGB8_ETC2:37494,COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:37495,COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:37496,COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:37497,COMPRESSED_RGB_PVRTC_4BPPV1_IMG:35840,COMPRESSED_RGBA_PVRTC_4BPPV1_IMG:35842,COMPRESSED_RGB_PVRTC_2BPPV1_IMG:35841,COMPRESSED_RGBA_PVRTC_2BPPV1_IMG:35843,COMPRESSED_RGB_ETC1_WEBGL:36196,COMPRESSED_RGB_ATC_WEBGL:35986,COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL:35987,COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL:34798,COMPRESSED_RGBA_ASTC_4X4_KHR:37808,COMPRESSED_RGBA_ASTC_5X4_KHR:37809,COMPRESSED_RGBA_ASTC_5X5_KHR:37810,COMPRESSED_RGBA_ASTC_6X5_KHR:37811,COMPRESSED_RGBA_ASTC_6X6_KHR:37812,COMPRESSED_RGBA_ASTC_8X5_KHR:37813,COMPRESSED_RGBA_ASTC_8X6_KHR:37814,COMPRESSED_RGBA_ASTC_8X8_KHR:37815,COMPRESSED_RGBA_ASTC_10X5_KHR:37816,COMPRESSED_RGBA_ASTC_10X6_KHR:37817,COMPRESSED_RGBA_ASTC_10X8_KHR:37818,COMPRESSED_RGBA_ASTC_10X10_KHR:37819,COMPRESSED_RGBA_ASTC_12X10_KHR:37820,COMPRESSED_RGBA_ASTC_12X12_KHR:37821,COMPRESSED_SRGB8_ALPHA8_ASTC_4X4_KHR:37840,COMPRESSED_SRGB8_ALPHA8_ASTC_5X4_KHR:37841,COMPRESSED_SRGB8_ALPHA8_ASTC_5X5_KHR:37842,COMPRESSED_SRGB8_ALPHA8_ASTC_6X5_KHR:37843,COMPRESSED_SRGB8_ALPHA8_ASTC_6X6_KHR:37844,COMPRESSED_SRGB8_ALPHA8_ASTC_8X5_KHR:37845,COMPRESSED_SRGB8_ALPHA8_ASTC_8X6_KHR:37846,COMPRESSED_SRGB8_ALPHA8_ASTC_8X8_KHR:37847,COMPRESSED_SRGB8_ALPHA8_ASTC_10X5_KHR:37848,COMPRESSED_SRGB8_ALPHA8_ASTC_10X6_KHR:37849,COMPRESSED_SRGB8_ALPHA8_ASTC_10X8_KHR:37850,COMPRESSED_SRGB8_ALPHA8_ASTC_10X10_KHR:37851,COMPRESSED_SRGB8_ALPHA8_ASTC_12X10_KHR:37852,COMPRESSED_SRGB8_ALPHA8_ASTC_12X12_KHR:37853,COMPRESSED_RED_RGTC1_EXT:36283,COMPRESSED_SIGNED_RED_RGTC1_EXT:36284,COMPRESSED_RED_GREEN_RGTC2_EXT:36285,COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT:36286,COMPRESSED_SRGB_S3TC_DXT1_EXT:35916,COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:35917,COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:35918,COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:35919};var mo=["","WEBKIT_","MOZ_"],qe={WEBGL_compressed_texture_s3tc:"dxt",WEBGL_compressed_texture_s3tc_srgb:"dxt-srgb",WEBGL_compressed_texture_etc1:"etc1",WEBGL_compressed_texture_etc:"etc2",WEBGL_compressed_texture_pvrtc:"pvrtc",WEBGL_compressed_texture_atc:"atc",WEBGL_compressed_texture_astc:"astc",EXT_texture_compression_rgtc:"rgtc"},$=null;function Y(e){if(!$){e=e||Oo()||void 0,$=new Set;for(let t of mo)for(let o in qe)if(e&&e.getExtension(`${t}${o}`)){let r=qe[o];$.add(r)}}return $}function Oo(){try{return document.createElement("canvas").getContext("webgl")}catch{return null}}var Te=class{constructor(){this.vkFormat=0,this.typeSize=1,this.pixelWidth=0,this.pixelHeight=0,this.pixelDepth=0,this.layerCount=0,this.faceCount=1,this.supercompressionScheme=0,this.levels=[],this.dataFormatDescriptor=[{vendorId:0,descriptorType:0,descriptorBlockSize:0,versionNumber:2,colorModel:0,colorPrimaries:1,transferFunction:2,flags:0,texelBlockDimension:[0,0,0,0],bytesPlane:[0,0,0,0,0,0,0,0],samples:[]}],this.keyValue={},this.globalData=null}},g=class{constructor(t,o,r,s){this._dataView=void 0,this._littleEndian=void 0,this._offset=void 0,this._dataView=new DataView(t.buffer,t.byteOffset+o,r),this._littleEndian=s,this._offset=0}_nextUint8(){let t=this._dataView.getUint8(this._offset);return this._offset+=1,t}_nextUint16(){let t=this._dataView.getUint16(this._offset,this._littleEndian);return this._offset+=2,t}_nextUint32(){let t=this._dataView.getUint32(this._offset,this._littleEndian);return this._offset+=4,t}_nextUint64(){let t=this._dataView.getUint32(this._offset,this._littleEndian),o=this._dataView.getUint32(this._offset+4,this._littleEndian),r=t+2**32*o;return this._offset+=8,r}_nextInt32(){let t=this._dataView.getInt32(this._offset,this._littleEndian);return this._offset+=4,t}_nextUint8Array(t){let o=new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+this._offset,t);return this._offset+=t,o}_skip(t){return this._offset+=t,this}_scan(t,o=0){let r=this._offset,s=0;for(;this._dataView.getUint8(this._offset)!==o&&s<t;)s++,this._offset++;return s<t&&this._offset++,new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+r,s)}};var gn=new Uint8Array([0]),l=[171,75,84,88,32,50,48,187,13,10,26,10];function Qe(e){return new TextDecoder().decode(e)}function et(e){let t=new Uint8Array(e.buffer,e.byteOffset,l.length);if(t[0]!==l[0]||t[1]!==l[1]||t[2]!==l[2]||t[3]!==l[3]||t[4]!==l[4]||t[5]!==l[5]||t[6]!==l[6]||t[7]!==l[7]||t[8]!==l[8]||t[9]!==l[9]||t[10]!==l[10]||t[11]!==l[11])throw new Error("Missing KTX 2.0 identifier.");let o=new Te,r=17*Uint32Array.BYTES_PER_ELEMENT,s=new g(e,l.length,r,!0);o.vkFormat=s._nextUint32(),o.typeSize=s._nextUint32(),o.pixelWidth=s._nextUint32(),o.pixelHeight=s._nextUint32(),o.pixelDepth=s._nextUint32(),o.layerCount=s._nextUint32(),o.faceCount=s._nextUint32();let _=s._nextUint32();o.supercompressionScheme=s._nextUint32();let a=s._nextUint32(),i=s._nextUint32(),c=s._nextUint32(),S=s._nextUint32(),A=s._nextUint64(),x=s._nextUint64(),yt=_*3*8,re=new g(e,l.length+r,yt,!0);for(let T=0;T<_;T++)o.levels.push({levelData:new Uint8Array(e.buffer,e.byteOffset+re._nextUint64(),re._nextUint64()),uncompressedByteLength:re._nextUint64()});let R=new g(e,a,i,!0),ne={vendorId:R._skip(4)._nextUint16(),descriptorType:R._nextUint16(),versionNumber:R._nextUint16(),descriptorBlockSize:R._nextUint16(),colorModel:R._nextUint8(),colorPrimaries:R._nextUint8(),transferFunction:R._nextUint8(),flags:R._nextUint8(),texelBlockDimension:[R._nextUint8(),R._nextUint8(),R._nextUint8(),R._nextUint8()],bytesPlane:[R._nextUint8(),R._nextUint8(),R._nextUint8(),R._nextUint8(),R._nextUint8(),R._nextUint8(),R._nextUint8(),R._nextUint8()],samples:[]},wt=6,bt=4,Ht=(ne.descriptorBlockSize/4-wt)/bt;for(let T=0;T<Ht;T++){let B={bitOffset:R._nextUint16(),bitLength:R._nextUint8(),channelType:R._nextUint8(),samplePosition:[R._nextUint8(),R._nextUint8(),R._nextUint8(),R._nextUint8()],sampleLower:-1/0,sampleUpper:1/0};B.channelType&64?(B.sampleLower=R._nextInt32(),B.sampleUpper=R._nextInt32()):(B.sampleLower=R._nextUint32(),B.sampleUpper=R._nextUint32()),ne.samples[T]=B}o.dataFormatDescriptor.length=0,o.dataFormatDescriptor.push(ne);let I=new g(e,c,S,!0);for(;I._offset<S;){let T=I._nextUint32(),B=I._scan(T),X=Qe(B);if(o.keyValue[X]=I._nextUint8Array(T-B.byteLength-1),X.match(/^ktx/i)){let ye=Qe(o.keyValue[X]);o.keyValue[X]=ye.substring(0,ye.lastIndexOf("\0"))}let jt=T%4?4-T%4:0;I._skip(jt)}if(x<=0)return o;let m=new g(e,A,x,!0),Vt=m._nextUint16(),Xt=m._nextUint16(),Ke=m._nextUint32(),Fe=m._nextUint32(),Ge=m._nextUint32(),vt=m._nextUint32(),Le=[];for(let T=0;T<_;T++)Le.push({imageFlags:m._nextUint32(),rgbSliceByteOffset:m._nextUint32(),rgbSliceByteLength:m._nextUint32(),alphaSliceByteOffset:m._nextUint32(),alphaSliceByteLength:m._nextUint32()});let Ie=A+m._offset,Ue=Ie+Ke,Ne=Ue+Fe,kt=Ne+Ge,Wt=new Uint8Array(e.buffer,e.byteOffset+Ie,Ke),zt=new Uint8Array(e.buffer,e.byteOffset+Ue,Fe),$t=new Uint8Array(e.buffer,e.byteOffset+Ne,Ge),Yt=new Uint8Array(e.buffer,e.byteOffset+kt,vt);return o.globalData={endpointCount:Vt,selectorCount:Xt,imageDescs:Le,endpointsData:Wt,selectorsData:zt,tablesData:$t,extendedData:Yt},o}function G(e,t){let o=new Array(t.mipMapLevels),r=t.width,s=t.height,_=0;for(let a=0;a<t.mipMapLevels;++a){let i=Co(t,r,s,e,a),c=po(e,a,_,i);o[a]={compressed:!0,format:t.internalFormat,data:c,width:r,height:s,levelSize:i},r=Math.max(1,r>>1),s=Math.max(1,s>>1),_+=i}return o}function po(e,t,o,r){return Array.isArray(e)?e[t].levelData:new Uint8Array(e.buffer,e.byteOffset+o,r)}function Co(e,t,o,r,s){return Array.isArray(r)?e.sizeFunction(r[s]):e.sizeFunction(t,o)}var Mo={131:n.COMPRESSED_RGB_S3TC_DXT1_EXT,132:n.COMPRESSED_SRGB_S3TC_DXT1_EXT,133:n.COMPRESSED_RGBA_S3TC_DXT1_EXT,134:n.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT,135:n.COMPRESSED_RGBA_S3TC_DXT3_EXT,136:n.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT,137:n.COMPRESSED_RGBA_S3TC_DXT5_EXT,138:n.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT,139:n.COMPRESSED_RED_RGTC1_EXT,140:n.COMPRESSED_SIGNED_RED_RGTC1_EXT,141:n.COMPRESSED_RED_GREEN_RGTC2_EXT,142:n.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT,147:n.COMPRESSED_RGB8_ETC2,148:n.COMPRESSED_SRGB8_ETC2,149:n.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2,150:n.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2,151:n.COMPRESSED_RGBA8_ETC2_EAC,152:n.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC,153:n.COMPRESSED_R11_EAC,154:n.COMPRESSED_SIGNED_R11_EAC,155:n.COMPRESSED_RG11_EAC,156:n.COMPRESSED_SIGNED_RG11_EAC,157:n.COMPRESSED_RGBA_ASTC_4x4_KHR,158:n.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR,159:n.COMPRESSED_RGBA_ASTC_5x4_KHR,160:n.COMPRESSED_SRGB8_ALPHA8_ASTC_5X4_KHR,161:n.COMPRESSED_RGBA_ASTC_5x5_KHR,162:n.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR,163:n.COMPRESSED_RGBA_ASTC_6x5_KHR,164:n.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR,165:n.COMPRESSED_RGBA_ASTC_6x6_KHR,166:n.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR,167:n.COMPRESSED_RGBA_ASTC_8x5_KHR,168:n.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR,169:n.COMPRESSED_RGBA_ASTC_8x6_KHR,170:n.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR,171:n.COMPRESSED_RGBA_ASTC_8x8_KHR,172:n.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR,173:n.COMPRESSED_RGBA_ASTC_10x5_KHR,174:n.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR,175:n.COMPRESSED_RGBA_ASTC_10x6_KHR,176:n.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR,177:n.COMPRESSED_RGBA_ASTC_10x8_KHR,178:n.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR,179:n.COMPRESSED_RGBA_ASTC_10x10_KHR,180:n.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR,181:n.COMPRESSED_RGBA_ASTC_12x10_KHR,182:n.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR,183:n.COMPRESSED_RGBA_ASTC_12x12_KHR,184:n.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR,1000054e3:n.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG,1000054001:n.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,1000066e3:n.COMPRESSED_RGBA_ASTC_4x4_KHR,1000066001:n.COMPRESSED_RGBA_ASTC_5x4_KHR,1000066002:n.COMPRESSED_RGBA_ASTC_5x5_KHR,1000066003:n.COMPRESSED_RGBA_ASTC_6x5_KHR,1000066004:n.COMPRESSED_RGBA_ASTC_6x6_KHR,1000066005:n.COMPRESSED_RGBA_ASTC_8x5_KHR,1000066006:n.COMPRESSED_RGBA_ASTC_8x6_KHR,1000066007:n.COMPRESSED_RGBA_ASTC_8x8_KHR,1000066008:n.COMPRESSED_RGBA_ASTC_10x5_KHR,1000066009:n.COMPRESSED_RGBA_ASTC_10x6_KHR,1000066010:n.COMPRESSED_RGBA_ASTC_10x8_KHR,1000066011:n.COMPRESSED_RGBA_ASTC_10x10_KHR,1000066012:n.COMPRESSED_RGBA_ASTC_12x10_KHR,1000066013:n.COMPRESSED_RGBA_ASTC_12x12_KHR};function tt(e){return Mo[e]}var E=[171,75,84,88,32,50,48,187,13,10,26,10];function j(e){let t=new Uint8Array(e);return!(t.byteLength<E.length||t[0]!==E[0]||t[1]!==E[1]||t[2]!==E[2]||t[3]!==E[3]||t[4]!==E[4]||t[5]!==E[5]||t[6]!==E[6]||t[7]!==E[7]||t[8]!==E[8]||t[9]!==E[9]||t[10]!==E[10]||t[11]!==E[11])}function ot(e){let t=new Uint8Array(e),o=et(t),r=Math.max(1,o.levels.length),s=o.pixelWidth,_=o.pixelHeight,a=tt(o.vkFormat);return G(o.levels,{mipMapLevels:r,width:s,height:_,sizeFunction:i=>i.uncompressedByteLength,internalFormat:a})}var xo={etc1:{basisFormat:0,compressed:!0,format:n.COMPRESSED_RGB_ETC1_WEBGL},etc2:{basisFormat:1,compressed:!0},bc1:{basisFormat:2,compressed:!0,format:n.COMPRESSED_RGB_S3TC_DXT1_EXT},bc3:{basisFormat:3,compressed:!0,format:n.COMPRESSED_RGBA_S3TC_DXT5_EXT},bc4:{basisFormat:4,compressed:!0},bc5:{basisFormat:5,compressed:!0},"bc7-m6-opaque-only":{basisFormat:6,compressed:!0},"bc7-m5":{basisFormat:7,compressed:!0},"pvrtc1-4-rgb":{basisFormat:8,compressed:!0,format:n.COMPRESSED_RGB_PVRTC_4BPPV1_IMG},"pvrtc1-4-rgba":{basisFormat:9,compressed:!0,format:n.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG},"astc-4x4":{basisFormat:10,compressed:!0,format:n.COMPRESSED_RGBA_ASTC_4X4_KHR},"atc-rgb":{basisFormat:11,compressed:!0},"atc-rgba-interpolated-alpha":{basisFormat:12,compressed:!0},rgba32:{basisFormat:13,compressed:!1},rgb565:{basisFormat:14,compressed:!1},bgr565:{basisFormat:15,compressed:!1},rgba4444:{basisFormat:16,compressed:!1}};async function J(e,t){if(t.basis.containerFormat==="auto"){if(j(e)){let r=await U(t);return rt(r.KTX2File,e,t)}let{BasisFile:o}=await Ae(t);return fe(o,e,t)}switch(t.basis.module){case"encoder":let o=await U(t);switch(t.basis.containerFormat){case"ktx2":return rt(o.KTX2File,e,t);case"basis":default:return fe(o.BasisFile,e,t)}case"transcoder":default:let{BasisFile:r}=await Ae(t);return fe(r,e,t)}}function fe(e,t,o){let r=new e(new Uint8Array(t));try{if(!r.startTranscoding())throw new Error("Failed to start basis transcoding");let s=r.getNumImages(),_=[];for(let a=0;a<s;a++){let i=r.getNumLevels(a),c=[];for(let S=0;S<i;S++)c.push(Bo(r,a,S,o));_.push(c)}return _}finally{r.close(),r.delete()}}function Bo(e,t,o,r){let s=e.getImageWidth(t,o),_=e.getImageHeight(t,o),a=e.getHasAlpha(),{compressed:i,format:c,basisFormat:S}=nt(r,a),A=e.getImageTranscodedSizeInBytes(t,o,S),x=new Uint8Array(A);if(!e.transcodeImage(x,t,o,S,0,0))throw new Error("failed to start Basis transcoding");return{width:s,height:_,data:x,compressed:i,format:c,hasAlpha:a}}function rt(e,t,o){let r=new e(new Uint8Array(t));try{if(!r.startTranscoding())throw new Error("failed to start KTX2 transcoding");let s=r.getLevels(),_=[];for(let a=0;a<s;a++)_.push(Do(r,a,o));return[_]}finally{r.close(),r.delete()}}function Do(e,t,o){let{alphaFlag:r,height:s,width:_}=e.getImageLevelInfo(t,0,0),{compressed:a,format:i,basisFormat:c}=nt(o,r),S=e.getImageTranscodedSizeInBytes(t,0,0,c),A=new Uint8Array(S);if(!e.transcodeImage(A,t,0,0,c,0,-1,-1))throw new Error("Failed to transcode KTX2 image");return{width:_,height:s,data:A,compressed:a,levelSize:S,hasAlpha:r,format:i}}function nt(e,t){let o=e&&e.basis&&e.basis.format;return o==="auto"&&(o=Ee()),typeof o=="object"&&(o=t?o.alpha:o.noAlpha),o=o.toLowerCase(),xo[o]}function Ee(){let e=Y();return e.has("astc")?"astc-4x4":e.has("dxt")?{alpha:"bc3",noAlpha:"bc1"}:e.has("pvrtc")?{alpha:"pvrtc1-4-rgba",noAlpha:"pvrtc1-4-rgb"}:e.has("etc1")?"etc1":e.has("etc2")?"etc2":"rgb565"}var ue={dataType:null,batchType:null,name:"Basis",id:"basis",module:"textures",version:f,worker:!0,extensions:["basis","ktx2"],mimeTypes:["application/octet-stream","image/ktx2"],tests:["sB"],binary:!0,options:{basis:{format:"auto",libraryPath:"libs/",containerFormat:"auto",module:"transcoder"}}},st={...ue,parse:J};var u={MAGIC_NUMBER:542327876,HEADER_LENGTH:31,MAGIC_NUMBER_INDEX:0,HEADER_SIZE_INDEX:1,HEADER_FLAGS_INDEX:2,HEADER_HEIGHT_INDEX:3,HEADER_WIDTH_INDEX:4,MIPMAPCOUNT_INDEX:7,HEADER_PF_FLAGS_INDEX:20,HEADER_PF_FOURCC_INDEX:21,DDSD_MIPMAPCOUNT:131072,DDPF_FOURCC:4},go={DXT1:n.COMPRESSED_RGB_S3TC_DXT1_EXT,DXT3:n.COMPRESSED_RGBA_S3TC_DXT3_EXT,DXT5:n.COMPRESSED_RGBA_S3TC_DXT5_EXT,"ATC ":n.COMPRESSED_RGB_ATC_WEBGL,ATCA:n.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL,ATCI:n.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL},Po=it,ho=Z,Ko=Z,Fo={DXT1:it,DXT3:Z,DXT5:Z,"ATC ":Po,ATCA:ho,ATCI:Ko};function _t(e){return new Uint32Array(e,0,u.HEADER_LENGTH)[u.MAGIC_NUMBER_INDEX]===u.MAGIC_NUMBER}function at(e){let t=new Int32Array(e,0,u.HEADER_LENGTH),o=t[u.HEADER_PF_FOURCC_INDEX];p(Boolean(t[u.HEADER_PF_FLAGS_INDEX]&u.DDPF_FOURCC),"DDS: Unsupported format, must contain a FourCC code");let r=Go(o),s=go[r],_=Fo[r];p(s&&_,`DDS: Unknown pixel format ${o}`);let a=1;t[u.HEADER_FLAGS_INDEX]&u.DDSD_MIPMAPCOUNT&&(a=Math.max(1,t[u.MIPMAPCOUNT_INDEX]));let i=t[u.HEADER_WIDTH_INDEX],c=t[u.HEADER_HEIGHT_INDEX],S=t[u.HEADER_SIZE_INDEX]+4,A=new Uint8Array(e,S);return G(A,{mipMapLevels:a,width:i,height:c,sizeFunction:_,internalFormat:s})}function it(e,t){return(e+3>>2)*(t+3>>2)*8}function Z(e,t){return(e+3>>2)*(t+3>>2)*16}function Go(e){return String.fromCharCode(e&255,e>>8&255,e>>16&255,e>>24&255)}var O={MAGIC_NUMBER:55727696,MAGIC_NUMBER_EXTRA:1347834371,HEADER_LENGTH:13,HEADER_SIZE:52,MAGIC_NUMBER_INDEX:0,PIXEL_FORMAT_INDEX:2,COLOUR_SPACE_INDEX:4,HEIGHT_INDEX:6,WIDTH_INDEX:7,MIPMAPCOUNT_INDEX:11,METADATA_SIZE_INDEX:12},Lo={0:[n.COMPRESSED_RGB_PVRTC_2BPPV1_IMG],1:[n.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG],2:[n.COMPRESSED_RGB_PVRTC_4BPPV1_IMG],3:[n.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG],6:[n.COMPRESSED_RGB_ETC1_WEBGL],7:[n.COMPRESSED_RGB_S3TC_DXT1_EXT],9:[n.COMPRESSED_RGBA_S3TC_DXT3_EXT],11:[n.COMPRESSED_RGBA_S3TC_DXT5_EXT],22:[n.COMPRESSED_RGB8_ETC2],23:[n.COMPRESSED_RGBA8_ETC2_EAC],24:[n.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2],25:[n.COMPRESSED_R11_EAC],26:[n.COMPRESSED_RG11_EAC],27:[n.COMPRESSED_RGBA_ASTC_4X4_KHR,n.COMPRESSED_SRGB8_ALPHA8_ASTC_4X4_KHR],28:[n.COMPRESSED_RGBA_ASTC_5X4_KHR,n.COMPRESSED_SRGB8_ALPHA8_ASTC_5X4_KHR],29:[n.COMPRESSED_RGBA_ASTC_5X5_KHR,n.COMPRESSED_SRGB8_ALPHA8_ASTC_5X5_KHR],30:[n.COMPRESSED_RGBA_ASTC_6X5_KHR,n.COMPRESSED_SRGB8_ALPHA8_ASTC_6X5_KHR],31:[n.COMPRESSED_RGBA_ASTC_6X6_KHR,n.COMPRESSED_SRGB8_ALPHA8_ASTC_6X6_KHR],32:[n.COMPRESSED_RGBA_ASTC_8X5_KHR,n.COMPRESSED_SRGB8_ALPHA8_ASTC_8X5_KHR],33:[n.COMPRESSED_RGBA_ASTC_8X6_KHR,n.COMPRESSED_SRGB8_ALPHA8_ASTC_8X6_KHR],34:[n.COMPRESSED_RGBA_ASTC_8X8_KHR,n.COMPRESSED_SRGB8_ALPHA8_ASTC_8X8_KHR],35:[n.COMPRESSED_RGBA_ASTC_10X5_KHR,n.COMPRESSED_SRGB8_ALPHA8_ASTC_10X5_KHR],36:[n.COMPRESSED_RGBA_ASTC_10X6_KHR,n.COMPRESSED_SRGB8_ALPHA8_ASTC_10X6_KHR],37:[n.COMPRESSED_RGBA_ASTC_10X8_KHR,n.COMPRESSED_SRGB8_ALPHA8_ASTC_10X8_KHR],38:[n.COMPRESSED_RGBA_ASTC_10X10_KHR,n.COMPRESSED_SRGB8_ALPHA8_ASTC_10X10_KHR],39:[n.COMPRESSED_RGBA_ASTC_12X10_KHR,n.COMPRESSED_SRGB8_ALPHA8_ASTC_12X10_KHR],40:[n.COMPRESSED_RGBA_ASTC_12X12_KHR,n.COMPRESSED_SRGB8_ALPHA8_ASTC_12X12_KHR]},Io={0:ct,1:ct,2:Rt,3:Rt,6:N,7:N,9:y,11:y,22:N,23:y,24:N,25:N,26:y,27:y,28:Uo,29:No,30:yo,31:wo,32:bo,33:Ho,34:Vo,35:Xo,36:vo,37:ko,38:Wo,39:zo,40:$o};function St(e){let o=new Uint32Array(e,0,O.HEADER_LENGTH)[O.MAGIC_NUMBER_INDEX];return o===O.MAGIC_NUMBER||o===O.MAGIC_NUMBER_EXTRA}function lt(e){let t=new Uint32Array(e,0,O.HEADER_LENGTH),o=t[O.PIXEL_FORMAT_INDEX],r=t[O.COLOUR_SPACE_INDEX],s=Lo[o]||[],_=s.length>1&&r?s[1]:s[0],a=Io[o],i=t[O.MIPMAPCOUNT_INDEX],c=t[O.WIDTH_INDEX],S=t[O.HEIGHT_INDEX],A=O.HEADER_SIZE+t[O.METADATA_SIZE_INDEX],x=new Uint8Array(e,A);return G(x,{mipMapLevels:i,width:c,height:S,sizeFunction:a,internalFormat:_})}function ct(e,t){return e=Math.max(e,16),t=Math.max(t,8),e*t/4}function Rt(e,t){return e=Math.max(e,8),t=Math.max(t,8),e*t/2}function N(e,t){return Math.floor((e+3)/4)*Math.floor((t+3)/4)*8}function y(e,t){return Math.floor((e+3)/4)*Math.floor((t+3)/4)*16}function Uo(e,t){return Math.floor((e+4)/5)*Math.floor((t+3)/4)*16}function No(e,t){return Math.floor((e+4)/5)*Math.floor((t+4)/5)*16}function yo(e,t){return Math.floor((e+5)/6)*Math.floor((t+4)/5)*16}function wo(e,t){return Math.floor((e+5)/6)*Math.floor((t+5)/6)*16}function bo(e,t){return Math.floor((e+7)/8)*Math.floor((t+4)/5)*16}function Ho(e,t){return Math.floor((e+7)/8)*Math.floor((t+5)/6)*16}function Vo(e,t){return Math.floor((e+7)/8)*Math.floor((t+7)/8)*16}function Xo(e,t){return Math.floor((e+9)/10)*Math.floor((t+4)/5)*16}function vo(e,t){return Math.floor((e+9)/10)*Math.floor((t+5)/6)*16}function ko(e,t){return Math.floor((e+9)/10)*Math.floor((t+7)/8)*16}function Wo(e,t){return Math.floor((e+9)/10)*Math.floor((t+9)/10)*16}function zo(e,t){return Math.floor((e+11)/12)*Math.floor((t+9)/10)*16}function $o(e,t){return Math.floor((e+11)/12)*Math.floor((t+11)/12)*16}function At(e){if(j(e))return ot(e);if(_t(e))return at(e);if(St(e))return lt(e);throw new Error("Texture container format not recognized")}var me={dataType:null,batchType:null,name:"Texture Containers",id:"compressed-texture",module:"textures",version:f,worker:!0,extensions:["ktx","ktx2","dds","pvr"],mimeTypes:["image/ktx2","image/ktx","image/vnd-ms.dds","image/x-dds","application/octet-stream"],binary:!0,options:{"compressed-texture":{libraryPath:"libs/",useBasis:!1}}},Tt={...me,parse:async(e,t)=>t?.["compressed-texture"]?.useBasis?(t.basis={format:{alpha:"BC3",noAlpha:"BC1"},...t.basis,containerFormat:"ktx2",module:"encoder"},(await J(e,t))[0]):At(e)};var Oe={dataType:null,batchType:null,id:"crunch",name:"Crunch",module:"textures",version:f,worker:!0,extensions:["crn"],mimeTypes:["image/crn","image/x-crn","application/octet-stream"],binary:!0,options:{crunch:{libraryPath:"libs/"}}};var pe=new Uint32Array([305419896]),Yo=new Uint8Array(pe.buffer,pe.byteOffset,pe.byteLength),jo=Yo[0]!==18,ft=jo,Jo={u1:Uint8Array,i1:Int8Array,u2:Uint16Array,i2:Int16Array,u4:Uint32Array,i4:Int32Array,f4:Float32Array,f8:Float64Array};function Ce(e,t){let o=new DataView(e),{header:r,headerEndOffset:s}=Zo(o),_=r.descr,a=Jo[_.slice(1,3)];if(!a)throw new Error(`Unimplemented type ${_}`);let c=r.shape?.reduce((A,x)=>A*x)*a.BYTES_PER_ELEMENT;if(e.byteLength<s+c)throw new Error("Buffer overflow");let S=new a(e.slice(s,s+c));if(_[0]===">"&&ft||_[0]==="<"&&!ft)throw new Error("Incorrect endianness");return{data:S,header:r}}function Zo(e){let t=e.getUint8(6),o=8,r;t>=2?(r=e.getUint32(o,!0),o+=4):(r=e.getUint16(o,!0),o+=2);let s=t<=2?"latin1":"utf-8",_=new TextDecoder(s),a=new Uint8Array(e.buffer,o,r),i=_.decode(a);return o+=r,{header:JSON.parse(i.replace(/'/g,'"').replace("False","false").replace("(","[").replace(/,*\),*/g,"]")),headerEndOffset:o}}var qo=new Uint8Array([147,78,85,77,80,89]),de={dataType:null,batchType:null,name:"NPY",id:"npy",module:"textures",version:f,worker:!0,extensions:["npy"],mimeTypes:[],tests:[qo.buffer],options:{npy:{}}},Et={...de,parseSync:Ce,parse:async(e,t)=>Ce(e,t)};var ut={DECODER:"crunch.js"};async function mt(e,t,o){let r=["texture-compressor","--type","s3tc","--compression","DXT1","--quality","normal","--input",e,"--output",t];return await new K().start({command:"npx",arguments:r,spawn:o}),t}var Ot={name:"DDS Texture Container",id:"dds",module:"textures",version:f,extensions:["dds"],options:{texture:{format:"auto",compression:"auto",quality:"auto",mipmap:!1,flipY:!1,toolFlags:""}},encodeURLtoURL:mt,encode(){throw new Error("Not implemented")}};async function pt(e,t={}){let{useSRGB:o=!1,qualityLevel:r=10,encodeUASTC:s=!1,mipmaps:_=!1}=t?.["ktx2-basis-writer"]||{},{BasisEncoder:a}=await U(t),i=new a;try{let c=new Uint8Array(e.width*e.height*4);i.setCreateKTX2File(!0),i.setKTX2UASTCSupercompression(!0),i.setKTX2SRGBTransferFunc(!0),i.setSliceSourceImage(0,e.data,e.width,e.height,!1),i.setPerceptual(o),i.setMipSRGB(o),i.setQualityLevel(r),i.setUASTC(s),i.setMipGen(_);let S=i.encode(c);return c.subarray(0,S).buffer}catch(c){throw console.error("Basis Universal Supercompressed GPU Texture encoder Error: ",c),c}finally{i.delete()}}var Ct={name:"Basis Universal Supercompressed GPU Texture",id:"ktx2-basis-writer",module:"textures",version:f,extensions:["ktx2"],options:{["ktx2-basis-writer"]:{useSRGB:!1,qualityLevel:10,encodeUASTC:!1,mipmaps:!1}},encode:pt};var dt="4.3.0-beta.3";var Qo=globalThis.loaders?.parseImageNode,Me=typeof Image<"u",xe=typeof ImageBitmap<"u",er=Boolean(Qo),Be=_e?!0:er;function Mt(e){switch(e){case"auto":return xe||Me||Be;case"imagebitmap":return xe;case"image":return Me;case"data":return Be;default:throw new Error(`@loaders.gl/images: image ${e} not supported in this environment`)}}function xt(){if(xe)return"imagebitmap";if(Me)return"image";if(Be)return"data";throw new Error("Install '@loaders.gl/polyfills' to parse images under Node.js")}function Bt(e){let t=tr(e);if(!t)throw new Error("Not an image");return t}function De(e){return q(e)}function q(e){switch(Bt(e)){case"data":return e;case"image":case"imagebitmap":let t=document.createElement("canvas"),o=t.getContext("2d");if(!o)throw new Error("getImageData");return t.width=e.width,t.height=e.height,o.drawImage(e,0,0),o.getImageData(0,0,e.width,e.height);default:throw new Error("getImageData")}}function tr(e){return typeof ImageBitmap<"u"&&e instanceof ImageBitmap?"imagebitmap":typeof Image<"u"&&e instanceof Image?"image":e&&typeof e=="object"&&e.data&&e.width&&e.height?"data":null}var or=/^data:image\/svg\+xml/,rr=/\.svg((\?|#).*)?$/;function Q(e){return e&&(or.test(e)||rr.test(e))}function Dt(e,t){if(Q(t)){let r=new TextDecoder().decode(e);try{typeof unescape=="function"&&typeof encodeURIComponent=="function"&&(r=unescape(encodeURIComponent(r)))}catch(_){throw new Error(_.message)}return`data:image/svg+xml;base64,${btoa(r)}`}return ge(e,t)}function ge(e,t){if(Q(t))throw new Error("SVG cannot be parsed directly to imagebitmap");return new Blob([new Uint8Array(e)])}async function ee(e,t,o){let r=Dt(e,o),s=self.URL||self.webkitURL,_=typeof r!="string"&&s.createObjectURL(r);try{return await nr(_||r,t)}finally{_&&s.revokeObjectURL(_)}}async function nr(e,t){let o=new Image;return o.src=e,t.image&&t.image.decode&&o.decode?(await o.decode(),o):await new Promise((r,s)=>{try{o.onload=()=>r(o),o.onerror=_=>{let a=_ instanceof Error?_.message:"error";s(new Error(a))}}catch(_){s(_)}})}var sr={},gt=!0;async function Pt(e,t,o){let r;Q(o)?r=await ee(e,t,o):r=ge(e,o);let s=t&&t.imagebitmap;return await _r(r,s)}async function _r(e,t=null){if((ar(t)||!gt)&&(t=null),t)try{return await createImageBitmap(e,t)}catch(o){console.warn(o),gt=!1}return await createImageBitmap(e)}function ar(e){for(let t in e||sr)return!1;return!0}function ht(e){return!Sr(e,"ftyp",4)||!(e[8]&96)?null:ir(e)}function ir(e){switch(cr(e,8,12).replace("\0"," ").trim()){case"avif":case"avis":return{extension:"avif",mimeType:"image/avif"};default:return null}}function cr(e,t,o){return String.fromCharCode(...e.slice(t,o))}function Rr(e){return[...e].map(t=>t.charCodeAt(0))}function Sr(e,t,o=0){let r=Rr(t);for(let s=0;s<r.length;++s)if(r[s]!==e[s+o])return!1;return!0}var M=!1,w=!0;function te(e){let t=b(e);return Ar(t)||Er(t)||Tr(t)||fr(t)||lr(t)}function lr(e){let t=new Uint8Array(e instanceof DataView?e.buffer:e),o=ht(t);return o?{mimeType:o.mimeType,width:0,height:0}:null}function Ar(e){let t=b(e);return t.byteLength>=24&&t.getUint32(0,M)===2303741511?{mimeType:"image/png",width:t.getUint32(16,M),height:t.getUint32(20,M)}:null}function Tr(e){let t=b(e);return t.byteLength>=10&&t.getUint32(0,M)===1195984440?{mimeType:"image/gif",width:t.getUint16(6,w),height:t.getUint16(8,w)}:null}function fr(e){let t=b(e);return t.byteLength>=14&&t.getUint16(0,M)===16973&&t.getUint32(2,w)===t.byteLength?{mimeType:"image/bmp",width:t.getUint32(18,w),height:t.getUint32(22,w)}:null}function Er(e){let t=b(e);if(!(t.byteLength>=3&&t.getUint16(0,M)===65496&&t.getUint8(2)===255))return null;let{tableMarkers:r,sofMarkers:s}=ur(),_=2;for(;_+9<t.byteLength;){let a=t.getUint16(_,M);if(s.has(a))return{mimeType:"image/jpeg",height:t.getUint16(_+5,M),width:t.getUint16(_+7,M)};if(!r.has(a))return null;_+=2,_+=t.getUint16(_,M)}return null}function ur(){let e=new Set([65499,65476,65484,65501,65534]);for(let o=65504;o<65520;++o)e.add(o);return{tableMarkers:e,sofMarkers:new Set([65472,65473,65474,65475,65477,65478,65479,65481,65482,65483,65485,65486,65487,65502])}}function b(e){if(e instanceof DataView)return e;if(ArrayBuffer.isView(e))return new DataView(e.buffer);if(e instanceof ArrayBuffer)return new DataView(e);throw new Error("toDataView")}async function Kt(e,t){let{mimeType:o}=te(e)||{},r=globalThis.loaders?.parseImageNode;return p(r),await r(e,o)}async function Ft(e,t,o){t=t||{};let s=(t.image||{}).type||"auto",{url:_}=o||{},a=mr(s),i;switch(a){case"imagebitmap":i=await Pt(e,t,_);break;case"image":i=await ee(e,t,_);break;case"data":i=await Kt(e,t);break;default:p(!1)}return s==="data"&&(i=q(i)),i}function mr(e){switch(e){case"auto":case"data":return xt();default:return Mt(e),e}}var Or=["png","jpg","jpeg","gif","webp","bmp","ico","svg","avif"],pr=["image/png","image/jpeg","image/gif","image/webp","image/avif","image/bmp","image/vnd.microsoft.icon","image/svg+xml"],Cr={image:{type:"auto",decode:!0}},D={dataType:null,batchType:null,id:"image",module:"images",name:"Images",version:dt,mimeTypes:pr,extensions:Or,parse:Ft,tests:[e=>Boolean(te(new DataView(e)))],options:Cr};function oe(e,t,o){let r=typeof e=="function"?e({...t,...o}):e,s=t.baseUrl;return s&&(r=s[s.length-1]==="/"?`${s}${r}`:`${s}/${r}`),Se(r)}var dr=e=>e&&typeof e=="object";async function Gt(e,t,o={}){return await Pe(e,t,o)}async function Pe(e,t,o){return Array.isArray(e)?await xr(e,t,o):dr(e)?await Mr(e,t,o):await t(e,o)}async function Mr(e,t,o){let r=[],s={};for(let _ in e){let a=e[_],i=Pe(a,t,o).then(c=>{s[_]=c});r.push(i)}return await Promise.all(r),s}async function xr(e,t,o={}){let r=e.map(s=>Pe(s,t,o));return await Promise.all(r)}async function L(e,t,o){return await Gt(e,r=>he(r,t,o))}async function he(e,t,o){let s=await(await fetch(e,o.fetch)).arrayBuffer();return await t(s,o)}async function Lt(e,t={}){let o=await H(e,t);return await L(o,D.parse,t)}async function H(e,t,o={}){let r=t&&t.image&&t.image.mipLevels||0;return r!==0?await Br(e,r,t,o):oe(e,t,o)}async function Br(e,t,o,r){let s=[];if(t==="auto"){let _=oe(e,o,{...r,lod:0}),a=await he(_,D.parse,o),{width:i,height:c}=De(a);t=Dr({width:i,height:c}),s.push(_)}p(t>0);for(let _=s.length;_<t;++_){let a=oe(e,o,{...r,lod:_});s.push(a)}return s}function Dr(e){return 1+Math.floor(Math.log2(Math.max(e.width,e.height)))}async function It(e,t,o={}){let r=await gr(e,t,o);return await L(r,D.parse,o)}async function gr(e,t,o={}){let r=[];for(let s=0;s<e;s++){let _=H(t,o,{index:s});r.push(_)}return await Promise.all(r)}var Pr=34069,hr=34070,Kr=34071,Fr=34072,Gr=34073,Lr=34074,Ut=[{face:Pr,direction:"right",axis:"x",sign:"positive"},{face:hr,direction:"left",axis:"x",sign:"negative"},{face:Kr,direction:"top",axis:"y",sign:"positive"},{face:Fr,direction:"bottom",axis:"y",sign:"negative"},{face:Gr,direction:"front",axis:"z",sign:"positive"},{face:Lr,direction:"back",axis:"z",sign:"negative"}];async function Ir(e,t){let o={},r=[],s=0;for(let _=0;_<Ut.length;++_){let a=Ut[s],i=H(e,t,{...a,index:s++}).then(c=>{o[a.face]=c});r.push(i)}return await Promise.all(r),o}async function Nt(e,t={}){let o=await Ir(e,t);return await L(o,D.parse,t)}var Ur={name:"Basis Universal Supercompressed GPU Texture",id:"ktx2-basis-writer",module:"textures",version:f,extensions:["ktx2"],worker:!0,options:{useSRGB:!1,qualityLevel:10,encodeUASTC:!1,mipmaps:!1}};return oo(V);})();
9
9
  return __exports__;
10
10
  });
package/dist/index.cjs CHANGED
@@ -43,7 +43,7 @@ __export(dist_exports, {
43
43
  module.exports = __toCommonJS(dist_exports);
44
44
 
45
45
  // dist/lib/utils/version.js
46
- var VERSION = true ? "4.3.0-beta.2" : "latest";
46
+ var VERSION = true ? "4.3.0-beta.3" : "latest";
47
47
 
48
48
  // dist/lib/parsers/basis-module-loader.js
49
49
  var import_loader_utils = require("@loaders.gl/loader-utils");
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["index.js", "lib/utils/version.js", "lib/parsers/basis-module-loader.js", "lib/gl-extensions.js", "lib/utils/texture-formats.js", "lib/parsers/parse-ktx.js", "lib/utils/extract-mipmap-images.js", "lib/utils/ktx-format-helper.js", "lib/parsers/parse-basis.js", "basis-loader.js", "lib/parsers/parse-dds.js", "lib/parsers/parse-pvr.js", "lib/parsers/parse-compressed-texture.js", "compressed-texture-loader.js", "crunch-loader.js", "lib/parsers/parse-npy.js", "npy-loader.js", "lib/parsers/crunch-module-loader.js", "lib/encoders/encode-texture.js", "compressed-texture-writer.js", "lib/encoders/encode-ktx2-basis-texture.js", "ktx2-basis-writer.js", "lib/texture-api/load-image.js", "lib/texture-api/generate-url.js", "lib/texture-api/async-deep-map.js", "lib/texture-api/deep-load.js", "lib/texture-api/load-image-array.js", "lib/texture-api/load-image-cube.js"],
4
- "sourcesContent": ["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { VERSION } from \"./lib/utils/version.js\";\nexport { BasisLoader, BasisWorkerLoader } from \"./basis-loader.js\";\nexport { CompressedTextureLoader, CompressedTextureWorkerLoader } from \"./compressed-texture-loader.js\";\nexport { CrunchLoader } from \"./crunch-loader.js\";\nexport { NPYLoader, NPYWorkerLoader } from \"./npy-loader.js\";\n// Module constants\nexport { BASIS_EXTERNAL_LIBRARIES } from \"./lib/parsers/basis-module-loader.js\";\nexport { CRUNCH_EXTERNAL_LIBRARIES } from \"./lib/parsers/crunch-module-loader.js\";\n// Writers\nexport { CompressedTextureWriter } from \"./compressed-texture-writer.js\";\nexport { KTX2BasisWriter } from \"./ktx2-basis-writer.js\";\nexport const KTX2BasisWriterWorker = {\n name: 'Basis Universal Supercompressed GPU Texture',\n id: 'ktx2-basis-writer',\n module: 'textures',\n version: VERSION,\n extensions: ['ktx2'],\n worker: true,\n options: {\n useSRGB: false,\n qualityLevel: 10,\n encodeUASTC: false,\n mipmaps: false\n }\n};\n// Texture Loading API\nexport { loadImageTexture } from \"./lib/texture-api/load-image.js\";\nexport { loadImageTextureArray } from \"./lib/texture-api/load-image-array.js\";\nexport { loadImageTextureCube } from \"./lib/texture-api/load-image-cube.js\";\n// Utilities\nexport { GL_EXTENSIONS_CONSTANTS } from \"./lib/gl-extensions.js\";\nexport { selectSupportedBasisFormat } from \"./lib/parsers/parse-basis.js\";\nexport { getSupportedGPUTextureFormats } from \"./lib/utils/texture-formats.js\";\n// DEPRECATED\n// @deprecated\nexport { CrunchLoader as CrunchWorkerLoader } from \"./crunch-loader.js\";\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Version constant cannot be imported, it needs to correspond to the build version of **this** module.\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nexport const VERSION = typeof \"4.3.0-beta.2\" !== 'undefined' ? \"4.3.0-beta.2\" : 'latest';\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { registerJSModules, getJSModuleOrNull } from '@loaders.gl/loader-utils';\nimport { loadLibrary } from '@loaders.gl/worker-utils';\nexport const BASIS_EXTERNAL_LIBRARIES = {\n /** Basis transcoder, javascript wrapper part */\n TRANSCODER: 'basis_transcoder.js',\n /** Basis transcoder, compiled web assembly part */\n TRANSCODER_WASM: 'basis_transcoder.wasm',\n /** Basis encoder, javascript wrapper part */\n ENCODER: 'basis_encoder.js',\n /** Basis encoder, compiled web assembly part */\n ENCODER_WASM: 'basis_encoder.wasm'\n};\nlet loadBasisTranscoderPromise;\n/**\n * Loads wasm transcoder module\n * @param options\n * @returns {BasisFile} promise\n */\nexport async function loadBasisTranscoderModule(options) {\n registerJSModules(options.modules);\n const basis = getJSModuleOrNull('basis');\n if (basis) {\n return basis;\n }\n loadBasisTranscoderPromise ||= loadBasisTranscoder(options);\n return await loadBasisTranscoderPromise;\n}\n/**\n * Loads wasm transcoder module\n * @param options\n * @returns {BasisFile} promise\n */\nasync function loadBasisTranscoder(options) {\n let BASIS = null;\n let wasmBinary = null;\n [BASIS, wasmBinary] = await Promise.all([\n await loadLibrary(BASIS_EXTERNAL_LIBRARIES.TRANSCODER, 'textures', options),\n await loadLibrary(BASIS_EXTERNAL_LIBRARIES.TRANSCODER_WASM, 'textures', options)\n ]);\n // Depends on how import happened...\n // @ts-ignore TS2339: Property does not exist on type\n BASIS = BASIS || globalThis.BASIS;\n return await initializeBasisTranscoderModule(BASIS, wasmBinary);\n}\n/**\n * Initialize wasm transcoder module\n * @param BasisModule - js part of the module\n * @param wasmBinary - wasm part of the module\n * @returns {BasisFile} promise\n */\nfunction initializeBasisTranscoderModule(BasisModule, wasmBinary) {\n const options = {};\n if (wasmBinary) {\n options.wasmBinary = wasmBinary;\n }\n return new Promise((resolve) => {\n // if you try to return BasisModule the browser crashes!\n BasisModule(options).then((module) => {\n const { BasisFile, initializeBasis } = module;\n initializeBasis();\n resolve({ BasisFile });\n });\n });\n}\nlet loadBasisEncoderPromise;\n/**\n * Loads wasm encoder module\n * @param options\n * @returns {BasisFile, KTX2File} promise\n */\nexport async function loadBasisEncoderModule(options) {\n const modules = options.modules || {};\n if (modules.basisEncoder) {\n return modules.basisEncoder;\n }\n loadBasisEncoderPromise = loadBasisEncoderPromise || loadBasisEncoder(options);\n return await loadBasisEncoderPromise;\n}\n/**\n * Loads wasm encoder module\n * @param options\n * @returns {BasisFile, KTX2File} promise\n */\nasync function loadBasisEncoder(options) {\n let BASIS_ENCODER = null;\n let wasmBinary = null;\n [BASIS_ENCODER, wasmBinary] = await Promise.all([\n await loadLibrary(BASIS_EXTERNAL_LIBRARIES.ENCODER, 'textures', options),\n await loadLibrary(BASIS_EXTERNAL_LIBRARIES.ENCODER_WASM, 'textures', options)\n ]);\n // Depends on how import happened...\n // @ts-ignore TS2339: Property does not exist on type\n BASIS_ENCODER = BASIS_ENCODER || globalThis.BASIS;\n return await initializeBasisEncoderModule(BASIS_ENCODER, wasmBinary);\n}\n/**\n * Initialize wasm transcoder module\n * @param BasisEncoderModule - js part of the module\n * @param wasmBinary - wasm part of the module\n * @returns {BasisFile, KTX2File} promise\n */\nfunction initializeBasisEncoderModule(BasisEncoderModule, wasmBinary) {\n const options = {};\n if (wasmBinary) {\n options.wasmBinary = wasmBinary;\n }\n return new Promise((resolve) => {\n // if you try to return BasisModule the browser crashes!\n BasisEncoderModule(options).then((module) => {\n const { BasisFile, KTX2File, initializeBasis, BasisEncoder } = module;\n initializeBasis();\n resolve({ BasisFile, KTX2File, BasisEncoder });\n });\n });\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/* eslint-disable camelcase */\nexport const GL_EXTENSIONS_CONSTANTS = {\n // WEBGL_compressed_texture_s3tc\n COMPRESSED_RGB_S3TC_DXT1_EXT: 0x83f0,\n COMPRESSED_RGBA_S3TC_DXT1_EXT: 0x83f1,\n COMPRESSED_RGBA_S3TC_DXT3_EXT: 0x83f2,\n COMPRESSED_RGBA_S3TC_DXT5_EXT: 0x83f3,\n // WEBGL_compressed_texture_es3\n COMPRESSED_R11_EAC: 0x9270,\n COMPRESSED_SIGNED_R11_EAC: 0x9271,\n COMPRESSED_RG11_EAC: 0x9272,\n COMPRESSED_SIGNED_RG11_EAC: 0x9273,\n COMPRESSED_RGB8_ETC2: 0x9274,\n COMPRESSED_RGBA8_ETC2_EAC: 0x9275,\n COMPRESSED_SRGB8_ETC2: 0x9276,\n COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: 0x9277,\n COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2: 0x9278,\n COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: 0x9279,\n // WEBGL_compressed_texture_pvrtc\n COMPRESSED_RGB_PVRTC_4BPPV1_IMG: 0x8c00,\n COMPRESSED_RGBA_PVRTC_4BPPV1_IMG: 0x8c02,\n COMPRESSED_RGB_PVRTC_2BPPV1_IMG: 0x8c01,\n COMPRESSED_RGBA_PVRTC_2BPPV1_IMG: 0x8c03,\n // WEBGL_compressed_texture_etc1\n COMPRESSED_RGB_ETC1_WEBGL: 0x8d64,\n // WEBGL_compressed_texture_atc\n COMPRESSED_RGB_ATC_WEBGL: 0x8c92,\n COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL: 0x8c93,\n COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL: 0x87ee,\n // WEBGL_compressed_texture_astc\n COMPRESSED_RGBA_ASTC_4X4_KHR: 0x93b0,\n COMPRESSED_RGBA_ASTC_5X4_KHR: 0x93b1,\n COMPRESSED_RGBA_ASTC_5X5_KHR: 0x93b2,\n COMPRESSED_RGBA_ASTC_6X5_KHR: 0x93b3,\n COMPRESSED_RGBA_ASTC_6X6_KHR: 0x93b4,\n COMPRESSED_RGBA_ASTC_8X5_KHR: 0x93b5,\n COMPRESSED_RGBA_ASTC_8X6_KHR: 0x93b6,\n COMPRESSED_RGBA_ASTC_8X8_KHR: 0x93b7,\n COMPRESSED_RGBA_ASTC_10X5_KHR: 0x93b8,\n COMPRESSED_RGBA_ASTC_10X6_KHR: 0x93b9,\n COMPRESSED_RGBA_ASTC_10X8_KHR: 0x93ba,\n COMPRESSED_RGBA_ASTC_10X10_KHR: 0x93bb,\n COMPRESSED_RGBA_ASTC_12X10_KHR: 0x93bc,\n COMPRESSED_RGBA_ASTC_12X12_KHR: 0x93bd,\n COMPRESSED_SRGB8_ALPHA8_ASTC_4X4_KHR: 0x93d0,\n COMPRESSED_SRGB8_ALPHA8_ASTC_5X4_KHR: 0x93d1,\n COMPRESSED_SRGB8_ALPHA8_ASTC_5X5_KHR: 0x93d2,\n COMPRESSED_SRGB8_ALPHA8_ASTC_6X5_KHR: 0x93d3,\n COMPRESSED_SRGB8_ALPHA8_ASTC_6X6_KHR: 0x93d4,\n COMPRESSED_SRGB8_ALPHA8_ASTC_8X5_KHR: 0x93d5,\n COMPRESSED_SRGB8_ALPHA8_ASTC_8X6_KHR: 0x93d6,\n COMPRESSED_SRGB8_ALPHA8_ASTC_8X8_KHR: 0x93d7,\n COMPRESSED_SRGB8_ALPHA8_ASTC_10X5_KHR: 0x93d8,\n COMPRESSED_SRGB8_ALPHA8_ASTC_10X6_KHR: 0x93d9,\n COMPRESSED_SRGB8_ALPHA8_ASTC_10X8_KHR: 0x93da,\n COMPRESSED_SRGB8_ALPHA8_ASTC_10X10_KHR: 0x93db,\n COMPRESSED_SRGB8_ALPHA8_ASTC_12X10_KHR: 0x93dc,\n COMPRESSED_SRGB8_ALPHA8_ASTC_12X12_KHR: 0x93dd,\n // EXT_texture_compression_rgtc\n COMPRESSED_RED_RGTC1_EXT: 0x8dbb,\n COMPRESSED_SIGNED_RED_RGTC1_EXT: 0x8dbc,\n COMPRESSED_RED_GREEN_RGTC2_EXT: 0x8dbd,\n COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT: 0x8dbe,\n // WEBGL_compressed_texture_s3tc_srgb\n COMPRESSED_SRGB_S3TC_DXT1_EXT: 0x8c4c,\n COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT: 0x8c4d,\n COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: 0x8c4e,\n COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT: 0x8c4f\n};\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst BROWSER_PREFIXES = ['', 'WEBKIT_', 'MOZ_'];\nconst WEBGL_EXTENSIONS = {\n /* eslint-disable camelcase */\n WEBGL_compressed_texture_s3tc: 'dxt',\n WEBGL_compressed_texture_s3tc_srgb: 'dxt-srgb',\n WEBGL_compressed_texture_etc1: 'etc1',\n WEBGL_compressed_texture_etc: 'etc2',\n WEBGL_compressed_texture_pvrtc: 'pvrtc',\n WEBGL_compressed_texture_atc: 'atc',\n WEBGL_compressed_texture_astc: 'astc',\n EXT_texture_compression_rgtc: 'rgtc'\n /* eslint-enable camelcase */\n};\nlet formats = null;\n/**\n * Returns a list of formats.\n * Creates a temporary WebGLRenderingContext if none is provided.\n *\n * @param gl - Optional context.\n */\nexport function getSupportedGPUTextureFormats(gl) {\n if (!formats) {\n gl = gl || getWebGLContext() || undefined;\n formats = new Set();\n for (const prefix of BROWSER_PREFIXES) {\n for (const extension in WEBGL_EXTENSIONS) {\n if (gl && gl.getExtension(`${prefix}${extension}`)) {\n const gpuTextureFormat = WEBGL_EXTENSIONS[extension];\n formats.add(gpuTextureFormat);\n }\n }\n }\n }\n return formats;\n}\n/**\n * @returns {WebGLRenderingContext?}\n */\nfunction getWebGLContext() {\n try {\n const canvas = document.createElement('canvas');\n return canvas.getContext('webgl');\n }\n catch (error) {\n return null;\n }\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { read } from 'ktx-parse';\nimport { extractMipmapImages } from \"../utils/extract-mipmap-images.js\";\nimport { mapVkFormatToWebGL } from \"../utils/ktx-format-helper.js\";\nconst KTX2_ID = [\n // '\u00B4', 'K', 'T', 'X', '2', '0', '\u00AA', '\\r', '\\n', '\\x1A', '\\n'\n 0xab, 0x4b, 0x54, 0x58, 0x20, 0x32, 0x30, 0xbb, 0x0d, 0x0a, 0x1a, 0x0a\n];\n// eslint-disable-next-line complexity\nexport function isKTX(data) {\n // const id = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n const id = new Uint8Array(data);\n const notKTX = id.byteLength < KTX2_ID.length ||\n id[0] !== KTX2_ID[0] || // '\u00B4'\n id[1] !== KTX2_ID[1] || // 'K'\n id[2] !== KTX2_ID[2] || // 'T'\n id[3] !== KTX2_ID[3] || // 'X'\n id[4] !== KTX2_ID[4] || // ' '\n id[5] !== KTX2_ID[5] || // '2'\n id[6] !== KTX2_ID[6] || // '0'\n id[7] !== KTX2_ID[7] || // '\u00AA'\n id[8] !== KTX2_ID[8] || // '\\r'\n id[9] !== KTX2_ID[9] || // '\\n'\n id[10] !== KTX2_ID[10] || // '\\x1A'\n id[11] !== KTX2_ID[11]; // '\\n'\n return !notKTX;\n}\nexport function parseKTX(arrayBuffer) {\n const uint8Array = new Uint8Array(arrayBuffer);\n const ktx = read(uint8Array);\n const mipMapLevels = Math.max(1, ktx.levels.length);\n const width = ktx.pixelWidth;\n const height = ktx.pixelHeight;\n const internalFormat = mapVkFormatToWebGL(ktx.vkFormat);\n return extractMipmapImages(ktx.levels, {\n mipMapLevels,\n width,\n height,\n sizeFunction: (level) => level.uncompressedByteLength,\n internalFormat\n });\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/**\n * Extract mipmap images from compressed texture buffer\n * @param data - binary data of compressed texture or Array of level objects\n * @param options.mipMapLevels - number of mipmap level inside image\n * @param options.width - width of 0 - level\n * @param options.height - height of 0 - level\n * @param options.sizeFunction - format-related function to calculate level size in bytes\n * @param options.internalFormat - WebGL compatible format code\n * @returns Array of the texture levels\n */\nexport function extractMipmapImages(data, options) {\n const images = new Array(options.mipMapLevels);\n let levelWidth = options.width;\n let levelHeight = options.height;\n let offset = 0;\n for (let i = 0; i < options.mipMapLevels; ++i) {\n // @ts-expect-error\n const levelSize = getLevelSize(options, levelWidth, levelHeight, data, i);\n // @ts-expect-error\n const levelData = getLevelData(data, i, offset, levelSize);\n images[i] = {\n compressed: true,\n format: options.internalFormat,\n data: levelData,\n width: levelWidth,\n height: levelHeight,\n levelSize\n };\n levelWidth = Math.max(1, levelWidth >> 1);\n levelHeight = Math.max(1, levelHeight >> 1);\n offset += levelSize;\n }\n return images;\n}\nfunction getLevelData(data, index, offset, levelSize) {\n if (!Array.isArray(data)) {\n return new Uint8Array(data.buffer, data.byteOffset + offset, levelSize);\n }\n return data[index].levelData;\n}\nfunction getLevelSize(options, levelWidth, levelHeight, data, index) {\n if (!Array.isArray(data)) {\n return options.sizeFunction(levelWidth, levelHeight);\n }\n return options.sizeFunction(data[index]);\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { GL_EXTENSIONS_CONSTANTS } from \"../gl-extensions.js\";\nconst VULKAN_TO_WEBGL_FORMAT_MAP = {\n 131: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT,\n 132: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB_S3TC_DXT1_EXT,\n 133: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT1_EXT,\n 134: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT,\n 135: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT3_EXT,\n 136: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT,\n 137: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT,\n 138: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT,\n 139: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RED_RGTC1_EXT,\n 140: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SIGNED_RED_RGTC1_EXT,\n 141: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RED_GREEN_RGTC2_EXT,\n 142: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT,\n 147: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB8_ETC2,\n 148: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ETC2,\n 149: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2,\n 150: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2,\n 151: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA8_ETC2_EAC,\n 152: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC,\n 153: GL_EXTENSIONS_CONSTANTS.COMPRESSED_R11_EAC,\n 154: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SIGNED_R11_EAC,\n 155: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RG11_EAC,\n 156: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SIGNED_RG11_EAC,\n // @ts-ignore\n 157: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_4x4_KHR,\n // @ts-ignore\n 158: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR,\n // @ts-ignore\n 159: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_5x4_KHR,\n // @ts-ignore\n 160: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_5X4_KHR,\n // @ts-ignore\n 161: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_5x5_KHR,\n // @ts-ignore\n 162: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR,\n // @ts-ignore\n 163: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_6x5_KHR,\n // @ts-ignore\n 164: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR,\n // @ts-ignore\n 165: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_6x6_KHR,\n // @ts-ignore\n 166: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR,\n // @ts-ignore\n 167: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8x5_KHR,\n // @ts-ignore\n 168: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR,\n // @ts-ignore\n 169: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8x6_KHR,\n // @ts-ignore\n 170: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR,\n // @ts-ignore\n 171: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8x8_KHR,\n // @ts-ignore\n 172: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR,\n // @ts-ignore\n 173: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x5_KHR,\n // @ts-ignore\n 174: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR,\n // @ts-ignore\n 175: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x6_KHR,\n // @ts-ignore\n 176: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR,\n // @ts-ignore\n 177: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x8_KHR,\n // @ts-ignore\n 178: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR,\n // @ts-ignore\n 179: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x10_KHR,\n // @ts-ignore\n 180: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR,\n // @ts-ignore\n 181: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_12x10_KHR,\n // @ts-ignore\n 182: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR,\n // @ts-ignore\n 183: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_12x12_KHR,\n // @ts-ignore\n 184: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR,\n 1000054000: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG,\n 1000054001: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,\n // @ts-ignore\n 1000066000: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_4x4_KHR,\n // @ts-ignore\n 1000066001: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_5x4_KHR,\n // @ts-ignore\n 1000066002: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_5x5_KHR,\n // @ts-ignore\n 1000066003: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_6x5_KHR,\n // @ts-ignore\n 1000066004: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_6x6_KHR,\n // @ts-ignore\n 1000066005: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8x5_KHR,\n // @ts-ignore\n 1000066006: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8x6_KHR,\n // @ts-ignore\n 1000066007: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8x8_KHR,\n // @ts-ignore\n 1000066008: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x5_KHR,\n // @ts-ignore\n 1000066009: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x6_KHR,\n // @ts-ignore\n 1000066010: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x8_KHR,\n // @ts-ignore\n 1000066011: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x10_KHR,\n // @ts-ignore\n 1000066012: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_12x10_KHR,\n // @ts-ignore\n 1000066013: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_12x12_KHR\n};\n/**\n * Returns WebGl format based on Vulkan format\n * Vulkan to WebGl format mapping provided here http://github.khronos.org/KTX-Specification/#formatMapping\n * Vulkan name to format number mapping provided here: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkFormat.html\n * @param vkFormat\n * @returns WebGL / OpenGL constant\n */\nexport function mapVkFormatToWebGL(vkFormat) {\n return VULKAN_TO_WEBGL_FORMAT_MAP[vkFormat];\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { loadBasisEncoderModule, loadBasisTranscoderModule } from \"./basis-module-loader.js\";\nimport { GL_EXTENSIONS_CONSTANTS } from \"../gl-extensions.js\";\nimport { getSupportedGPUTextureFormats } from \"../utils/texture-formats.js\";\nimport { isKTX } from \"./parse-ktx.js\";\nconst OutputFormat = {\n etc1: {\n basisFormat: 0,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_ETC1_WEBGL\n },\n etc2: { basisFormat: 1, compressed: true },\n bc1: {\n basisFormat: 2,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT\n },\n bc3: {\n basisFormat: 3,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT\n },\n bc4: { basisFormat: 4, compressed: true },\n bc5: { basisFormat: 5, compressed: true },\n 'bc7-m6-opaque-only': { basisFormat: 6, compressed: true },\n 'bc7-m5': { basisFormat: 7, compressed: true },\n 'pvrtc1-4-rgb': {\n basisFormat: 8,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_PVRTC_4BPPV1_IMG\n },\n 'pvrtc1-4-rgba': {\n basisFormat: 9,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG\n },\n 'astc-4x4': {\n basisFormat: 10,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_4X4_KHR\n },\n 'atc-rgb': { basisFormat: 11, compressed: true },\n 'atc-rgba-interpolated-alpha': { basisFormat: 12, compressed: true },\n rgba32: { basisFormat: 13, compressed: false },\n rgb565: { basisFormat: 14, compressed: false },\n bgr565: { basisFormat: 15, compressed: false },\n rgba4444: { basisFormat: 16, compressed: false }\n};\n/**\n * parse data with a Binomial Basis_Universal module\n * @param data\n * @param options\n * @returns compressed texture data\n */\nexport async function parseBasis(data, options) {\n if (options.basis.containerFormat === 'auto') {\n if (isKTX(data)) {\n const fileConstructors = await loadBasisEncoderModule(options);\n return parseKTX2File(fileConstructors.KTX2File, data, options);\n }\n const { BasisFile } = await loadBasisTranscoderModule(options);\n return parseBasisFile(BasisFile, data, options);\n }\n switch (options.basis.module) {\n case 'encoder':\n const fileConstructors = await loadBasisEncoderModule(options);\n switch (options.basis.containerFormat) {\n case 'ktx2':\n return parseKTX2File(fileConstructors.KTX2File, data, options);\n case 'basis':\n default:\n return parseBasisFile(fileConstructors.BasisFile, data, options);\n }\n case 'transcoder':\n default:\n const { BasisFile } = await loadBasisTranscoderModule(options);\n return parseBasisFile(BasisFile, data, options);\n }\n}\n/**\n * Parse *.basis file data\n * @param BasisFile - initialized transcoder module\n * @param data\n * @param options\n * @returns compressed texture data\n */\nfunction parseBasisFile(BasisFile, data, options) {\n const basisFile = new BasisFile(new Uint8Array(data));\n try {\n if (!basisFile.startTranscoding()) {\n throw new Error('Failed to start basis transcoding');\n }\n const imageCount = basisFile.getNumImages();\n const images = [];\n for (let imageIndex = 0; imageIndex < imageCount; imageIndex++) {\n const levelsCount = basisFile.getNumLevels(imageIndex);\n const levels = [];\n for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {\n levels.push(transcodeImage(basisFile, imageIndex, levelIndex, options));\n }\n images.push(levels);\n }\n return images;\n }\n finally {\n basisFile.close();\n basisFile.delete();\n }\n}\n/**\n * Parse the particular level image of a basis file\n * @param basisFile\n * @param imageIndex\n * @param levelIndex\n * @param options\n * @returns compressed texture data\n */\nfunction transcodeImage(basisFile, imageIndex, levelIndex, options) {\n const width = basisFile.getImageWidth(imageIndex, levelIndex);\n const height = basisFile.getImageHeight(imageIndex, levelIndex);\n // See https://github.com/BinomialLLC/basis_universal/pull/83\n const hasAlpha = basisFile.getHasAlpha( /* imageIndex, levelIndex */);\n // Check options for output format etc\n const { compressed, format, basisFormat } = getBasisOptions(options, hasAlpha);\n const decodedSize = basisFile.getImageTranscodedSizeInBytes(imageIndex, levelIndex, basisFormat);\n const decodedData = new Uint8Array(decodedSize);\n if (!basisFile.transcodeImage(decodedData, imageIndex, levelIndex, basisFormat, 0, 0)) {\n throw new Error('failed to start Basis transcoding');\n }\n return {\n // standard loaders.gl image category payload\n width,\n height,\n data: decodedData,\n compressed,\n format,\n // Additional fields\n // Add levelSize field.\n hasAlpha\n };\n}\n/**\n * Parse *.ktx2 file data\n * @param KTX2File\n * @param data\n * @param options\n * @returns compressed texture data\n */\nfunction parseKTX2File(KTX2File, data, options) {\n const ktx2File = new KTX2File(new Uint8Array(data));\n try {\n if (!ktx2File.startTranscoding()) {\n throw new Error('failed to start KTX2 transcoding');\n }\n const levelsCount = ktx2File.getLevels();\n const levels = [];\n for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {\n levels.push(transcodeKTX2Image(ktx2File, levelIndex, options));\n }\n return [levels];\n }\n finally {\n ktx2File.close();\n ktx2File.delete();\n }\n}\n/**\n * Parse the particular level image of a ktx2 file\n * @param ktx2File\n * @param levelIndex\n * @param options\n * @returns\n */\nfunction transcodeKTX2Image(ktx2File, levelIndex, options) {\n const { alphaFlag, height, width } = ktx2File.getImageLevelInfo(levelIndex, 0, 0);\n // Check options for output format etc\n const { compressed, format, basisFormat } = getBasisOptions(options, alphaFlag);\n const decodedSize = ktx2File.getImageTranscodedSizeInBytes(levelIndex, 0 /* layerIndex */, 0 /* faceIndex */, basisFormat);\n const decodedData = new Uint8Array(decodedSize);\n if (!ktx2File.transcodeImage(decodedData, levelIndex, 0 /* layerIndex */, 0 /* faceIndex */, basisFormat, 0, -1 /* channel0 */, -1 /* channel1 */)) {\n throw new Error('Failed to transcode KTX2 image');\n }\n return {\n // standard loaders.gl image category payload\n width,\n height,\n data: decodedData,\n compressed,\n // Additional fields\n levelSize: decodedSize,\n hasAlpha: alphaFlag,\n format\n };\n}\n/**\n * Get BasisFormat by loader format option\n * @param options\n * @param hasAlpha\n * @returns BasisFormat data\n */\nfunction getBasisOptions(options, hasAlpha) {\n let format = options && options.basis && options.basis.format;\n if (format === 'auto') {\n format = selectSupportedBasisFormat();\n }\n if (typeof format === 'object') {\n format = hasAlpha ? format.alpha : format.noAlpha;\n }\n format = format.toLowerCase();\n return OutputFormat[format];\n}\n/**\n * Select transcode format from the list of supported formats\n * @returns key for OutputFormat map\n */\nexport function selectSupportedBasisFormat() {\n const supportedFormats = getSupportedGPUTextureFormats();\n if (supportedFormats.has('astc')) {\n return 'astc-4x4';\n }\n else if (supportedFormats.has('dxt')) {\n return {\n alpha: 'bc3',\n noAlpha: 'bc1'\n };\n }\n else if (supportedFormats.has('pvrtc')) {\n return {\n alpha: 'pvrtc1-4-rgba',\n noAlpha: 'pvrtc1-4-rgb'\n };\n }\n else if (supportedFormats.has('etc1')) {\n return 'etc1';\n }\n else if (supportedFormats.has('etc2')) {\n return 'etc2';\n }\n return 'rgb565';\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { VERSION } from \"./lib/utils/version.js\";\nimport { parseBasis } from \"./lib/parsers/parse-basis.js\";\n/**\n * Worker loader for Basis super compressed textures\n */\nexport const BasisWorkerLoader = {\n dataType: null,\n batchType: null,\n name: 'Basis',\n id: 'basis',\n module: 'textures',\n version: VERSION,\n worker: true,\n extensions: ['basis', 'ktx2'],\n mimeTypes: ['application/octet-stream', 'image/ktx2'],\n tests: ['sB'],\n binary: true,\n options: {\n basis: {\n format: 'auto',\n libraryPath: 'libs/',\n containerFormat: 'auto',\n module: 'transcoder'\n }\n }\n};\n/**\n * Loader for Basis super compressed textures\n */\nexport const BasisLoader = {\n ...BasisWorkerLoader,\n parse: parseBasis\n};\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { assert } from '@loaders.gl/loader-utils';\nimport { GL_EXTENSIONS_CONSTANTS } from \"../gl-extensions.js\";\nimport { extractMipmapImages } from \"../utils/extract-mipmap-images.js\";\nconst DDS_CONSTANTS = {\n MAGIC_NUMBER: 0x20534444,\n HEADER_LENGTH: 31,\n MAGIC_NUMBER_INDEX: 0,\n HEADER_SIZE_INDEX: 1,\n HEADER_FLAGS_INDEX: 2,\n HEADER_HEIGHT_INDEX: 3,\n HEADER_WIDTH_INDEX: 4,\n MIPMAPCOUNT_INDEX: 7,\n HEADER_PF_FLAGS_INDEX: 20,\n HEADER_PF_FOURCC_INDEX: 21,\n DDSD_MIPMAPCOUNT: 0x20000,\n DDPF_FOURCC: 0x4\n};\nconst DDS_PIXEL_FORMATS = {\n DXT1: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT,\n DXT3: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT3_EXT,\n DXT5: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT,\n 'ATC ': GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_ATC_WEBGL,\n ATCA: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL,\n ATCI: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL\n};\nconst getATCLevelSize = getDxt1LevelSize;\nconst getATCALevelSize = getDxtXLevelSize;\nconst getATCILevelSize = getDxtXLevelSize;\nconst DDS_SIZE_FUNCTIONS = {\n DXT1: getDxt1LevelSize,\n DXT3: getDxtXLevelSize,\n DXT5: getDxtXLevelSize,\n 'ATC ': getATCLevelSize,\n ATCA: getATCALevelSize,\n ATCI: getATCILevelSize\n};\n/**\n * Check if data is in \"DDS\" format by its magic number\n * @param data - binary data of compressed texture\n * @returns true - data in \"DDS\" format, else - false\n */\nexport function isDDS(data) {\n const header = new Uint32Array(data, 0, DDS_CONSTANTS.HEADER_LENGTH);\n const magic = header[DDS_CONSTANTS.MAGIC_NUMBER_INDEX];\n return magic === DDS_CONSTANTS.MAGIC_NUMBER;\n}\n/**\n * Parse texture data as \"DDS\" format\n * @param data - binary data of compressed texture\n * @returns Array of the texture levels\n */\nexport function parseDDS(data) {\n const header = new Int32Array(data, 0, DDS_CONSTANTS.HEADER_LENGTH);\n const pixelFormatNumber = header[DDS_CONSTANTS.HEADER_PF_FOURCC_INDEX];\n assert(Boolean(header[DDS_CONSTANTS.HEADER_PF_FLAGS_INDEX] & DDS_CONSTANTS.DDPF_FOURCC), 'DDS: Unsupported format, must contain a FourCC code');\n const fourCC = int32ToFourCC(pixelFormatNumber);\n const internalFormat = DDS_PIXEL_FORMATS[fourCC];\n const sizeFunction = DDS_SIZE_FUNCTIONS[fourCC];\n assert(internalFormat && sizeFunction, `DDS: Unknown pixel format ${pixelFormatNumber}`);\n let mipMapLevels = 1;\n if (header[DDS_CONSTANTS.HEADER_FLAGS_INDEX] & DDS_CONSTANTS.DDSD_MIPMAPCOUNT) {\n mipMapLevels = Math.max(1, header[DDS_CONSTANTS.MIPMAPCOUNT_INDEX]);\n }\n const width = header[DDS_CONSTANTS.HEADER_WIDTH_INDEX];\n const height = header[DDS_CONSTANTS.HEADER_HEIGHT_INDEX];\n const dataOffset = header[DDS_CONSTANTS.HEADER_SIZE_INDEX] + 4;\n const image = new Uint8Array(data, dataOffset);\n return extractMipmapImages(image, {\n mipMapLevels,\n width,\n height,\n sizeFunction,\n internalFormat\n });\n}\n/**\n * DXT1 applicable function to calculate level size\n * @param width - level width\n * @param height - level height\n * @returns level size in bytes\n */\nexport function getDxt1LevelSize(width, height) {\n return ((width + 3) >> 2) * ((height + 3) >> 2) * 8;\n}\n/**\n * DXT3 & DXT5 applicable function to calculate level size\n * @param width - level width\n * @param height - level height\n * @returns level size in bytes\n */\nexport function getDxtXLevelSize(width, height) {\n return ((width + 3) >> 2) * ((height + 3) >> 2) * 16;\n}\n/**\n * Convert every byte of Int32 value to char\n * @param value - Int32 number\n * @returns string of 4 characters\n */\nfunction int32ToFourCC(value) {\n return String.fromCharCode(value & 0xff, (value >> 8) & 0xff, (value >> 16) & 0xff, (value >> 24) & 0xff);\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { GL_EXTENSIONS_CONSTANTS } from \"../gl-extensions.js\";\nimport { extractMipmapImages } from \"../utils/extract-mipmap-images.js\";\nconst PVR_CONSTANTS = {\n MAGIC_NUMBER: 0x03525650,\n MAGIC_NUMBER_EXTRA: 0x50565203,\n HEADER_LENGTH: 13,\n HEADER_SIZE: 52,\n MAGIC_NUMBER_INDEX: 0,\n PIXEL_FORMAT_INDEX: 2,\n COLOUR_SPACE_INDEX: 4,\n HEIGHT_INDEX: 6,\n WIDTH_INDEX: 7,\n MIPMAPCOUNT_INDEX: 11,\n METADATA_SIZE_INDEX: 12\n};\nconst PVR_PIXEL_FORMATS = {\n 0: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_PVRTC_2BPPV1_IMG],\n 1: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG],\n 2: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_PVRTC_4BPPV1_IMG],\n 3: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG],\n 6: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_ETC1_WEBGL],\n 7: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT],\n 9: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT3_EXT],\n 11: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT],\n 22: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB8_ETC2],\n 23: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA8_ETC2_EAC],\n 24: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2],\n 25: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_R11_EAC],\n 26: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RG11_EAC],\n 27: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_4X4_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_4X4_KHR\n ],\n 28: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_5X4_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_5X4_KHR\n ],\n 29: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_5X5_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_5X5_KHR\n ],\n 30: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_6X5_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_6X5_KHR\n ],\n 31: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_6X6_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_6X6_KHR\n ],\n 32: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8X5_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_8X5_KHR\n ],\n 33: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8X6_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_8X6_KHR\n ],\n 34: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8X8_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_8X8_KHR\n ],\n 35: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10X5_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10X5_KHR\n ],\n 36: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10X6_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10X6_KHR\n ],\n 37: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10X8_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10X8_KHR\n ],\n 38: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10X10_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10X10_KHR\n ],\n 39: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_12X10_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_12X10_KHR\n ],\n 40: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_12X12_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_12X12_KHR\n ]\n};\nconst PVR_SIZE_FUNCTIONS = {\n 0: pvrtc2bppSize,\n 1: pvrtc2bppSize,\n 2: pvrtc4bppSize,\n 3: pvrtc4bppSize,\n 6: dxtEtcSmallSize,\n 7: dxtEtcSmallSize,\n 9: dxtEtcAstcBigSize,\n 11: dxtEtcAstcBigSize,\n 22: dxtEtcSmallSize,\n 23: dxtEtcAstcBigSize,\n 24: dxtEtcSmallSize,\n 25: dxtEtcSmallSize,\n 26: dxtEtcAstcBigSize,\n 27: dxtEtcAstcBigSize,\n 28: atc5x4Size,\n 29: atc5x5Size,\n 30: atc6x5Size,\n 31: atc6x6Size,\n 32: atc8x5Size,\n 33: atc8x6Size,\n 34: atc8x8Size,\n 35: atc10x5Size,\n 36: atc10x6Size,\n 37: atc10x8Size,\n 38: atc10x10Size,\n 39: atc12x10Size,\n 40: atc12x12Size\n};\n/**\n * Check if data is in \"PVR\" format by its magic number\n * @param data - binary data of compressed texture\n * @returns true - data in \"PVR\" format, else - false\n */\nexport function isPVR(data) {\n const header = new Uint32Array(data, 0, PVR_CONSTANTS.HEADER_LENGTH);\n const version = header[PVR_CONSTANTS.MAGIC_NUMBER_INDEX];\n return version === PVR_CONSTANTS.MAGIC_NUMBER || version === PVR_CONSTANTS.MAGIC_NUMBER_EXTRA;\n}\n/**\n * Parse texture data as \"PVR\" format\n * @param data - binary data of compressed texture\n * @returns Array of the texture levels\n * @see http://cdn.imgtec.com/sdk-documentation/PVR+File+Format.Specification.pdf\n */\nexport function parsePVR(data) {\n const header = new Uint32Array(data, 0, PVR_CONSTANTS.HEADER_LENGTH);\n const pvrFormat = header[PVR_CONSTANTS.PIXEL_FORMAT_INDEX];\n const colourSpace = header[PVR_CONSTANTS.COLOUR_SPACE_INDEX];\n const pixelFormats = PVR_PIXEL_FORMATS[pvrFormat] || [];\n const internalFormat = pixelFormats.length > 1 && colourSpace ? pixelFormats[1] : pixelFormats[0];\n const sizeFunction = PVR_SIZE_FUNCTIONS[pvrFormat];\n const mipMapLevels = header[PVR_CONSTANTS.MIPMAPCOUNT_INDEX];\n const width = header[PVR_CONSTANTS.WIDTH_INDEX];\n const height = header[PVR_CONSTANTS.HEIGHT_INDEX];\n const dataOffset = PVR_CONSTANTS.HEADER_SIZE + header[PVR_CONSTANTS.METADATA_SIZE_INDEX];\n const image = new Uint8Array(data, dataOffset);\n return extractMipmapImages(image, {\n mipMapLevels,\n width,\n height,\n sizeFunction,\n internalFormat\n });\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_pvrtc/\nfunction pvrtc2bppSize(width, height) {\n width = Math.max(width, 16);\n height = Math.max(height, 8);\n return (width * height) / 4;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_pvrtc/\nfunction pvrtc4bppSize(width, height) {\n width = Math.max(width, 8);\n height = Math.max(height, 8);\n return (width * height) / 2;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_s3tc/\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_etc/\n// Size for:\n// COMPRESSED_RGB_S3TC_DXT1_EXT\n// COMPRESSED_R11_EAC\n// COMPRESSED_SIGNED_R11_EAC\n// COMPRESSED_RGB8_ETC2\n// COMPRESSED_SRGB8_ETC2\n// COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2\n// COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2\nfunction dxtEtcSmallSize(width, height) {\n return Math.floor((width + 3) / 4) * Math.floor((height + 3) / 4) * 8;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_s3tc/\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_etc/\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\n// Size for:\n// COMPRESSED_RGBA_S3TC_DXT3_EXT\n// COMPRESSED_RGBA_S3TC_DXT5_EXT\n// COMPRESSED_RG11_EAC\n// COMPRESSED_SIGNED_RG11_EAC\n// COMPRESSED_RGBA8_ETC2_EAC\n// COMPRESSED_SRGB8_ALPHA8_ETC2_EAC\n// COMPRESSED_RGBA_ASTC_4x4_KHR\nfunction dxtEtcAstcBigSize(width, height) {\n return Math.floor((width + 3) / 4) * Math.floor((height + 3) / 4) * 16;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc5x4Size(width, height) {\n return Math.floor((width + 4) / 5) * Math.floor((height + 3) / 4) * 16;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc5x5Size(width, height) {\n return Math.floor((width + 4) / 5) * Math.floor((height + 4) / 5) * 16;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc6x5Size(width, height) {\n return Math.floor((width + 5) / 6) * Math.floor((height + 4) / 5) * 16;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc6x6Size(width, height) {\n return Math.floor((width + 5) / 6) * Math.floor((height + 5) / 6) * 16;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc8x5Size(width, height) {\n return Math.floor((width + 7) / 8) * Math.floor((height + 4) / 5) * 16;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc8x6Size(width, height) {\n return Math.floor((width + 7) / 8) * Math.floor((height + 5) / 6) * 16;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc8x8Size(width, height) {\n return Math.floor((width + 7) / 8) * Math.floor((height + 7) / 8) * 16;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc10x5Size(width, height) {\n return Math.floor((width + 9) / 10) * Math.floor((height + 4) / 5) * 16;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc10x6Size(width, height) {\n return Math.floor((width + 9) / 10) * Math.floor((height + 5) / 6) * 16;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc10x8Size(width, height) {\n return Math.floor((width + 9) / 10) * Math.floor((height + 7) / 8) * 16;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc10x10Size(width, height) {\n return Math.floor((width + 9) / 10) * Math.floor((height + 9) / 10) * 16;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc12x10Size(width, height) {\n return Math.floor((width + 11) / 12) * Math.floor((height + 9) / 10) * 16;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc12x12Size(width, height) {\n return Math.floor((width + 11) / 12) * Math.floor((height + 11) / 12) * 16;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { isKTX, parseKTX } from \"./parse-ktx.js\";\nimport { isDDS, parseDDS } from \"./parse-dds.js\";\nimport { isPVR, parsePVR } from \"./parse-pvr.js\";\n/**\n * Deduces format and parses compressed texture loaded in ArrayBuffer\n * @param data - binary data of compressed texture\n * @returns Array of the texture levels\n */\nexport function parseCompressedTexture(data) {\n if (isKTX(data)) {\n // TODO: remove @ts-ignore when `parseKTX` output is normalized to loaders.gl texture format\n // @ts-ignore\n return parseKTX(data);\n }\n if (isDDS(data)) {\n return parseDDS(data);\n }\n if (isPVR(data)) {\n return parsePVR(data);\n }\n throw new Error('Texture container format not recognized');\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { VERSION } from \"./lib/utils/version.js\";\nimport { parseCompressedTexture } from \"./lib/parsers/parse-compressed-texture.js\";\nimport { parseBasis } from \"./lib/parsers/parse-basis.js\";\n/**\n * Worker Loader for KTX, DDS, and PVR texture container formats\n */\nexport const CompressedTextureWorkerLoader = {\n dataType: null,\n batchType: null,\n name: 'Texture Containers',\n id: 'compressed-texture',\n module: 'textures',\n version: VERSION,\n worker: true,\n extensions: [\n 'ktx',\n 'ktx2',\n 'dds', // WEBGL_compressed_texture_s3tc, WEBGL_compressed_texture_atc\n 'pvr' // WEBGL_compressed_texture_pvrtc\n ],\n mimeTypes: [\n 'image/ktx2',\n 'image/ktx',\n 'image/vnd-ms.dds',\n 'image/x-dds',\n 'application/octet-stream'\n ],\n binary: true,\n options: {\n 'compressed-texture': {\n libraryPath: 'libs/',\n useBasis: false\n }\n }\n};\n/**\n * Loader for KTX, DDS, and PVR texture container formats\n */\nexport const CompressedTextureLoader = {\n ...CompressedTextureWorkerLoader,\n parse: async (arrayBuffer, options) => {\n if (options?.['compressed-texture']?.useBasis) {\n // @ts-expect-error TODO not allowed to modify inputs\n options.basis = {\n format: {\n alpha: 'BC3',\n noAlpha: 'BC1'\n },\n // @ts-expect-error TODO not allowed to modify inputs\n ...options.basis,\n containerFormat: 'ktx2',\n module: 'encoder'\n };\n const result = await parseBasis(arrayBuffer, options);\n return result[0];\n }\n return parseCompressedTexture(arrayBuffer);\n }\n};\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { VERSION } from \"./lib/utils/version.js\";\n/**\n * Worker loader for the Crunch compressed texture container format\n * @note We avoid bundling crunch - it is a rare format and large lib, so we only offer worker loader\n */\nexport const CrunchLoader = {\n dataType: null,\n batchType: null,\n id: 'crunch',\n name: 'Crunch',\n module: 'textures',\n version: VERSION,\n worker: true,\n extensions: ['crn'],\n mimeTypes: ['image/crn', 'image/x-crn', 'application/octet-stream'],\n binary: true,\n options: {\n crunch: {\n libraryPath: 'libs/'\n }\n }\n};\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst a = new Uint32Array([0x12345678]);\nconst b = new Uint8Array(a.buffer, a.byteOffset, a.byteLength);\nconst isLittleEndian = !(b[0] === 0x12);\nconst LITTLE_ENDIAN_OS = isLittleEndian;\n/**\n * The basic string format consists of 3 characters:\n * 1. a character describing the byteorder of the data (<: little-endian, >: big-endian, |: not-relevant)\n * 2. a character code giving the basic type of the array\n * 3. an integer providing the number of bytes the type uses.\n * https://numpy.org/doc/stable/reference/arrays.interface.html\n *\n * Here I only include the second and third characters, and check endianness separately\n */\nconst DTYPES = {\n u1: Uint8Array,\n i1: Int8Array,\n u2: Uint16Array,\n i2: Int16Array,\n u4: Uint32Array,\n i4: Int32Array,\n f4: Float32Array,\n f8: Float64Array\n};\nexport function parseNPY(arrayBuffer, options) {\n const view = new DataView(arrayBuffer);\n const { header, headerEndOffset } = parseHeader(view);\n const numpyType = header.descr;\n const ArrayType = DTYPES[numpyType.slice(1, 3)];\n if (!ArrayType) {\n throw new Error(`Unimplemented type ${numpyType}`);\n }\n const nArrayElements = header.shape?.reduce((a, b) => a * b);\n const arrayByteLength = nArrayElements * ArrayType.BYTES_PER_ELEMENT;\n if (arrayBuffer.byteLength < headerEndOffset + arrayByteLength) {\n throw new Error('Buffer overflow');\n }\n const data = new ArrayType(arrayBuffer.slice(headerEndOffset, headerEndOffset + arrayByteLength));\n // Swap endianness if needed\n if ((numpyType[0] === '>' && LITTLE_ENDIAN_OS) || (numpyType[0] === '<' && !LITTLE_ENDIAN_OS)) {\n throw new Error('Incorrect endianness');\n }\n return {\n data,\n header\n };\n}\n/**\n * Parse NPY header\n *\n * @param view\n * @return\n */\nfunction parseHeader(view) {\n const majorVersion = view.getUint8(6);\n // const minorVersion = view.getUint8(7);\n let offset = 8;\n let headerLength;\n if (majorVersion >= 2) {\n headerLength = view.getUint32(offset, true);\n offset += 4;\n }\n else {\n headerLength = view.getUint16(offset, true);\n offset += 2;\n }\n const encoding = majorVersion <= 2 ? 'latin1' : 'utf-8';\n const decoder = new TextDecoder(encoding);\n const headerArray = new Uint8Array(view.buffer, offset, headerLength);\n const headerText = decoder.decode(headerArray);\n offset += headerLength;\n const header = JSON.parse(headerText\n .replace(/'/g, '\"')\n .replace('False', 'false')\n .replace('(', '[')\n .replace(/,*\\),*/g, ']'));\n return { header, headerEndOffset: offset };\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { VERSION } from \"./lib/utils/version.js\";\nimport { parseNPY } from \"./lib/parsers/parse-npy.js\";\n// \\x93NUMPY\nconst NPY_MAGIC_NUMBER = new Uint8Array([147, 78, 85, 77, 80, 89]);\n/**\n * Worker loader for numpy \"tiles\"\n */\nexport const NPYWorkerLoader = {\n dataType: null,\n batchType: null,\n name: 'NPY',\n id: 'npy',\n module: 'textures',\n version: VERSION,\n worker: true,\n extensions: ['npy'],\n mimeTypes: [],\n tests: [NPY_MAGIC_NUMBER.buffer],\n options: {\n npy: {}\n }\n};\n/**\n * Loader for numpy \"tiles\"\n */\nexport const NPYLoader = {\n ...NPYWorkerLoader,\n parseSync: parseNPY,\n parse: async (arrayBuffer, options) => parseNPY(arrayBuffer, options)\n};\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// @ts-nocheck\nimport { getJSModuleOrNull, registerJSModules } from '@loaders.gl/loader-utils';\nimport { loadLibrary } from '@loaders.gl/worker-utils';\nexport const CRUNCH_EXTERNAL_LIBRARIES = {\n /** Crunch decoder library. It is used as dynamically imported script */\n DECODER: 'crunch.js'\n};\n/**\n * Load crunch decoder module\n * @param options - loader options\n * @returns Promise of module object\n */\nexport async function loadCrunchModule(options) {\n registerJSModules(options.modules);\n const crunch = getJSModuleOrNull('crunch');\n if (crunch) {\n return crunch;\n }\n return loadCrunch(options);\n}\nlet crunchModule;\n/**\n * Load crunch decoder module\n * @param {any} options - Loader options\n * @returns {Promise<any>} Promise of Module object\n */\nasync function loadCrunch(options) {\n if (crunchModule) {\n return crunchModule;\n }\n let loadCrunchDecoder = await loadLibrary(CRUNCH_EXTERNAL_LIBRARIES.DECODER, 'textures', options);\n // Depends on how import happened...\n // @ts-ignore TS2339: Property does not exist on type\n loadCrunchDecoder ||= globalThis.LoadCrunchDecoder;\n crunchModule = loadCrunchDecoder();\n return crunchModule;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { ChildProcessProxy } from '@loaders.gl/worker-utils';\n/*\n * @see https://github.com/TimvanScherpenzeel/texture-compressor\n */\nexport async function encodeImageURLToCompressedTextureURL(inputUrl, outputUrl, options) {\n // prettier-ignore\n const args = [\n // Note: our actual executable is `npx`, so `texture-compressor` is an argument\n 'texture-compressor',\n '--type', 's3tc',\n '--compression', 'DXT1',\n '--quality', 'normal',\n '--input', inputUrl,\n '--output', outputUrl\n ];\n const childProcess = new ChildProcessProxy();\n await childProcess.start({\n command: 'npx',\n arguments: args,\n spawn: options\n });\n return outputUrl;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { VERSION } from \"./lib/utils/version.js\";\nimport { encodeImageURLToCompressedTextureURL } from \"./lib/encoders/encode-texture.js\";\n/**\n * DDS Texture Container Exporter\n */\nexport const CompressedTextureWriter = {\n name: 'DDS Texture Container',\n id: 'dds',\n module: 'textures',\n version: VERSION,\n extensions: ['dds'],\n options: {\n texture: {\n format: 'auto',\n compression: 'auto',\n quality: 'auto',\n mipmap: false,\n flipY: false,\n toolFlags: ''\n }\n },\n encodeURLtoURL: encodeImageURLToCompressedTextureURL,\n encode() {\n throw new Error('Not implemented');\n }\n};\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { loadBasisEncoderModule } from \"../parsers/basis-module-loader.js\";\n/**\n * Encodes image to Basis Universal Supercompressed GPU Texture.\n * Code example is taken from here - https://github.com/BinomialLLC/basis_universal/blob/master/webgl/ktx2_encode_test/index.html#L279\n * BasisEncoder API - https://github.com/BinomialLLC/basis_universal/blob/master/webgl/transcoder/basis_wrappers.cpp#L1712\n * @param image\n * @param options\n */\nexport async function encodeKTX2BasisTexture(image, options = {}) {\n // TODO remove default values after writer options will be normalized like it done in load module.\n const { useSRGB = false, qualityLevel = 10, encodeUASTC = false, mipmaps = false } = options?.['ktx2-basis-writer'] || {};\n const { BasisEncoder } = await loadBasisEncoderModule(options);\n const basisEncoder = new BasisEncoder();\n try {\n const basisFileData = new Uint8Array(image.width * image.height * 4);\n basisEncoder.setCreateKTX2File(true);\n basisEncoder.setKTX2UASTCSupercompression(true);\n basisEncoder.setKTX2SRGBTransferFunc(true);\n basisEncoder.setSliceSourceImage(0, image.data, image.width, image.height, false);\n basisEncoder.setPerceptual(useSRGB);\n basisEncoder.setMipSRGB(useSRGB);\n basisEncoder.setQualityLevel(qualityLevel);\n basisEncoder.setUASTC(encodeUASTC);\n basisEncoder.setMipGen(mipmaps);\n const numOutputBytes = basisEncoder.encode(basisFileData);\n const actualKTX2FileData = basisFileData.subarray(0, numOutputBytes).buffer;\n return actualKTX2FileData;\n }\n catch (error) {\n // eslint-disable-next-line no-console\n console.error('Basis Universal Supercompressed GPU Texture encoder Error: ', error);\n throw error;\n }\n finally {\n basisEncoder.delete();\n }\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { VERSION } from \"./lib/utils/version.js\";\nimport { encodeKTX2BasisTexture } from \"./lib/encoders/encode-ktx2-basis-texture.js\";\n/**\n * Basis Universal Supercompressed GPU Texture.\n * Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/textureSetDefinitionFormat.cmn.md\n */\nexport const KTX2BasisWriter = {\n name: 'Basis Universal Supercompressed GPU Texture',\n id: 'ktx2-basis-writer',\n module: 'textures',\n version: VERSION,\n extensions: ['ktx2'],\n options: {\n ['ktx2-basis-writer']: {\n useSRGB: false,\n qualityLevel: 10,\n encodeUASTC: false,\n mipmaps: false\n }\n },\n encode: encodeKTX2BasisTexture\n};\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { assert } from '@loaders.gl/loader-utils';\nimport { ImageLoader, getImageSize } from '@loaders.gl/images';\nimport { generateUrl } from \"./generate-url.js\";\nimport { deepLoad, shallowLoad } from \"./deep-load.js\";\nexport async function loadImageTexture(getUrl, options = {}) {\n const imageUrls = await getImageUrls(getUrl, options);\n return await deepLoad(imageUrls, ImageLoader.parse, options);\n}\nexport async function getImageUrls(getUrl, options, urlOptions = {}) {\n const mipLevels = (options && options.image && options.image.mipLevels) || 0;\n return mipLevels !== 0\n ? await getMipmappedImageUrls(getUrl, mipLevels, options, urlOptions)\n : generateUrl(getUrl, options, urlOptions);\n}\nasync function getMipmappedImageUrls(getUrl, mipLevels, options, urlOptions) {\n const urls = [];\n // If no mip levels supplied, we need to load the level 0 image and calculate based on size\n if (mipLevels === 'auto') {\n const url = generateUrl(getUrl, options, { ...urlOptions, lod: 0 });\n const image = await shallowLoad(url, ImageLoader.parse, options);\n const { width, height } = getImageSize(image);\n mipLevels = getMipLevels({ width, height });\n // TODO - push image and make `deepLoad` pass through non-url values, avoid loading twice?\n urls.push(url);\n }\n // We now know how many mipLevels we need, remaining image urls can now be constructed\n assert(mipLevels > 0);\n for (let mipLevel = urls.length; mipLevel < mipLevels; ++mipLevel) {\n const url = generateUrl(getUrl, options, { ...urlOptions, lod: mipLevel });\n urls.push(url);\n }\n return urls;\n}\n// Calculates number of mipmaps based on texture size (log2)\nexport function getMipLevels(size) {\n return 1 + Math.floor(Math.log2(Math.max(size.width, size.height)));\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { resolvePath } from '@loaders.gl/loader-utils';\n// Generate a url by calling getUrl with mix of options, applying options.baseUrl\nexport function generateUrl(getUrl, options, urlOptions) {\n // Get url\n let url = typeof getUrl === 'function' ? getUrl({ ...options, ...urlOptions }) : getUrl;\n // Apply options.baseUrl\n const baseUrl = options.baseUrl;\n if (baseUrl) {\n url = baseUrl[baseUrl.length - 1] === '/' ? `${baseUrl}${url}` : `${baseUrl}/${url}`;\n }\n return resolvePath(url);\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst isObject = (value) => value && typeof value === 'object';\n// Loads a deep structure of urls (objects and arrays of urls)\n// Returns an object with six key-value pairs containing the images (or image mip arrays)\n// for each cube face\nexport async function asyncDeepMap(tree, func, options = {}) {\n return await mapSubtree(tree, func, options);\n}\nexport async function mapSubtree(object, func, options) {\n if (Array.isArray(object)) {\n return await mapArray(object, func, options);\n }\n if (isObject(object)) {\n return await mapObject(object, func, options);\n }\n // TODO - ignore non-urls, non-arraybuffers?\n const url = object;\n return await func(url, options);\n}\n// HELPERS\nasync function mapObject(object, func, options) {\n const promises = [];\n const values = {};\n for (const key in object) {\n const url = object[key];\n const promise = mapSubtree(url, func, options).then((value) => {\n values[key] = value;\n });\n promises.push(promise);\n }\n await Promise.all(promises);\n return values;\n}\nasync function mapArray(urlArray, func, options = {}) {\n const promises = urlArray.map((url) => mapSubtree(url, func, options));\n return await Promise.all(promises);\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { asyncDeepMap } from \"./async-deep-map.js\";\nexport async function deepLoad(urlTree, load, options) {\n return await asyncDeepMap(urlTree, (url) => shallowLoad(url, load, options));\n}\nexport async function shallowLoad(url, load, options) {\n const response = await fetch(url, options.fetch);\n const arrayBuffer = await response.arrayBuffer();\n return await load(arrayBuffer, options);\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { ImageLoader } from '@loaders.gl/images';\nimport { getImageUrls } from \"./load-image.js\";\nimport { deepLoad } from \"./deep-load.js\";\nexport async function loadImageTextureArray(count, getUrl, options = {}) {\n const imageUrls = await getImageArrayUrls(count, getUrl, options);\n return await deepLoad(imageUrls, ImageLoader.parse, options);\n}\nexport async function getImageArrayUrls(count, getUrl, options = {}) {\n const promises = [];\n for (let index = 0; index < count; index++) {\n const promise = getImageUrls(getUrl, options, { index });\n promises.push(promise);\n }\n return await Promise.all(promises);\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { ImageLoader } from '@loaders.gl/images';\nimport { getImageUrls } from \"./load-image.js\";\nimport { deepLoad } from \"./deep-load.js\";\n// Returned map will be have keys corresponding to GL cubemap constants\nconst GL_TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515;\nconst GL_TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516;\nconst GL_TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517;\nconst GL_TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518;\nconst GL_TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519;\nconst GL_TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851a;\nconst CUBE_FACES = [\n { face: GL_TEXTURE_CUBE_MAP_POSITIVE_X, direction: 'right', axis: 'x', sign: 'positive' },\n { face: GL_TEXTURE_CUBE_MAP_NEGATIVE_X, direction: 'left', axis: 'x', sign: 'negative' },\n { face: GL_TEXTURE_CUBE_MAP_POSITIVE_Y, direction: 'top', axis: 'y', sign: 'positive' },\n { face: GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, direction: 'bottom', axis: 'y', sign: 'negative' },\n { face: GL_TEXTURE_CUBE_MAP_POSITIVE_Z, direction: 'front', axis: 'z', sign: 'positive' },\n { face: GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, direction: 'back', axis: 'z', sign: 'negative' }\n];\n// Returns an object with six key-value pairs containing the urls (or url mip arrays)\n// for each cube face\nexport async function getImageCubeUrls(getUrl, options) {\n // Calculate URLs\n const urls = {};\n const promises = [];\n let index = 0;\n for (let i = 0; i < CUBE_FACES.length; ++i) {\n const face = CUBE_FACES[index];\n const promise = getImageUrls(getUrl, options, { ...face, index: index++ }).then((url) => {\n urls[face.face] = url;\n });\n promises.push(promise);\n }\n await Promise.all(promises);\n return urls;\n}\n// Returns an object with six key-value pairs containing the images (or image mip arrays)\n// for each cube face\nexport async function loadImageTextureCube(getUrl, options = {}) {\n const urls = await getImageCubeUrls(getUrl, options);\n return (await deepLoad(urls, ImageLoader.parse, options));\n}\n"],
4
+ "sourcesContent": ["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { VERSION } from \"./lib/utils/version.js\";\nexport { BasisLoader, BasisWorkerLoader } from \"./basis-loader.js\";\nexport { CompressedTextureLoader, CompressedTextureWorkerLoader } from \"./compressed-texture-loader.js\";\nexport { CrunchLoader } from \"./crunch-loader.js\";\nexport { NPYLoader, NPYWorkerLoader } from \"./npy-loader.js\";\n// Module constants\nexport { BASIS_EXTERNAL_LIBRARIES } from \"./lib/parsers/basis-module-loader.js\";\nexport { CRUNCH_EXTERNAL_LIBRARIES } from \"./lib/parsers/crunch-module-loader.js\";\n// Writers\nexport { CompressedTextureWriter } from \"./compressed-texture-writer.js\";\nexport { KTX2BasisWriter } from \"./ktx2-basis-writer.js\";\nexport const KTX2BasisWriterWorker = {\n name: 'Basis Universal Supercompressed GPU Texture',\n id: 'ktx2-basis-writer',\n module: 'textures',\n version: VERSION,\n extensions: ['ktx2'],\n worker: true,\n options: {\n useSRGB: false,\n qualityLevel: 10,\n encodeUASTC: false,\n mipmaps: false\n }\n};\n// Texture Loading API\nexport { loadImageTexture } from \"./lib/texture-api/load-image.js\";\nexport { loadImageTextureArray } from \"./lib/texture-api/load-image-array.js\";\nexport { loadImageTextureCube } from \"./lib/texture-api/load-image-cube.js\";\n// Utilities\nexport { GL_EXTENSIONS_CONSTANTS } from \"./lib/gl-extensions.js\";\nexport { selectSupportedBasisFormat } from \"./lib/parsers/parse-basis.js\";\nexport { getSupportedGPUTextureFormats } from \"./lib/utils/texture-formats.js\";\n// DEPRECATED\n// @deprecated\nexport { CrunchLoader as CrunchWorkerLoader } from \"./crunch-loader.js\";\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// Version constant cannot be imported, it needs to correspond to the build version of **this** module.\n// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nexport const VERSION = typeof \"4.3.0-beta.3\" !== 'undefined' ? \"4.3.0-beta.3\" : 'latest';\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { registerJSModules, getJSModuleOrNull } from '@loaders.gl/loader-utils';\nimport { loadLibrary } from '@loaders.gl/worker-utils';\nexport const BASIS_EXTERNAL_LIBRARIES = {\n /** Basis transcoder, javascript wrapper part */\n TRANSCODER: 'basis_transcoder.js',\n /** Basis transcoder, compiled web assembly part */\n TRANSCODER_WASM: 'basis_transcoder.wasm',\n /** Basis encoder, javascript wrapper part */\n ENCODER: 'basis_encoder.js',\n /** Basis encoder, compiled web assembly part */\n ENCODER_WASM: 'basis_encoder.wasm'\n};\nlet loadBasisTranscoderPromise;\n/**\n * Loads wasm transcoder module\n * @param options\n * @returns {BasisFile} promise\n */\nexport async function loadBasisTranscoderModule(options) {\n registerJSModules(options.modules);\n const basis = getJSModuleOrNull('basis');\n if (basis) {\n return basis;\n }\n loadBasisTranscoderPromise ||= loadBasisTranscoder(options);\n return await loadBasisTranscoderPromise;\n}\n/**\n * Loads wasm transcoder module\n * @param options\n * @returns {BasisFile} promise\n */\nasync function loadBasisTranscoder(options) {\n let BASIS = null;\n let wasmBinary = null;\n [BASIS, wasmBinary] = await Promise.all([\n await loadLibrary(BASIS_EXTERNAL_LIBRARIES.TRANSCODER, 'textures', options),\n await loadLibrary(BASIS_EXTERNAL_LIBRARIES.TRANSCODER_WASM, 'textures', options)\n ]);\n // Depends on how import happened...\n // @ts-ignore TS2339: Property does not exist on type\n BASIS = BASIS || globalThis.BASIS;\n return await initializeBasisTranscoderModule(BASIS, wasmBinary);\n}\n/**\n * Initialize wasm transcoder module\n * @param BasisModule - js part of the module\n * @param wasmBinary - wasm part of the module\n * @returns {BasisFile} promise\n */\nfunction initializeBasisTranscoderModule(BasisModule, wasmBinary) {\n const options = {};\n if (wasmBinary) {\n options.wasmBinary = wasmBinary;\n }\n return new Promise((resolve) => {\n // if you try to return BasisModule the browser crashes!\n BasisModule(options).then((module) => {\n const { BasisFile, initializeBasis } = module;\n initializeBasis();\n resolve({ BasisFile });\n });\n });\n}\nlet loadBasisEncoderPromise;\n/**\n * Loads wasm encoder module\n * @param options\n * @returns {BasisFile, KTX2File} promise\n */\nexport async function loadBasisEncoderModule(options) {\n const modules = options.modules || {};\n if (modules.basisEncoder) {\n return modules.basisEncoder;\n }\n loadBasisEncoderPromise = loadBasisEncoderPromise || loadBasisEncoder(options);\n return await loadBasisEncoderPromise;\n}\n/**\n * Loads wasm encoder module\n * @param options\n * @returns {BasisFile, KTX2File} promise\n */\nasync function loadBasisEncoder(options) {\n let BASIS_ENCODER = null;\n let wasmBinary = null;\n [BASIS_ENCODER, wasmBinary] = await Promise.all([\n await loadLibrary(BASIS_EXTERNAL_LIBRARIES.ENCODER, 'textures', options),\n await loadLibrary(BASIS_EXTERNAL_LIBRARIES.ENCODER_WASM, 'textures', options)\n ]);\n // Depends on how import happened...\n // @ts-ignore TS2339: Property does not exist on type\n BASIS_ENCODER = BASIS_ENCODER || globalThis.BASIS;\n return await initializeBasisEncoderModule(BASIS_ENCODER, wasmBinary);\n}\n/**\n * Initialize wasm transcoder module\n * @param BasisEncoderModule - js part of the module\n * @param wasmBinary - wasm part of the module\n * @returns {BasisFile, KTX2File} promise\n */\nfunction initializeBasisEncoderModule(BasisEncoderModule, wasmBinary) {\n const options = {};\n if (wasmBinary) {\n options.wasmBinary = wasmBinary;\n }\n return new Promise((resolve) => {\n // if you try to return BasisModule the browser crashes!\n BasisEncoderModule(options).then((module) => {\n const { BasisFile, KTX2File, initializeBasis, BasisEncoder } = module;\n initializeBasis();\n resolve({ BasisFile, KTX2File, BasisEncoder });\n });\n });\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/* eslint-disable camelcase */\nexport const GL_EXTENSIONS_CONSTANTS = {\n // WEBGL_compressed_texture_s3tc\n COMPRESSED_RGB_S3TC_DXT1_EXT: 0x83f0,\n COMPRESSED_RGBA_S3TC_DXT1_EXT: 0x83f1,\n COMPRESSED_RGBA_S3TC_DXT3_EXT: 0x83f2,\n COMPRESSED_RGBA_S3TC_DXT5_EXT: 0x83f3,\n // WEBGL_compressed_texture_es3\n COMPRESSED_R11_EAC: 0x9270,\n COMPRESSED_SIGNED_R11_EAC: 0x9271,\n COMPRESSED_RG11_EAC: 0x9272,\n COMPRESSED_SIGNED_RG11_EAC: 0x9273,\n COMPRESSED_RGB8_ETC2: 0x9274,\n COMPRESSED_RGBA8_ETC2_EAC: 0x9275,\n COMPRESSED_SRGB8_ETC2: 0x9276,\n COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: 0x9277,\n COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2: 0x9278,\n COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: 0x9279,\n // WEBGL_compressed_texture_pvrtc\n COMPRESSED_RGB_PVRTC_4BPPV1_IMG: 0x8c00,\n COMPRESSED_RGBA_PVRTC_4BPPV1_IMG: 0x8c02,\n COMPRESSED_RGB_PVRTC_2BPPV1_IMG: 0x8c01,\n COMPRESSED_RGBA_PVRTC_2BPPV1_IMG: 0x8c03,\n // WEBGL_compressed_texture_etc1\n COMPRESSED_RGB_ETC1_WEBGL: 0x8d64,\n // WEBGL_compressed_texture_atc\n COMPRESSED_RGB_ATC_WEBGL: 0x8c92,\n COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL: 0x8c93,\n COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL: 0x87ee,\n // WEBGL_compressed_texture_astc\n COMPRESSED_RGBA_ASTC_4X4_KHR: 0x93b0,\n COMPRESSED_RGBA_ASTC_5X4_KHR: 0x93b1,\n COMPRESSED_RGBA_ASTC_5X5_KHR: 0x93b2,\n COMPRESSED_RGBA_ASTC_6X5_KHR: 0x93b3,\n COMPRESSED_RGBA_ASTC_6X6_KHR: 0x93b4,\n COMPRESSED_RGBA_ASTC_8X5_KHR: 0x93b5,\n COMPRESSED_RGBA_ASTC_8X6_KHR: 0x93b6,\n COMPRESSED_RGBA_ASTC_8X8_KHR: 0x93b7,\n COMPRESSED_RGBA_ASTC_10X5_KHR: 0x93b8,\n COMPRESSED_RGBA_ASTC_10X6_KHR: 0x93b9,\n COMPRESSED_RGBA_ASTC_10X8_KHR: 0x93ba,\n COMPRESSED_RGBA_ASTC_10X10_KHR: 0x93bb,\n COMPRESSED_RGBA_ASTC_12X10_KHR: 0x93bc,\n COMPRESSED_RGBA_ASTC_12X12_KHR: 0x93bd,\n COMPRESSED_SRGB8_ALPHA8_ASTC_4X4_KHR: 0x93d0,\n COMPRESSED_SRGB8_ALPHA8_ASTC_5X4_KHR: 0x93d1,\n COMPRESSED_SRGB8_ALPHA8_ASTC_5X5_KHR: 0x93d2,\n COMPRESSED_SRGB8_ALPHA8_ASTC_6X5_KHR: 0x93d3,\n COMPRESSED_SRGB8_ALPHA8_ASTC_6X6_KHR: 0x93d4,\n COMPRESSED_SRGB8_ALPHA8_ASTC_8X5_KHR: 0x93d5,\n COMPRESSED_SRGB8_ALPHA8_ASTC_8X6_KHR: 0x93d6,\n COMPRESSED_SRGB8_ALPHA8_ASTC_8X8_KHR: 0x93d7,\n COMPRESSED_SRGB8_ALPHA8_ASTC_10X5_KHR: 0x93d8,\n COMPRESSED_SRGB8_ALPHA8_ASTC_10X6_KHR: 0x93d9,\n COMPRESSED_SRGB8_ALPHA8_ASTC_10X8_KHR: 0x93da,\n COMPRESSED_SRGB8_ALPHA8_ASTC_10X10_KHR: 0x93db,\n COMPRESSED_SRGB8_ALPHA8_ASTC_12X10_KHR: 0x93dc,\n COMPRESSED_SRGB8_ALPHA8_ASTC_12X12_KHR: 0x93dd,\n // EXT_texture_compression_rgtc\n COMPRESSED_RED_RGTC1_EXT: 0x8dbb,\n COMPRESSED_SIGNED_RED_RGTC1_EXT: 0x8dbc,\n COMPRESSED_RED_GREEN_RGTC2_EXT: 0x8dbd,\n COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT: 0x8dbe,\n // WEBGL_compressed_texture_s3tc_srgb\n COMPRESSED_SRGB_S3TC_DXT1_EXT: 0x8c4c,\n COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT: 0x8c4d,\n COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: 0x8c4e,\n COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT: 0x8c4f\n};\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst BROWSER_PREFIXES = ['', 'WEBKIT_', 'MOZ_'];\nconst WEBGL_EXTENSIONS = {\n /* eslint-disable camelcase */\n WEBGL_compressed_texture_s3tc: 'dxt',\n WEBGL_compressed_texture_s3tc_srgb: 'dxt-srgb',\n WEBGL_compressed_texture_etc1: 'etc1',\n WEBGL_compressed_texture_etc: 'etc2',\n WEBGL_compressed_texture_pvrtc: 'pvrtc',\n WEBGL_compressed_texture_atc: 'atc',\n WEBGL_compressed_texture_astc: 'astc',\n EXT_texture_compression_rgtc: 'rgtc'\n /* eslint-enable camelcase */\n};\nlet formats = null;\n/**\n * Returns a list of formats.\n * Creates a temporary WebGLRenderingContext if none is provided.\n *\n * @param gl - Optional context.\n */\nexport function getSupportedGPUTextureFormats(gl) {\n if (!formats) {\n gl = gl || getWebGLContext() || undefined;\n formats = new Set();\n for (const prefix of BROWSER_PREFIXES) {\n for (const extension in WEBGL_EXTENSIONS) {\n if (gl && gl.getExtension(`${prefix}${extension}`)) {\n const gpuTextureFormat = WEBGL_EXTENSIONS[extension];\n formats.add(gpuTextureFormat);\n }\n }\n }\n }\n return formats;\n}\n/**\n * @returns {WebGLRenderingContext?}\n */\nfunction getWebGLContext() {\n try {\n const canvas = document.createElement('canvas');\n return canvas.getContext('webgl');\n }\n catch (error) {\n return null;\n }\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { read } from 'ktx-parse';\nimport { extractMipmapImages } from \"../utils/extract-mipmap-images.js\";\nimport { mapVkFormatToWebGL } from \"../utils/ktx-format-helper.js\";\nconst KTX2_ID = [\n // '\u00B4', 'K', 'T', 'X', '2', '0', '\u00AA', '\\r', '\\n', '\\x1A', '\\n'\n 0xab, 0x4b, 0x54, 0x58, 0x20, 0x32, 0x30, 0xbb, 0x0d, 0x0a, 0x1a, 0x0a\n];\n// eslint-disable-next-line complexity\nexport function isKTX(data) {\n // const id = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n const id = new Uint8Array(data);\n const notKTX = id.byteLength < KTX2_ID.length ||\n id[0] !== KTX2_ID[0] || // '\u00B4'\n id[1] !== KTX2_ID[1] || // 'K'\n id[2] !== KTX2_ID[2] || // 'T'\n id[3] !== KTX2_ID[3] || // 'X'\n id[4] !== KTX2_ID[4] || // ' '\n id[5] !== KTX2_ID[5] || // '2'\n id[6] !== KTX2_ID[6] || // '0'\n id[7] !== KTX2_ID[7] || // '\u00AA'\n id[8] !== KTX2_ID[8] || // '\\r'\n id[9] !== KTX2_ID[9] || // '\\n'\n id[10] !== KTX2_ID[10] || // '\\x1A'\n id[11] !== KTX2_ID[11]; // '\\n'\n return !notKTX;\n}\nexport function parseKTX(arrayBuffer) {\n const uint8Array = new Uint8Array(arrayBuffer);\n const ktx = read(uint8Array);\n const mipMapLevels = Math.max(1, ktx.levels.length);\n const width = ktx.pixelWidth;\n const height = ktx.pixelHeight;\n const internalFormat = mapVkFormatToWebGL(ktx.vkFormat);\n return extractMipmapImages(ktx.levels, {\n mipMapLevels,\n width,\n height,\n sizeFunction: (level) => level.uncompressedByteLength,\n internalFormat\n });\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n/**\n * Extract mipmap images from compressed texture buffer\n * @param data - binary data of compressed texture or Array of level objects\n * @param options.mipMapLevels - number of mipmap level inside image\n * @param options.width - width of 0 - level\n * @param options.height - height of 0 - level\n * @param options.sizeFunction - format-related function to calculate level size in bytes\n * @param options.internalFormat - WebGL compatible format code\n * @returns Array of the texture levels\n */\nexport function extractMipmapImages(data, options) {\n const images = new Array(options.mipMapLevels);\n let levelWidth = options.width;\n let levelHeight = options.height;\n let offset = 0;\n for (let i = 0; i < options.mipMapLevels; ++i) {\n // @ts-expect-error\n const levelSize = getLevelSize(options, levelWidth, levelHeight, data, i);\n // @ts-expect-error\n const levelData = getLevelData(data, i, offset, levelSize);\n images[i] = {\n compressed: true,\n format: options.internalFormat,\n data: levelData,\n width: levelWidth,\n height: levelHeight,\n levelSize\n };\n levelWidth = Math.max(1, levelWidth >> 1);\n levelHeight = Math.max(1, levelHeight >> 1);\n offset += levelSize;\n }\n return images;\n}\nfunction getLevelData(data, index, offset, levelSize) {\n if (!Array.isArray(data)) {\n return new Uint8Array(data.buffer, data.byteOffset + offset, levelSize);\n }\n return data[index].levelData;\n}\nfunction getLevelSize(options, levelWidth, levelHeight, data, index) {\n if (!Array.isArray(data)) {\n return options.sizeFunction(levelWidth, levelHeight);\n }\n return options.sizeFunction(data[index]);\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { GL_EXTENSIONS_CONSTANTS } from \"../gl-extensions.js\";\nconst VULKAN_TO_WEBGL_FORMAT_MAP = {\n 131: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT,\n 132: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB_S3TC_DXT1_EXT,\n 133: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT1_EXT,\n 134: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT,\n 135: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT3_EXT,\n 136: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT,\n 137: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT,\n 138: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT,\n 139: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RED_RGTC1_EXT,\n 140: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SIGNED_RED_RGTC1_EXT,\n 141: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RED_GREEN_RGTC2_EXT,\n 142: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT,\n 147: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB8_ETC2,\n 148: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ETC2,\n 149: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2,\n 150: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2,\n 151: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA8_ETC2_EAC,\n 152: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC,\n 153: GL_EXTENSIONS_CONSTANTS.COMPRESSED_R11_EAC,\n 154: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SIGNED_R11_EAC,\n 155: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RG11_EAC,\n 156: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SIGNED_RG11_EAC,\n // @ts-ignore\n 157: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_4x4_KHR,\n // @ts-ignore\n 158: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR,\n // @ts-ignore\n 159: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_5x4_KHR,\n // @ts-ignore\n 160: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_5X4_KHR,\n // @ts-ignore\n 161: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_5x5_KHR,\n // @ts-ignore\n 162: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR,\n // @ts-ignore\n 163: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_6x5_KHR,\n // @ts-ignore\n 164: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR,\n // @ts-ignore\n 165: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_6x6_KHR,\n // @ts-ignore\n 166: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR,\n // @ts-ignore\n 167: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8x5_KHR,\n // @ts-ignore\n 168: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR,\n // @ts-ignore\n 169: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8x6_KHR,\n // @ts-ignore\n 170: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR,\n // @ts-ignore\n 171: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8x8_KHR,\n // @ts-ignore\n 172: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR,\n // @ts-ignore\n 173: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x5_KHR,\n // @ts-ignore\n 174: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR,\n // @ts-ignore\n 175: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x6_KHR,\n // @ts-ignore\n 176: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR,\n // @ts-ignore\n 177: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x8_KHR,\n // @ts-ignore\n 178: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR,\n // @ts-ignore\n 179: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x10_KHR,\n // @ts-ignore\n 180: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR,\n // @ts-ignore\n 181: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_12x10_KHR,\n // @ts-ignore\n 182: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR,\n // @ts-ignore\n 183: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_12x12_KHR,\n // @ts-ignore\n 184: GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR,\n 1000054000: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG,\n 1000054001: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,\n // @ts-ignore\n 1000066000: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_4x4_KHR,\n // @ts-ignore\n 1000066001: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_5x4_KHR,\n // @ts-ignore\n 1000066002: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_5x5_KHR,\n // @ts-ignore\n 1000066003: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_6x5_KHR,\n // @ts-ignore\n 1000066004: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_6x6_KHR,\n // @ts-ignore\n 1000066005: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8x5_KHR,\n // @ts-ignore\n 1000066006: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8x6_KHR,\n // @ts-ignore\n 1000066007: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8x8_KHR,\n // @ts-ignore\n 1000066008: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x5_KHR,\n // @ts-ignore\n 1000066009: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x6_KHR,\n // @ts-ignore\n 1000066010: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x8_KHR,\n // @ts-ignore\n 1000066011: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10x10_KHR,\n // @ts-ignore\n 1000066012: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_12x10_KHR,\n // @ts-ignore\n 1000066013: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_12x12_KHR\n};\n/**\n * Returns WebGl format based on Vulkan format\n * Vulkan to WebGl format mapping provided here http://github.khronos.org/KTX-Specification/#formatMapping\n * Vulkan name to format number mapping provided here: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkFormat.html\n * @param vkFormat\n * @returns WebGL / OpenGL constant\n */\nexport function mapVkFormatToWebGL(vkFormat) {\n return VULKAN_TO_WEBGL_FORMAT_MAP[vkFormat];\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { loadBasisEncoderModule, loadBasisTranscoderModule } from \"./basis-module-loader.js\";\nimport { GL_EXTENSIONS_CONSTANTS } from \"../gl-extensions.js\";\nimport { getSupportedGPUTextureFormats } from \"../utils/texture-formats.js\";\nimport { isKTX } from \"./parse-ktx.js\";\nconst OutputFormat = {\n etc1: {\n basisFormat: 0,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_ETC1_WEBGL\n },\n etc2: { basisFormat: 1, compressed: true },\n bc1: {\n basisFormat: 2,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT\n },\n bc3: {\n basisFormat: 3,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT\n },\n bc4: { basisFormat: 4, compressed: true },\n bc5: { basisFormat: 5, compressed: true },\n 'bc7-m6-opaque-only': { basisFormat: 6, compressed: true },\n 'bc7-m5': { basisFormat: 7, compressed: true },\n 'pvrtc1-4-rgb': {\n basisFormat: 8,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_PVRTC_4BPPV1_IMG\n },\n 'pvrtc1-4-rgba': {\n basisFormat: 9,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG\n },\n 'astc-4x4': {\n basisFormat: 10,\n compressed: true,\n format: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_4X4_KHR\n },\n 'atc-rgb': { basisFormat: 11, compressed: true },\n 'atc-rgba-interpolated-alpha': { basisFormat: 12, compressed: true },\n rgba32: { basisFormat: 13, compressed: false },\n rgb565: { basisFormat: 14, compressed: false },\n bgr565: { basisFormat: 15, compressed: false },\n rgba4444: { basisFormat: 16, compressed: false }\n};\n/**\n * parse data with a Binomial Basis_Universal module\n * @param data\n * @param options\n * @returns compressed texture data\n */\nexport async function parseBasis(data, options) {\n if (options.basis.containerFormat === 'auto') {\n if (isKTX(data)) {\n const fileConstructors = await loadBasisEncoderModule(options);\n return parseKTX2File(fileConstructors.KTX2File, data, options);\n }\n const { BasisFile } = await loadBasisTranscoderModule(options);\n return parseBasisFile(BasisFile, data, options);\n }\n switch (options.basis.module) {\n case 'encoder':\n const fileConstructors = await loadBasisEncoderModule(options);\n switch (options.basis.containerFormat) {\n case 'ktx2':\n return parseKTX2File(fileConstructors.KTX2File, data, options);\n case 'basis':\n default:\n return parseBasisFile(fileConstructors.BasisFile, data, options);\n }\n case 'transcoder':\n default:\n const { BasisFile } = await loadBasisTranscoderModule(options);\n return parseBasisFile(BasisFile, data, options);\n }\n}\n/**\n * Parse *.basis file data\n * @param BasisFile - initialized transcoder module\n * @param data\n * @param options\n * @returns compressed texture data\n */\nfunction parseBasisFile(BasisFile, data, options) {\n const basisFile = new BasisFile(new Uint8Array(data));\n try {\n if (!basisFile.startTranscoding()) {\n throw new Error('Failed to start basis transcoding');\n }\n const imageCount = basisFile.getNumImages();\n const images = [];\n for (let imageIndex = 0; imageIndex < imageCount; imageIndex++) {\n const levelsCount = basisFile.getNumLevels(imageIndex);\n const levels = [];\n for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {\n levels.push(transcodeImage(basisFile, imageIndex, levelIndex, options));\n }\n images.push(levels);\n }\n return images;\n }\n finally {\n basisFile.close();\n basisFile.delete();\n }\n}\n/**\n * Parse the particular level image of a basis file\n * @param basisFile\n * @param imageIndex\n * @param levelIndex\n * @param options\n * @returns compressed texture data\n */\nfunction transcodeImage(basisFile, imageIndex, levelIndex, options) {\n const width = basisFile.getImageWidth(imageIndex, levelIndex);\n const height = basisFile.getImageHeight(imageIndex, levelIndex);\n // See https://github.com/BinomialLLC/basis_universal/pull/83\n const hasAlpha = basisFile.getHasAlpha( /* imageIndex, levelIndex */);\n // Check options for output format etc\n const { compressed, format, basisFormat } = getBasisOptions(options, hasAlpha);\n const decodedSize = basisFile.getImageTranscodedSizeInBytes(imageIndex, levelIndex, basisFormat);\n const decodedData = new Uint8Array(decodedSize);\n if (!basisFile.transcodeImage(decodedData, imageIndex, levelIndex, basisFormat, 0, 0)) {\n throw new Error('failed to start Basis transcoding');\n }\n return {\n // standard loaders.gl image category payload\n width,\n height,\n data: decodedData,\n compressed,\n format,\n // Additional fields\n // Add levelSize field.\n hasAlpha\n };\n}\n/**\n * Parse *.ktx2 file data\n * @param KTX2File\n * @param data\n * @param options\n * @returns compressed texture data\n */\nfunction parseKTX2File(KTX2File, data, options) {\n const ktx2File = new KTX2File(new Uint8Array(data));\n try {\n if (!ktx2File.startTranscoding()) {\n throw new Error('failed to start KTX2 transcoding');\n }\n const levelsCount = ktx2File.getLevels();\n const levels = [];\n for (let levelIndex = 0; levelIndex < levelsCount; levelIndex++) {\n levels.push(transcodeKTX2Image(ktx2File, levelIndex, options));\n }\n return [levels];\n }\n finally {\n ktx2File.close();\n ktx2File.delete();\n }\n}\n/**\n * Parse the particular level image of a ktx2 file\n * @param ktx2File\n * @param levelIndex\n * @param options\n * @returns\n */\nfunction transcodeKTX2Image(ktx2File, levelIndex, options) {\n const { alphaFlag, height, width } = ktx2File.getImageLevelInfo(levelIndex, 0, 0);\n // Check options for output format etc\n const { compressed, format, basisFormat } = getBasisOptions(options, alphaFlag);\n const decodedSize = ktx2File.getImageTranscodedSizeInBytes(levelIndex, 0 /* layerIndex */, 0 /* faceIndex */, basisFormat);\n const decodedData = new Uint8Array(decodedSize);\n if (!ktx2File.transcodeImage(decodedData, levelIndex, 0 /* layerIndex */, 0 /* faceIndex */, basisFormat, 0, -1 /* channel0 */, -1 /* channel1 */)) {\n throw new Error('Failed to transcode KTX2 image');\n }\n return {\n // standard loaders.gl image category payload\n width,\n height,\n data: decodedData,\n compressed,\n // Additional fields\n levelSize: decodedSize,\n hasAlpha: alphaFlag,\n format\n };\n}\n/**\n * Get BasisFormat by loader format option\n * @param options\n * @param hasAlpha\n * @returns BasisFormat data\n */\nfunction getBasisOptions(options, hasAlpha) {\n let format = options && options.basis && options.basis.format;\n if (format === 'auto') {\n format = selectSupportedBasisFormat();\n }\n if (typeof format === 'object') {\n format = hasAlpha ? format.alpha : format.noAlpha;\n }\n format = format.toLowerCase();\n return OutputFormat[format];\n}\n/**\n * Select transcode format from the list of supported formats\n * @returns key for OutputFormat map\n */\nexport function selectSupportedBasisFormat() {\n const supportedFormats = getSupportedGPUTextureFormats();\n if (supportedFormats.has('astc')) {\n return 'astc-4x4';\n }\n else if (supportedFormats.has('dxt')) {\n return {\n alpha: 'bc3',\n noAlpha: 'bc1'\n };\n }\n else if (supportedFormats.has('pvrtc')) {\n return {\n alpha: 'pvrtc1-4-rgba',\n noAlpha: 'pvrtc1-4-rgb'\n };\n }\n else if (supportedFormats.has('etc1')) {\n return 'etc1';\n }\n else if (supportedFormats.has('etc2')) {\n return 'etc2';\n }\n return 'rgb565';\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { VERSION } from \"./lib/utils/version.js\";\nimport { parseBasis } from \"./lib/parsers/parse-basis.js\";\n/**\n * Worker loader for Basis super compressed textures\n */\nexport const BasisWorkerLoader = {\n dataType: null,\n batchType: null,\n name: 'Basis',\n id: 'basis',\n module: 'textures',\n version: VERSION,\n worker: true,\n extensions: ['basis', 'ktx2'],\n mimeTypes: ['application/octet-stream', 'image/ktx2'],\n tests: ['sB'],\n binary: true,\n options: {\n basis: {\n format: 'auto',\n libraryPath: 'libs/',\n containerFormat: 'auto',\n module: 'transcoder'\n }\n }\n};\n/**\n * Loader for Basis super compressed textures\n */\nexport const BasisLoader = {\n ...BasisWorkerLoader,\n parse: parseBasis\n};\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { assert } from '@loaders.gl/loader-utils';\nimport { GL_EXTENSIONS_CONSTANTS } from \"../gl-extensions.js\";\nimport { extractMipmapImages } from \"../utils/extract-mipmap-images.js\";\nconst DDS_CONSTANTS = {\n MAGIC_NUMBER: 0x20534444,\n HEADER_LENGTH: 31,\n MAGIC_NUMBER_INDEX: 0,\n HEADER_SIZE_INDEX: 1,\n HEADER_FLAGS_INDEX: 2,\n HEADER_HEIGHT_INDEX: 3,\n HEADER_WIDTH_INDEX: 4,\n MIPMAPCOUNT_INDEX: 7,\n HEADER_PF_FLAGS_INDEX: 20,\n HEADER_PF_FOURCC_INDEX: 21,\n DDSD_MIPMAPCOUNT: 0x20000,\n DDPF_FOURCC: 0x4\n};\nconst DDS_PIXEL_FORMATS = {\n DXT1: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT,\n DXT3: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT3_EXT,\n DXT5: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT,\n 'ATC ': GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_ATC_WEBGL,\n ATCA: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL,\n ATCI: GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL\n};\nconst getATCLevelSize = getDxt1LevelSize;\nconst getATCALevelSize = getDxtXLevelSize;\nconst getATCILevelSize = getDxtXLevelSize;\nconst DDS_SIZE_FUNCTIONS = {\n DXT1: getDxt1LevelSize,\n DXT3: getDxtXLevelSize,\n DXT5: getDxtXLevelSize,\n 'ATC ': getATCLevelSize,\n ATCA: getATCALevelSize,\n ATCI: getATCILevelSize\n};\n/**\n * Check if data is in \"DDS\" format by its magic number\n * @param data - binary data of compressed texture\n * @returns true - data in \"DDS\" format, else - false\n */\nexport function isDDS(data) {\n const header = new Uint32Array(data, 0, DDS_CONSTANTS.HEADER_LENGTH);\n const magic = header[DDS_CONSTANTS.MAGIC_NUMBER_INDEX];\n return magic === DDS_CONSTANTS.MAGIC_NUMBER;\n}\n/**\n * Parse texture data as \"DDS\" format\n * @param data - binary data of compressed texture\n * @returns Array of the texture levels\n */\nexport function parseDDS(data) {\n const header = new Int32Array(data, 0, DDS_CONSTANTS.HEADER_LENGTH);\n const pixelFormatNumber = header[DDS_CONSTANTS.HEADER_PF_FOURCC_INDEX];\n assert(Boolean(header[DDS_CONSTANTS.HEADER_PF_FLAGS_INDEX] & DDS_CONSTANTS.DDPF_FOURCC), 'DDS: Unsupported format, must contain a FourCC code');\n const fourCC = int32ToFourCC(pixelFormatNumber);\n const internalFormat = DDS_PIXEL_FORMATS[fourCC];\n const sizeFunction = DDS_SIZE_FUNCTIONS[fourCC];\n assert(internalFormat && sizeFunction, `DDS: Unknown pixel format ${pixelFormatNumber}`);\n let mipMapLevels = 1;\n if (header[DDS_CONSTANTS.HEADER_FLAGS_INDEX] & DDS_CONSTANTS.DDSD_MIPMAPCOUNT) {\n mipMapLevels = Math.max(1, header[DDS_CONSTANTS.MIPMAPCOUNT_INDEX]);\n }\n const width = header[DDS_CONSTANTS.HEADER_WIDTH_INDEX];\n const height = header[DDS_CONSTANTS.HEADER_HEIGHT_INDEX];\n const dataOffset = header[DDS_CONSTANTS.HEADER_SIZE_INDEX] + 4;\n const image = new Uint8Array(data, dataOffset);\n return extractMipmapImages(image, {\n mipMapLevels,\n width,\n height,\n sizeFunction,\n internalFormat\n });\n}\n/**\n * DXT1 applicable function to calculate level size\n * @param width - level width\n * @param height - level height\n * @returns level size in bytes\n */\nexport function getDxt1LevelSize(width, height) {\n return ((width + 3) >> 2) * ((height + 3) >> 2) * 8;\n}\n/**\n * DXT3 & DXT5 applicable function to calculate level size\n * @param width - level width\n * @param height - level height\n * @returns level size in bytes\n */\nexport function getDxtXLevelSize(width, height) {\n return ((width + 3) >> 2) * ((height + 3) >> 2) * 16;\n}\n/**\n * Convert every byte of Int32 value to char\n * @param value - Int32 number\n * @returns string of 4 characters\n */\nfunction int32ToFourCC(value) {\n return String.fromCharCode(value & 0xff, (value >> 8) & 0xff, (value >> 16) & 0xff, (value >> 24) & 0xff);\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { GL_EXTENSIONS_CONSTANTS } from \"../gl-extensions.js\";\nimport { extractMipmapImages } from \"../utils/extract-mipmap-images.js\";\nconst PVR_CONSTANTS = {\n MAGIC_NUMBER: 0x03525650,\n MAGIC_NUMBER_EXTRA: 0x50565203,\n HEADER_LENGTH: 13,\n HEADER_SIZE: 52,\n MAGIC_NUMBER_INDEX: 0,\n PIXEL_FORMAT_INDEX: 2,\n COLOUR_SPACE_INDEX: 4,\n HEIGHT_INDEX: 6,\n WIDTH_INDEX: 7,\n MIPMAPCOUNT_INDEX: 11,\n METADATA_SIZE_INDEX: 12\n};\nconst PVR_PIXEL_FORMATS = {\n 0: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_PVRTC_2BPPV1_IMG],\n 1: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG],\n 2: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_PVRTC_4BPPV1_IMG],\n 3: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG],\n 6: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_ETC1_WEBGL],\n 7: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB_S3TC_DXT1_EXT],\n 9: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT3_EXT],\n 11: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_S3TC_DXT5_EXT],\n 22: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB8_ETC2],\n 23: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA8_ETC2_EAC],\n 24: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2],\n 25: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_R11_EAC],\n 26: [GL_EXTENSIONS_CONSTANTS.COMPRESSED_RG11_EAC],\n 27: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_4X4_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_4X4_KHR\n ],\n 28: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_5X4_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_5X4_KHR\n ],\n 29: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_5X5_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_5X5_KHR\n ],\n 30: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_6X5_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_6X5_KHR\n ],\n 31: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_6X6_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_6X6_KHR\n ],\n 32: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8X5_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_8X5_KHR\n ],\n 33: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8X6_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_8X6_KHR\n ],\n 34: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_8X8_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_8X8_KHR\n ],\n 35: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10X5_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10X5_KHR\n ],\n 36: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10X6_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10X6_KHR\n ],\n 37: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10X8_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10X8_KHR\n ],\n 38: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_10X10_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_10X10_KHR\n ],\n 39: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_12X10_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_12X10_KHR\n ],\n 40: [\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_RGBA_ASTC_12X12_KHR,\n GL_EXTENSIONS_CONSTANTS.COMPRESSED_SRGB8_ALPHA8_ASTC_12X12_KHR\n ]\n};\nconst PVR_SIZE_FUNCTIONS = {\n 0: pvrtc2bppSize,\n 1: pvrtc2bppSize,\n 2: pvrtc4bppSize,\n 3: pvrtc4bppSize,\n 6: dxtEtcSmallSize,\n 7: dxtEtcSmallSize,\n 9: dxtEtcAstcBigSize,\n 11: dxtEtcAstcBigSize,\n 22: dxtEtcSmallSize,\n 23: dxtEtcAstcBigSize,\n 24: dxtEtcSmallSize,\n 25: dxtEtcSmallSize,\n 26: dxtEtcAstcBigSize,\n 27: dxtEtcAstcBigSize,\n 28: atc5x4Size,\n 29: atc5x5Size,\n 30: atc6x5Size,\n 31: atc6x6Size,\n 32: atc8x5Size,\n 33: atc8x6Size,\n 34: atc8x8Size,\n 35: atc10x5Size,\n 36: atc10x6Size,\n 37: atc10x8Size,\n 38: atc10x10Size,\n 39: atc12x10Size,\n 40: atc12x12Size\n};\n/**\n * Check if data is in \"PVR\" format by its magic number\n * @param data - binary data of compressed texture\n * @returns true - data in \"PVR\" format, else - false\n */\nexport function isPVR(data) {\n const header = new Uint32Array(data, 0, PVR_CONSTANTS.HEADER_LENGTH);\n const version = header[PVR_CONSTANTS.MAGIC_NUMBER_INDEX];\n return version === PVR_CONSTANTS.MAGIC_NUMBER || version === PVR_CONSTANTS.MAGIC_NUMBER_EXTRA;\n}\n/**\n * Parse texture data as \"PVR\" format\n * @param data - binary data of compressed texture\n * @returns Array of the texture levels\n * @see http://cdn.imgtec.com/sdk-documentation/PVR+File+Format.Specification.pdf\n */\nexport function parsePVR(data) {\n const header = new Uint32Array(data, 0, PVR_CONSTANTS.HEADER_LENGTH);\n const pvrFormat = header[PVR_CONSTANTS.PIXEL_FORMAT_INDEX];\n const colourSpace = header[PVR_CONSTANTS.COLOUR_SPACE_INDEX];\n const pixelFormats = PVR_PIXEL_FORMATS[pvrFormat] || [];\n const internalFormat = pixelFormats.length > 1 && colourSpace ? pixelFormats[1] : pixelFormats[0];\n const sizeFunction = PVR_SIZE_FUNCTIONS[pvrFormat];\n const mipMapLevels = header[PVR_CONSTANTS.MIPMAPCOUNT_INDEX];\n const width = header[PVR_CONSTANTS.WIDTH_INDEX];\n const height = header[PVR_CONSTANTS.HEIGHT_INDEX];\n const dataOffset = PVR_CONSTANTS.HEADER_SIZE + header[PVR_CONSTANTS.METADATA_SIZE_INDEX];\n const image = new Uint8Array(data, dataOffset);\n return extractMipmapImages(image, {\n mipMapLevels,\n width,\n height,\n sizeFunction,\n internalFormat\n });\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_pvrtc/\nfunction pvrtc2bppSize(width, height) {\n width = Math.max(width, 16);\n height = Math.max(height, 8);\n return (width * height) / 4;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_pvrtc/\nfunction pvrtc4bppSize(width, height) {\n width = Math.max(width, 8);\n height = Math.max(height, 8);\n return (width * height) / 2;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_s3tc/\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_etc/\n// Size for:\n// COMPRESSED_RGB_S3TC_DXT1_EXT\n// COMPRESSED_R11_EAC\n// COMPRESSED_SIGNED_R11_EAC\n// COMPRESSED_RGB8_ETC2\n// COMPRESSED_SRGB8_ETC2\n// COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2\n// COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2\nfunction dxtEtcSmallSize(width, height) {\n return Math.floor((width + 3) / 4) * Math.floor((height + 3) / 4) * 8;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_s3tc/\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_etc/\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\n// Size for:\n// COMPRESSED_RGBA_S3TC_DXT3_EXT\n// COMPRESSED_RGBA_S3TC_DXT5_EXT\n// COMPRESSED_RG11_EAC\n// COMPRESSED_SIGNED_RG11_EAC\n// COMPRESSED_RGBA8_ETC2_EAC\n// COMPRESSED_SRGB8_ALPHA8_ETC2_EAC\n// COMPRESSED_RGBA_ASTC_4x4_KHR\nfunction dxtEtcAstcBigSize(width, height) {\n return Math.floor((width + 3) / 4) * Math.floor((height + 3) / 4) * 16;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc5x4Size(width, height) {\n return Math.floor((width + 4) / 5) * Math.floor((height + 3) / 4) * 16;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc5x5Size(width, height) {\n return Math.floor((width + 4) / 5) * Math.floor((height + 4) / 5) * 16;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc6x5Size(width, height) {\n return Math.floor((width + 5) / 6) * Math.floor((height + 4) / 5) * 16;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc6x6Size(width, height) {\n return Math.floor((width + 5) / 6) * Math.floor((height + 5) / 6) * 16;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc8x5Size(width, height) {\n return Math.floor((width + 7) / 8) * Math.floor((height + 4) / 5) * 16;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc8x6Size(width, height) {\n return Math.floor((width + 7) / 8) * Math.floor((height + 5) / 6) * 16;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc8x8Size(width, height) {\n return Math.floor((width + 7) / 8) * Math.floor((height + 7) / 8) * 16;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc10x5Size(width, height) {\n return Math.floor((width + 9) / 10) * Math.floor((height + 4) / 5) * 16;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc10x6Size(width, height) {\n return Math.floor((width + 9) / 10) * Math.floor((height + 5) / 6) * 16;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc10x8Size(width, height) {\n return Math.floor((width + 9) / 10) * Math.floor((height + 7) / 8) * 16;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc10x10Size(width, height) {\n return Math.floor((width + 9) / 10) * Math.floor((height + 9) / 10) * 16;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc12x10Size(width, height) {\n return Math.floor((width + 11) / 12) * Math.floor((height + 9) / 10) * 16;\n}\n// https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/\nfunction atc12x12Size(width, height) {\n return Math.floor((width + 11) / 12) * Math.floor((height + 11) / 12) * 16;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { isKTX, parseKTX } from \"./parse-ktx.js\";\nimport { isDDS, parseDDS } from \"./parse-dds.js\";\nimport { isPVR, parsePVR } from \"./parse-pvr.js\";\n/**\n * Deduces format and parses compressed texture loaded in ArrayBuffer\n * @param data - binary data of compressed texture\n * @returns Array of the texture levels\n */\nexport function parseCompressedTexture(data) {\n if (isKTX(data)) {\n // TODO: remove @ts-ignore when `parseKTX` output is normalized to loaders.gl texture format\n // @ts-ignore\n return parseKTX(data);\n }\n if (isDDS(data)) {\n return parseDDS(data);\n }\n if (isPVR(data)) {\n return parsePVR(data);\n }\n throw new Error('Texture container format not recognized');\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { VERSION } from \"./lib/utils/version.js\";\nimport { parseCompressedTexture } from \"./lib/parsers/parse-compressed-texture.js\";\nimport { parseBasis } from \"./lib/parsers/parse-basis.js\";\n/**\n * Worker Loader for KTX, DDS, and PVR texture container formats\n */\nexport const CompressedTextureWorkerLoader = {\n dataType: null,\n batchType: null,\n name: 'Texture Containers',\n id: 'compressed-texture',\n module: 'textures',\n version: VERSION,\n worker: true,\n extensions: [\n 'ktx',\n 'ktx2',\n 'dds', // WEBGL_compressed_texture_s3tc, WEBGL_compressed_texture_atc\n 'pvr' // WEBGL_compressed_texture_pvrtc\n ],\n mimeTypes: [\n 'image/ktx2',\n 'image/ktx',\n 'image/vnd-ms.dds',\n 'image/x-dds',\n 'application/octet-stream'\n ],\n binary: true,\n options: {\n 'compressed-texture': {\n libraryPath: 'libs/',\n useBasis: false\n }\n }\n};\n/**\n * Loader for KTX, DDS, and PVR texture container formats\n */\nexport const CompressedTextureLoader = {\n ...CompressedTextureWorkerLoader,\n parse: async (arrayBuffer, options) => {\n if (options?.['compressed-texture']?.useBasis) {\n // @ts-expect-error TODO not allowed to modify inputs\n options.basis = {\n format: {\n alpha: 'BC3',\n noAlpha: 'BC1'\n },\n // @ts-expect-error TODO not allowed to modify inputs\n ...options.basis,\n containerFormat: 'ktx2',\n module: 'encoder'\n };\n const result = await parseBasis(arrayBuffer, options);\n return result[0];\n }\n return parseCompressedTexture(arrayBuffer);\n }\n};\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { VERSION } from \"./lib/utils/version.js\";\n/**\n * Worker loader for the Crunch compressed texture container format\n * @note We avoid bundling crunch - it is a rare format and large lib, so we only offer worker loader\n */\nexport const CrunchLoader = {\n dataType: null,\n batchType: null,\n id: 'crunch',\n name: 'Crunch',\n module: 'textures',\n version: VERSION,\n worker: true,\n extensions: ['crn'],\n mimeTypes: ['image/crn', 'image/x-crn', 'application/octet-stream'],\n binary: true,\n options: {\n crunch: {\n libraryPath: 'libs/'\n }\n }\n};\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst a = new Uint32Array([0x12345678]);\nconst b = new Uint8Array(a.buffer, a.byteOffset, a.byteLength);\nconst isLittleEndian = !(b[0] === 0x12);\nconst LITTLE_ENDIAN_OS = isLittleEndian;\n/**\n * The basic string format consists of 3 characters:\n * 1. a character describing the byteorder of the data (<: little-endian, >: big-endian, |: not-relevant)\n * 2. a character code giving the basic type of the array\n * 3. an integer providing the number of bytes the type uses.\n * https://numpy.org/doc/stable/reference/arrays.interface.html\n *\n * Here I only include the second and third characters, and check endianness separately\n */\nconst DTYPES = {\n u1: Uint8Array,\n i1: Int8Array,\n u2: Uint16Array,\n i2: Int16Array,\n u4: Uint32Array,\n i4: Int32Array,\n f4: Float32Array,\n f8: Float64Array\n};\nexport function parseNPY(arrayBuffer, options) {\n const view = new DataView(arrayBuffer);\n const { header, headerEndOffset } = parseHeader(view);\n const numpyType = header.descr;\n const ArrayType = DTYPES[numpyType.slice(1, 3)];\n if (!ArrayType) {\n throw new Error(`Unimplemented type ${numpyType}`);\n }\n const nArrayElements = header.shape?.reduce((a, b) => a * b);\n const arrayByteLength = nArrayElements * ArrayType.BYTES_PER_ELEMENT;\n if (arrayBuffer.byteLength < headerEndOffset + arrayByteLength) {\n throw new Error('Buffer overflow');\n }\n const data = new ArrayType(arrayBuffer.slice(headerEndOffset, headerEndOffset + arrayByteLength));\n // Swap endianness if needed\n if ((numpyType[0] === '>' && LITTLE_ENDIAN_OS) || (numpyType[0] === '<' && !LITTLE_ENDIAN_OS)) {\n throw new Error('Incorrect endianness');\n }\n return {\n data,\n header\n };\n}\n/**\n * Parse NPY header\n *\n * @param view\n * @return\n */\nfunction parseHeader(view) {\n const majorVersion = view.getUint8(6);\n // const minorVersion = view.getUint8(7);\n let offset = 8;\n let headerLength;\n if (majorVersion >= 2) {\n headerLength = view.getUint32(offset, true);\n offset += 4;\n }\n else {\n headerLength = view.getUint16(offset, true);\n offset += 2;\n }\n const encoding = majorVersion <= 2 ? 'latin1' : 'utf-8';\n const decoder = new TextDecoder(encoding);\n const headerArray = new Uint8Array(view.buffer, offset, headerLength);\n const headerText = decoder.decode(headerArray);\n offset += headerLength;\n const header = JSON.parse(headerText\n .replace(/'/g, '\"')\n .replace('False', 'false')\n .replace('(', '[')\n .replace(/,*\\),*/g, ']'));\n return { header, headerEndOffset: offset };\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { VERSION } from \"./lib/utils/version.js\";\nimport { parseNPY } from \"./lib/parsers/parse-npy.js\";\n// \\x93NUMPY\nconst NPY_MAGIC_NUMBER = new Uint8Array([147, 78, 85, 77, 80, 89]);\n/**\n * Worker loader for numpy \"tiles\"\n */\nexport const NPYWorkerLoader = {\n dataType: null,\n batchType: null,\n name: 'NPY',\n id: 'npy',\n module: 'textures',\n version: VERSION,\n worker: true,\n extensions: ['npy'],\n mimeTypes: [],\n tests: [NPY_MAGIC_NUMBER.buffer],\n options: {\n npy: {}\n }\n};\n/**\n * Loader for numpy \"tiles\"\n */\nexport const NPYLoader = {\n ...NPYWorkerLoader,\n parseSync: parseNPY,\n parse: async (arrayBuffer, options) => parseNPY(arrayBuffer, options)\n};\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n// @ts-nocheck\nimport { getJSModuleOrNull, registerJSModules } from '@loaders.gl/loader-utils';\nimport { loadLibrary } from '@loaders.gl/worker-utils';\nexport const CRUNCH_EXTERNAL_LIBRARIES = {\n /** Crunch decoder library. It is used as dynamically imported script */\n DECODER: 'crunch.js'\n};\n/**\n * Load crunch decoder module\n * @param options - loader options\n * @returns Promise of module object\n */\nexport async function loadCrunchModule(options) {\n registerJSModules(options.modules);\n const crunch = getJSModuleOrNull('crunch');\n if (crunch) {\n return crunch;\n }\n return loadCrunch(options);\n}\nlet crunchModule;\n/**\n * Load crunch decoder module\n * @param {any} options - Loader options\n * @returns {Promise<any>} Promise of Module object\n */\nasync function loadCrunch(options) {\n if (crunchModule) {\n return crunchModule;\n }\n let loadCrunchDecoder = await loadLibrary(CRUNCH_EXTERNAL_LIBRARIES.DECODER, 'textures', options);\n // Depends on how import happened...\n // @ts-ignore TS2339: Property does not exist on type\n loadCrunchDecoder ||= globalThis.LoadCrunchDecoder;\n crunchModule = loadCrunchDecoder();\n return crunchModule;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { ChildProcessProxy } from '@loaders.gl/worker-utils';\n/*\n * @see https://github.com/TimvanScherpenzeel/texture-compressor\n */\nexport async function encodeImageURLToCompressedTextureURL(inputUrl, outputUrl, options) {\n // prettier-ignore\n const args = [\n // Note: our actual executable is `npx`, so `texture-compressor` is an argument\n 'texture-compressor',\n '--type', 's3tc',\n '--compression', 'DXT1',\n '--quality', 'normal',\n '--input', inputUrl,\n '--output', outputUrl\n ];\n const childProcess = new ChildProcessProxy();\n await childProcess.start({\n command: 'npx',\n arguments: args,\n spawn: options\n });\n return outputUrl;\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { VERSION } from \"./lib/utils/version.js\";\nimport { encodeImageURLToCompressedTextureURL } from \"./lib/encoders/encode-texture.js\";\n/**\n * DDS Texture Container Exporter\n */\nexport const CompressedTextureWriter = {\n name: 'DDS Texture Container',\n id: 'dds',\n module: 'textures',\n version: VERSION,\n extensions: ['dds'],\n options: {\n texture: {\n format: 'auto',\n compression: 'auto',\n quality: 'auto',\n mipmap: false,\n flipY: false,\n toolFlags: ''\n }\n },\n encodeURLtoURL: encodeImageURLToCompressedTextureURL,\n encode() {\n throw new Error('Not implemented');\n }\n};\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { loadBasisEncoderModule } from \"../parsers/basis-module-loader.js\";\n/**\n * Encodes image to Basis Universal Supercompressed GPU Texture.\n * Code example is taken from here - https://github.com/BinomialLLC/basis_universal/blob/master/webgl/ktx2_encode_test/index.html#L279\n * BasisEncoder API - https://github.com/BinomialLLC/basis_universal/blob/master/webgl/transcoder/basis_wrappers.cpp#L1712\n * @param image\n * @param options\n */\nexport async function encodeKTX2BasisTexture(image, options = {}) {\n // TODO remove default values after writer options will be normalized like it done in load module.\n const { useSRGB = false, qualityLevel = 10, encodeUASTC = false, mipmaps = false } = options?.['ktx2-basis-writer'] || {};\n const { BasisEncoder } = await loadBasisEncoderModule(options);\n const basisEncoder = new BasisEncoder();\n try {\n const basisFileData = new Uint8Array(image.width * image.height * 4);\n basisEncoder.setCreateKTX2File(true);\n basisEncoder.setKTX2UASTCSupercompression(true);\n basisEncoder.setKTX2SRGBTransferFunc(true);\n basisEncoder.setSliceSourceImage(0, image.data, image.width, image.height, false);\n basisEncoder.setPerceptual(useSRGB);\n basisEncoder.setMipSRGB(useSRGB);\n basisEncoder.setQualityLevel(qualityLevel);\n basisEncoder.setUASTC(encodeUASTC);\n basisEncoder.setMipGen(mipmaps);\n const numOutputBytes = basisEncoder.encode(basisFileData);\n const actualKTX2FileData = basisFileData.subarray(0, numOutputBytes).buffer;\n return actualKTX2FileData;\n }\n catch (error) {\n // eslint-disable-next-line no-console\n console.error('Basis Universal Supercompressed GPU Texture encoder Error: ', error);\n throw error;\n }\n finally {\n basisEncoder.delete();\n }\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { VERSION } from \"./lib/utils/version.js\";\nimport { encodeKTX2BasisTexture } from \"./lib/encoders/encode-ktx2-basis-texture.js\";\n/**\n * Basis Universal Supercompressed GPU Texture.\n * Spec - https://github.com/Esri/i3s-spec/blob/master/docs/1.8/textureSetDefinitionFormat.cmn.md\n */\nexport const KTX2BasisWriter = {\n name: 'Basis Universal Supercompressed GPU Texture',\n id: 'ktx2-basis-writer',\n module: 'textures',\n version: VERSION,\n extensions: ['ktx2'],\n options: {\n ['ktx2-basis-writer']: {\n useSRGB: false,\n qualityLevel: 10,\n encodeUASTC: false,\n mipmaps: false\n }\n },\n encode: encodeKTX2BasisTexture\n};\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { assert } from '@loaders.gl/loader-utils';\nimport { ImageLoader, getImageSize } from '@loaders.gl/images';\nimport { generateUrl } from \"./generate-url.js\";\nimport { deepLoad, shallowLoad } from \"./deep-load.js\";\nexport async function loadImageTexture(getUrl, options = {}) {\n const imageUrls = await getImageUrls(getUrl, options);\n return await deepLoad(imageUrls, ImageLoader.parse, options);\n}\nexport async function getImageUrls(getUrl, options, urlOptions = {}) {\n const mipLevels = (options && options.image && options.image.mipLevels) || 0;\n return mipLevels !== 0\n ? await getMipmappedImageUrls(getUrl, mipLevels, options, urlOptions)\n : generateUrl(getUrl, options, urlOptions);\n}\nasync function getMipmappedImageUrls(getUrl, mipLevels, options, urlOptions) {\n const urls = [];\n // If no mip levels supplied, we need to load the level 0 image and calculate based on size\n if (mipLevels === 'auto') {\n const url = generateUrl(getUrl, options, { ...urlOptions, lod: 0 });\n const image = await shallowLoad(url, ImageLoader.parse, options);\n const { width, height } = getImageSize(image);\n mipLevels = getMipLevels({ width, height });\n // TODO - push image and make `deepLoad` pass through non-url values, avoid loading twice?\n urls.push(url);\n }\n // We now know how many mipLevels we need, remaining image urls can now be constructed\n assert(mipLevels > 0);\n for (let mipLevel = urls.length; mipLevel < mipLevels; ++mipLevel) {\n const url = generateUrl(getUrl, options, { ...urlOptions, lod: mipLevel });\n urls.push(url);\n }\n return urls;\n}\n// Calculates number of mipmaps based on texture size (log2)\nexport function getMipLevels(size) {\n return 1 + Math.floor(Math.log2(Math.max(size.width, size.height)));\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { resolvePath } from '@loaders.gl/loader-utils';\n// Generate a url by calling getUrl with mix of options, applying options.baseUrl\nexport function generateUrl(getUrl, options, urlOptions) {\n // Get url\n let url = typeof getUrl === 'function' ? getUrl({ ...options, ...urlOptions }) : getUrl;\n // Apply options.baseUrl\n const baseUrl = options.baseUrl;\n if (baseUrl) {\n url = baseUrl[baseUrl.length - 1] === '/' ? `${baseUrl}${url}` : `${baseUrl}/${url}`;\n }\n return resolvePath(url);\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nconst isObject = (value) => value && typeof value === 'object';\n// Loads a deep structure of urls (objects and arrays of urls)\n// Returns an object with six key-value pairs containing the images (or image mip arrays)\n// for each cube face\nexport async function asyncDeepMap(tree, func, options = {}) {\n return await mapSubtree(tree, func, options);\n}\nexport async function mapSubtree(object, func, options) {\n if (Array.isArray(object)) {\n return await mapArray(object, func, options);\n }\n if (isObject(object)) {\n return await mapObject(object, func, options);\n }\n // TODO - ignore non-urls, non-arraybuffers?\n const url = object;\n return await func(url, options);\n}\n// HELPERS\nasync function mapObject(object, func, options) {\n const promises = [];\n const values = {};\n for (const key in object) {\n const url = object[key];\n const promise = mapSubtree(url, func, options).then((value) => {\n values[key] = value;\n });\n promises.push(promise);\n }\n await Promise.all(promises);\n return values;\n}\nasync function mapArray(urlArray, func, options = {}) {\n const promises = urlArray.map((url) => mapSubtree(url, func, options));\n return await Promise.all(promises);\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { asyncDeepMap } from \"./async-deep-map.js\";\nexport async function deepLoad(urlTree, load, options) {\n return await asyncDeepMap(urlTree, (url) => shallowLoad(url, load, options));\n}\nexport async function shallowLoad(url, load, options) {\n const response = await fetch(url, options.fetch);\n const arrayBuffer = await response.arrayBuffer();\n return await load(arrayBuffer, options);\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { ImageLoader } from '@loaders.gl/images';\nimport { getImageUrls } from \"./load-image.js\";\nimport { deepLoad } from \"./deep-load.js\";\nexport async function loadImageTextureArray(count, getUrl, options = {}) {\n const imageUrls = await getImageArrayUrls(count, getUrl, options);\n return await deepLoad(imageUrls, ImageLoader.parse, options);\n}\nexport async function getImageArrayUrls(count, getUrl, options = {}) {\n const promises = [];\n for (let index = 0; index < count; index++) {\n const promise = getImageUrls(getUrl, options, { index });\n promises.push(promise);\n }\n return await Promise.all(promises);\n}\n", "// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\nimport { ImageLoader } from '@loaders.gl/images';\nimport { getImageUrls } from \"./load-image.js\";\nimport { deepLoad } from \"./deep-load.js\";\n// Returned map will be have keys corresponding to GL cubemap constants\nconst GL_TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515;\nconst GL_TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516;\nconst GL_TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517;\nconst GL_TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518;\nconst GL_TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519;\nconst GL_TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851a;\nconst CUBE_FACES = [\n { face: GL_TEXTURE_CUBE_MAP_POSITIVE_X, direction: 'right', axis: 'x', sign: 'positive' },\n { face: GL_TEXTURE_CUBE_MAP_NEGATIVE_X, direction: 'left', axis: 'x', sign: 'negative' },\n { face: GL_TEXTURE_CUBE_MAP_POSITIVE_Y, direction: 'top', axis: 'y', sign: 'positive' },\n { face: GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, direction: 'bottom', axis: 'y', sign: 'negative' },\n { face: GL_TEXTURE_CUBE_MAP_POSITIVE_Z, direction: 'front', axis: 'z', sign: 'positive' },\n { face: GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, direction: 'back', axis: 'z', sign: 'negative' }\n];\n// Returns an object with six key-value pairs containing the urls (or url mip arrays)\n// for each cube face\nexport async function getImageCubeUrls(getUrl, options) {\n // Calculate URLs\n const urls = {};\n const promises = [];\n let index = 0;\n for (let i = 0; i < CUBE_FACES.length; ++i) {\n const face = CUBE_FACES[index];\n const promise = getImageUrls(getUrl, options, { ...face, index: index++ }).then((url) => {\n urls[face.face] = url;\n });\n promises.push(promise);\n }\n await Promise.all(promises);\n return urls;\n}\n// Returns an object with six key-value pairs containing the images (or image mip arrays)\n// for each cube face\nexport async function loadImageTextureCube(getUrl, options = {}) {\n const urls = await getImageCubeUrls(getUrl, options);\n return (await deepLoad(urls, ImageLoader.parse, options));\n}\n"],
5
5
  "mappings": "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,wBAAwB;AAAA,EAC7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA;AAAA,EAE7B,KAAK,wBAAwB;AAAA,EAC7B,WAAY,wBAAwB;AAAA,EACpC,YAAY,wBAAwB;AAAA;AAAA,EAEpC,WAAY,wBAAwB;AAAA;AAAA,EAEpC,YAAY,wBAAwB;AAAA;AAAA,EAEpC,YAAY,wBAAwB;AAAA;AAAA,EAEpC,YAAY,wBAAwB;AAAA;AAAA,EAEpC,YAAY,wBAAwB;AAAA;AAAA,EAEpC,YAAY,wBAAwB;AAAA;AAAA,EAEpC,YAAY,wBAAwB;AAAA;AAAA,EAEpC,YAAY,wBAAwB;AAAA;AAAA,EAEpC,YAAY,wBAAwB;AAAA;AAAA,EAEpC,YAAY,wBAAwB;AAAA;AAAA,EAEpC,YAAY,wBAAwB;AAAA;AAAA,EAEpC,YAAY,wBAAwB;AAA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",
6
6
  "names": ["module", "import_loader_utils", "a", "b", "import_loader_utils", "import_worker_utils", "import_worker_utils", "import_loader_utils", "import_loader_utils", "import_images", "import_images"]
7
7
  }
@@ -59679,7 +59679,7 @@ function getVersion() {
59679
59679
  );
59680
59680
  globalThis._loadersgl_.version = NPM_TAG;
59681
59681
  } else {
59682
- globalThis._loadersgl_.version = "4.3.0-beta.2";
59682
+ globalThis._loadersgl_.version = "4.3.0-beta.3";
59683
59683
  }
59684
59684
  }
59685
59685
  return globalThis._loadersgl_.version;
@@ -63263,7 +63263,7 @@ if (nodeVersion2 < 18) {
63263
63263
  }
63264
63264
 
63265
63265
  // src/lib/utils/version.ts
63266
- var VERSION2 = true ? "4.3.0-beta.2" : "latest";
63266
+ var VERSION2 = true ? "4.3.0-beta.3" : "latest";
63267
63267
 
63268
63268
  // src/lib/parsers/basis-module-loader.ts
63269
63269
  var BASIS_EXTERNAL_LIBRARIES = {
@@ -10,7 +10,7 @@
10
10
  );
11
11
  globalThis._loadersgl_.version = NPM_TAG;
12
12
  } else {
13
- globalThis._loadersgl_.version = "4.3.0-beta.2";
13
+ globalThis._loadersgl_.version = "4.3.0-beta.3";
14
14
  }
15
15
  }
16
16
  return globalThis._loadersgl_.version;
@@ -249,7 +249,7 @@
249
249
  }
250
250
 
251
251
  // src/lib/utils/version.ts
252
- var VERSION2 = true ? "4.3.0-beta.2" : "latest";
252
+ var VERSION2 = true ? "4.3.0-beta.3" : "latest";
253
253
 
254
254
  // src/lib/parsers/basis-module-loader.ts
255
255
  var BASIS_EXTERNAL_LIBRARIES = {
@@ -4,4 +4,4 @@
4
4
  // Version constant cannot be imported, it needs to correspond to the build version of **this** module.
5
5
  // __VERSION__ is injected by babel-plugin-version-inline
6
6
  // @ts-ignore TS2304: Cannot find name '__VERSION__'.
7
- export const VERSION = typeof "4.3.0-beta.2" !== 'undefined' ? "4.3.0-beta.2" : 'latest';
7
+ export const VERSION = typeof "4.3.0-beta.3" !== 'undefined' ? "4.3.0-beta.3" : 'latest';
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  (() => {
3
3
  // src/lib/utils/version.ts
4
- var VERSION = true ? "4.3.0-beta.2" : "latest";
4
+ var VERSION = true ? "4.3.0-beta.3" : "latest";
5
5
 
6
6
  // src/lib/parsers/parse-npy.ts
7
7
  var a = new Uint32Array([305419896]);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loaders.gl/textures",
3
- "version": "4.3.0-beta.3",
3
+ "version": "4.3.0",
4
4
  "description": "Framework-independent loaders for compressed and super compressed (basis) textures ",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -54,10 +54,10 @@
54
54
  "build-crunch-worker": "esbuild src/workers/crunch-worker.ts --outfile=dist/crunch-worker.js --target=esnext --bundle --define:__VERSION__=\\\"$npm_package_version\\\""
55
55
  },
56
56
  "dependencies": {
57
- "@loaders.gl/images": "4.3.0-beta.3",
58
- "@loaders.gl/loader-utils": "4.3.0-beta.3",
59
- "@loaders.gl/schema": "4.3.0-beta.3",
60
- "@loaders.gl/worker-utils": "4.3.0-beta.3",
57
+ "@loaders.gl/images": "4.3.0",
58
+ "@loaders.gl/loader-utils": "4.3.0",
59
+ "@loaders.gl/schema": "4.3.0",
60
+ "@loaders.gl/worker-utils": "4.3.0",
61
61
  "@math.gl/types": "^4.1.0",
62
62
  "ktx-parse": "^0.7.0",
63
63
  "texture-compressor": "^1.0.2"
@@ -65,5 +65,5 @@
65
65
  "peerDependencies": {
66
66
  "@loaders.gl/core": "^4.0.0"
67
67
  },
68
- "gitHead": "a63e72f3f325450a883bb2f29d1a8179543ef68c"
68
+ "gitHead": "228d26469858b98506143631418c60a2c3c52b15"
69
69
  }