@loaders.gl/gltf
Version:
Framework-independent loader for the glTF format
7 lines • 108 kB
JavaScript
(function webpackUniversalModuleDefinition(root, factory) {
if (typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if (typeof define === 'function' && define.amd) define([], factory);
else if (typeof exports === 'object') exports['loaders'] = factory();
else root['loaders'] = factory();})(globalThis, function () {
"use strict";var __exports__=(()=>{var _n=Object.create;var Ce=Object.defineProperty;var Sn=Object.getOwnPropertyDescriptor;var Jn=Object.getOwnPropertyNames;var Un=Object.getPrototypeOf,Hn=Object.prototype.hasOwnProperty;var Nn=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),y=(r,e)=>{for(var t in e)Ce(r,t,{get:e[t],enumerable:!0})},ge=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Jn(e))!Hn.call(r,o)&&o!==t&&Ce(r,o,{get:()=>e[o],enumerable:!(n=Sn(e,o))||n.enumerable});return r},be=(r,e,t)=>(ge(r,e,"default"),t&&ge(t,e,"default")),Pn=(r,e,t)=>(t=r!=null?_n(Un(r)):{},ge(e||!r||!r.__esModule?Ce(t,"default",{value:r,enumerable:!0}):t,r)),Kn=r=>ge(Ce({},"__esModule",{value:!0}),r);var qt=Nn((_a,Zt)=>{Zt.exports=globalThis.loaders});var he={};y(he,{EXT_FEATURE_METADATA:()=>lt,EXT_MESH_FEATURES:()=>ct,EXT_STRUCTURAL_METADATA:()=>ut,GLBLoader:()=>Dn,GLBWriter:()=>Ln,GLTFLoader:()=>Ye,GLTFScenegraph:()=>l,GLTFWriter:()=>Gn,_getMemoryUsageGLTF:()=>hr,createExtMeshFeatures:()=>ft,createExtStructuralMetadata:()=>Bt,postProcessGLTF:()=>On});be(he,Pn(qt(),1));var we={};y(we,{createExtMeshFeatures:()=>ft,decode:()=>_o,encode:()=>So,name:()=>ct});var zt="4.4.2";async function re(r,e,t,n){return n._parse(r,e,t,n)}function T(r,e){if(!r)throw new Error(e||"loader assertion failed.")}var G={self:typeof self<"u"&&self,window:typeof window<"u"&&window,global:typeof global<"u"&&global,document:typeof document<"u"&&document},jn=G.self||G.window||G.global||{},vn=G.window||G.self||G.global||{},Qn=G.global||G.self||G.window||{},Xn=G.document||{};var ne=Boolean(typeof process!="object"||String(process)!=="[object process]"||process.browser);var $t=typeof process<"u"&&process.version&&/v([0-9]*)/.exec(process.version),kn=$t&&parseFloat($t[1])||0;var er=r=>typeof SharedArrayBuffer<"u"&&r instanceof SharedArrayBuffer;function We(r){globalThis.loaders||={},globalThis.loaders.modules||={},Object.assign(globalThis.loaders.modules,r)}function Ze(r){return globalThis.loaders?.modules?.[r]||null}function Yn(){return globalThis._loadersgl_?.version||(globalThis._loadersgl_=globalThis._loadersgl_||{},globalThis._loadersgl_.version="4.4.2"),globalThis._loadersgl_.version}var tr=Yn();function rr(r,e){if(!r)throw new Error(e||"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},va=D.self||D.window||D.global||{},Qa=D.window||D.self||D.global||{},Xa=D.global||D.self||D.window||{},ka=D.document||{};var O=typeof process!="object"||String(process)!=="[object process]"||process.browser,oe=typeof importScripts=="function",Ya=typeof window<"u"&&typeof window.orientation<"u",nr=typeof process<"u"&&process.version&&/v([0-9]*)/.exec(process.version),Va=nr&&parseFloat(nr[1])||0;var qe={};function se(r={}){let e=r.useLocalLibraries??r.core?.useLocalLibraries,t=r.CDN??r.core?.CDN,n=r.modules;return{...e!==void 0?{useLocalLibraries:e}:{},...t!==void 0?{CDN:t}:{},...n!==void 0?{modules:n}:{}}}async function M(r,e=null,t={},n=null){return e&&(r=or(r,e,t,n)),qe[r]=qe[r]||Vn(r),await qe[r]}function or(r,e,t={},n=null){if(t?.core)throw new Error("loadLibrary: options.core must be pre-normalized");if(!t.useLocalLibraries&&r.startsWith("http"))return r;n=n||r;let o=t.modules||{};return o[n]?o[n]:O?t.CDN?(rr(t.CDN.startsWith("http")),`${t.CDN}/${e}@${tr}/dist/libs/${n}`):oe?`../src/libs/${n}`:`modules/${e}/src/libs/${n}`:`modules/${e}/dist/libs/${n}`}async function Vn(r){if(r.endsWith("wasm"))return await Zn(r);if(!O){let{requireFromFile:t}=globalThis.loaders||{};try{let n=await t?.(r);return n||!r.includes("/dist/libs/")?n:await t?.(r.replace("/dist/libs/","/src/libs/"))}catch(n){if(r.includes("/dist/libs/"))try{return await t?.(r.replace("/dist/libs/","/src/libs/"))}catch{}return console.error(n),null}}if(oe)return importScripts(r);let e=await qn(r);return Wn(e,r)}function Wn(r,e){if(!O){let{requireFromString:n}=globalThis.loaders||{};return n?.(r,e)}if(oe)return eval.call(globalThis,r),null;let t=document.createElement("script");t.id=e;try{t.appendChild(document.createTextNode(r))}catch{t.text=r}return document.body.appendChild(t),null}async function Zn(r){let{readFileAsArrayBuffer:e}=globalThis.loaders||{};if(O||!e||r.startsWith("http"))return await(await fetch(r)).arrayBuffer();try{return await e(r)}catch{if(r.includes("/dist/libs/"))return await e(r.replace("/dist/libs/","/src/libs/"));throw new Error(`Failed to load ArrayBuffer from ${r}`)}}async function qn(r){let{readFileAsText:e}=globalThis.loaders||{};if(O||!e||r.startsWith("http"))return await(await fetch(r)).text();try{return await e(r)}catch{if(r.includes("/dist/libs/"))return await e(r.replace("/dist/libs/","/src/libs/"));throw new Error(`Failed to load text from ${r}`)}}function ir(r,e=5){return typeof r=="string"?r.slice(0,e):ArrayBuffer.isView(r)?sr(r.buffer,r.byteOffset,e):r instanceof ArrayBuffer?sr(r,0,e):""}function sr(r,e,t){if(r.byteLength<=e+t)return"";let n=new DataView(r),o="";for(let s=0;s<t;s++)o+=String.fromCharCode(n.getUint8(e+s));return o}function ze(r){try{return JSON.parse(r)}catch{throw new Error(`Failed to parse JSON from data starting with "${ir(r)}"`)}}function ie(r,e,t){let n=t!==void 0?new Uint8Array(r).subarray(e,e+t):new Uint8Array(r).subarray(e);return new Uint8Array(n).buffer}function R(r,e){return T(r>=0),T(e>0),r+(e-1)&~(e-1)}function $e(r,e,t){let n;if(r instanceof ArrayBuffer)n=new Uint8Array(r);else{let o=r.byteOffset,s=r.byteLength;n=new Uint8Array(r.buffer||r.arrayBuffer,o,s)}return e.set(n,t),t+R(n.byteLength,4)}function xe(r,e,t,n){let o=R(t.byteLength,n),s=o-t.byteLength;if(r){let i=new Uint8Array(r.buffer,r.byteOffset+e,t.byteLength),a=new Uint8Array(t);i.set(a);for(let c=0;c<s;++c)r.setUint8(e+t.byteLength+c,32)}return e+=o,e}function et(r,e,t,n){let s=new TextEncoder().encode(t);return e=xe(r,e,s,n),e}function J(r){if(r instanceof ArrayBuffer)return r;if(er(r))return ae(r);let{buffer:e,byteOffset:t,byteLength:n}=r;return e instanceof ArrayBuffer&&t===0&&n===e.byteLength?e:ae(e,t,n)}function ae(r,e=0,t=r.byteLength-e){let n=new Uint8Array(r,e,t),o=new Uint8Array(n.length);return o.set(n),o.buffer}var zn=globalThis.loaders?.parseImageNode,tt=typeof Image<"u",rt=typeof ImageBitmap<"u",$n=Boolean(zn),nt=ne?!0:$n;function ar(r){switch(r){case"auto":return rt||tt||nt;case"imagebitmap":return rt;case"image":return tt;case"data":return nt;default:throw new Error(`@loaders.gl/images: image ${r} not supported in this environment`)}}function cr(){if(rt)return"imagebitmap";if(tt)return"image";if(nt)return"data";throw new Error("Install '@loaders.gl/polyfills' to parse images under Node.js")}function fr(r){let e=eo(r);if(!e)throw new Error("Not an image");return e}function ce(r){switch(fr(r)){case"data":return r;case"image":case"imagebitmap":let e=document.createElement("canvas"),t=e.getContext("2d");if(!t)throw new Error("getImageData");return e.width=r.width,e.height=r.height,t.drawImage(r,0,0),t.getImageData(0,0,r.width,r.height);default:throw new Error("getImageData")}}function eo(r){return typeof ImageBitmap<"u"&&r instanceof ImageBitmap?"imagebitmap":typeof Image<"u"&&r instanceof Image?"image":r&&typeof r=="object"&&r.data&&r.width&&r.height?"data":null}var to=/^data:image\/svg\+xml/,ro=/\.svg((\?|#).*)?$/;function Ee(r){return r&&(to.test(r)||ro.test(r))}function Ar(r,e){if(Ee(e)){let n=new TextDecoder().decode(r);try{typeof unescape=="function"&&typeof encodeURIComponent=="function"&&(n=unescape(encodeURIComponent(n)))}catch(s){throw new Error(s.message)}return`data:image/svg+xml;base64,${btoa(n)}`}return ot(r,e)}function ot(r,e){if(Ee(e))throw new Error("SVG cannot be parsed directly to imagebitmap");return new Blob([new Uint8Array(r)])}async function ye(r,e,t){let n=Ar(r,t),o=self.URL||self.webkitURL,s=typeof n!="string"&&o.createObjectURL(n);try{return await no(s||n,e)}finally{s&&o.revokeObjectURL(s)}}async function no(r,e){let t=new Image;return t.src=r,e.image&&e.image.decode&&t.decode?(await t.decode(),t):await new Promise((n,o)=>{try{t.onload=()=>n(t),t.onerror=s=>{let i=s instanceof Error?s.message:"error";o(new Error(i))}}catch(s){o(s)}})}var ur=!0;async function mr(r,e,t){let n;Ee(t)?n=await ye(r,e,t):n=ot(r,t);let o=e&&e.imagebitmap;return await oo(n,o)}async function oo(r,e=null){if((so(e)||!ur)&&(e=null),e)try{return await createImageBitmap(r,e)}catch(t){console.warn(t),ur=!1}return await createImageBitmap(r)}function so(r){if(!r)return!0;for(let e in r)if(Object.prototype.hasOwnProperty.call(r,e))return!1;return!0}function Br(r){return!fo(r,"ftyp",4)||!(r[8]&96)?null:io(r)}function io(r){switch(ao(r,8,12).replace("\0"," ").trim()){case"avif":case"avis":return{extension:"avif",mimeType:"image/avif"};default:return null}}function ao(r,e,t){return String.fromCharCode(...r.slice(e,t))}function co(r){return[...r].map(e=>e.charCodeAt(0))}function fo(r,e,t=0){let n=co(e);for(let o=0;o<n.length;++o)if(n[o]!==r[o+t])return!1;return!0}var w=!1,fe=!0;function P(r){let e=Ae(r);return uo(e)||lo(e)||mo(e)||Bo(e)||Ao(e)}function Ao(r){let e=new Uint8Array(r instanceof DataView?r.buffer:r),t=Br(e);return t?{mimeType:t.mimeType,width:0,height:0}:null}function uo(r){let e=Ae(r);return e.byteLength>=24&&e.getUint32(0,w)===2303741511?{mimeType:"image/png",width:e.getUint32(16,w),height:e.getUint32(20,w)}:null}function mo(r){let e=Ae(r);return e.byteLength>=10&&e.getUint32(0,w)===1195984440?{mimeType:"image/gif",width:e.getUint16(6,fe),height:e.getUint16(8,fe)}:null}function Bo(r){let e=Ae(r);return e.byteLength>=14&&e.getUint16(0,w)===16973&&e.getUint32(2,fe)===e.byteLength?{mimeType:"image/bmp",width:e.getUint32(18,fe),height:e.getUint32(22,fe)}:null}function lo(r){let e=Ae(r);if(!(e.byteLength>=3&&e.getUint16(0,w)===65496&&e.getUint8(2)===255))return null;let{tableMarkers:n,sofMarkers:o}=po(),s=2;for(;s+9<e.byteLength;){let i=e.getUint16(s,w);if(o.has(i))return{mimeType:"image/jpeg",height:e.getUint16(s+5,w),width:e.getUint16(s+7,w)};if(!n.has(i))return null;s+=2,s+=e.getUint16(s,w)}return null}function po(){let r=new Set([65499,65476,65484,65501,65534]);for(let t=65504;t<65520;++t)r.add(t);return{tableMarkers:r,sofMarkers:new Set([65472,65473,65474,65475,65477,65478,65479,65481,65482,65483,65485,65486,65487,65502])}}function Ae(r){if(r instanceof DataView)return r;if(ArrayBuffer.isView(r))return new DataView(r.buffer);if(r instanceof ArrayBuffer)return new DataView(r);throw new Error("toDataView")}async function lr(r,e){let{mimeType:t}=P(r)||{},n=globalThis.loaders?.parseImageNode;return T(n),await n(r,t)}async function dr(r,e,t){e=e||{};let o=(e.image||{}).type||"auto",{url:s}=t||{},i=ho(o),a;switch(i){case"imagebitmap":a=await mr(r,e,s);break;case"image":a=await ye(r,e,s);break;case"data":a=await lr(r,e);break;default:T(!1)}return o==="data"&&(a=ce(a)),a}function ho(r){switch(r){case"auto":case"data":return cr();default:return ar(r),r}}var go=["png","jpg","jpeg","gif","webp","bmp","ico","svg","avif"],Co=["image/png","image/jpeg","image/gif","image/webp","image/avif","image/bmp","image/vnd.microsoft.icon","image/svg+xml"],bo={image:{type:"auto",decode:!0}},st={dataType:null,batchType:null,id:"image",module:"images",name:"Images",version:zt,mimeTypes:Co,extensions:go,parse:dr,tests:[r=>Boolean(P(new DataView(r)))],options:bo};var it={};function at(r){if(it[r]===void 0){let e=ne?Eo(r):xo(r);it[r]=e}return it[r]}function xo(r){let e=["image/png","image/jpeg","image/gif"],t=globalThis.loaders?.imageFormatsNode||e,n=globalThis.loaders?.parseImageNode;return Boolean(n)&&t.includes(r)}function Eo(r){switch(r){case"image/avif":case"image/webp":return yo(r);default:return!0}}function yo(r){try{return document.createElement("canvas").toDataURL(r).indexOf(`data:${r}`)===0}catch{return!1}}function h(r,e){if(!r)throw new Error(e||"assert failed: gltf")}var Te={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},Me={5120:1,5121:1,5122:2,5123:2,5125:4,5126:4};var To=1.33,pr=["SCALAR","VEC2","VEC3","VEC4"],Mo=[[Int8Array,5120],[Uint8Array,5121],[Int16Array,5122],[Uint16Array,5123],[Uint32Array,5125],[Float32Array,5126],[Float64Array,5130]],Fo=new Map(Mo),Io={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},Go={5120:1,5121:1,5122:2,5123:2,5125:4,5126:4},Do={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array};function Fe(r){return pr[r-1]||pr[0]}function U(r){let e=Fo.get(r.constructor);if(!e)throw new Error("Illegal typed array");return e}function Q(r,e){let t=Do[r.componentType],n=Io[r.type],o=Go[r.componentType],s=r.count*n,i=r.count*n*o;h(i>=0&&i<=e.byteLength);let a=Me[r.componentType],c=Te[r.type];return{ArrayType:t,length:s,byteLength:i,componentByteSize:a,numberOfComponentsInElement:c}}function hr(r){let{images:e,bufferViews:t}=r;e=e||[],t=t||[];let n=e.map(i=>i.bufferView);t=t.filter(i=>!n.includes(i));let o=t.reduce((i,a)=>i+a.byteLength,0),s=e.reduce((i,a)=>{let{width:c,height:f}=a.image;return i+c*f},0);return o+Math.ceil(4*s*To)}function gr(r,e,t){let n=r.bufferViews[t];h(n);let o=n.buffer,s=e[o];h(s);let i=(n.byteOffset||0)+s.byteOffset;return new Uint8Array(s.arrayBuffer,i,n.byteLength)}function Cr(r,e,t){let n=typeof t=="number"?r.accessors?.[t]:t;if(!n)throw new Error(`No gltf accessor ${JSON.stringify(t)}`);let o=r.bufferViews?.[n.bufferView||0];if(!o)throw new Error(`No gltf buffer view for accessor ${o}`);let{arrayBuffer:s,byteOffset:i}=e[o.buffer],a=(i||0)+(n.byteOffset||0)+(o.byteOffset||0),{ArrayType:c,length:f,componentByteSize:A,numberOfComponentsInElement:u}=Q(n,o),m=A*u,B=o.byteStride||m;if(typeof o.byteStride>"u"||o.byteStride===m)return new c(s,a,f);let d=new c(f);for(let p=0;p<n.count;p++){let x=new c(s,a+p*B,u);d.set(x,p*u)}return d}function Ro(){return{asset:{version:"2.0",generator:"loaders.gl"},buffers:[],extensions:{},extensionsRequired:[],extensionsUsed:[]}}var l=class{gltf;sourceBuffers;byteLength;constructor(e){this.gltf={json:e?.json||Ro(),buffers:e?.buffers||[],images:e?.images||[]},this.sourceBuffers=[],this.byteLength=0,this.gltf.buffers&&this.gltf.buffers[0]&&(this.byteLength=this.gltf.buffers[0].byteLength,this.sourceBuffers=[this.gltf.buffers[0]])}get json(){return this.gltf.json}getApplicationData(e){return this.json[e]}getExtraData(e){return(this.json.extras||{})[e]}hasExtension(e){let t=this.getUsedExtensions().find(o=>o===e),n=this.getRequiredExtensions().find(o=>o===e);return typeof t=="string"||typeof n=="string"}getExtension(e){let t=this.getUsedExtensions().find(o=>o===e),n=this.json.extensions||{};return t?n[e]:null}getRequiredExtension(e){return this.getRequiredExtensions().find(n=>n===e)?this.getExtension(e):null}getRequiredExtensions(){return this.json.extensionsRequired||[]}getUsedExtensions(){return this.json.extensionsUsed||[]}getRemovedExtensions(){return this.json.extensionsRemoved||[]}getObjectExtension(e,t){return(e.extensions||{})[t]}getScene(e){return this.getObject("scenes",e)}getNode(e){return this.getObject("nodes",e)}getSkin(e){return this.getObject("skins",e)}getMesh(e){return this.getObject("meshes",e)}getMaterial(e){return this.getObject("materials",e)}getAccessor(e){return this.getObject("accessors",e)}getTexture(e){return this.getObject("textures",e)}getSampler(e){return this.getObject("samplers",e)}getImage(e){return this.getObject("images",e)}getBufferView(e){return this.getObject("bufferViews",e)}getBuffer(e){return this.getObject("buffers",e)}getObject(e,t){if(typeof t=="object")return t;let n=this.json[e]&&this.json[e][t];if(!n)throw new Error(`glTF file error: Could not find ${e}[${t}]`);return n}getTypedArrayForBufferView(e){e=this.getBufferView(e);let t=e.buffer,n=this.gltf.buffers[t];h(n);let o=(e.byteOffset||0)+n.byteOffset;return new Uint8Array(n.arrayBuffer,o,e.byteLength)}getTypedArrayForAccessor(e){let t=this.getAccessor(e);return Cr(this.gltf.json,this.gltf.buffers,t)}getTypedArrayForImageData(e){e=this.getAccessor(e);let t=this.getBufferView(e.bufferView),o=this.getBuffer(t.buffer).data,s=t.byteOffset||0;return new Uint8Array(o,s,t.byteLength)}addApplicationData(e,t){return this.json[e]=t,this}addExtraData(e,t){return this.json.extras=this.json.extras||{},this.json.extras[e]=t,this}addObjectExtension(e,t,n){return e.extensions=e.extensions||{},e.extensions[t]=n,this.registerUsedExtension(t),this}setObjectExtension(e,t,n){let o=e.extensions||{};o[t]=n}removeObjectExtension(e,t){let n=e?.extensions||{};if(n[t]){this.json.extensionsRemoved=this.json.extensionsRemoved||[];let o=this.json.extensionsRemoved;o.includes(t)||o.push(t)}delete n[t]}addExtension(e,t={}){return h(t),this.json.extensions=this.json.extensions||{},this.json.extensions[e]=t,this.registerUsedExtension(e),t}addRequiredExtension(e,t={}){return h(t),this.addExtension(e,t),this.registerRequiredExtension(e),t}registerUsedExtension(e){this.json.extensionsUsed=this.json.extensionsUsed||[],this.json.extensionsUsed.find(t=>t===e)||this.json.extensionsUsed.push(e)}registerRequiredExtension(e){this.registerUsedExtension(e),this.json.extensionsRequired=this.json.extensionsRequired||[],this.json.extensionsRequired.find(t=>t===e)||this.json.extensionsRequired.push(e)}removeExtension(e){if(this.json.extensions?.[e]){this.json.extensionsRemoved=this.json.extensionsRemoved||[];let t=this.json.extensionsRemoved;t.includes(e)||t.push(e)}this.json.extensions&&delete this.json.extensions[e],this.json.extensionsRequired&&this._removeStringFromArray(this.json.extensionsRequired,e),this.json.extensionsUsed&&this._removeStringFromArray(this.json.extensionsUsed,e)}setDefaultScene(e){this.json.scene=e}addScene(e){let{nodeIndices:t}=e;return this.json.scenes=this.json.scenes||[],this.json.scenes.push({nodes:t}),this.json.scenes.length-1}addNode(e){let{meshIndex:t,matrix:n}=e;this.json.nodes=this.json.nodes||[];let o={mesh:t};return n&&(o.matrix=n),this.json.nodes.push(o),this.json.nodes.length-1}addMesh(e){let{attributes:t,indices:n,material:o,mode:s=4}=e,a={primitives:[{attributes:this._addAttributes(t),mode:s}]};if(n){let c=this._addIndices(n);a.primitives[0].indices=c}return Number.isFinite(o)&&(a.primitives[0].material=o),this.json.meshes=this.json.meshes||[],this.json.meshes.push(a),this.json.meshes.length-1}addPointCloud(e){let n={primitives:[{attributes:this._addAttributes(e),mode:0}]};return this.json.meshes=this.json.meshes||[],this.json.meshes.push(n),this.json.meshes.length-1}addImage(e,t){let n=P(e),o=t||n?.mimeType,i={bufferView:this.addBufferView(e),mimeType:o};return this.json.images=this.json.images||[],this.json.images.push(i),this.json.images.length-1}addBufferView(e,t=0,n=this.byteLength){let o=e.byteLength;h(Number.isFinite(o)),this.sourceBuffers=this.sourceBuffers||[],this.sourceBuffers.push(e);let s={buffer:t,byteOffset:n,byteLength:o};return this.byteLength+=R(o,4),this.json.bufferViews=this.json.bufferViews||[],this.json.bufferViews.push(s),this.json.bufferViews.length-1}addAccessor(e,t){let n={bufferView:e,type:Fe(t.size),componentType:t.componentType,count:t.count,max:t.max,min:t.min};return this.json.accessors=this.json.accessors||[],this.json.accessors.push(n),this.json.accessors.length-1}addBinaryBuffer(e,t={size:3}){let n=this.addBufferView(e),o={min:t.min,max:t.max};(!o.min||!o.max)&&(o=this._getAccessorMinMax(e,t.size));let s={size:t.size,componentType:U(e),count:Math.round(e.length/t.size),min:o.min,max:o.max};return this.addAccessor(n,Object.assign(s,t))}addTexture(e){let{imageIndex:t}=e,n={source:t};return this.json.textures=this.json.textures||[],this.json.textures.push(n),this.json.textures.length-1}addMaterial(e){return this.json.materials=this.json.materials||[],this.json.materials.push(e),this.json.materials.length-1}createBinaryChunk(){let e=this.byteLength,t=new ArrayBuffer(e),n=new Uint8Array(t),o=0;for(let s of this.sourceBuffers||[])o=$e(s,n,o);this.json?.buffers?.[0]?this.json.buffers[0].byteLength=e:this.json.buffers=[{byteLength:e}],this.gltf.binary=t,this.sourceBuffers=[t],this.gltf.buffers=[{arrayBuffer:t,byteOffset:0,byteLength:t.byteLength}]}_removeStringFromArray(e,t){let n=!0;for(;n;){let o=e.indexOf(t);o>-1?e.splice(o,1):n=!1}}_addAttributes(e={}){let t={};for(let n in e){let o=e[n],s=this._getGltfAttributeName(n),i=this.addBinaryBuffer(o.value,o);t[s]=i}return t}_addIndices(e){return this.addBinaryBuffer(e,{size:1})}_getGltfAttributeName(e){switch(e.toLowerCase()){case"position":case"positions":case"vertices":return"POSITION";case"normal":case"normals":return"NORMAL";case"color":case"colors":return"COLOR_0";case"texcoord":case"texcoords":return"TEXCOORD_0";default:return e}}_getAccessorMinMax(e,t){let n={min:null,max:null};if(e.length<t)return n;n.min=[],n.max=[];let o=e.subarray(0,t);for(let s of o)n.min.push(s),n.max.push(s);for(let s=t;s<e.length;s+=t)for(let i=0;i<t;i++)n.min[0+i]=Math.min(n.min[0+i],e[s+i]),n.max[0+i]=Math.max(n.max[0+i],e[s+i]);return n}};function br(r){return(r%1+1)%1}var xr={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16,BOOLEAN:1,STRING:1,ENUM:1},wo={INT8:Int8Array,UINT8:Uint8Array,INT16:Int16Array,UINT16:Uint16Array,INT32:Int32Array,UINT32:Uint32Array,INT64:BigInt64Array,UINT64:BigUint64Array,FLOAT32:Float32Array,FLOAT64:Float64Array},Er={INT8:1,UINT8:1,INT16:2,UINT16:2,INT32:4,UINT32:4,INT64:8,UINT64:8,FLOAT32:4,FLOAT64:8};function ue(r,e){return Er[e]*xr[r]}function X(r,e,t,n){if(t!=="UINT8"&&t!=="UINT16"&&t!=="UINT32"&&t!=="UINT64")return null;let o=r.getTypedArrayForBufferView(e),s=k(o,"SCALAR",t,n+1);return s instanceof BigInt64Array||s instanceof BigUint64Array?null:s}function k(r,e,t,n=1){let o=xr[e],s=wo[t],i=Er[t],a=n*o,c=a*i,f=r.buffer,A=r.byteOffset;return A%i!==0&&(f=new Uint8Array(f).slice(A,A+c).buffer,A=0),new s(J(f),A,a)}function Y(r,e,t){let n=`TEXCOORD_${e.texCoord||0}`,o=t.attributes[n],s=r.getTypedArrayForAccessor(o),i=r.gltf.json,a=e.index,c=i.textures?.[a]?.source;if(typeof c<"u"){let f=i.images?.[c]?.mimeType,A=r.gltf.images?.[c];if(A&&typeof A.width<"u"){let u=[];for(let m=0;m<s.length;m+=2){let B=Lo(A,f,s,m,e.channels);u.push(B)}return u}}return[]}function Ie(r,e,t,n,o){if(!t?.length)return;let s=[];for(let A of t){let u=n.findIndex(m=>m===A);u===-1&&(u=n.push(A)-1),s.push(u)}let i=new Uint32Array(s),a=r.gltf.buffers.push({arrayBuffer:i.buffer,byteOffset:i.byteOffset,byteLength:i.byteLength})-1,c=r.addBufferView(i,a,0),f=r.addAccessor(c,{size:1,componentType:U(i),count:i.length});o.attributes[e]=f}function Lo(r,e,t,n,o=[0]){let s={r:{offset:0,shift:0},g:{offset:1,shift:8},b:{offset:2,shift:16},a:{offset:3,shift:24}},i=t[n],a=t[n+1],c=1;e&&(e.indexOf("image/jpeg")!==-1||e.indexOf("image/png")!==-1)&&(c=4);let f=Oo(i,a,r,c),A=0;for(let u of o){let m=typeof u=="number"?Object.values(s)[u]:s[u],B=f+m.offset,d=ce(r);if(d.data.length<=B)throw new Error(`${d.data.length} <= ${B}`);let p=d.data[B];A|=p<<m.shift}return A}function Oo(r,e,t,n=1){let o=t.width,s=br(r)*(o-1),i=Math.round(s),a=t.height,c=br(e)*(a-1),f=Math.round(c),A=t.components?t.components:n;return(f*o+i)*A}function Ge(r,e,t,n,o){let s=[];for(let i=0;i<e;i++){let a=t[i],c=t[i+1]-t[i];if(c+a>n)break;let f=a/o,A=c/o;s.push(r.slice(f,f+A))}return s}function De(r,e,t){let n=[];for(let o=0;o<e;o++){let s=o*t;n.push(r.slice(s,s+t))}return n}function Re(r,e,t,n){if(t)throw new Error("Not implemented - arrayOffsets for strings is specified");if(n){let o=[],s=new TextDecoder("utf8"),i=0;for(let a=0;a<r;a++){let c=n[a+1]-n[a];if(c+i<=e.length){let f=e.subarray(i,c+i),A=s.decode(f);o.push(A),i+=c}}return o}return[]}var V="EXT_mesh_features",ct=V;async function _o(r,e){let t=new l(r);Jo(t,e)}function So(r,e){let t=new l(r);return Ho(t,e),t.createBinaryChunk(),t.gltf}function Jo(r,e){let t=r.gltf.json;if(t.meshes)for(let n of t.meshes)for(let o of n.primitives)Uo(r,o,e)}function Uo(r,e,t){if(!t?.gltf?.loadBuffers)return;let o=e.extensions?.[V]?.featureIds;if(o)for(let s of o){let i;if(typeof s.attribute<"u"){let a=`_FEATURE_ID_${s.attribute}`,c=e.attributes[a];i=r.getTypedArrayForAccessor(c)}else typeof s.texture<"u"&&t?.gltf?.loadImages?i=Y(r,s.texture,e):i=[];s.data=i}}function Ho(r,e){let t=r.gltf.json.meshes;if(t)for(let n of t)for(let o of n.primitives)No(r,o)}function ft(r,e,t,n){e.extensions||(e.extensions={});let o=e.extensions[V];o||(o={featureIds:[]},e.extensions[V]=o);let{featureIds:s}=o,i={featureCount:t.length,propertyTable:n,data:t};s.push(i),r.addObjectExtension(e,V,o)}function No(r,e){let t=e.extensions?.[V];if(!t)return;let n=t.featureIds;n.forEach((o,s)=>{if(o.data){let{accessorKey:i,index:a}=Po(e.attributes),c=new Uint32Array(o.data);n[s]={featureCount:c.length,propertyTable:o.propertyTable,attribute:a},r.gltf.buffers.push({arrayBuffer:c.buffer,byteOffset:c.byteOffset,byteLength:c.byteLength});let f=r.addBufferView(c),A=r.addAccessor(f,{size:1,componentType:U(c),count:c.length});e.attributes[i]=A}})}function Po(r){let e="_FEATURE_ID_",t=Object.keys(r).filter(s=>s.indexOf(e)===0),n=-1;for(let s of t){let i=Number(s.substring(e.length));i>n&&(n=i)}return n++,{accessorKey:`${e}${n}`,index:n}}var Le={};y(Le,{createExtStructuralMetadata:()=>Bt,decode:()=>Ko,encode:()=>jo,name:()=>ut});var W="EXT_structural_metadata",ut=W;async function Ko(r,e){let t=new l(r);vo(t,e)}function jo(r,e){let t=new l(r);return ss(t,e),t.createBinaryChunk(),t.gltf}function vo(r,e){if(!e.gltf?.loadBuffers)return;let t=r.getExtension(W);t&&(e.gltf?.loadImages&&Qo(r,t),Xo(r,t))}function Qo(r,e){let t=e.propertyTextures,n=r.gltf.json;if(t&&n.meshes)for(let o of n.meshes)for(let s of o.primitives)Yo(r,t,s,e)}function Xo(r,e){let t=e.schema;if(!t)return;let n=t.classes,o=e.propertyTables;if(n&&o)for(let s in n){let i=ko(o,s);i&&Wo(r,t,i)}}function ko(r,e){for(let t of r)if(t.class===e)return t;return null}function Yo(r,e,t,n){if(!e)return;let s=t.extensions?.[W]?.propertyTextures;if(s)for(let i of s){let a=e[i];Vo(r,a,t,n)}}function Vo(r,e,t,n){if(!e.properties)return;n.dataAttributeNames||(n.dataAttributeNames=[]);let o=e.class;for(let s in e.properties){let i=`${o}_${s}`,a=e.properties?.[s];if(!a)continue;a.data||(a.data=[]);let c=a.data,f=Y(r,a,t);f!==null&&(Ie(r,i,f,c,t),a.data=c,n.dataAttributeNames.push(i))}}function Wo(r,e,t){let n=e.classes?.[t.class];if(!n)throw new Error(`Incorrect data in the EXT_structural_metadata extension: no schema class with name ${t.class}`);let o=t.count;for(let s in n.properties){let i=n.properties[s],a=t.properties?.[s];if(a){let c=Zo(r,e,i,o,a);a.data=c}}}function Zo(r,e,t,n,o){let s=[],i=o.values,a=r.getTypedArrayForBufferView(i),c=qo(r,t,o,n),f=zo(r,o,n);switch(t.type){case"SCALAR":case"VEC2":case"VEC3":case"VEC4":case"MAT2":case"MAT3":case"MAT4":{s=$o(t,n,a,c);break}case"BOOLEAN":throw new Error(`Not implemented - classProperty.type=${t.type}`);case"STRING":{s=Re(n,a,c,f);break}case"ENUM":{s=es(e,t,n,a,c);break}default:throw new Error(`Unknown classProperty type ${t.type}`)}return s}function qo(r,e,t,n){return e.array&&typeof e.count>"u"&&typeof t.arrayOffsets<"u"?X(r,t.arrayOffsets,t.arrayOffsetType||"UINT32",n):null}function zo(r,e,t){return typeof e.stringOffsets<"u"?X(r,e.stringOffsets,e.stringOffsetType||"UINT32",t):null}function $o(r,e,t,n){let o=r.array,s=r.count,i=ue(r.type,r.componentType),a=t.byteLength/i,c;return r.componentType?c=k(t,r.type,r.componentType,a):c=t,o?n?Ge(c,e,n,t.length,i):s?De(c,e,s):[]:c}function es(r,e,t,n,o){let s=e.enumType;if(!s)throw new Error("Incorrect data in the EXT_structural_metadata extension: classProperty.enumType is not set for type ENUM");let i=r.enums?.[s];if(!i)throw new Error(`Incorrect data in the EXT_structural_metadata extension: schema.enums does't contain ${s}`);let a=i.valueType||"UINT16",c=ue(e.type,a),f=n.byteLength/c,A=k(n,e.type,a,f);if(A||(A=n),e.array){if(o)return ts({valuesData:A,numberOfElements:t,arrayOffsets:o,valuesDataBytesLength:n.length,elementSize:c,enumEntry:i});let u=e.count;return u?rs(A,t,u,i):[]}return mt(A,0,t,i)}function ts(r){let{valuesData:e,numberOfElements:t,arrayOffsets:n,valuesDataBytesLength:o,elementSize:s,enumEntry:i}=r,a=[];for(let c=0;c<t;c++){let f=n[c],A=n[c+1]-n[c];if(A+f>o)break;let u=f/s,m=A/s,B=mt(e,u,m,i);a.push(B)}return a}function rs(r,e,t,n){let o=[];for(let s=0;s<e;s++){let i=t*s,a=mt(r,i,t,n);o.push(a)}return o}function mt(r,e,t,n){let o=[];for(let s=0;s<t;s++)if(r instanceof BigInt64Array||r instanceof BigUint64Array)o.push("");else{let i=r[e+s],a=ns(n,i);a?o.push(a.name):o.push("")}return o}function ns(r,e){for(let t of r.values)if(t.value===e)return t;return null}var os="schemaClassId";function ss(r,e){let t=r.getExtension(W);if(t&&t.propertyTables)for(let n of t.propertyTables){let o=n.class,s=t.schema?.classes?.[o];n.properties&&s&&is(n,s,r)}}function is(r,e,t){for(let n in r.properties){let o=r.properties[n].data;if(o){let s=e.properties[n];if(s){let i=fs(o,s,t);r.properties[n]=i}}}}function Bt(r,e,t=os){let n=r.getExtension(W);n||(n=r.addExtension(W)),n.schema=as(e,t,n.schema);let o=cs(e,t,n.schema);return n.propertyTables||(n.propertyTables=[]),n.propertyTables.push(o)-1}function as(r,e,t){let n=t??{id:"schema_id"},o={properties:{}};for(let s of r){let i={type:s.elementType,componentType:s.componentType};o.properties[s.name]=i}return n.classes={},n.classes[e]=o,n}function cs(r,e,t){let n={class:e,count:0},o=0,s=t.classes?.[e];for(let i of r){if(o===0&&(o=i.values.length),o!==i.values.length&&i.values.length)throw new Error("Illegal values in attributes");s?.properties[i.name]&&(n.properties||(n.properties={}),n.properties[i.name]={values:0,data:i.values})}return n.count=o,n}function fs(r,e,t){let n={values:0};if(e.type==="STRING"){let{stringData:o,stringOffsets:s}=ms(r);n.stringOffsets=At(s,t),n.values=At(o,t)}else if(e.type==="SCALAR"&&e.componentType){let o=us(r,e.componentType);n.values=At(o,t)}return n}var As={INT8:Int8Array,UINT8:Uint8Array,INT16:Int16Array,UINT16:Uint16Array,INT32:Int32Array,UINT32:Uint32Array,INT64:Int32Array,UINT64:Uint32Array,FLOAT32:Float32Array,FLOAT64:Float64Array};function us(r,e){let t=[];for(let o of r)t.push(Number(o));let n=As[e];if(!n)throw new Error("Illegal component type");return new n(t)}function ms(r){let e=new TextEncoder,t=[],n=0;for(let c of r){let f=e.encode(c);n+=f.length,t.push(f)}let o=new Uint8Array(n),s=[],i=0;for(let c of t)o.set(c,i),s.push(i),i+=c.length;s.push(i);let a=new Uint32Array(s);return{stringData:o,stringOffsets:a}}function At(r,e){return e.gltf.buffers.push({arrayBuffer:J(r.buffer),byteOffset:r.byteOffset,byteLength:r.byteLength}),e.addBufferView(r)}var dt={};y(dt,{decode:()=>Bs,name:()=>lt});var yr="EXT_feature_metadata",lt=yr;async function Bs(r,e){let t=new l(r);ls(t,e)}function ls(r,e){if(!e.gltf?.loadBuffers)return;let t=r.getExtension(yr);t&&(e.gltf?.loadImages&&ds(r,t),ps(r,t))}function ds(r,e){let t=e.schema;if(!t)return;let n=t.classes,{featureTextures:o}=e;if(n&&o)for(let s in n){let i=n[s],a=gs(o,s);a&&bs(r,a,i)}}function ps(r,e){let t=e.schema;if(!t)return;let n=t.classes,o=e.featureTables;if(n&&o)for(let s in n){let i=hs(o,s);i&&Cs(r,t,i)}}function hs(r,e){for(let t in r){let n=r[t];if(n.class===e)return n}return null}function gs(r,e){for(let t in r){let n=r[t];if(n.class===e)return n}return null}function Cs(r,e,t){if(!t.class)return;let n=e.classes?.[t.class];if(!n)throw new Error(`Incorrect data in the EXT_structural_metadata extension: no schema class with name ${t.class}`);let o=t.count;for(let s in n.properties){let i=n.properties[s],a=t.properties?.[s];if(a){let c=xs(r,e,i,o,a);a.data=c}}}function bs(r,e,t){let n=e.class;for(let o in t.properties){let s=e?.properties?.[o];if(s){let i=Fs(r,s,n);s.data=i}}}function xs(r,e,t,n,o){let s=[],i=o.bufferView,a=r.getTypedArrayForBufferView(i),c=Es(r,t,o,n),f=ys(r,t,o,n);return t.type==="STRING"||t.componentType==="STRING"?s=Re(n,a,c,f):Ts(t)&&(s=Ms(t,n,a,c)),s}function Es(r,e,t,n){return e.type==="ARRAY"&&typeof e.componentCount>"u"&&typeof t.arrayOffsetBufferView<"u"?X(r,t.arrayOffsetBufferView,t.offsetType||"UINT32",n):null}function ys(r,e,t,n){return typeof t.stringOffsetBufferView<"u"?X(r,t.stringOffsetBufferView,t.offsetType||"UINT32",n):null}function Ts(r){let e=["UINT8","INT16","UINT16","INT32","UINT32","INT64","UINT64","FLOAT32","FLOAT64"];return e.includes(r.type)||typeof r.componentType<"u"&&e.includes(r.componentType)}function Ms(r,e,t,n){let o=r.type==="ARRAY",s=r.componentCount,i="SCALAR",a=r.componentType||r.type,c=ue(i,a),f=t.byteLength/c,A=k(t,i,a,f);return o?n?Ge(A,e,n,t.length,c):s?De(A,e,s):[]:A}function Fs(r,e,t){let n=r.gltf.json;if(!n.meshes)return[];let o=[];for(let s of n.meshes)for(let i of s.primitives)Is(r,t,e,o,i);return o}function Is(r,e,t,n,o){let s={channels:t.channels,...t.texture},i=Y(r,s,o);i&&Ie(r,e,i,n,o)}var H="4.4.2";var Tr="4.4.2";var Oe={TRANSCODER:"basis_transcoder.js",TRANSCODER_WASM:"basis_transcoder.wasm",ENCODER:"basis_encoder.js",ENCODER_WASM:"basis_encoder.wasm"},Mr;async function ht(r){We(r.modules);let e=Ze("basis");return e||(Mr||=Gs(r),await Mr)}async function Gs(r){let e=null,t=null;return[e,t]=await Promise.all([await M(Oe.TRANSCODER,"textures",r),await M(Oe.TRANSCODER_WASM,"textures",r)]),e=e||globalThis.BASIS,await Ds(e,t)}function Ds(r,e){let t={};return e&&(t.wasmBinary=e),new Promise(n=>{r(t).then(o=>{let{BasisFile:s,initializeBasis:i}=o;i(),n({BasisFile:s})})})}var pt;async function gt(r){let e=r.modules||{};return e.basisEncoder?e.basisEncoder:(pt=pt||Rs(r),await pt)}async function Rs(r){let e=null,t=null;return[e,t]=await Promise.all([await M(Oe.ENCODER,"textures",r),await M(Oe.ENCODER_WASM,"textures",r)]),e=e||globalThis.BASIS,await ws(e,t)}function ws(r,e){let t={};return e&&(t.wasmBinary=e),new Promise(n=>{r(t).then(o=>{let{BasisFile:s,KTX2File:i,initializeBasis:a,BasisEncoder:c}=o;a(),n({BasisFile:s,KTX2File:i,BasisEncoder:c})})})}var Ls=["","WEBKIT_","MOZ_"],Fr={WEBGL_compressed_texture_s3tc:["bc1-rgb-unorm-webgl","bc1-rgba-unorm","bc2-rgba-unorm","bc3-rgba-unorm"],WEBGL_compressed_texture_s3tc_srgb:["bc1-rgb-unorm-srgb-webgl","bc1-rgba-unorm-srgb","bc2-rgba-unorm-srgb","bc3-rgba-unorm-srgb"],EXT_texture_compression_rgtc:["bc4-r-unorm","bc4-r-snorm","bc5-rg-unorm","bc5-rg-snorm"],EXT_texture_compression_bptc:["bc6h-rgb-ufloat","bc6h-rgb-float","bc7-rgba-unorm","bc7-rgba-unorm-srgb"],WEBGL_compressed_texture_etc1:["etc1-rgb-unorm-webgl"],WEBGL_compressed_texture_etc:["etc2-rgb8unorm","etc2-rgb8unorm-srgb","etc2-rgb8a1unorm","etc2-rgb8a1unorm-srgb","etc2-rgba8unorm","etc2-rgba8unorm-srgb","eac-r11unorm","eac-r11snorm","eac-rg11unorm","eac-rg11snorm"],WEBGL_compressed_texture_pvrtc:["pvrtc-rgb4unorm-webgl","pvrtc-rgba4unorm-webgl","pvrtc-rgb2unorm-webgl","pvrtc-rgba2unorm-webgl"],WEBGL_compressed_texture_atc:["atc-rgb-unorm-webgl","atc-rgba-unorm-webgl","atc-rgbai-unorm-webgl"],WEBGL_compressed_texture_astc:["astc-4x4-unorm","astc-4x4-unorm-srgb","astc-5x4-unorm","astc-5x4-unorm-srgb","astc-5x5-unorm","astc-5x5-unorm-srgb","astc-6x5-unorm","astc-6x5-unorm-srgb","astc-6x6-unorm","astc-6x6-unorm-srgb","astc-8x5-unorm","astc-8x5-unorm-srgb","astc-8x6-unorm","astc-8x6-unorm-srgb","astc-8x8-unorm","astc-8x8-unorm-srgb","astc-10x5-unorm","astc-10x5-unorm-srgb","astc-10x6-unorm","astc-10x6-unorm-srgb","astc-10x8-unorm","astc-10x8-unorm-srgb","astc-10x10-unorm","astc-10x10-unorm-srgb","astc-12x10-unorm","astc-12x10-unorm-srgb","astc-12x12-unorm","astc-12x12-unorm-srgb"]};var _e=null;function Ir(r){if(!_e){r=r||Os()||void 0,_e=new Set;for(let e of Ls)for(let t in Fr)if(r&&r.getExtension(`${e}${t}`))for(let n of Fr[t])_e.add(n)}return _e}function Os(){try{return document.createElement("canvas").getContext("webgl")}catch{return null}}var E=[171,75,84,88,32,50,48,187,13,10,26,10];function Gr(r){let e=new Uint8Array(r);return!(e.byteLength<E.length||e[0]!==E[0]||e[1]!==E[1]||e[2]!==E[2]||e[3]!==E[3]||e[4]!==E[4]||e[5]!==E[5]||e[6]!==E[6]||e[7]!==E[7]||e[8]!==E[8]||e[9]!==E[9]||e[10]!==E[10]||e[11]!==E[11])}var Dr=Promise.resolve(),Lr={etc1:{basisFormat:0,compressed:!0,format:36196,textureFormat:"etc1-rgb-unorm-webgl"},etc2:{basisFormat:1,compressed:!0,format:37493,textureFormat:"etc2-rgba8unorm"},bc1:{basisFormat:2,compressed:!0,format:33776,textureFormat:"bc1-rgb-unorm-webgl"},bc3:{basisFormat:3,compressed:!0,format:33779,textureFormat:"bc3-rgba-unorm"},bc4:{basisFormat:4,compressed:!0,format:36283,textureFormat:"bc4-r-unorm"},bc5:{basisFormat:5,compressed:!0,format:36285,textureFormat:"bc5-rg-unorm"},"bc7-m6-opaque-only":{basisFormat:6,compressed:!0,format:36492,textureFormat:"bc7-rgba-unorm"},"bc7-m5":{basisFormat:7,compressed:!0,format:36492,textureFormat:"bc7-rgba-unorm"},"pvrtc1-4-rgb":{basisFormat:8,compressed:!0,format:35840,textureFormat:"pvrtc-rgb4unorm-webgl"},"pvrtc1-4-rgba":{basisFormat:9,compressed:!0,format:35842,textureFormat:"pvrtc-rgba4unorm-webgl"},"astc-4x4":{basisFormat:10,compressed:!0,format:37808,textureFormat:"astc-4x4-unorm"},"atc-rgb":{basisFormat:11,compressed:!0,format:35986,textureFormat:"atc-rgb-unorm-webgl"},"atc-rgba-interpolated-alpha":{basisFormat:12,compressed:!0,format:34798,textureFormat:"atc-rgbai-unorm-webgl"},rgba32:{basisFormat:13,compressed:!1,format:32856,textureFormat:"rgba8unorm"},rgb565:{basisFormat:14,compressed:!1,format:36194,textureFormat:"rgb565unorm-webgl"},bgr565:{basisFormat:15,compressed:!1,format:36194,textureFormat:"rgb565unorm-webgl"},rgba4444:{basisFormat:16,compressed:!1,format:32854,textureFormat:"rgba4unorm-webgl"}},CA=Object.freeze(Object.keys(Lr));async function Js(r){let e=Dr,t;Dr=new Promise(n=>{t=n}),await e;try{return await r()}finally{t()}}async function Or(r,e={}){let t=se(e);return await Js(async()=>{if(!e.basis?.containerFormat||e.basis.containerFormat==="auto"){if(Gr(r)){let o=await gt(t);return Rr(o.KTX2File,r,e)}let{BasisFile:n}=await ht(t);return Ct(n,r,e)}switch(e.basis.module){case"encoder":let n=await gt(t);switch(e.basis.containerFormat){case"ktx2":return Rr(n.KTX2File,r,e);case"basis":default:return Ct(n.BasisFile,r,e)}case"transcoder":default:let{BasisFile:o}=await ht(t);return Ct(o,r,e)}})}function Ct(r,e,t){let n=new r(new Uint8Array(e));try{if(!n.startTranscoding())throw new Error("Failed to start basis transcoding");let o=n.getNumImages(),s=[];for(let i=0;i<o;i++){let a=n.getNumLevels(i),c=[];for(let f=0;f<a;f++)c.push(Us(n,i,f,t));s.push(c)}return s}finally{n.close(),n.delete()}}function Us(r,e,t,n){let o=r.getImageWidth(e,t),s=r.getImageHeight(e,t),i=r.getHasAlpha(),{compressed:a,format:c,basisFormat:f,textureFormat:A}=_r(n,i),u=r.getImageTranscodedSizeInBytes(e,t,f),m=new Uint8Array(u);if(!r.transcodeImage(m,e,t,f,0,0))throw new Error("failed to start Basis transcoding");return{shape:"texture-level",width:o,height:s,data:m,compressed:a,...c!==void 0?{format:c}:{},...A!==void 0?{textureFormat:A}:{},hasAlpha:i}}function Rr(r,e,t){let n=new r(new Uint8Array(e));try{if(!n.startTranscoding())throw new Error("failed to start KTX2 transcoding");let o=n.getLevels(),s=[];for(let i=0;i<o;i++)s.push(Hs(n,i,t));return[s]}finally{n.close(),n.delete()}}function Hs(r,e,t){let{alphaFlag:n,height:o,width:s}=r.getImageLevelInfo(e,0,0),{compressed:i,format:a,basisFormat:c,textureFormat:f}=_r(t,n),A=r.getImageTranscodedSizeInBytes(e,0,0,c),u=new Uint8Array(A);if(!r.transcodeImage(u,e,0,0,c,0,-1,-1))throw new Error("Failed to transcode KTX2 image");return{shape:"texture-level",width:s,height:o,data:u,compressed:i,...a!==void 0?{format:a}:{},...f!==void 0?{textureFormat:f}:{},levelSize:A,hasAlpha:n}}function _r(r,e){let t=r.basis?.format||"auto";t==="auto"&&(t=r.basis?.supportedTextureFormats?wr(r.basis.supportedTextureFormats):wr()),typeof t=="object"&&(t=e?t.alpha:t.noAlpha);let n=t.toLowerCase(),o=Lr[n];if(!o)throw new Error(`Unknown Basis format ${t}`);return o}function wr(r=Ir()){let e=new Set(r);return Z(e,["astc-4x4-unorm","astc-4x4-unorm-srgb"])?"astc-4x4":Z(e,["bc7-rgba-unorm","bc7-rgba-unorm-srgb"])?{alpha:"bc7-m5",noAlpha:"bc7-m6-opaque-only"}:Z(e,["bc1-rgb-unorm-webgl","bc1-rgb-unorm-srgb-webgl","bc1-rgba-unorm","bc1-rgba-unorm-srgb","bc2-rgba-unorm","bc2-rgba-unorm-srgb","bc3-rgba-unorm","bc3-rgba-unorm-srgb"])?{alpha:"bc3",noAlpha:"bc1"}:Z(e,["pvrtc-rgb4unorm-webgl","pvrtc-rgba4unorm-webgl","pvrtc-rgb2unorm-webgl","pvrtc-rgba2unorm-webgl"])?{alpha:"pvrtc1-4-rgba",noAlpha:"pvrtc1-4-rgb"}:Z(e,["etc2-rgb8unorm","etc2-rgb8unorm-srgb","etc2-rgb8a1unorm","etc2-rgb8a1unorm-srgb","etc2-rgba8unorm","etc2-rgba8unorm-srgb","eac-r11unorm","eac-r11snorm","eac-rg11unorm","eac-rg11snorm"])?"etc2":e.has("etc1-rgb-unorm-webgl")?"etc1":Z(e,["atc-rgb-unorm-webgl","atc-rgba-unorm-webgl","atc-rgbai-unorm-webgl"])?{alpha:"atc-rgba-interpolated-alpha",noAlpha:"atc-rgb"}:"rgb565"}function Z(r,e){return e.some(t=>r.has(t))}var Sr={dataType:null,batchType:null,name:"Basis",id:"basis",module:"textures",version:Tr,worker:!0,extensions:["basis","ktx2"],mimeTypes:["application/octet-stream","image/ktx2"],tests:["sB"],binary:!0,options:{basis:{format:"auto",containerFormat:"auto",module:"transcoder"}}},bt={...Sr,parse:Or};var q=!0,Jr=1735152710,yt=12,Se=8,Ns=1313821514,Ps=5130562,Ks=0,js=0,vs=1;function Qs(r,e=0){return`${String.fromCharCode(r.getUint8(e+0))}${String.fromCharCode(r.getUint8(e+1))}${String.fromCharCode(r.getUint8(e+2))}${String.fromCharCode(r.getUint8(e+3))}`}function Ur(r,e=0,t={}){let n=new DataView(r),{magic:o=Jr}=t,s=n.getUint32(e,!1);return s===o||s===Jr}function Je(r,e,t=0,n={}){let o=new DataView(e),s=Qs(o,t+0),i=o.getUint32(t+4,q),a=o.getUint32(t+8,q);switch(Object.assign(r,{header:{byteOffset:t,byteLength:a,hasBinChunk:!1},type:s,version:i,json:{},binChunks:[]}),t+=yt,r.version){case 1:return Xs(r,o,t);case 2:return ks(r,o,t,n={});default:throw new Error(`Invalid GLB version ${r.version}. Only supports version 1 and 2.`)}}function Xs(r,e,t){T(r.header.byteLength>yt+Se);let n=e.getUint32(t+0,q),o=e.getUint32(t+4,q);return t+=Se,T(o===Ks),xt(r,e,t,n),t+=n,t+=Et(r,e,t,r.header.byteLength),t}function ks(r,e,t,n){return T(r.header.byteLength>yt+Se),Ys(r,e,t,n),t+r.header.byteLength}function Ys(r,e,t,n){for(;t+8<=r.header.byteLength;){let o=e.getUint32(t+0,q),s=e.getUint32(t+4,q);switch(t+=Se,s){case Ns:xt(r,e,t,o);break;case Ps:Et(r,e,t,o);break;case js:n.strict||xt(r,e,t,o);break;case vs:n.strict||Et(r,e,t,o);break;default:break}t+=R(o,4)}return t}function xt(r,e,t,n){let o=new Uint8Array(e.buffer,t,n),i=new TextDecoder("utf8").decode(o);return r.json=JSON.parse(i),R(n,4)}function Et(r,e,t,n){return r.header.hasBinChunk=!0,r.binChunks.push({byteOffset:t,byteLength:n,arrayBuffer:e.buffer}),R(n,4)}function Tt(r,e,t){if(r.startsWith("data:")||r.startsWith("http:")||r.startsWith("https:"))return r;let o=t?.baseUrl||Vs(e?.core?.baseUrl);if(!o)throw new Error(`'baseUrl' must be provided to resolve relative url ${r}`);return o.endsWith("/")?`${o}${r}`:`${o}/${r}`}function Vs(r){if(!r)return;if(r.endsWith("/"))return r;let e=r.lastIndexOf("/");return e>=0?r.slice(0,e+1):""}var Ft={};y(Ft,{decode:()=>ii,name:()=>si});var Ws="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