babylonjs-ktx2decoder 5.19.0 → 5.22.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.
@@ -1,2 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("babylonjs-ktx2decoder",[],t):"object"==typeof exports?exports["babylonjs-ktx2decoder"]=t():e.KTX2DECODER=t()}("undefined"!=typeof self?self:"undefined"!=typeof global?global:this,(()=>(()=>{"use strict";var e={d:(t,r)=>{for(var a in r)e.o(r,a)&&!e.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:r[a]})}};e.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),e.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var t={};e.d(t,{default:()=>R});var r,a,s,n={};e.r(n),e.d(n,{DataReader:()=>o,KTX2Decoder:()=>S,KTX2FileReader:()=>d,LiteTranscoder:()=>h,LiteTranscoder_UASTC_ASTC:()=>m,LiteTranscoder_UASTC_BC7:()=>u,LiteTranscoder_UASTC_RGBA_SRGB:()=>_,LiteTranscoder_UASTC_RGBA_UNORM:()=>f,MSCTranscoder:()=>y,SupercompressionScheme:()=>s,Transcoder:()=>i,TranscoderManager:()=>l,WASMMemoryManager:()=>c,ZSTDDecoder:()=>w,sourceTextureFormat:()=>r,transcodeTarget:()=>a});class o{constructor(e,t,r){e.buffer?this._dataView=new DataView(e.buffer,e.byteOffset+(null!=t?t:0),null!=r?r:e.byteLength):this._dataView=new DataView(e,null!=t?t:0,null!=r?r:e.byteLength),this._dataByteOffset=0}get byteOffset(){return this._dataByteOffset}readUint8(){const e=this._dataView.getUint8(this._dataByteOffset);return this._dataByteOffset+=1,e}readInt8(){const e=this._dataView.getInt8(this._dataByteOffset);return this._dataByteOffset+=1,e}readUint16(){const e=this._dataView.getUint16(this._dataByteOffset,!0);return this._dataByteOffset+=2,e}readInt16(){const e=this._dataView.getInt16(this._dataByteOffset,!0);return this._dataByteOffset+=2,e}readUint32(){const e=this._dataView.getUint32(this._dataByteOffset,!0);return this._dataByteOffset+=4,e}readInt32(){const e=this._dataView.getInt32(this._dataByteOffset,!0);return this._dataByteOffset+=4,e}readUint64(){const e=this._dataView.getUint32(this._dataByteOffset,!0)+2**32*this._dataView.getUint32(this._dataByteOffset+4,!0);return this._dataByteOffset+=8,e}readUint8Array(e){const t=new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+this._dataByteOffset,e);return this._dataByteOffset+=e,t}skipBytes(e){return this._dataByteOffset+=e,this}}!function(e){e[e.ETC1S=0]="ETC1S",e[e.UASTC4x4=1]="UASTC4x4"}(r||(r={})),function(e){e[e.ASTC_4x4_RGBA=0]="ASTC_4x4_RGBA",e[e.BC7_RGBA=1]="BC7_RGBA",e[e.BC3_RGBA=2]="BC3_RGBA",e[e.BC1_RGB=3]="BC1_RGB",e[e.PVRTC1_4_RGBA=4]="PVRTC1_4_RGBA",e[e.PVRTC1_4_RGB=5]="PVRTC1_4_RGB",e[e.ETC2_RGBA=6]="ETC2_RGBA",e[e.ETC1_RGB=7]="ETC1_RGB",e[e.RGBA32=8]="RGBA32"}(a||(a={}));class i{static CanTranscode(e,t,r){return!1}getName(){return i.Name}initialize(){}needMemoryManager(){return!1}setMemoryManager(e){}transcode(e,t,r,a,s,n,o,i,d){return Promise.resolve(null)}}i.Name="Transcoder",function(e){e[e.None=0]="None",e[e.BasisLZ=1]="BasisLZ",e[e.ZStandard=2]="ZStandard",e[e.ZLib=3]="ZLib"}(s||(s={}));class d{constructor(e){this._data=e}get data(){return this._data}get header(){return this._header}get levels(){return this._levels}get dfdBlock(){return this._dfdBlock}get supercompressionGlobalData(){return this._supercompressionGlobalData}isValid(){return d.IsValid(this._data)}parse(){let e=12;const t=new o(this._data,e,68),r=this._header={vkFormat:t.readUint32(),typeSize:t.readUint32(),pixelWidth:t.readUint32(),pixelHeight:t.readUint32(),pixelDepth:t.readUint32(),layerCount:t.readUint32(),faceCount:t.readUint32(),levelCount:t.readUint32(),supercompressionScheme:t.readUint32(),dfdByteOffset:t.readUint32(),dfdByteLength:t.readUint32(),kvdByteOffset:t.readUint32(),kvdByteLength:t.readUint32(),sgdByteOffset:t.readUint64(),sgdByteLength:t.readUint64()};if(r.pixelDepth>0)throw new Error("Failed to parse KTX2 file - Only 2D textures are currently supported.");if(r.layerCount>1)throw new Error("Failed to parse KTX2 file - Array textures are not currently supported.");if(r.faceCount>1)throw new Error("Failed to parse KTX2 file - Cube textures are not currently supported.");e+=t.byteOffset;let a=Math.max(1,r.levelCount);const s=new o(this._data,e,3*a*8),n=this._levels=[];for(;a--;)n.push({byteOffset:s.readUint64(),byteLength:s.readUint64(),uncompressedByteLength:s.readUint64()});e+=s.byteOffset;const i=new o(this._data,r.dfdByteOffset,r.dfdByteLength),d=this._dfdBlock={vendorId:i.skipBytes(4).readUint16(),descriptorType:i.readUint16(),versionNumber:i.readUint16(),descriptorBlockSize:i.readUint16(),colorModel:i.readUint8(),colorPrimaries:i.readUint8(),transferFunction:i.readUint8(),flags:i.readUint8(),texelBlockDimension:{x:i.readUint8()+1,y:i.readUint8()+1,z:i.readUint8()+1,w:i.readUint8()+1},bytesPlane:[i.readUint8(),i.readUint8(),i.readUint8(),i.readUint8(),i.readUint8(),i.readUint8(),i.readUint8(),i.readUint8()],numSamples:0,samples:new Array};d.numSamples=(d.descriptorBlockSize-24)/16;for(let e=0;e<d.numSamples;e++){const e={bitOffset:i.readUint16(),bitLength:i.readUint8()+1,channelType:i.readUint8(),channelFlags:0,samplePosition:[i.readUint8(),i.readUint8(),i.readUint8(),i.readUint8()],sampleLower:i.readUint32(),sampleUpper:i.readUint32()};e.channelFlags=(240&e.channelType)>>4,e.channelType=15&e.channelType,d.samples.push(e)}const c=this._supercompressionGlobalData={};if(r.sgdByteLength>0){const e=new o(this._data,r.sgdByteOffset,r.sgdByteLength);c.endpointCount=e.readUint16(),c.selectorCount=e.readUint16(),c.endpointsByteLength=e.readUint32(),c.selectorsByteLength=e.readUint32(),c.tablesByteLength=e.readUint32(),c.extendedByteLength=e.readUint32(),c.imageDescs=[];const t=this._getImageCount();for(let r=0;r<t;r++)c.imageDescs.push({imageFlags:e.readUint32(),rgbSliceByteOffset:e.readUint32(),rgbSliceByteLength:e.readUint32(),alphaSliceByteOffset:e.readUint32(),alphaSliceByteLength:e.readUint32()});const a=r.sgdByteOffset+e.byteOffset,s=a+c.endpointsByteLength,n=s+c.selectorsByteLength,i=n+c.tablesByteLength;c.endpointsData=new Uint8Array(this._data.buffer,this._data.byteOffset+a,c.endpointsByteLength),c.selectorsData=new Uint8Array(this._data.buffer,this._data.byteOffset+s,c.selectorsByteLength),c.tablesData=new Uint8Array(this._data.buffer,this._data.byteOffset+n,c.tablesByteLength),c.extendedData=new Uint8Array(this._data.buffer,this._data.byteOffset+i,c.extendedByteLength)}}_getImageCount(){let e=Math.max(this._header.pixelDepth,1);for(let t=1;t<this._header.levelCount;t++)e+=Math.max(this._header.pixelDepth>>t,1);return Math.max(this._header.layerCount,1)*this._header.faceCount*e}get textureFormat(){return 166===this._dfdBlock.colorModel?r.UASTC4x4:r.ETC1S}get hasAlpha(){switch(this.textureFormat){case r.ETC1S:return 2===this._dfdBlock.numSamples&&(15===this._dfdBlock.samples[0].channelType||15===this._dfdBlock.samples[1].channelType);case r.UASTC4x4:return 3===this._dfdBlock.samples[0].channelType}return!1}get needZSTDDecoder(){return this._header.supercompressionScheme===s.ZStandard}get isInGammaSpace(){return 2===this._dfdBlock.transferFunction}static IsValid(e){if(e.byteLength>=12){const t=new Uint8Array(e.buffer,e.byteOffset,12);if(171===t[0]&&75===t[1]&&84===t[2]&&88===t[3]&&32===t[4]&&50===t[5]&&48===t[6]&&187===t[7]&&13===t[8]&&10===t[9]&&26===t[10]&&10===t[11])return!0}return!1}}class c{constructor(e=c.InitialMemoryPages){this._numPages=e,this._memory=new WebAssembly.Memory({initial:this._numPages}),this._memoryViewByteLength=this._numPages<<16,this._memoryViewOffset=0,this._memoryView=new Uint8Array(this._memory.buffer,this._memoryViewOffset,this._memoryViewByteLength)}static LoadWASM(e){if(this.LoadBinariesFromCurrentThread)return new Promise(((t,r)=>{fetch(e).then((t=>{if(t.ok)return t.arrayBuffer();throw new Error(`Could not fetch the wasm component from "${e}": ${t.status} - ${t.statusText}`)})).then((e=>t(e))).catch((e=>{r(e)}))}));const t=this._RequestId++;return new Promise((r=>{const a=e=>{"wasmLoaded"===e.data.action&&e.data.id===t&&(self.removeEventListener("message",a),r(e.data.wasmBinary))};self.addEventListener("message",a),postMessage({action:"loadWASM",path:e,id:t})}))}get wasmMemory(){return this._memory}getMemoryView(e,t=0,r){return r=null!=r?r:e<<16,this._numPages<e?(this._memory.grow(e-this._numPages),this._numPages=e,this._memoryView=new Uint8Array(this._memory.buffer,t,r),this._memoryViewByteLength=r,this._memoryViewOffset=t):(this._memoryView=new Uint8Array(this._memory.buffer,t,r),this._memoryViewByteLength=r,this._memoryViewOffset=t),this._memoryView}}c.LoadBinariesFromCurrentThread=!0,c.InitialMemoryPages=16,c._RequestId=0;class l{static RegisterTranscoder(e){l._Transcoders.push(e)}findTranscoder(e,t,s,n){let o=null;const i=r[e]+"_"+a[t];for(let r=0;r<l._Transcoders.length;++r)if(l._Transcoders[r].CanTranscode(e,t,s)&&(!n||n.indexOf(l._Transcoders[r].Name)<0)){o=this._getExistingTranscoder(i,l._Transcoders[r].Name),o||(o=new l._Transcoders[r],o.initialize(),o.needMemoryManager()&&(this._wasmMemoryManager||(this._wasmMemoryManager=new c),o.setMemoryManager(this._wasmMemoryManager)),l._TranscoderInstances[i]||(l._TranscoderInstances[i]=[]),l._TranscoderInstances[i].push(o));break}return o}_getExistingTranscoder(e,t){const r=l._TranscoderInstances[e];if(r)for(let e=0;e<r.length;++e){const a=r[e];if(t===a.getName())return a}return null}}l._Transcoders=[],l._TranscoderInstances={};class h extends i{_loadModule(){return this._modulePromise||(this._modulePromise=c.LoadWASM(this._modulePath).then((e=>new Promise((t=>{WebAssembly.instantiate(e,{env:{memory:this._memoryManager.wasmMemory}}).then((e=>{t({module:e.instance.exports})}))}))))),this._modulePromise}get memoryManager(){return this._memoryManager}setModulePath(e){this._modulePath=e}initialize(){this._transcodeInPlace=!0}needMemoryManager(){return!0}setMemoryManager(e){this._memoryManager=e}transcode(e,t,r,a,s,n,o,i,d){return this._loadModule().then((e=>{const t=e.module,[r,o,i]=this._prepareTranscoding(a,s,n,d);return 0===t.transcode(i)?this._transcodeInPlace?r.slice():o.slice():null}))}_prepareTranscoding(e,t,r,a,s=!1){const n=(e+3>>2)*(t+3>>2);s&&(r=e*(t+3>>2)*4*4);const o=1+(16*n+65535+(this._transcodeInPlace?0:r)>>16),i=this.memoryManager.getMemoryView(o,65536,16*n),d=this._transcodeInPlace?null:new Uint8Array(this._memoryManager.wasmMemory.buffer,65536+16*n,s?e*t*4:r);return i.set(a),[i,d,n]}}class m extends h{static CanTranscode(e,t,s){return e===r.UASTC4x4&&t===a.ASTC_4x4_RGBA}getName(){return m.Name}initialize(){super.initialize(),this.setModulePath(m.WasmModuleURL)}}m.WasmModuleURL="https://preview.babylonjs.com/ktx2Transcoders/uastc_astc.wasm",m.Name="UniversalTranscoder_UASTC_ASTC";class u extends h{static CanTranscode(e,t,s){return e===r.UASTC4x4&&t===a.BC7_RGBA}getName(){return u.Name}initialize(){super.initialize(),this.setModulePath(u.WasmModuleURL)}}u.WasmModuleURL="https://preview.babylonjs.com/ktx2Transcoders/uastc_bc7.wasm",u.Name="UniversalTranscoder_UASTC_BC7";class f extends h{static CanTranscode(e,t,s){return e===r.UASTC4x4&&t===a.RGBA32&&!s}getName(){return f.Name}initialize(){super.initialize(),this._transcodeInPlace=!1,this.setModulePath(f.WasmModuleURL)}transcode(e,t,r,a,s,n,o,i,d){return this._loadModule().then((e=>{const t=e.module,[,r]=this._prepareTranscoding(a,s,n,d,!0);return 0===t.decodeRGBA32(a,s)?r.slice():null}))}}f.WasmModuleURL="https://preview.babylonjs.com/ktx2Transcoders/uastc_rgba32_unorm.wasm",f.Name="UniversalTranscoder_UASTC_RGBA_UNORM";class _ extends h{static CanTranscode(e,t,s){return e===r.UASTC4x4&&t===a.RGBA32&&s}getName(){return _.Name}initialize(){super.initialize(),this._transcodeInPlace=!1,this.setModulePath(_.WasmModuleURL)}transcode(e,t,r,a,s,n,o,i,d){return this._loadModule().then((e=>{const t=e.module,[,r]=this._prepareTranscoding(a,s,n,d,!0);return 0===t.decodeRGBA32(a,s)?r.slice():null}))}}_.WasmModuleURL="https://preview.babylonjs.com/ktx2Transcoders/uastc_rgba32_srgb.wasm",_.Name="UniversalTranscoder_UASTC_RGBA_SRGB";class y extends i{getName(){return y.Name}_getMSCBasisTranscoder(){return this._mscBasisTranscoderPromise||(this._mscBasisTranscoderPromise=c.LoadWASM(y.WasmModuleURL).then((e=>{if(y.UseFromWorkerThread)importScripts(y.JSModuleURL);else if("undefined"==typeof MSC_TRANSCODER)return new Promise(((t,r)=>{const a=document.getElementsByTagName("head")[0],s=document.createElement("script");s.setAttribute("type","text/javascript"),s.setAttribute("src",y.JSModuleURL),s.onload=()=>{MSC_TRANSCODER({wasmBinary:e}).then((e=>{e.initTranscoders(),this._mscBasisModule=e,t()}))},s.onerror=()=>{r("Can not load MSC_TRANSCODER script.")},a.appendChild(s)}));return new Promise((t=>{MSC_TRANSCODER({wasmBinary:e}).then((e=>{e.initTranscoders(),this._mscBasisModule=e,t()}))}))}))),this._mscBasisTranscoderPromise}static CanTranscode(e,t,r){return!0}transcode(e,t,s,n,o,i,d,c,l){return this._getMSCBasisTranscoder().then((()=>{const h=this._mscBasisModule;let m,u,f,_=null;try{m=e===r.UASTC4x4?new h.UastcImageTranscoder:new h.BasisLzEtc1sImageTranscoder;const y=e===r.UASTC4x4?h.TextureFormat.UASTC4x4:h.TextureFormat.ETC1S;u=new h.ImageInfo(y,n,o,s);const p=h.TranscodeTarget[a[t]];if(!h.isFormatSupported(p,y))throw new Error(`MSCTranscoder: Transcoding from "${r[e]}" to "${a[t]}" not supported by current transcoder build.`);if(e===r.ETC1S){const e=d.supercompressionGlobalData;m.decodePalettes(e.endpointCount,e.endpointsData,e.selectorCount,e.selectorsData),m.decodeTables(e.tablesData),u.flags=c.imageFlags,u.rgbByteOffset=0,u.rgbByteLength=c.rgbSliceByteLength,u.alphaByteOffset=c.alphaSliceByteOffset>0?c.rgbSliceByteLength:0,u.alphaByteLength=c.alphaSliceByteLength,f=m.transcodeImage(p,l,u,0,!1)}else u.flags=0,u.rgbByteOffset=0,u.rgbByteLength=i,u.alphaByteOffset=0,u.alphaByteLength=0,f=m.transcodeImage(p,l,u,0,d.hasAlpha,!1)}finally{m&&m.delete(),u&&u.delete(),f&&f.transcodedImage&&(_=f.transcodedImage.get_typed_memory_view().slice(),f.transcodedImage.delete())}return _}))}}let p,g,T;y.JSModuleURL="https://preview.babylonjs.com/ktx2Transcoders/msc_basis_transcoder.js",y.WasmModuleURL="https://preview.babylonjs.com/ktx2Transcoders/msc_basis_transcoder.wasm",y.UseFromWorkerThread=!0,y.Name="MSCTranscoder";const B={env:{emscripten_notify_memory_growth:function(){T=new Uint8Array(g.exports.memory.buffer)}}};class w{init(){return p||(p="undefined"!=typeof fetch?fetch(w.WasmModuleURL).then((e=>{if(e.ok)return e.arrayBuffer();throw new Error(`Could not fetch the wasm component for the Zstandard decompression lib: ${e.status} - ${e.statusText}`)})).then((e=>WebAssembly.instantiate(e,B))).then(this._init):WebAssembly.instantiateStreaming(fetch(w.WasmModuleURL),B).then(this._init),p)}_init(e){g=e.instance,B.env.emscripten_notify_memory_growth()}decode(e,t=0){if(!g)throw new Error("ZSTDDecoder: Await .init() before decoding.");const r=e.byteLength,a=g.exports.malloc(r);T.set(e,a),t=t||Number(g.exports.ZSTD_findDecompressedSize(a,r));const s=g.exports.malloc(t),n=g.exports.ZSTD_decompress(s,t,a,r),o=T.slice(s,s+n);return g.exports.free(a),g.exports.free(s),o}}w.WasmModuleURL="https://preview.babylonjs.com/zstddec.wasm";const U=32856,b={ETC1S:{option:"forceRGBA",yes:{transcodeFormat:a.RGBA32,engineFormat:U,roundToMultiple4:!1},no:{cap:"etc2",yes:{alpha:!0,yes:{transcodeFormat:a.ETC2_RGBA,engineFormat:37496},no:{transcodeFormat:a.ETC1_RGB,engineFormat:37492}},no:{cap:"etc1",alpha:!1,yes:{transcodeFormat:a.ETC1_RGB,engineFormat:36196},no:{cap:"bptc",yes:{transcodeFormat:a.BC7_RGBA,engineFormat:36492},no:{cap:"s3tc",yes:{alpha:!0,yes:{transcodeFormat:a.BC3_RGBA,engineFormat:33779},no:{transcodeFormat:a.BC1_RGB,engineFormat:33776}},no:{cap:"pvrtc",needsPowerOfTwo:!0,yes:{alpha:!0,yes:{transcodeFormat:a.PVRTC1_4_RGBA,engineFormat:35842},no:{transcodeFormat:a.PVRTC1_4_RGB,engineFormat:35840}},no:{transcodeFormat:a.RGBA32,engineFormat:U,roundToMultiple4:!1}}}}}}},UASTC:{option:"forceRGBA",yes:{transcodeFormat:a.RGBA32,engineFormat:U,roundToMultiple4:!1},no:{cap:"astc",yes:{transcodeFormat:a.ASTC_4x4_RGBA,engineFormat:37808},no:{cap:"bptc",yes:{transcodeFormat:a.BC7_RGBA,engineFormat:36492},no:{option:"useRGBAIfASTCBC7NotAvailableWhenUASTC",yes:{transcodeFormat:a.RGBA32,engineFormat:U,roundToMultiple4:!1},no:{cap:"etc2",yes:{alpha:!0,yes:{transcodeFormat:a.ETC2_RGBA,engineFormat:37496},no:{transcodeFormat:a.ETC1_RGB,engineFormat:37492}},no:{cap:"etc1",yes:{transcodeFormat:a.ETC1_RGB,engineFormat:36196},no:{cap:"s3tc",yes:{alpha:!0,yes:{transcodeFormat:a.BC3_RGBA,engineFormat:33779},no:{transcodeFormat:a.BC1_RGB,engineFormat:33776}},no:{cap:"pvrtc",needsPowerOfTwo:!0,yes:{alpha:!0,yes:{transcodeFormat:a.PVRTC1_4_RGBA,engineFormat:35842},no:{transcodeFormat:a.PVRTC1_4_RGB,engineFormat:35840}},no:{transcodeFormat:a.RGBA32,engineFormat:U,roundToMultiple4:!1}}}}}}}}}};class C{constructor(e,t,a,s,n){this._hasAlpha=t,this._isPowerOfTwo=a,this._caps=s,this._options=null!=n?n:{},this._parseNode(e===r.UASTC4x4?b.UASTC:b.ETC1S)}static _IsLeafNode(e){return void 0!==e.transcodeFormat}get transcodeFormat(){return this._transcodeFormat}get engineFormat(){return this._engineFormat}get roundToMultiple4(){return this._roundToMultiple4}_parseNode(e){var t;if(C._IsLeafNode(e))this._transcodeFormat=e.transcodeFormat,this._engineFormat=e.engineFormat,this._roundToMultiple4=null===(t=e.roundToMultiple4)||void 0===t||t;else{let t=!0;void 0!==e.cap&&(t=t&&this._caps[e.cap]),void 0!==e.option&&(t=t&&this._options[e.option]),void 0!==e.alpha&&(t=t&&this._hasAlpha===e.alpha),void 0!==e.needsPowerOfTwo&&(t=t&&this._isPowerOfTwo===e.needsPowerOfTwo),this._parseNode(t?e.yes:e.no)}}}const A=e=>0==(e&e-1)&&0!==e;class S{constructor(){this._transcoderMgr=new l}decode(e,t,r){return Promise.resolve().then((()=>{const a=new d(e);if(!a.isValid())throw new Error("Invalid KT2 file: wrong signature");return a.parse(),a.needZSTDDecoder?(this._zstdDecoder||(this._zstdDecoder=new w),this._zstdDecoder.init().then((()=>this._decodeData(a,t,r)))):this._decodeData(a,t,r)}))}_decodeData(e,t,n){const o=e.header.pixelWidth,i=e.header.pixelHeight,d=e.textureFormat,c=new C(d,e.hasAlpha,A(o)&&A(i),t,n),l=c.transcodeFormat,h=c.engineFormat,m=c.roundToMultiple4,u=this._transcoderMgr.findTranscoder(d,l,e.isInGammaSpace,null==n?void 0:n.bypassTranscoders);if(null===u)throw new Error(`no transcoder found to transcode source texture format "${r[d]}" to format "${a[l]}"`);const f=[],_=[],y={width:0,height:0,transcodedFormat:h,mipmaps:f,isInGammaSpace:e.isInGammaSpace,hasAlpha:e.hasAlpha,transcoderName:u.getName()};let p=0;for(let t=0;t<e.header.levelCount;t++){t>0&&(p+=Math.max(e.header.layerCount,1)*e.header.faceCount*Math.max(e.header.pixelDepth>>t-1,1));const r=Math.floor(o/(1<<t))||1,a=Math.floor(i/(1<<t))||1,n=e.header.faceCount,c=(r+3>>2)*(a+3>>2)*e.dfdBlock.bytesPlane[0],h=e.levels[t].uncompressedByteLength;let g=e.data.buffer,T=e.levels[t].byteOffset+e.data.byteOffset,B=0;e.header.supercompressionScheme===s.ZStandard&&(g=this._zstdDecoder.decode(new Uint8Array(g,T,e.levels[t].byteLength),h),T=0),0===t&&(y.width=m?r+3&-4:r,y.height=m?a+3&-4:a);for(let o=0;o<n;o++){let n,i=null;e.header.supercompressionScheme===s.BasisLZ?(i=e.supercompressionGlobalData.imageDescs[p+o],n=new Uint8Array(g,T+i.rgbSliceByteOffset,i.rgbSliceByteLength+i.alphaSliceByteLength)):(n=new Uint8Array(g,T+B,c),B+=c);const m={data:null,width:r,height:a},w=u.transcode(d,l,t,r,a,h,e,i,n).then((e=>(m.data=e,e))).catch((e=>{var t;return y.errors=null!==(t=y.errors)&&void 0!==t?t:"",y.errors+=e+"\n"+e.stack+"\n",null}));_.push(w),f.push(m)}}return Promise.all(_).then((()=>y))}}l.RegisterTranscoder(m),l.RegisterTranscoder(u),l.RegisterTranscoder(f),l.RegisterTranscoder(_),l.RegisterTranscoder(y);const M=void 0!==e.g?e.g:"undefined"!=typeof window?window:void 0;void 0!==M&&(M.KTX2DECODER=S);const R=n;return t.default})()));
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("babylonjs-ktx2decoder",[],t):"object"==typeof exports?exports["babylonjs-ktx2decoder"]=t():e.KTX2DECODER=t()}("undefined"!=typeof self?self:"undefined"!=typeof global?global:this,(()=>(()=>{"use strict";var e={d:(t,r)=>{for(var a in r)e.o(r,a)&&!e.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:r[a]})}};e.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),e.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var t={};e.d(t,{default:()=>R});var r,a,s,n={};e.r(n),e.d(n,{DataReader:()=>o,KTX2Decoder:()=>S,KTX2FileReader:()=>d,LiteTranscoder:()=>h,LiteTranscoder_UASTC_ASTC:()=>m,LiteTranscoder_UASTC_BC7:()=>u,LiteTranscoder_UASTC_RGBA_SRGB:()=>_,LiteTranscoder_UASTC_RGBA_UNORM:()=>f,MSCTranscoder:()=>y,SupercompressionScheme:()=>s,Transcoder:()=>i,TranscoderManager:()=>l,WASMMemoryManager:()=>c,ZSTDDecoder:()=>w,sourceTextureFormat:()=>r,transcodeTarget:()=>a});class o{constructor(e,t,r){e.buffer?this._dataView=new DataView(e.buffer,e.byteOffset+(t??0),r??e.byteLength):this._dataView=new DataView(e,t??0,r??e.byteLength),this._dataByteOffset=0}get byteOffset(){return this._dataByteOffset}readUint8(){const e=this._dataView.getUint8(this._dataByteOffset);return this._dataByteOffset+=1,e}readInt8(){const e=this._dataView.getInt8(this._dataByteOffset);return this._dataByteOffset+=1,e}readUint16(){const e=this._dataView.getUint16(this._dataByteOffset,!0);return this._dataByteOffset+=2,e}readInt16(){const e=this._dataView.getInt16(this._dataByteOffset,!0);return this._dataByteOffset+=2,e}readUint32(){const e=this._dataView.getUint32(this._dataByteOffset,!0);return this._dataByteOffset+=4,e}readInt32(){const e=this._dataView.getInt32(this._dataByteOffset,!0);return this._dataByteOffset+=4,e}readUint64(){const e=this._dataView.getUint32(this._dataByteOffset,!0)+2**32*this._dataView.getUint32(this._dataByteOffset+4,!0);return this._dataByteOffset+=8,e}readUint8Array(e){const t=new Uint8Array(this._dataView.buffer,this._dataView.byteOffset+this._dataByteOffset,e);return this._dataByteOffset+=e,t}skipBytes(e){return this._dataByteOffset+=e,this}}!function(e){e[e.ETC1S=0]="ETC1S",e[e.UASTC4x4=1]="UASTC4x4"}(r||(r={})),function(e){e[e.ASTC_4x4_RGBA=0]="ASTC_4x4_RGBA",e[e.BC7_RGBA=1]="BC7_RGBA",e[e.BC3_RGBA=2]="BC3_RGBA",e[e.BC1_RGB=3]="BC1_RGB",e[e.PVRTC1_4_RGBA=4]="PVRTC1_4_RGBA",e[e.PVRTC1_4_RGB=5]="PVRTC1_4_RGB",e[e.ETC2_RGBA=6]="ETC2_RGBA",e[e.ETC1_RGB=7]="ETC1_RGB",e[e.RGBA32=8]="RGBA32"}(a||(a={}));class i{static CanTranscode(e,t,r){return!1}getName(){return i.Name}initialize(){}needMemoryManager(){return!1}setMemoryManager(e){}transcode(e,t,r,a,s,n,o,i,d){return Promise.resolve(null)}}i.Name="Transcoder",function(e){e[e.None=0]="None",e[e.BasisLZ=1]="BasisLZ",e[e.ZStandard=2]="ZStandard",e[e.ZLib=3]="ZLib"}(s||(s={}));class d{constructor(e){this._data=e}get data(){return this._data}get header(){return this._header}get levels(){return this._levels}get dfdBlock(){return this._dfdBlock}get supercompressionGlobalData(){return this._supercompressionGlobalData}isValid(){return d.IsValid(this._data)}parse(){let e=12;const t=new o(this._data,e,68),r=this._header={vkFormat:t.readUint32(),typeSize:t.readUint32(),pixelWidth:t.readUint32(),pixelHeight:t.readUint32(),pixelDepth:t.readUint32(),layerCount:t.readUint32(),faceCount:t.readUint32(),levelCount:t.readUint32(),supercompressionScheme:t.readUint32(),dfdByteOffset:t.readUint32(),dfdByteLength:t.readUint32(),kvdByteOffset:t.readUint32(),kvdByteLength:t.readUint32(),sgdByteOffset:t.readUint64(),sgdByteLength:t.readUint64()};if(r.pixelDepth>0)throw new Error("Failed to parse KTX2 file - Only 2D textures are currently supported.");if(r.layerCount>1)throw new Error("Failed to parse KTX2 file - Array textures are not currently supported.");if(r.faceCount>1)throw new Error("Failed to parse KTX2 file - Cube textures are not currently supported.");e+=t.byteOffset;let a=Math.max(1,r.levelCount);const s=new o(this._data,e,3*a*8),n=this._levels=[];for(;a--;)n.push({byteOffset:s.readUint64(),byteLength:s.readUint64(),uncompressedByteLength:s.readUint64()});e+=s.byteOffset;const i=new o(this._data,r.dfdByteOffset,r.dfdByteLength),d=this._dfdBlock={vendorId:i.skipBytes(4).readUint16(),descriptorType:i.readUint16(),versionNumber:i.readUint16(),descriptorBlockSize:i.readUint16(),colorModel:i.readUint8(),colorPrimaries:i.readUint8(),transferFunction:i.readUint8(),flags:i.readUint8(),texelBlockDimension:{x:i.readUint8()+1,y:i.readUint8()+1,z:i.readUint8()+1,w:i.readUint8()+1},bytesPlane:[i.readUint8(),i.readUint8(),i.readUint8(),i.readUint8(),i.readUint8(),i.readUint8(),i.readUint8(),i.readUint8()],numSamples:0,samples:new Array};d.numSamples=(d.descriptorBlockSize-24)/16;for(let e=0;e<d.numSamples;e++){const e={bitOffset:i.readUint16(),bitLength:i.readUint8()+1,channelType:i.readUint8(),channelFlags:0,samplePosition:[i.readUint8(),i.readUint8(),i.readUint8(),i.readUint8()],sampleLower:i.readUint32(),sampleUpper:i.readUint32()};e.channelFlags=(240&e.channelType)>>4,e.channelType=15&e.channelType,d.samples.push(e)}const c=this._supercompressionGlobalData={};if(r.sgdByteLength>0){const e=new o(this._data,r.sgdByteOffset,r.sgdByteLength);c.endpointCount=e.readUint16(),c.selectorCount=e.readUint16(),c.endpointsByteLength=e.readUint32(),c.selectorsByteLength=e.readUint32(),c.tablesByteLength=e.readUint32(),c.extendedByteLength=e.readUint32(),c.imageDescs=[];const t=this._getImageCount();for(let r=0;r<t;r++)c.imageDescs.push({imageFlags:e.readUint32(),rgbSliceByteOffset:e.readUint32(),rgbSliceByteLength:e.readUint32(),alphaSliceByteOffset:e.readUint32(),alphaSliceByteLength:e.readUint32()});const a=r.sgdByteOffset+e.byteOffset,s=a+c.endpointsByteLength,n=s+c.selectorsByteLength,i=n+c.tablesByteLength;c.endpointsData=new Uint8Array(this._data.buffer,this._data.byteOffset+a,c.endpointsByteLength),c.selectorsData=new Uint8Array(this._data.buffer,this._data.byteOffset+s,c.selectorsByteLength),c.tablesData=new Uint8Array(this._data.buffer,this._data.byteOffset+n,c.tablesByteLength),c.extendedData=new Uint8Array(this._data.buffer,this._data.byteOffset+i,c.extendedByteLength)}}_getImageCount(){let e=Math.max(this._header.pixelDepth,1);for(let t=1;t<this._header.levelCount;t++)e+=Math.max(this._header.pixelDepth>>t,1);return Math.max(this._header.layerCount,1)*this._header.faceCount*e}get textureFormat(){return 166===this._dfdBlock.colorModel?r.UASTC4x4:r.ETC1S}get hasAlpha(){switch(this.textureFormat){case r.ETC1S:return 2===this._dfdBlock.numSamples&&(15===this._dfdBlock.samples[0].channelType||15===this._dfdBlock.samples[1].channelType);case r.UASTC4x4:return 3===this._dfdBlock.samples[0].channelType}return!1}get needZSTDDecoder(){return this._header.supercompressionScheme===s.ZStandard}get isInGammaSpace(){return 2===this._dfdBlock.transferFunction}static IsValid(e){if(e.byteLength>=12){const t=new Uint8Array(e.buffer,e.byteOffset,12);if(171===t[0]&&75===t[1]&&84===t[2]&&88===t[3]&&32===t[4]&&50===t[5]&&48===t[6]&&187===t[7]&&13===t[8]&&10===t[9]&&26===t[10]&&10===t[11])return!0}return!1}}class c{constructor(e=c.InitialMemoryPages){this._numPages=e,this._memory=new WebAssembly.Memory({initial:this._numPages}),this._memoryViewByteLength=this._numPages<<16,this._memoryViewOffset=0,this._memoryView=new Uint8Array(this._memory.buffer,this._memoryViewOffset,this._memoryViewByteLength)}static LoadWASM(e){if(this.LoadBinariesFromCurrentThread)return new Promise(((t,r)=>{fetch(e).then((t=>{if(t.ok)return t.arrayBuffer();throw new Error(`Could not fetch the wasm component from "${e}": ${t.status} - ${t.statusText}`)})).then((e=>t(e))).catch((e=>{r(e)}))}));const t=this._RequestId++;return new Promise((r=>{const a=e=>{"wasmLoaded"===e.data.action&&e.data.id===t&&(self.removeEventListener("message",a),r(e.data.wasmBinary))};self.addEventListener("message",a),postMessage({action:"loadWASM",path:e,id:t})}))}get wasmMemory(){return this._memory}getMemoryView(e,t=0,r){return r=r??e<<16,this._numPages<e?(this._memory.grow(e-this._numPages),this._numPages=e,this._memoryView=new Uint8Array(this._memory.buffer,t,r),this._memoryViewByteLength=r,this._memoryViewOffset=t):(this._memoryView=new Uint8Array(this._memory.buffer,t,r),this._memoryViewByteLength=r,this._memoryViewOffset=t),this._memoryView}}c.LoadBinariesFromCurrentThread=!0,c.InitialMemoryPages=16,c._RequestId=0;class l{static RegisterTranscoder(e){l._Transcoders.push(e)}findTranscoder(e,t,s,n){let o=null;const i=r[e]+"_"+a[t];for(let r=0;r<l._Transcoders.length;++r)if(l._Transcoders[r].CanTranscode(e,t,s)&&(!n||n.indexOf(l._Transcoders[r].Name)<0)){o=this._getExistingTranscoder(i,l._Transcoders[r].Name),o||(o=new l._Transcoders[r],o.initialize(),o.needMemoryManager()&&(this._wasmMemoryManager||(this._wasmMemoryManager=new c),o.setMemoryManager(this._wasmMemoryManager)),l._TranscoderInstances[i]||(l._TranscoderInstances[i]=[]),l._TranscoderInstances[i].push(o));break}return o}_getExistingTranscoder(e,t){const r=l._TranscoderInstances[e];if(r)for(let e=0;e<r.length;++e){const a=r[e];if(t===a.getName())return a}return null}}l._Transcoders=[],l._TranscoderInstances={};class h extends i{_loadModule(){return this._modulePromise||(this._modulePromise=c.LoadWASM(this._modulePath).then((e=>new Promise((t=>{WebAssembly.instantiate(e,{env:{memory:this._memoryManager.wasmMemory}}).then((e=>{t({module:e.instance.exports})}))}))))),this._modulePromise}get memoryManager(){return this._memoryManager}setModulePath(e){this._modulePath=e}initialize(){this._transcodeInPlace=!0}needMemoryManager(){return!0}setMemoryManager(e){this._memoryManager=e}transcode(e,t,r,a,s,n,o,i,d){return this._loadModule().then((e=>{const t=e.module,[r,o,i]=this._prepareTranscoding(a,s,n,d);return 0===t.transcode(i)?this._transcodeInPlace?r.slice():o.slice():null}))}_prepareTranscoding(e,t,r,a,s=!1){const n=(e+3>>2)*(t+3>>2);s&&(r=e*(t+3>>2)*4*4);const o=1+(16*n+65535+(this._transcodeInPlace?0:r)>>16),i=this.memoryManager.getMemoryView(o,65536,16*n),d=this._transcodeInPlace?null:new Uint8Array(this._memoryManager.wasmMemory.buffer,65536+16*n,s?e*t*4:r);return i.set(a),[i,d,n]}}class m extends h{static CanTranscode(e,t,s){return e===r.UASTC4x4&&t===a.ASTC_4x4_RGBA}getName(){return m.Name}initialize(){super.initialize(),this.setModulePath(m.WasmModuleURL)}}m.WasmModuleURL="https://preview.babylonjs.com/ktx2Transcoders/uastc_astc.wasm",m.Name="UniversalTranscoder_UASTC_ASTC";class u extends h{static CanTranscode(e,t,s){return e===r.UASTC4x4&&t===a.BC7_RGBA}getName(){return u.Name}initialize(){super.initialize(),this.setModulePath(u.WasmModuleURL)}}u.WasmModuleURL="https://preview.babylonjs.com/ktx2Transcoders/uastc_bc7.wasm",u.Name="UniversalTranscoder_UASTC_BC7";class f extends h{static CanTranscode(e,t,s){return e===r.UASTC4x4&&t===a.RGBA32&&!s}getName(){return f.Name}initialize(){super.initialize(),this._transcodeInPlace=!1,this.setModulePath(f.WasmModuleURL)}transcode(e,t,r,a,s,n,o,i,d){return this._loadModule().then((e=>{const t=e.module,[,r]=this._prepareTranscoding(a,s,n,d,!0);return 0===t.decodeRGBA32(a,s)?r.slice():null}))}}f.WasmModuleURL="https://preview.babylonjs.com/ktx2Transcoders/uastc_rgba32_unorm.wasm",f.Name="UniversalTranscoder_UASTC_RGBA_UNORM";class _ extends h{static CanTranscode(e,t,s){return e===r.UASTC4x4&&t===a.RGBA32&&s}getName(){return _.Name}initialize(){super.initialize(),this._transcodeInPlace=!1,this.setModulePath(_.WasmModuleURL)}transcode(e,t,r,a,s,n,o,i,d){return this._loadModule().then((e=>{const t=e.module,[,r]=this._prepareTranscoding(a,s,n,d,!0);return 0===t.decodeRGBA32(a,s)?r.slice():null}))}}_.WasmModuleURL="https://preview.babylonjs.com/ktx2Transcoders/uastc_rgba32_srgb.wasm",_.Name="UniversalTranscoder_UASTC_RGBA_SRGB";class y extends i{getName(){return y.Name}_getMSCBasisTranscoder(){return this._mscBasisTranscoderPromise||(this._mscBasisTranscoderPromise=c.LoadWASM(y.WasmModuleURL).then((e=>{if(y.UseFromWorkerThread)importScripts(y.JSModuleURL);else if("undefined"==typeof MSC_TRANSCODER)return new Promise(((t,r)=>{const a=document.getElementsByTagName("head")[0],s=document.createElement("script");s.setAttribute("type","text/javascript"),s.setAttribute("src",y.JSModuleURL),s.onload=()=>{MSC_TRANSCODER({wasmBinary:e}).then((e=>{e.initTranscoders(),this._mscBasisModule=e,t()}))},s.onerror=()=>{r("Can not load MSC_TRANSCODER script.")},a.appendChild(s)}));return new Promise((t=>{MSC_TRANSCODER({wasmBinary:e}).then((e=>{e.initTranscoders(),this._mscBasisModule=e,t()}))}))}))),this._mscBasisTranscoderPromise}static CanTranscode(e,t,r){return!0}transcode(e,t,s,n,o,i,d,c,l){return this._getMSCBasisTranscoder().then((()=>{const h=this._mscBasisModule;let m,u,f,_=null;try{m=e===r.UASTC4x4?new h.UastcImageTranscoder:new h.BasisLzEtc1sImageTranscoder;const y=e===r.UASTC4x4?h.TextureFormat.UASTC4x4:h.TextureFormat.ETC1S;u=new h.ImageInfo(y,n,o,s);const p=h.TranscodeTarget[a[t]];if(!h.isFormatSupported(p,y))throw new Error(`MSCTranscoder: Transcoding from "${r[e]}" to "${a[t]}" not supported by current transcoder build.`);if(e===r.ETC1S){const e=d.supercompressionGlobalData;m.decodePalettes(e.endpointCount,e.endpointsData,e.selectorCount,e.selectorsData),m.decodeTables(e.tablesData),u.flags=c.imageFlags,u.rgbByteOffset=0,u.rgbByteLength=c.rgbSliceByteLength,u.alphaByteOffset=c.alphaSliceByteOffset>0?c.rgbSliceByteLength:0,u.alphaByteLength=c.alphaSliceByteLength,f=m.transcodeImage(p,l,u,0,!1)}else u.flags=0,u.rgbByteOffset=0,u.rgbByteLength=i,u.alphaByteOffset=0,u.alphaByteLength=0,f=m.transcodeImage(p,l,u,0,d.hasAlpha,!1)}finally{m&&m.delete(),u&&u.delete(),f&&f.transcodedImage&&(_=f.transcodedImage.get_typed_memory_view().slice(),f.transcodedImage.delete())}return _}))}}let p,g,T;y.JSModuleURL="https://preview.babylonjs.com/ktx2Transcoders/msc_basis_transcoder.js",y.WasmModuleURL="https://preview.babylonjs.com/ktx2Transcoders/msc_basis_transcoder.wasm",y.UseFromWorkerThread=!0,y.Name="MSCTranscoder";const B={env:{emscripten_notify_memory_growth:function(){T=new Uint8Array(g.exports.memory.buffer)}}};class w{init(){return p||(p="undefined"!=typeof fetch?fetch(w.WasmModuleURL).then((e=>{if(e.ok)return e.arrayBuffer();throw new Error(`Could not fetch the wasm component for the Zstandard decompression lib: ${e.status} - ${e.statusText}`)})).then((e=>WebAssembly.instantiate(e,B))).then(this._init):WebAssembly.instantiateStreaming(fetch(w.WasmModuleURL),B).then(this._init),p)}_init(e){g=e.instance,B.env.emscripten_notify_memory_growth()}decode(e,t=0){if(!g)throw new Error("ZSTDDecoder: Await .init() before decoding.");const r=e.byteLength,a=g.exports.malloc(r);T.set(e,a),t=t||Number(g.exports.ZSTD_findDecompressedSize(a,r));const s=g.exports.malloc(t),n=g.exports.ZSTD_decompress(s,t,a,r),o=T.slice(s,s+n);return g.exports.free(a),g.exports.free(s),o}}w.WasmModuleURL="https://preview.babylonjs.com/zstddec.wasm";const U=32856,b={ETC1S:{option:"forceRGBA",yes:{transcodeFormat:a.RGBA32,engineFormat:U,roundToMultiple4:!1},no:{cap:"etc2",yes:{alpha:!0,yes:{transcodeFormat:a.ETC2_RGBA,engineFormat:37496},no:{transcodeFormat:a.ETC1_RGB,engineFormat:37492}},no:{cap:"etc1",alpha:!1,yes:{transcodeFormat:a.ETC1_RGB,engineFormat:36196},no:{cap:"bptc",yes:{transcodeFormat:a.BC7_RGBA,engineFormat:36492},no:{cap:"s3tc",yes:{alpha:!0,yes:{transcodeFormat:a.BC3_RGBA,engineFormat:33779},no:{transcodeFormat:a.BC1_RGB,engineFormat:33776}},no:{cap:"pvrtc",needsPowerOfTwo:!0,yes:{alpha:!0,yes:{transcodeFormat:a.PVRTC1_4_RGBA,engineFormat:35842},no:{transcodeFormat:a.PVRTC1_4_RGB,engineFormat:35840}},no:{transcodeFormat:a.RGBA32,engineFormat:U,roundToMultiple4:!1}}}}}}},UASTC:{option:"forceRGBA",yes:{transcodeFormat:a.RGBA32,engineFormat:U,roundToMultiple4:!1},no:{cap:"astc",yes:{transcodeFormat:a.ASTC_4x4_RGBA,engineFormat:37808},no:{cap:"bptc",yes:{transcodeFormat:a.BC7_RGBA,engineFormat:36492},no:{option:"useRGBAIfASTCBC7NotAvailableWhenUASTC",yes:{transcodeFormat:a.RGBA32,engineFormat:U,roundToMultiple4:!1},no:{cap:"etc2",yes:{alpha:!0,yes:{transcodeFormat:a.ETC2_RGBA,engineFormat:37496},no:{transcodeFormat:a.ETC1_RGB,engineFormat:37492}},no:{cap:"etc1",yes:{transcodeFormat:a.ETC1_RGB,engineFormat:36196},no:{cap:"s3tc",yes:{alpha:!0,yes:{transcodeFormat:a.BC3_RGBA,engineFormat:33779},no:{transcodeFormat:a.BC1_RGB,engineFormat:33776}},no:{cap:"pvrtc",needsPowerOfTwo:!0,yes:{alpha:!0,yes:{transcodeFormat:a.PVRTC1_4_RGBA,engineFormat:35842},no:{transcodeFormat:a.PVRTC1_4_RGB,engineFormat:35840}},no:{transcodeFormat:a.RGBA32,engineFormat:U,roundToMultiple4:!1}}}}}}}}}};class C{constructor(e,t,a,s,n){this._hasAlpha=t,this._isPowerOfTwo=a,this._caps=s,this._options=n??{},this._parseNode(e===r.UASTC4x4?b.UASTC:b.ETC1S)}static _IsLeafNode(e){return void 0!==e.transcodeFormat}get transcodeFormat(){return this._transcodeFormat}get engineFormat(){return this._engineFormat}get roundToMultiple4(){return this._roundToMultiple4}_parseNode(e){if(C._IsLeafNode(e))this._transcodeFormat=e.transcodeFormat,this._engineFormat=e.engineFormat,this._roundToMultiple4=e.roundToMultiple4??!0;else{let t=!0;void 0!==e.cap&&(t=t&&this._caps[e.cap]),void 0!==e.option&&(t=t&&this._options[e.option]),void 0!==e.alpha&&(t=t&&this._hasAlpha===e.alpha),void 0!==e.needsPowerOfTwo&&(t=t&&this._isPowerOfTwo===e.needsPowerOfTwo),this._parseNode(t?e.yes:e.no)}}}const A=e=>0==(e&e-1)&&0!==e;class S{constructor(){this._transcoderMgr=new l}decode(e,t,r){return Promise.resolve().then((()=>{const a=new d(e);if(!a.isValid())throw new Error("Invalid KT2 file: wrong signature");return a.parse(),a.needZSTDDecoder?(this._zstdDecoder||(this._zstdDecoder=new w),this._zstdDecoder.init().then((()=>this._decodeData(a,t,r)))):this._decodeData(a,t,r)}))}_decodeData(e,t,n){const o=e.header.pixelWidth,i=e.header.pixelHeight,d=e.textureFormat,c=new C(d,e.hasAlpha,A(o)&&A(i),t,n),l=c.transcodeFormat,h=c.engineFormat,m=c.roundToMultiple4,u=this._transcoderMgr.findTranscoder(d,l,e.isInGammaSpace,n?.bypassTranscoders);if(null===u)throw new Error(`no transcoder found to transcode source texture format "${r[d]}" to format "${a[l]}"`);const f=[],_=[],y={width:0,height:0,transcodedFormat:h,mipmaps:f,isInGammaSpace:e.isInGammaSpace,hasAlpha:e.hasAlpha,transcoderName:u.getName()};let p=0;for(let t=0;t<e.header.levelCount;t++){t>0&&(p+=Math.max(e.header.layerCount,1)*e.header.faceCount*Math.max(e.header.pixelDepth>>t-1,1));const r=Math.floor(o/(1<<t))||1,a=Math.floor(i/(1<<t))||1,n=e.header.faceCount,c=(r+3>>2)*(a+3>>2)*e.dfdBlock.bytesPlane[0],h=e.levels[t].uncompressedByteLength;let g=e.data.buffer,T=e.levels[t].byteOffset+e.data.byteOffset,B=0;e.header.supercompressionScheme===s.ZStandard&&(g=this._zstdDecoder.decode(new Uint8Array(g,T,e.levels[t].byteLength),h),T=0),0===t&&(y.width=m?r+3&-4:r,y.height=m?a+3&-4:a);for(let o=0;o<n;o++){let n,i=null;e.header.supercompressionScheme===s.BasisLZ?(i=e.supercompressionGlobalData.imageDescs[p+o],n=new Uint8Array(g,T+i.rgbSliceByteOffset,i.rgbSliceByteLength+i.alphaSliceByteLength)):(n=new Uint8Array(g,T+B,c),B+=c);const m={data:null,width:r,height:a},w=u.transcode(d,l,t,r,a,h,e,i,n).then((e=>(m.data=e,e))).catch((e=>(y.errors=y.errors??"",y.errors+=e+"\n"+e.stack+"\n",null)));_.push(w),f.push(m)}}return Promise.all(_).then((()=>y))}}l.RegisterTranscoder(m),l.RegisterTranscoder(u),l.RegisterTranscoder(f),l.RegisterTranscoder(_),l.RegisterTranscoder(y);const M=void 0!==e.g?e.g:"undefined"!=typeof window?window:void 0;void 0!==M&&(M.KTX2DECODER=S);const R=n;return t.default})()));
2
2
  //# sourceMappingURL=babylon.ktx2Decoder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"babylon.ktx2Decoder.js","mappings":"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","sources":["webpack://KTX2DECODER/webpack/universalModuleDefinition","webpack://KTX2DECODER/webpack/bootstrap","webpack://KTX2DECODER/webpack/runtime/define property getters","webpack://KTX2DECODER/webpack/runtime/global","webpack://KTX2DECODER/webpack/runtime/hasOwnProperty shorthand","webpack://KTX2DECODER/webpack/runtime/make namespace object","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/transcoder.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/ktx2FileReader.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/Misc/dataReader.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/wasmMemoryManager.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/transcoderManager.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/Transcoders/liteTranscoder.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/Transcoders/liteTranscoder_UASTC_ASTC.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/Transcoders/liteTranscoder_UASTC_BC7.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/Transcoders/liteTranscoder_UASTC_RGBA_UNORM.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/Transcoders/liteTranscoder_UASTC_RGBA_SRGB.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/Transcoders/mscTranscoder.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/zstddec.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/transcodeDecisionTree.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/ktx2Decoder.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/legacy/legacy.ts","webpack://KTX2DECODER/./src/index.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"babylonjs-ktx2decoder\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"babylonjs-ktx2decoder\"] = factory();\n\telse\n\t\troot[\"KTX2DECODER\"] = factory();\n})((typeof self !== \"undefined\" ? self : typeof global !== \"undefined\" ? global : this), () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { WASMMemoryManager } from \"./wasmMemoryManager\";\r\nimport type { KTX2FileReader, IKTX2_ImageDesc } from \"./ktx2FileReader\";\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport enum sourceTextureFormat {\r\n ETC1S,\r\n UASTC4x4,\r\n}\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport enum transcodeTarget {\r\n ASTC_4x4_RGBA,\r\n BC7_RGBA,\r\n BC3_RGBA,\r\n BC1_RGB,\r\n PVRTC1_4_RGBA,\r\n PVRTC1_4_RGB,\r\n ETC2_RGBA,\r\n ETC1_RGB,\r\n RGBA32,\r\n}\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport class Transcoder {\r\n public static CanTranscode(src: sourceTextureFormat, dst: transcodeTarget, isInGammaSpace: boolean): boolean {\r\n return false;\r\n }\r\n\r\n public static Name = \"Transcoder\";\r\n\r\n public getName(): string {\r\n return Transcoder.Name;\r\n }\r\n\r\n public initialize(): void {}\r\n\r\n public needMemoryManager(): boolean {\r\n return false;\r\n }\r\n\r\n public setMemoryManager(memoryMgr: WASMMemoryManager): void {}\r\n\r\n public transcode(\r\n src: sourceTextureFormat,\r\n dst: transcodeTarget,\r\n level: number,\r\n width: number,\r\n height: number,\r\n uncompressedByteLength: number,\r\n ktx2Reader: KTX2FileReader,\r\n imageDesc: IKTX2_ImageDesc | null,\r\n encodedData: Uint8Array\r\n ): Promise<Uint8Array | null> {\r\n return Promise.resolve(null);\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { DataReader } from \"./Misc/dataReader\";\r\nimport { sourceTextureFormat } from \"./transcoder\";\r\n\r\n/** @hidden */\r\nexport enum SupercompressionScheme {\r\n None = 0,\r\n BasisLZ = 1,\r\n ZStandard = 2,\r\n ZLib = 3,\r\n}\r\n\r\nconst enum DFDModel {\r\n ETC1S = 163,\r\n UASTC = 166,\r\n}\r\n\r\nconst enum DFDChannel_ETC1S {\r\n RGB = 0,\r\n RRR = 3,\r\n GGG = 4,\r\n AAA = 15,\r\n}\r\n\r\nconst enum DFDChannel_UASTC {\r\n RGB = 0,\r\n RGBA = 3,\r\n RRR = 4,\r\n RRRG = 5,\r\n}\r\n\r\nconst enum DFDTransferFunction {\r\n linear = 1,\r\n sRGB = 2,\r\n}\r\n\r\n/** @hidden */\r\nexport interface IKTX2_Header {\r\n vkFormat: number;\r\n typeSize: number;\r\n pixelWidth: number;\r\n pixelHeight: number;\r\n pixelDepth: number;\r\n layerCount: number;\r\n faceCount: number;\r\n levelCount: number;\r\n supercompressionScheme: number;\r\n dfdByteOffset: number;\r\n dfdByteLength: number;\r\n kvdByteOffset: number;\r\n kvdByteLength: number;\r\n sgdByteOffset: number;\r\n sgdByteLength: number;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IKTX2_Level {\r\n byteOffset: number;\r\n byteLength: number;\r\n uncompressedByteLength: number;\r\n}\r\n\r\ninterface IKTX2_Sample {\r\n bitOffset: number;\r\n bitLength: number;\r\n channelType: number;\r\n channelFlags: number;\r\n samplePosition: number[];\r\n sampleLower: number;\r\n sampleUpper: number;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IKTX2_DFD {\r\n vendorId: number;\r\n descriptorType: number;\r\n versionNumber: number;\r\n descriptorBlockSize: number;\r\n colorModel: number;\r\n colorPrimaries: number;\r\n transferFunction: number;\r\n flags: number;\r\n texelBlockDimension: {\r\n x: number;\r\n y: number;\r\n z: number;\r\n w: number;\r\n };\r\n bytesPlane: Array<number>;\r\n numSamples: number;\r\n samples: Array<IKTX2_Sample>;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IKTX2_ImageDesc {\r\n imageFlags: number;\r\n rgbSliceByteOffset: number;\r\n rgbSliceByteLength: number;\r\n alphaSliceByteOffset: number;\r\n alphaSliceByteLength: number;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IKTX2_SupercompressionGlobalData {\r\n endpointCount?: number;\r\n selectorCount?: number;\r\n endpointsByteLength?: number;\r\n selectorsByteLength?: number;\r\n tablesByteLength?: number;\r\n extendedByteLength?: number;\r\n imageDescs?: Array<IKTX2_ImageDesc>;\r\n endpointsData?: Uint8Array;\r\n selectorsData?: Uint8Array;\r\n tablesData?: Uint8Array;\r\n extendedData?: Uint8Array;\r\n}\r\n\r\nexport class KTX2FileReader {\r\n private _data: Uint8Array;\r\n private _header: IKTX2_Header;\r\n private _levels: Array<IKTX2_Level>;\r\n private _dfdBlock: IKTX2_DFD;\r\n private _supercompressionGlobalData: IKTX2_SupercompressionGlobalData;\r\n\r\n /**\r\n * Will throw an exception if the file can't be parsed\r\n * @param data\r\n */\r\n constructor(data: Uint8Array) {\r\n this._data = data;\r\n }\r\n\r\n public get data(): Uint8Array {\r\n return this._data;\r\n }\r\n\r\n public get header(): IKTX2_Header {\r\n return this._header;\r\n }\r\n\r\n public get levels(): Array<IKTX2_Level> {\r\n return this._levels;\r\n }\r\n\r\n public get dfdBlock(): IKTX2_DFD {\r\n return this._dfdBlock;\r\n }\r\n\r\n public get supercompressionGlobalData(): IKTX2_SupercompressionGlobalData {\r\n return this._supercompressionGlobalData;\r\n }\r\n\r\n public isValid() {\r\n return KTX2FileReader.IsValid(this._data);\r\n }\r\n\r\n public parse() {\r\n let offsetInFile = 12; // skip the header\r\n\r\n /**\r\n * Get the header\r\n */\r\n const hdrReader = new DataReader(this._data, offsetInFile, 17 * 4);\r\n\r\n const header = (this._header = {\r\n vkFormat: hdrReader.readUint32(),\r\n typeSize: hdrReader.readUint32(),\r\n pixelWidth: hdrReader.readUint32(),\r\n pixelHeight: hdrReader.readUint32(),\r\n pixelDepth: hdrReader.readUint32(),\r\n layerCount: hdrReader.readUint32(),\r\n faceCount: hdrReader.readUint32(),\r\n levelCount: hdrReader.readUint32(),\r\n supercompressionScheme: hdrReader.readUint32(),\r\n\r\n dfdByteOffset: hdrReader.readUint32(),\r\n dfdByteLength: hdrReader.readUint32(),\r\n kvdByteOffset: hdrReader.readUint32(),\r\n kvdByteLength: hdrReader.readUint32(),\r\n sgdByteOffset: hdrReader.readUint64(),\r\n sgdByteLength: hdrReader.readUint64(),\r\n });\r\n\r\n if (header.pixelDepth > 0) {\r\n throw new Error(`Failed to parse KTX2 file - Only 2D textures are currently supported.`);\r\n }\r\n\r\n if (header.layerCount > 1) {\r\n throw new Error(`Failed to parse KTX2 file - Array textures are not currently supported.`);\r\n }\r\n\r\n if (header.faceCount > 1) {\r\n throw new Error(`Failed to parse KTX2 file - Cube textures are not currently supported.`);\r\n }\r\n\r\n offsetInFile += hdrReader.byteOffset;\r\n\r\n /**\r\n * Get the levels\r\n */\r\n let levelCount = Math.max(1, header.levelCount);\r\n\r\n const levelReader = new DataReader(this._data, offsetInFile, levelCount * 3 * (2 * 4));\r\n\r\n const levels: Array<IKTX2_Level> = (this._levels = []);\r\n\r\n while (levelCount--) {\r\n levels.push({\r\n byteOffset: levelReader.readUint64(),\r\n byteLength: levelReader.readUint64(),\r\n uncompressedByteLength: levelReader.readUint64(),\r\n });\r\n }\r\n\r\n offsetInFile += levelReader.byteOffset;\r\n\r\n /**\r\n * Get the data format descriptor (DFD) blocks\r\n */\r\n const dfdReader = new DataReader(this._data, header.dfdByteOffset, header.dfdByteLength);\r\n\r\n const dfdBlock = (this._dfdBlock = {\r\n vendorId: dfdReader.skipBytes(4 /* skip totalSize */).readUint16(),\r\n descriptorType: dfdReader.readUint16(),\r\n versionNumber: dfdReader.readUint16(),\r\n descriptorBlockSize: dfdReader.readUint16(),\r\n colorModel: dfdReader.readUint8(),\r\n colorPrimaries: dfdReader.readUint8(),\r\n transferFunction: dfdReader.readUint8(),\r\n flags: dfdReader.readUint8(),\r\n texelBlockDimension: {\r\n x: dfdReader.readUint8() + 1,\r\n y: dfdReader.readUint8() + 1,\r\n z: dfdReader.readUint8() + 1,\r\n w: dfdReader.readUint8() + 1,\r\n },\r\n bytesPlane: [\r\n dfdReader.readUint8() /* bytesPlane0 */,\r\n dfdReader.readUint8() /* bytesPlane1 */,\r\n dfdReader.readUint8() /* bytesPlane2 */,\r\n dfdReader.readUint8() /* bytesPlane3 */,\r\n dfdReader.readUint8() /* bytesPlane4 */,\r\n dfdReader.readUint8() /* bytesPlane5 */,\r\n dfdReader.readUint8() /* bytesPlane6 */,\r\n dfdReader.readUint8() /* bytesPlane7 */,\r\n ],\r\n numSamples: 0,\r\n samples: new Array<IKTX2_Sample>(),\r\n });\r\n\r\n dfdBlock.numSamples = (dfdBlock.descriptorBlockSize - 24) / 16;\r\n\r\n for (let i = 0; i < dfdBlock.numSamples; i++) {\r\n const sample = {\r\n bitOffset: dfdReader.readUint16(),\r\n bitLength: dfdReader.readUint8() + 1,\r\n channelType: dfdReader.readUint8(),\r\n channelFlags: 0,\r\n samplePosition: [\r\n dfdReader.readUint8() /* samplePosition0 */,\r\n dfdReader.readUint8() /* samplePosition1 */,\r\n dfdReader.readUint8() /* samplePosition2 */,\r\n dfdReader.readUint8() /* samplePosition3 */,\r\n ],\r\n sampleLower: dfdReader.readUint32(),\r\n sampleUpper: dfdReader.readUint32(),\r\n };\r\n\r\n sample.channelFlags = (sample.channelType & 0xf0) >> 4;\r\n sample.channelType = sample.channelType & 0x0f;\r\n\r\n dfdBlock.samples.push(sample);\r\n }\r\n\r\n /**\r\n * Get the Supercompression Global Data (sgd)\r\n */\r\n const sgd: IKTX2_SupercompressionGlobalData = (this._supercompressionGlobalData = {});\r\n\r\n if (header.sgdByteLength > 0) {\r\n const sgdReader = new DataReader(this._data, header.sgdByteOffset, header.sgdByteLength);\r\n\r\n sgd.endpointCount = sgdReader.readUint16();\r\n sgd.selectorCount = sgdReader.readUint16();\r\n sgd.endpointsByteLength = sgdReader.readUint32();\r\n sgd.selectorsByteLength = sgdReader.readUint32();\r\n sgd.tablesByteLength = sgdReader.readUint32();\r\n sgd.extendedByteLength = sgdReader.readUint32();\r\n sgd.imageDescs = [];\r\n\r\n const imageCount = this._getImageCount();\r\n\r\n for (let i = 0; i < imageCount; i++) {\r\n sgd.imageDescs.push({\r\n imageFlags: sgdReader.readUint32(),\r\n rgbSliceByteOffset: sgdReader.readUint32(),\r\n rgbSliceByteLength: sgdReader.readUint32(),\r\n alphaSliceByteOffset: sgdReader.readUint32(),\r\n alphaSliceByteLength: sgdReader.readUint32(),\r\n });\r\n }\r\n\r\n const endpointsByteOffset = header.sgdByteOffset + sgdReader.byteOffset;\r\n const selectorsByteOffset = endpointsByteOffset + sgd.endpointsByteLength;\r\n const tablesByteOffset = selectorsByteOffset + sgd.selectorsByteLength;\r\n const extendedByteOffset = tablesByteOffset + sgd.tablesByteLength;\r\n\r\n sgd.endpointsData = new Uint8Array(this._data.buffer, this._data.byteOffset + endpointsByteOffset, sgd.endpointsByteLength);\r\n sgd.selectorsData = new Uint8Array(this._data.buffer, this._data.byteOffset + selectorsByteOffset, sgd.selectorsByteLength);\r\n sgd.tablesData = new Uint8Array(this._data.buffer, this._data.byteOffset + tablesByteOffset, sgd.tablesByteLength);\r\n sgd.extendedData = new Uint8Array(this._data.buffer, this._data.byteOffset + extendedByteOffset, sgd.extendedByteLength);\r\n }\r\n }\r\n\r\n private _getImageCount(): number {\r\n let layerPixelDepth = Math.max(this._header.pixelDepth, 1);\r\n for (let i = 1; i < this._header.levelCount; i++) {\r\n layerPixelDepth += Math.max(this._header.pixelDepth >> i, 1);\r\n }\r\n\r\n return Math.max(this._header.layerCount, 1) * this._header.faceCount * layerPixelDepth;\r\n }\r\n\r\n public get textureFormat(): sourceTextureFormat {\r\n return this._dfdBlock.colorModel === DFDModel.UASTC ? sourceTextureFormat.UASTC4x4 : sourceTextureFormat.ETC1S;\r\n }\r\n\r\n public get hasAlpha(): boolean {\r\n const tformat = this.textureFormat;\r\n\r\n switch (tformat) {\r\n case sourceTextureFormat.ETC1S:\r\n return (\r\n this._dfdBlock.numSamples === 2 &&\r\n (this._dfdBlock.samples[0].channelType === DFDChannel_ETC1S.AAA || this._dfdBlock.samples[1].channelType === DFDChannel_ETC1S.AAA)\r\n );\r\n\r\n case sourceTextureFormat.UASTC4x4:\r\n return this._dfdBlock.samples[0].channelType === DFDChannel_UASTC.RGBA;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public get needZSTDDecoder(): boolean {\r\n return this._header.supercompressionScheme === SupercompressionScheme.ZStandard;\r\n }\r\n\r\n public get isInGammaSpace(): boolean {\r\n return this._dfdBlock.transferFunction === DFDTransferFunction.sRGB;\r\n }\r\n\r\n public static IsValid(data: ArrayBufferView): boolean {\r\n if (data.byteLength >= 12) {\r\n // '«', 'K', 'T', 'X', ' ', '2', '0', '»', '\\r', '\\n', '\\x1A', '\\n'\r\n const identifier = new Uint8Array(data.buffer, data.byteOffset, 12);\r\n if (\r\n identifier[0] === 0xab &&\r\n identifier[1] === 0x4b &&\r\n identifier[2] === 0x54 &&\r\n identifier[3] === 0x58 &&\r\n identifier[4] === 0x20 &&\r\n identifier[5] === 0x32 &&\r\n identifier[6] === 0x30 &&\r\n identifier[7] === 0xbb &&\r\n identifier[8] === 0x0d &&\r\n identifier[9] === 0x0a &&\r\n identifier[10] === 0x1a &&\r\n identifier[11] === 0x0a\r\n ) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n","/**\r\n * Utility class for reading from a data buffer\r\n */\r\nexport class DataReader {\r\n /**\r\n * The current byte offset from the beginning of the data buffer.\r\n */\r\n public get byteOffset() {\r\n return this._dataByteOffset;\r\n }\r\n\r\n private _dataView: DataView;\r\n private _dataByteOffset: number;\r\n\r\n /**\r\n * Constructor\r\n * @param buffer The buffer to set\r\n * @param byteOffset The starting offset in the buffer\r\n * @param byteLength The byte length of the buffer\r\n */\r\n constructor(buffer: ArrayBuffer | ArrayBufferView, byteOffset?: number, byteLength?: number) {\r\n if ((buffer as ArrayBufferView).buffer) {\r\n this._dataView = new DataView(\r\n (buffer as ArrayBufferView).buffer,\r\n (buffer as ArrayBufferView).byteOffset + (byteOffset ?? 0),\r\n byteLength ?? (buffer as ArrayBufferView).byteLength\r\n );\r\n } else {\r\n this._dataView = new DataView(buffer as ArrayBuffer, byteOffset ?? 0, byteLength ?? (buffer as ArrayBuffer).byteLength);\r\n }\r\n\r\n this._dataByteOffset = 0;\r\n }\r\n\r\n /**\r\n * Read a unsigned 8-bit integer from the currently loaded data range.\r\n * @returns The 8-bit integer read\r\n */\r\n public readUint8(): number {\r\n const value = this._dataView.getUint8(this._dataByteOffset);\r\n this._dataByteOffset += 1;\r\n return value;\r\n }\r\n\r\n /**\r\n * Read a signed 8-bit integer from the currently loaded data range.\r\n * @returns The 8-bit integer read\r\n */\r\n public readInt8(): number {\r\n const value = this._dataView.getInt8(this._dataByteOffset);\r\n this._dataByteOffset += 1;\r\n return value;\r\n }\r\n\r\n /**\r\n * Read a unsigned 16-bit integer from the currently loaded data range.\r\n * @returns The 16-bit integer read\r\n */\r\n public readUint16(): number {\r\n const value = this._dataView.getUint16(this._dataByteOffset, true);\r\n this._dataByteOffset += 2;\r\n return value;\r\n }\r\n\r\n /**\r\n * Read a signed 16-bit integer from the currently loaded data range.\r\n * @returns The 16-bit integer read\r\n */\r\n public readInt16(): number {\r\n const value = this._dataView.getInt16(this._dataByteOffset, true);\r\n this._dataByteOffset += 2;\r\n return value;\r\n }\r\n\r\n /**\r\n * Read a unsigned 32-bit integer from the currently loaded data range.\r\n * @returns The 32-bit integer read\r\n */\r\n public readUint32(): number {\r\n const value = this._dataView.getUint32(this._dataByteOffset, true);\r\n this._dataByteOffset += 4;\r\n return value;\r\n }\r\n\r\n /**\r\n * Read a signed 32-bit integer from the currently loaded data range.\r\n * @returns The 32-bit integer read\r\n */\r\n public readInt32(): number {\r\n const value = this._dataView.getInt32(this._dataByteOffset, true);\r\n this._dataByteOffset += 4;\r\n return value;\r\n }\r\n\r\n /**\r\n * Read a unsigned 32-bit integer from the currently loaded data range.\r\n * @returns The 32-bit integer read\r\n */\r\n public readUint64(): number {\r\n // split 64-bit number into two 32-bit (4-byte) parts\r\n const left = this._dataView.getUint32(this._dataByteOffset, true);\r\n const right = this._dataView.getUint32(this._dataByteOffset + 4, true);\r\n\r\n // combine the two 32-bit values\r\n const combined = left + 2 ** 32 * right; // That was weird..Keeping it for posterity: true ? left + 2 ** 32 * right : 2 ** 32 * left + right;\r\n\r\n /*if (!Number.isSafeInteger(combined)) {\r\n console.warn('DataReader: ' + combined + ' exceeds MAX_SAFE_INTEGER. Precision may be lost.');\r\n }*/\r\n\r\n this._dataByteOffset += 8;\r\n return combined;\r\n }\r\n\r\n /**\r\n * Read a byte array from the currently loaded data range.\r\n * @param byteLength The byte length to read\r\n * @returns The byte array read\r\n */\r\n public readUint8Array(byteLength: number): Uint8Array {\r\n const value = new Uint8Array(this._dataView.buffer, this._dataView.byteOffset + this._dataByteOffset, byteLength);\r\n this._dataByteOffset += byteLength;\r\n return value;\r\n }\r\n\r\n /**\r\n * Skips the given byte length the currently loaded data range.\r\n * @param byteLength The byte length to skip\r\n * @returns This instance\r\n */\r\n public skipBytes(byteLength: number) {\r\n this._dataByteOffset += byteLength;\r\n return this;\r\n }\r\n}\r\n","declare function postMessage(message: any, transfer?: any[]): void;\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport class WASMMemoryManager {\r\n public static LoadBinariesFromCurrentThread = true;\r\n public static InitialMemoryPages = (1 * 1024 * 1024) >> 16; // 1 Mbytes\r\n\r\n private static _RequestId = 0;\r\n\r\n public static LoadWASM(path: string): Promise<ArrayBuffer> {\r\n if (this.LoadBinariesFromCurrentThread) {\r\n return new Promise((resolve, reject) => {\r\n fetch(path)\r\n .then((response) => {\r\n if (response.ok) {\r\n return response.arrayBuffer();\r\n }\r\n throw new Error(`Could not fetch the wasm component from \"${path}\": ${response.status} - ${response.statusText}`);\r\n })\r\n .then((wasmBinary) => resolve(wasmBinary))\r\n .catch((reason) => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n\r\n const id = this._RequestId++;\r\n\r\n return new Promise((resolve) => {\r\n const wasmLoadedHandler = (msg: any) => {\r\n if (msg.data.action === \"wasmLoaded\" && msg.data.id === id) {\r\n self.removeEventListener(\"message\", wasmLoadedHandler);\r\n resolve(msg.data.wasmBinary);\r\n }\r\n };\r\n\r\n self.addEventListener(\"message\", wasmLoadedHandler);\r\n\r\n postMessage({ action: \"loadWASM\", path: path, id: id });\r\n });\r\n }\r\n\r\n private _memory: WebAssembly.Memory;\r\n private _numPages: number;\r\n private _memoryView: Uint8Array;\r\n private _memoryViewByteLength: number;\r\n private _memoryViewOffset: number;\r\n\r\n constructor(initialMemoryPages: number = WASMMemoryManager.InitialMemoryPages) {\r\n this._numPages = initialMemoryPages;\r\n\r\n this._memory = new WebAssembly.Memory({ initial: this._numPages });\r\n this._memoryViewByteLength = this._numPages << 16;\r\n this._memoryViewOffset = 0;\r\n this._memoryView = new Uint8Array(this._memory.buffer, this._memoryViewOffset, this._memoryViewByteLength);\r\n }\r\n\r\n public get wasmMemory(): WebAssembly.Memory {\r\n return this._memory;\r\n }\r\n\r\n public getMemoryView(numPages: number, offset: number = 0, byteLength?: number): Uint8Array {\r\n byteLength = byteLength ?? numPages << 16;\r\n\r\n if (this._numPages < numPages) {\r\n this._memory.grow(numPages - this._numPages);\r\n this._numPages = numPages;\r\n this._memoryView = new Uint8Array(this._memory.buffer, offset, byteLength);\r\n this._memoryViewByteLength = byteLength;\r\n this._memoryViewOffset = offset;\r\n } else {\r\n this._memoryView = new Uint8Array(this._memory.buffer, offset, byteLength);\r\n this._memoryViewByteLength = byteLength;\r\n this._memoryViewOffset = offset;\r\n }\r\n\r\n return this._memoryView;\r\n }\r\n}\r\n","import type { Transcoder } from \"./transcoder\";\r\nimport { transcodeTarget, sourceTextureFormat } from \"./transcoder\";\r\nimport { WASMMemoryManager } from \"./wasmMemoryManager\";\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport class TranscoderManager {\r\n public static _Transcoders: Array<typeof Transcoder> = [];\r\n\r\n public static RegisterTranscoder(transcoder: typeof Transcoder) {\r\n TranscoderManager._Transcoders.push(transcoder);\r\n }\r\n\r\n private static _TranscoderInstances: { [key: string]: Array<Transcoder> } = {};\r\n\r\n private _wasmMemoryManager: WASMMemoryManager;\r\n\r\n public findTranscoder(src: sourceTextureFormat, dst: transcodeTarget, isInGammaSpace: boolean, bypass?: string[]): Transcoder | null {\r\n let transcoder: Transcoder | null = null;\r\n\r\n const key = sourceTextureFormat[src] + \"_\" + transcodeTarget[dst];\r\n\r\n for (let i = 0; i < TranscoderManager._Transcoders.length; ++i) {\r\n if (TranscoderManager._Transcoders[i].CanTranscode(src, dst, isInGammaSpace) && (!bypass || bypass.indexOf(TranscoderManager._Transcoders[i].Name) < 0)) {\r\n transcoder = this._getExistingTranscoder(key, TranscoderManager._Transcoders[i].Name);\r\n if (!transcoder) {\r\n transcoder = new TranscoderManager._Transcoders[i]();\r\n transcoder!.initialize();\r\n if (transcoder!.needMemoryManager()) {\r\n if (!this._wasmMemoryManager) {\r\n this._wasmMemoryManager = new WASMMemoryManager();\r\n }\r\n transcoder!.setMemoryManager(this._wasmMemoryManager);\r\n }\r\n if (!TranscoderManager._TranscoderInstances[key]) {\r\n TranscoderManager._TranscoderInstances[key] = [];\r\n }\r\n TranscoderManager._TranscoderInstances[key].push(transcoder);\r\n }\r\n break;\r\n }\r\n }\r\n\r\n return transcoder;\r\n }\r\n\r\n private _getExistingTranscoder(key: string, transcoderName: string): Transcoder | null {\r\n const transcoders = TranscoderManager._TranscoderInstances[key];\r\n\r\n if (transcoders) {\r\n for (let t = 0; t < transcoders.length; ++t) {\r\n const transcoder = transcoders[t];\r\n if (transcoderName === transcoder.getName()) {\r\n return transcoder;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n","import type { sourceTextureFormat, transcodeTarget } from \"../transcoder\";\r\nimport { Transcoder } from \"../transcoder\";\r\nimport { WASMMemoryManager } from \"../wasmMemoryManager\";\r\nimport type { KTX2FileReader, IKTX2_ImageDesc } from \"../ktx2FileReader\";\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport class LiteTranscoder extends Transcoder {\r\n private _modulePath: string;\r\n private _modulePromise: Promise<{ module: any }>;\r\n private _memoryManager: WASMMemoryManager;\r\n protected _transcodeInPlace: boolean;\r\n\r\n protected _loadModule(): Promise<{ module: any }> {\r\n if (this._modulePromise) {\r\n return this._modulePromise;\r\n }\r\n\r\n this._modulePromise = WASMMemoryManager.LoadWASM(this._modulePath).then((wasmBinary) => {\r\n return new Promise((resolve) => {\r\n WebAssembly.instantiate(wasmBinary as ArrayBuffer, { env: { memory: this._memoryManager.wasmMemory } }).then((moduleWrapper) => {\r\n resolve({ module: moduleWrapper.instance.exports });\r\n });\r\n });\r\n });\r\n\r\n return this._modulePromise;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n protected get memoryManager(): WASMMemoryManager {\r\n return this._memoryManager;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n protected setModulePath(modulePath: string): void {\r\n this._modulePath = modulePath;\r\n }\r\n\r\n public initialize(): void {\r\n this._transcodeInPlace = true;\r\n }\r\n\r\n public needMemoryManager(): boolean {\r\n return true;\r\n }\r\n\r\n public setMemoryManager(memoryMgr: WASMMemoryManager): void {\r\n this._memoryManager = memoryMgr;\r\n }\r\n\r\n public transcode(\r\n src: sourceTextureFormat,\r\n dst: transcodeTarget,\r\n level: number,\r\n width: number,\r\n height: number,\r\n uncompressedByteLength: number,\r\n ktx2Reader: KTX2FileReader,\r\n imageDesc: IKTX2_ImageDesc | null,\r\n encodedData: Uint8Array\r\n ): Promise<Uint8Array | null> {\r\n return this._loadModule().then((moduleWrapper: any) => {\r\n const transcoder: any = moduleWrapper.module;\r\n const [textureView, uncompressedTextureView, nBlocks] = this._prepareTranscoding(width, height, uncompressedByteLength, encodedData);\r\n\r\n return transcoder.transcode(nBlocks) === 0 ? (this._transcodeInPlace ? textureView.slice() : uncompressedTextureView!.slice()) : null;\r\n });\r\n }\r\n\r\n protected _prepareTranscoding(\r\n width: number,\r\n height: number,\r\n uncompressedByteLength: number,\r\n encodedData: Uint8Array,\r\n forceRGBA = false\r\n ): [Uint8Array, Uint8Array | null, number] {\r\n const nBlocks = ((width + 3) >> 2) * ((height + 3) >> 2);\r\n\r\n if (forceRGBA) {\r\n uncompressedByteLength = width * ((height + 3) >> 2) * 4 * 4;\r\n }\r\n\r\n const texMemoryPages = ((nBlocks * 16 + 65535 + (this._transcodeInPlace ? 0 : uncompressedByteLength)) >> 16) + 1;\r\n\r\n const textureView = this.memoryManager.getMemoryView(texMemoryPages, 65536, nBlocks * 16);\r\n\r\n const uncompressedTextureView = this._transcodeInPlace\r\n ? null\r\n : new Uint8Array(this._memoryManager.wasmMemory.buffer, 65536 + nBlocks * 16, forceRGBA ? width * height * 4 : uncompressedByteLength);\r\n\r\n textureView.set(encodedData);\r\n\r\n return [textureView, uncompressedTextureView, nBlocks];\r\n }\r\n}\r\n","import { sourceTextureFormat, transcodeTarget } from \"../transcoder\";\r\nimport { LiteTranscoder } from \"./liteTranscoder\";\r\n\r\n/**\r\n * @hidden\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class LiteTranscoder_UASTC_ASTC extends LiteTranscoder {\r\n /**\r\n * URL to use when loading the wasm module for the transcoder\r\n */\r\n public static WasmModuleURL = \"https://preview.babylonjs.com/ktx2Transcoders/uastc_astc.wasm\";\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public static CanTranscode(src: sourceTextureFormat, dst: transcodeTarget, isInGammaSpace: boolean): boolean {\r\n return src === sourceTextureFormat.UASTC4x4 && dst === transcodeTarget.ASTC_4x4_RGBA;\r\n }\r\n\r\n public static Name = \"UniversalTranscoder_UASTC_ASTC\";\r\n\r\n public getName(): string {\r\n return LiteTranscoder_UASTC_ASTC.Name;\r\n }\r\n\r\n public initialize(): void {\r\n super.initialize();\r\n this.setModulePath(LiteTranscoder_UASTC_ASTC.WasmModuleURL);\r\n }\r\n}\r\n","import { sourceTextureFormat, transcodeTarget } from \"../transcoder\";\r\nimport { LiteTranscoder } from \"./liteTranscoder\";\r\n\r\n/**\r\n * @hidden\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class LiteTranscoder_UASTC_BC7 extends LiteTranscoder {\r\n /**\r\n * URL to use when loading the wasm module for the transcoder\r\n */\r\n public static WasmModuleURL = \"https://preview.babylonjs.com/ktx2Transcoders/uastc_bc7.wasm\";\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public static CanTranscode(src: sourceTextureFormat, dst: transcodeTarget, isInGammaSpace: boolean): boolean {\r\n return src === sourceTextureFormat.UASTC4x4 && dst === transcodeTarget.BC7_RGBA;\r\n }\r\n\r\n public static Name = \"UniversalTranscoder_UASTC_BC7\";\r\n\r\n public getName(): string {\r\n return LiteTranscoder_UASTC_BC7.Name;\r\n }\r\n\r\n public initialize(): void {\r\n super.initialize();\r\n this.setModulePath(LiteTranscoder_UASTC_BC7.WasmModuleURL);\r\n }\r\n}\r\n","import { sourceTextureFormat, transcodeTarget } from \"../transcoder\";\r\nimport { LiteTranscoder } from \"./liteTranscoder\";\r\nimport type { KTX2FileReader, IKTX2_ImageDesc } from \"../ktx2FileReader\";\r\n\r\n/**\r\n * @hidden\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class LiteTranscoder_UASTC_RGBA_UNORM extends LiteTranscoder {\r\n /**\r\n * URL to use when loading the wasm module for the transcoder (unorm)\r\n */\r\n public static WasmModuleURL = \"https://preview.babylonjs.com/ktx2Transcoders/uastc_rgba32_unorm.wasm\";\r\n\r\n public static CanTranscode(src: sourceTextureFormat, dst: transcodeTarget, isInGammaSpace: boolean): boolean {\r\n return src === sourceTextureFormat.UASTC4x4 && dst === transcodeTarget.RGBA32 && !isInGammaSpace;\r\n }\r\n\r\n public static Name = \"UniversalTranscoder_UASTC_RGBA_UNORM\";\r\n\r\n public getName(): string {\r\n return LiteTranscoder_UASTC_RGBA_UNORM.Name;\r\n }\r\n\r\n public initialize(): void {\r\n super.initialize();\r\n this._transcodeInPlace = false;\r\n this.setModulePath(LiteTranscoder_UASTC_RGBA_UNORM.WasmModuleURL);\r\n }\r\n\r\n public transcode(\r\n src: sourceTextureFormat,\r\n dst: transcodeTarget,\r\n level: number,\r\n width: number,\r\n height: number,\r\n uncompressedByteLength: number,\r\n ktx2Reader: KTX2FileReader,\r\n imageDesc: IKTX2_ImageDesc | null,\r\n encodedData: Uint8Array\r\n ): Promise<Uint8Array | null> {\r\n return this._loadModule().then((moduleWrapper: any) => {\r\n const transcoder: any = moduleWrapper.module;\r\n const [, uncompressedTextureView] = this._prepareTranscoding(width, height, uncompressedByteLength, encodedData, true);\r\n\r\n return transcoder.decodeRGBA32(width, height) === 0 ? uncompressedTextureView!.slice() : null;\r\n });\r\n }\r\n}\r\n","import { sourceTextureFormat, transcodeTarget } from \"../transcoder\";\r\nimport { LiteTranscoder } from \"./liteTranscoder\";\r\nimport type { KTX2FileReader, IKTX2_ImageDesc } from \"../ktx2FileReader\";\r\n\r\n/**\r\n * @hidden\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class LiteTranscoder_UASTC_RGBA_SRGB extends LiteTranscoder {\r\n /**\r\n * URL to use when loading the wasm module for the transcoder (srgb)\r\n */\r\n public static WasmModuleURL = \"https://preview.babylonjs.com/ktx2Transcoders/uastc_rgba32_srgb.wasm\";\r\n\r\n public static CanTranscode(src: sourceTextureFormat, dst: transcodeTarget, isInGammaSpace: boolean): boolean {\r\n return src === sourceTextureFormat.UASTC4x4 && dst === transcodeTarget.RGBA32 && isInGammaSpace;\r\n }\r\n\r\n public static Name = \"UniversalTranscoder_UASTC_RGBA_SRGB\";\r\n\r\n public getName(): string {\r\n return LiteTranscoder_UASTC_RGBA_SRGB.Name;\r\n }\r\n\r\n public initialize(): void {\r\n super.initialize();\r\n this._transcodeInPlace = false;\r\n this.setModulePath(LiteTranscoder_UASTC_RGBA_SRGB.WasmModuleURL);\r\n }\r\n\r\n public transcode(\r\n src: sourceTextureFormat,\r\n dst: transcodeTarget,\r\n level: number,\r\n width: number,\r\n height: number,\r\n uncompressedByteLength: number,\r\n ktx2Reader: KTX2FileReader,\r\n imageDesc: IKTX2_ImageDesc | null,\r\n encodedData: Uint8Array\r\n ): Promise<Uint8Array | null> {\r\n return this._loadModule().then((moduleWrapper: any) => {\r\n const transcoder: any = moduleWrapper.module;\r\n const [, uncompressedTextureView] = this._prepareTranscoding(width, height, uncompressedByteLength, encodedData, true);\r\n\r\n return transcoder.decodeRGBA32(width, height) === 0 ? uncompressedTextureView!.slice() : null;\r\n });\r\n }\r\n}\r\n","import { Transcoder, sourceTextureFormat, transcodeTarget } from \"../transcoder\";\r\nimport type { KTX2FileReader, IKTX2_ImageDesc } from \"../ktx2FileReader\";\r\nimport { WASMMemoryManager } from \"../wasmMemoryManager\";\r\n\r\ndeclare let MSC_TRANSCODER: any;\r\n\r\ndeclare function importScripts(...urls: string[]): void;\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport class MSCTranscoder extends Transcoder {\r\n /**\r\n * URL to use when loading the MSC transcoder\r\n */\r\n public static JSModuleURL = \"https://preview.babylonjs.com/ktx2Transcoders/msc_basis_transcoder.js\";\r\n /**\r\n * URL to use when loading the wasm module for the transcoder\r\n */\r\n public static WasmModuleURL = \"https://preview.babylonjs.com/ktx2Transcoders/msc_basis_transcoder.wasm\";\r\n\r\n public static UseFromWorkerThread = true;\r\n\r\n public static Name = \"MSCTranscoder\";\r\n\r\n public getName(): string {\r\n return MSCTranscoder.Name;\r\n }\r\n\r\n private _mscBasisTranscoderPromise: Promise<void>;\r\n private _mscBasisModule: any;\r\n\r\n private _getMSCBasisTranscoder(): Promise<void> {\r\n if (this._mscBasisTranscoderPromise) {\r\n return this._mscBasisTranscoderPromise;\r\n }\r\n\r\n this._mscBasisTranscoderPromise = WASMMemoryManager.LoadWASM(MSCTranscoder.WasmModuleURL).then((wasmBinary) => {\r\n if (MSCTranscoder.UseFromWorkerThread) {\r\n importScripts(MSCTranscoder.JSModuleURL);\r\n }\r\n // Worker Number = 0 and MSC_TRANSCODER has not been loaded yet.\r\n else if (typeof MSC_TRANSCODER === \"undefined\") {\r\n return new Promise((resolve, reject) => {\r\n const head = document.getElementsByTagName(\"head\")[0];\r\n const script = document.createElement(\"script\");\r\n script.setAttribute(\"type\", \"text/javascript\");\r\n script.setAttribute(\"src\", MSCTranscoder.JSModuleURL);\r\n\r\n script.onload = () => {\r\n MSC_TRANSCODER({ wasmBinary }).then((basisModule: any) => {\r\n basisModule.initTranscoders();\r\n this._mscBasisModule = basisModule;\r\n resolve();\r\n });\r\n };\r\n\r\n script.onerror = () => {\r\n reject(\"Can not load MSC_TRANSCODER script.\");\r\n };\r\n\r\n head.appendChild(script);\r\n });\r\n }\r\n\r\n return new Promise((resolve) => {\r\n MSC_TRANSCODER({ wasmBinary }).then((basisModule: any) => {\r\n basisModule.initTranscoders();\r\n this._mscBasisModule = basisModule;\r\n resolve();\r\n });\r\n });\r\n });\r\n\r\n return this._mscBasisTranscoderPromise;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public static CanTranscode(src: sourceTextureFormat, dst: transcodeTarget, isInGammaSpace: boolean): boolean {\r\n return true;\r\n }\r\n\r\n public transcode(\r\n src: sourceTextureFormat,\r\n dst: transcodeTarget,\r\n level: number,\r\n width: number,\r\n height: number,\r\n uncompressedByteLength: number,\r\n ktx2Reader: KTX2FileReader,\r\n imageDesc: IKTX2_ImageDesc | null,\r\n encodedData: Uint8Array\r\n ): Promise<Uint8Array | null> {\r\n const isVideo = false;\r\n\r\n return this._getMSCBasisTranscoder().then(() => {\r\n const basisModule = this._mscBasisModule;\r\n\r\n let transcoder: any;\r\n let imageInfo: any;\r\n let result: any;\r\n let textureData: any = null;\r\n\r\n try {\r\n transcoder = src === sourceTextureFormat.UASTC4x4 ? new basisModule.UastcImageTranscoder() : new basisModule.BasisLzEtc1sImageTranscoder();\r\n const texFormat = src === sourceTextureFormat.UASTC4x4 ? basisModule.TextureFormat.UASTC4x4 : basisModule.TextureFormat.ETC1S;\r\n\r\n imageInfo = new basisModule.ImageInfo(texFormat, width, height, level);\r\n\r\n const targetFormat = basisModule.TranscodeTarget[transcodeTarget[dst]]; // works because the labels of the sourceTextureFormat enum are the same as the property names used in TranscodeTarget!\r\n\r\n if (!basisModule.isFormatSupported(targetFormat, texFormat)) {\r\n throw new Error(`MSCTranscoder: Transcoding from \"${sourceTextureFormat[src]}\" to \"${transcodeTarget[dst]}\" not supported by current transcoder build.`);\r\n }\r\n\r\n if (src === sourceTextureFormat.ETC1S) {\r\n const sgd = ktx2Reader.supercompressionGlobalData;\r\n\r\n transcoder.decodePalettes(sgd.endpointCount, sgd.endpointsData, sgd.selectorCount, sgd.selectorsData);\r\n transcoder.decodeTables(sgd.tablesData);\r\n\r\n imageInfo.flags = imageDesc!.imageFlags;\r\n imageInfo.rgbByteOffset = 0;\r\n imageInfo.rgbByteLength = imageDesc!.rgbSliceByteLength;\r\n imageInfo.alphaByteOffset = imageDesc!.alphaSliceByteOffset > 0 ? imageDesc!.rgbSliceByteLength : 0;\r\n imageInfo.alphaByteLength = imageDesc!.alphaSliceByteLength;\r\n\r\n result = transcoder.transcodeImage(targetFormat, encodedData, imageInfo, 0, isVideo);\r\n } else {\r\n imageInfo.flags = 0;\r\n imageInfo.rgbByteOffset = 0;\r\n imageInfo.rgbByteLength = uncompressedByteLength;\r\n imageInfo.alphaByteOffset = 0;\r\n imageInfo.alphaByteLength = 0;\r\n\r\n result = transcoder.transcodeImage(targetFormat, encodedData, imageInfo, 0, ktx2Reader.hasAlpha, isVideo);\r\n }\r\n } finally {\r\n if (transcoder) {\r\n transcoder.delete();\r\n }\r\n\r\n if (imageInfo) {\r\n imageInfo.delete();\r\n }\r\n\r\n if (result && result.transcodedImage) {\r\n textureData = result.transcodedImage.get_typed_memory_view().slice();\r\n result.transcodedImage.delete();\r\n }\r\n }\r\n\r\n return textureData;\r\n });\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/naming-convention */\r\n/**\r\n * From https://github.com/donmccurdy/zstddec by Don McCurdy\r\n */\r\ninterface DecoderExports {\r\n memory: Uint8Array;\r\n\r\n ZSTD_findDecompressedSize: (compressedPtr: number, compressedSize: number) => number;\r\n ZSTD_decompress: (uncompressedPtr: number, uncompressedSize: number, compressedPtr: number, compressedSize: number) => number;\r\n malloc: (ptr: number) => number;\r\n free: (ptr: number) => void;\r\n}\r\n\r\nlet init: Promise<void>;\r\nlet instance: { exports: DecoderExports };\r\nlet heap: Uint8Array;\r\n\r\nconst IMPORT_OBJECT = {\r\n env: {\r\n emscripten_notify_memory_growth: function (): void {\r\n heap = new Uint8Array(instance.exports.memory.buffer);\r\n },\r\n },\r\n};\r\n\r\n/**\r\n * ZSTD (Zstandard) decoder.\r\n */\r\nexport class ZSTDDecoder {\r\n public static WasmModuleURL = \"https://preview.babylonjs.com/zstddec.wasm\";\r\n\r\n init(): Promise<void> {\r\n if (init) {\r\n return init;\r\n }\r\n\r\n if (typeof fetch !== \"undefined\") {\r\n // Web.\r\n\r\n init = fetch(ZSTDDecoder.WasmModuleURL)\r\n .then((response) => {\r\n if (response.ok) {\r\n return response.arrayBuffer();\r\n }\r\n throw new Error(`Could not fetch the wasm component for the Zstandard decompression lib: ${response.status} - ${response.statusText}`);\r\n })\r\n .then((arrayBuffer) => WebAssembly.instantiate(arrayBuffer, IMPORT_OBJECT))\r\n .then(this._init);\r\n } else {\r\n // Node.js.\r\n\r\n init = WebAssembly.instantiateStreaming(fetch(ZSTDDecoder.WasmModuleURL), IMPORT_OBJECT).then(this._init);\r\n }\r\n\r\n return init;\r\n }\r\n\r\n _init(result: WebAssembly.WebAssemblyInstantiatedSource): void {\r\n instance = result.instance as unknown as { exports: DecoderExports };\r\n\r\n IMPORT_OBJECT.env.emscripten_notify_memory_growth(); // initialize heap.\r\n }\r\n\r\n decode(array: Uint8Array, uncompressedSize = 0): Uint8Array {\r\n if (!instance) {\r\n throw new Error(`ZSTDDecoder: Await .init() before decoding.`);\r\n }\r\n\r\n // Write compressed data into WASM memory.\r\n const compressedSize = array.byteLength;\r\n const compressedPtr = instance.exports.malloc(compressedSize);\r\n heap.set(array, compressedPtr);\r\n\r\n // Decompress into WASM memory.\r\n uncompressedSize = uncompressedSize || Number(instance.exports.ZSTD_findDecompressedSize(compressedPtr, compressedSize));\r\n const uncompressedPtr = instance.exports.malloc(uncompressedSize);\r\n const actualSize = instance.exports.ZSTD_decompress(uncompressedPtr, uncompressedSize, compressedPtr, compressedSize);\r\n\r\n // Read decompressed data and free WASM memory.\r\n const dec = heap.slice(uncompressedPtr, uncompressedPtr + actualSize);\r\n instance.exports.free(compressedPtr);\r\n instance.exports.free(uncompressedPtr);\r\n\r\n return dec;\r\n }\r\n}\r\n\r\n/**\r\n * BSD License\r\n *\r\n * For Zstandard software\r\n *\r\n * Copyright (c) 2016-present, Yann Collet, Facebook, Inc. All rights reserved.\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *\r\n * * Redistributions of source code must retain the above copyright notice, this\r\n * list of conditions and the following disclaimer.\r\n *\r\n * * Redistributions in binary form must reproduce the above copyright notice,\r\n * this list of conditions and the following disclaimer in the documentation\r\n * and/or other materials provided with the distribution.\r\n *\r\n * * Neither the name Facebook nor the names of its contributors may be used to\r\n * endorse or promote products derived from this software without specific\r\n * prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\n * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n */\r\n","/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { sourceTextureFormat, transcodeTarget } from \"./transcoder\";\r\n\r\nconst COMPRESSED_RGBA_BPTC_UNORM_EXT = 0x8e8c;\r\nconst COMPRESSED_RGBA_ASTC_4x4_KHR = 0x93b0;\r\nconst COMPRESSED_RGB_S3TC_DXT1_EXT = 0x83f0;\r\nconst COMPRESSED_RGBA_S3TC_DXT5_EXT = 0x83f3;\r\nconst COMPRESSED_RGBA_PVRTC_4BPPV1_IMG = 0x8c02;\r\nconst COMPRESSED_RGB_PVRTC_4BPPV1_IMG = 0x8c00;\r\nconst COMPRESSED_RGBA8_ETC2_EAC = 0x9278;\r\nconst COMPRESSED_RGB8_ETC2 = 0x9274;\r\nconst COMPRESSED_RGB_ETC1_WEBGL = 0x8d64;\r\nconst RGBA8Format = 0x8058;\r\n\r\ninterface ILeaf {\r\n transcodeFormat: number;\r\n engineFormat: number;\r\n roundToMultiple4?: boolean;\r\n}\r\n\r\ninterface INode {\r\n cap?: string;\r\n option?: string;\r\n alpha?: boolean;\r\n needsPowerOfTwo?: boolean;\r\n yes?: INode | ILeaf;\r\n no?: INode | ILeaf;\r\n}\r\n\r\ninterface IDecisionTree {\r\n [textureFormat: string]: INode;\r\n}\r\n\r\nconst DecisionTree: IDecisionTree = {\r\n ETC1S: {\r\n option: \"forceRGBA\",\r\n yes: {\r\n transcodeFormat: transcodeTarget.RGBA32,\r\n engineFormat: RGBA8Format,\r\n roundToMultiple4: false,\r\n },\r\n no: {\r\n cap: \"etc2\",\r\n yes: {\r\n alpha: true,\r\n yes: {\r\n transcodeFormat: transcodeTarget.ETC2_RGBA,\r\n engineFormat: COMPRESSED_RGBA8_ETC2_EAC,\r\n },\r\n no: {\r\n transcodeFormat: transcodeTarget.ETC1_RGB,\r\n engineFormat: COMPRESSED_RGB8_ETC2,\r\n },\r\n },\r\n no: {\r\n cap: \"etc1\",\r\n alpha: false,\r\n yes: {\r\n transcodeFormat: transcodeTarget.ETC1_RGB,\r\n engineFormat: COMPRESSED_RGB_ETC1_WEBGL,\r\n },\r\n no: {\r\n cap: \"bptc\",\r\n yes: {\r\n transcodeFormat: transcodeTarget.BC7_RGBA,\r\n engineFormat: COMPRESSED_RGBA_BPTC_UNORM_EXT,\r\n },\r\n no: {\r\n cap: \"s3tc\",\r\n yes: {\r\n alpha: true,\r\n yes: {\r\n transcodeFormat: transcodeTarget.BC3_RGBA,\r\n engineFormat: COMPRESSED_RGBA_S3TC_DXT5_EXT,\r\n },\r\n no: {\r\n transcodeFormat: transcodeTarget.BC1_RGB,\r\n engineFormat: COMPRESSED_RGB_S3TC_DXT1_EXT,\r\n },\r\n },\r\n no: {\r\n cap: \"pvrtc\",\r\n needsPowerOfTwo: true,\r\n yes: {\r\n alpha: true,\r\n yes: {\r\n transcodeFormat: transcodeTarget.PVRTC1_4_RGBA,\r\n engineFormat: COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,\r\n },\r\n no: {\r\n transcodeFormat: transcodeTarget.PVRTC1_4_RGB,\r\n engineFormat: COMPRESSED_RGB_PVRTC_4BPPV1_IMG,\r\n },\r\n },\r\n no: {\r\n transcodeFormat: transcodeTarget.RGBA32,\r\n engineFormat: RGBA8Format,\r\n roundToMultiple4: false,\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n\r\n UASTC: {\r\n option: \"forceRGBA\",\r\n yes: {\r\n transcodeFormat: transcodeTarget.RGBA32,\r\n engineFormat: RGBA8Format,\r\n roundToMultiple4: false,\r\n },\r\n no: {\r\n cap: \"astc\",\r\n yes: {\r\n transcodeFormat: transcodeTarget.ASTC_4x4_RGBA,\r\n engineFormat: COMPRESSED_RGBA_ASTC_4x4_KHR,\r\n },\r\n no: {\r\n cap: \"bptc\",\r\n yes: {\r\n transcodeFormat: transcodeTarget.BC7_RGBA,\r\n engineFormat: COMPRESSED_RGBA_BPTC_UNORM_EXT,\r\n },\r\n no: {\r\n option: \"useRGBAIfASTCBC7NotAvailableWhenUASTC\",\r\n yes: {\r\n transcodeFormat: transcodeTarget.RGBA32,\r\n engineFormat: RGBA8Format,\r\n roundToMultiple4: false,\r\n },\r\n no: {\r\n cap: \"etc2\",\r\n yes: {\r\n alpha: true,\r\n yes: {\r\n transcodeFormat: transcodeTarget.ETC2_RGBA,\r\n engineFormat: COMPRESSED_RGBA8_ETC2_EAC,\r\n },\r\n no: {\r\n transcodeFormat: transcodeTarget.ETC1_RGB,\r\n engineFormat: COMPRESSED_RGB8_ETC2,\r\n },\r\n },\r\n no: {\r\n cap: \"etc1\",\r\n yes: {\r\n transcodeFormat: transcodeTarget.ETC1_RGB,\r\n engineFormat: COMPRESSED_RGB_ETC1_WEBGL,\r\n },\r\n no: {\r\n cap: \"s3tc\",\r\n yes: {\r\n alpha: true,\r\n yes: {\r\n transcodeFormat: transcodeTarget.BC3_RGBA,\r\n engineFormat: COMPRESSED_RGBA_S3TC_DXT5_EXT,\r\n },\r\n no: {\r\n transcodeFormat: transcodeTarget.BC1_RGB,\r\n engineFormat: COMPRESSED_RGB_S3TC_DXT1_EXT,\r\n },\r\n },\r\n no: {\r\n cap: \"pvrtc\",\r\n needsPowerOfTwo: true,\r\n yes: {\r\n alpha: true,\r\n yes: {\r\n transcodeFormat: transcodeTarget.PVRTC1_4_RGBA,\r\n engineFormat: COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,\r\n },\r\n no: {\r\n transcodeFormat: transcodeTarget.PVRTC1_4_RGB,\r\n engineFormat: COMPRESSED_RGB_PVRTC_4BPPV1_IMG,\r\n },\r\n },\r\n no: {\r\n transcodeFormat: transcodeTarget.RGBA32,\r\n engineFormat: RGBA8Format,\r\n roundToMultiple4: false,\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n};\r\n\r\nexport class TranscodeDecisionTree {\r\n private static _IsLeafNode(node: INode | ILeaf): node is ILeaf {\r\n return (node as ILeaf).transcodeFormat !== undefined;\r\n }\r\n\r\n private _hasAlpha: boolean;\r\n private _isPowerOfTwo: boolean;\r\n private _caps: any;\r\n private _options: any;\r\n private _transcodeFormat: number;\r\n private _engineFormat: number;\r\n private _roundToMultiple4: boolean;\r\n\r\n public get transcodeFormat() {\r\n return this._transcodeFormat;\r\n }\r\n\r\n public get engineFormat() {\r\n return this._engineFormat;\r\n }\r\n\r\n public get roundToMultiple4() {\r\n return this._roundToMultiple4;\r\n }\r\n\r\n constructor(textureFormat: sourceTextureFormat, hasAlpha: boolean, isPowerOfTwo: boolean, caps: any, options?: any) {\r\n this._hasAlpha = hasAlpha;\r\n this._isPowerOfTwo = isPowerOfTwo;\r\n this._caps = caps;\r\n this._options = options ?? {};\r\n\r\n this._parseNode(textureFormat === sourceTextureFormat.UASTC4x4 ? DecisionTree.UASTC : DecisionTree.ETC1S);\r\n }\r\n\r\n private _parseNode(node: INode | ILeaf): void {\r\n if (TranscodeDecisionTree._IsLeafNode(node)) {\r\n this._transcodeFormat = node.transcodeFormat;\r\n this._engineFormat = node.engineFormat;\r\n this._roundToMultiple4 = node.roundToMultiple4 ?? true;\r\n } else {\r\n let condition = true;\r\n\r\n if (node.cap !== undefined) {\r\n condition = condition && this._caps[node.cap];\r\n }\r\n if (node.option !== undefined) {\r\n condition = condition && this._options[node.option];\r\n }\r\n if (node.alpha !== undefined) {\r\n condition = condition && this._hasAlpha === node.alpha;\r\n }\r\n if (node.needsPowerOfTwo !== undefined) {\r\n condition = condition && this._isPowerOfTwo === node.needsPowerOfTwo;\r\n }\r\n\r\n this._parseNode(condition ? node.yes! : node.no!);\r\n }\r\n }\r\n}\r\n","/**\r\n * Resources used for the implementation:\r\n * - 3js KTX2 loader: https://github.com/mrdoob/three.js/blob/dfb5c23ce126ec845e4aa240599915fef5375797/examples/jsm/loaders/KTX2Loader.js\r\n * - Universal Texture Transcoders: https://github.com/KhronosGroup/Universal-Texture-Transcoders\r\n * - KTX2 specification: http://github.khronos.org/KTX-Specification/\r\n * - KTX2 binaries to convert files: https://github.com/KhronosGroup/KTX-Software/releases\r\n * - KTX specification: https://www.khronos.org/registry/DataFormat/specs/1.3/dataformat.1.3.html\r\n * - KTX-Software: https://github.com/KhronosGroup/KTX-Software\r\n */\r\n\r\nimport type { IKTX2_ImageDesc } from \"./ktx2FileReader\";\r\nimport { KTX2FileReader, SupercompressionScheme } from \"./ktx2FileReader\";\r\nimport { TranscoderManager } from \"./transcoderManager\";\r\nimport { LiteTranscoder_UASTC_ASTC } from \"./Transcoders/liteTranscoder_UASTC_ASTC\";\r\nimport { LiteTranscoder_UASTC_BC7 } from \"./Transcoders/liteTranscoder_UASTC_BC7\";\r\nimport { LiteTranscoder_UASTC_RGBA_UNORM } from \"./Transcoders/liteTranscoder_UASTC_RGBA_UNORM\";\r\nimport { LiteTranscoder_UASTC_RGBA_SRGB } from \"./Transcoders/liteTranscoder_UASTC_RGBA_SRGB\";\r\nimport { MSCTranscoder } from \"./Transcoders/mscTranscoder\";\r\nimport { transcodeTarget, sourceTextureFormat } from \"./transcoder\";\r\nimport { ZSTDDecoder } from \"./zstddec\";\r\nimport { TranscodeDecisionTree } from \"./transcodeDecisionTree\";\r\n\r\nexport interface IDecodedData {\r\n width: number;\r\n height: number;\r\n transcodedFormat: number;\r\n mipmaps: Array<IMipmap>;\r\n isInGammaSpace: boolean;\r\n hasAlpha: boolean;\r\n errors?: string;\r\n transcoderName?: string;\r\n}\r\n\r\nexport interface IMipmap {\r\n data: Uint8Array | null;\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport interface ICompressedFormatCapabilities {\r\n astc?: boolean;\r\n bptc?: boolean;\r\n s3tc?: boolean;\r\n pvrtc?: boolean;\r\n etc2?: boolean;\r\n etc1?: boolean;\r\n}\r\n\r\nexport interface IKTX2DecoderOptions {\r\n /** use RGBA format if ASTC and BC7 are not available as transcoded format */\r\n useRGBAIfASTCBC7NotAvailableWhenUASTC?: boolean;\r\n\r\n /** force to always use RGBA for transcoded format */\r\n forceRGBA?: boolean;\r\n\r\n /**\r\n * list of transcoders to bypass when looking for a suitable transcoder. The available transcoders are:\r\n * UniversalTranscoder_UASTC_ASTC\r\n * UniversalTranscoder_UASTC_BC7\r\n * UniversalTranscoder_UASTC_RGBA_UNORM\r\n * UniversalTranscoder_UASTC_RGBA_SRGB\r\n * MSCTranscoder\r\n */\r\n bypassTranscoders?: string[];\r\n}\r\n\r\nconst isPowerOfTwo = (value: number) => {\r\n return (value & (value - 1)) === 0 && value !== 0;\r\n};\r\n\r\n/**\r\n * Class for decoding KTX2 files\r\n *\r\n */\r\nexport class KTX2Decoder {\r\n private _transcoderMgr: TranscoderManager;\r\n private _zstdDecoder: ZSTDDecoder;\r\n\r\n constructor() {\r\n this._transcoderMgr = new TranscoderManager();\r\n }\r\n\r\n public decode(data: Uint8Array, caps: ICompressedFormatCapabilities, options?: IKTX2DecoderOptions): Promise<IDecodedData | null> {\r\n return Promise.resolve().then(() => {\r\n const kfr = new KTX2FileReader(data);\r\n\r\n if (!kfr.isValid()) {\r\n throw new Error(\"Invalid KT2 file: wrong signature\");\r\n }\r\n\r\n kfr.parse();\r\n\r\n if (kfr.needZSTDDecoder) {\r\n if (!this._zstdDecoder) {\r\n this._zstdDecoder = new ZSTDDecoder();\r\n }\r\n\r\n return this._zstdDecoder.init().then(() => {\r\n return this._decodeData(kfr, caps, options);\r\n });\r\n }\r\n\r\n return this._decodeData(kfr, caps, options);\r\n });\r\n }\r\n\r\n private _decodeData(kfr: KTX2FileReader, caps: ICompressedFormatCapabilities, options?: IKTX2DecoderOptions): Promise<IDecodedData> {\r\n const width = kfr.header.pixelWidth;\r\n const height = kfr.header.pixelHeight;\r\n const srcTexFormat = kfr.textureFormat;\r\n\r\n const decisionTree = new TranscodeDecisionTree(srcTexFormat, kfr.hasAlpha, isPowerOfTwo(width) && isPowerOfTwo(height), caps, options);\r\n\r\n const transcodeFormat = decisionTree.transcodeFormat;\r\n const engineFormat = decisionTree.engineFormat;\r\n const roundToMultiple4 = decisionTree.roundToMultiple4;\r\n\r\n const transcoder = this._transcoderMgr.findTranscoder(srcTexFormat, transcodeFormat, kfr.isInGammaSpace, options?.bypassTranscoders);\r\n\r\n if (transcoder === null) {\r\n throw new Error(`no transcoder found to transcode source texture format \"${sourceTextureFormat[srcTexFormat]}\" to format \"${transcodeTarget[transcodeFormat]}\"`);\r\n }\r\n\r\n const mipmaps: Array<IMipmap> = [];\r\n const dataPromises: Array<Promise<Uint8Array | null>> = [];\r\n const decodedData: IDecodedData = {\r\n width: 0,\r\n height: 0,\r\n transcodedFormat: engineFormat,\r\n mipmaps,\r\n isInGammaSpace: kfr.isInGammaSpace,\r\n hasAlpha: kfr.hasAlpha,\r\n transcoderName: transcoder.getName(),\r\n };\r\n\r\n let firstImageDescIndex = 0;\r\n\r\n for (let level = 0; level < kfr.header.levelCount; level++) {\r\n if (level > 0) {\r\n firstImageDescIndex += Math.max(kfr.header.layerCount, 1) * kfr.header.faceCount * Math.max(kfr.header.pixelDepth >> (level - 1), 1);\r\n }\r\n\r\n const levelWidth = Math.floor(width / (1 << level)) || 1;\r\n const levelHeight = Math.floor(height / (1 << level)) || 1;\r\n\r\n const numImagesInLevel = kfr.header.faceCount; // note that cubemap are not supported yet (see KTX2FileReader), so faceCount == 1\r\n const levelImageByteLength = ((levelWidth + 3) >> 2) * ((levelHeight + 3) >> 2) * kfr.dfdBlock.bytesPlane[0];\r\n\r\n const levelUncompressedByteLength = kfr.levels[level].uncompressedByteLength;\r\n\r\n let levelDataBuffer = kfr.data.buffer;\r\n\r\n let levelDataOffset = kfr.levels[level].byteOffset + kfr.data.byteOffset;\r\n let imageOffsetInLevel = 0;\r\n\r\n if (kfr.header.supercompressionScheme === SupercompressionScheme.ZStandard) {\r\n levelDataBuffer = this._zstdDecoder.decode(new Uint8Array(levelDataBuffer, levelDataOffset, kfr.levels[level].byteLength), levelUncompressedByteLength);\r\n levelDataOffset = 0;\r\n }\r\n\r\n if (level === 0) {\r\n decodedData.width = roundToMultiple4 ? (levelWidth + 3) & ~3 : levelWidth;\r\n decodedData.height = roundToMultiple4 ? (levelHeight + 3) & ~3 : levelHeight;\r\n }\r\n\r\n for (let imageIndex = 0; imageIndex < numImagesInLevel; imageIndex++) {\r\n let encodedData: Uint8Array;\r\n let imageDesc: IKTX2_ImageDesc | null = null;\r\n\r\n if (kfr.header.supercompressionScheme === SupercompressionScheme.BasisLZ) {\r\n imageDesc = kfr.supercompressionGlobalData.imageDescs![firstImageDescIndex + imageIndex];\r\n\r\n encodedData = new Uint8Array(levelDataBuffer, levelDataOffset + imageDesc.rgbSliceByteOffset, imageDesc.rgbSliceByteLength + imageDesc.alphaSliceByteLength);\r\n } else {\r\n encodedData = new Uint8Array(levelDataBuffer, levelDataOffset + imageOffsetInLevel, levelImageByteLength);\r\n\r\n imageOffsetInLevel += levelImageByteLength;\r\n }\r\n\r\n const mipmap: IMipmap = {\r\n data: null,\r\n width: levelWidth,\r\n height: levelHeight,\r\n };\r\n\r\n const transcodedData = transcoder\r\n .transcode(srcTexFormat, transcodeFormat, level, levelWidth, levelHeight, levelUncompressedByteLength, kfr, imageDesc, encodedData)\r\n .then((data) => {\r\n mipmap.data = data;\r\n return data;\r\n })\r\n .catch((reason) => {\r\n decodedData.errors = decodedData.errors ?? \"\";\r\n decodedData.errors += reason + \"\\n\" + reason.stack + \"\\n\";\r\n return null;\r\n });\r\n\r\n dataPromises.push(transcodedData);\r\n\r\n mipmaps.push(mipmap);\r\n }\r\n }\r\n\r\n return Promise.all(dataPromises).then(() => {\r\n return decodedData;\r\n });\r\n }\r\n}\r\n\r\n// Put in the order you want the transcoders to be used in priority\r\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_ASTC);\r\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_BC7);\r\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_RGBA_UNORM);\r\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_RGBA_SRGB);\r\nTranscoderManager.RegisterTranscoder(MSCTranscoder); // catch all transcoder - will throw an error if the format can't be transcoded\r\n","/* eslint-disable import/no-internal-modules */\r\nimport { KTX2Decoder } from \"../index\";\r\n\r\nconst globalObject = typeof global !== \"undefined\" ? global : typeof window !== \"undefined\" ? window : undefined;\r\nif (typeof globalObject !== \"undefined\") {\r\n (<any>globalObject).KTX2DECODER = KTX2Decoder;\r\n}\r\n\r\nexport * from \"../index\";\r\n","import * as ktx2decoder from \"ktx2decoder/legacy/legacy\";\r\n\r\nexport { ktx2decoder };\r\nexport default ktx2decoder;\r\n"],"names":["root","factory","exports","module","define","amd","self","global","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","g","globalThis","Function","e","window","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","sourceTextureFormat","transcodeTarget","SupercompressionScheme","DataReader","constructor","buffer","byteOffset","byteLength","_dataView","DataView","_dataByteOffset","readUint8","getUint8","readInt8","getInt8","readUint16","getUint16","readInt16","getInt16","readUint32","getUint32","readInt32","getInt32","readUint64","combined","readUint8Array","Uint8Array","skipBytes","Transcoder","static","src","dst","isInGammaSpace","getName","Name","initialize","needMemoryManager","setMemoryManager","memoryMgr","transcode","level","width","height","uncompressedByteLength","ktx2Reader","imageDesc","encodedData","Promise","resolve","KTX2FileReader","data","_data","header","_header","levels","_levels","dfdBlock","_dfdBlock","supercompressionGlobalData","_supercompressionGlobalData","isValid","IsValid","parse","offsetInFile","hdrReader","vkFormat","typeSize","pixelWidth","pixelHeight","pixelDepth","layerCount","faceCount","levelCount","supercompressionScheme","dfdByteOffset","dfdByteLength","kvdByteOffset","kvdByteLength","sgdByteOffset","sgdByteLength","Error","Math","max","levelReader","push","dfdReader","vendorId","descriptorType","versionNumber","descriptorBlockSize","colorModel","colorPrimaries","transferFunction","flags","texelBlockDimension","x","y","z","w","bytesPlane","numSamples","samples","Array","i","sample","bitOffset","bitLength","channelType","channelFlags","samplePosition","sampleLower","sampleUpper","sgd","sgdReader","endpointCount","selectorCount","endpointsByteLength","selectorsByteLength","tablesByteLength","extendedByteLength","imageDescs","imageCount","_getImageCount","imageFlags","rgbSliceByteOffset","rgbSliceByteLength","alphaSliceByteOffset","alphaSliceByteLength","endpointsByteOffset","selectorsByteOffset","tablesByteOffset","extendedByteOffset","endpointsData","selectorsData","tablesData","extendedData","layerPixelDepth","textureFormat","UASTC4x4","ETC1S","hasAlpha","needZSTDDecoder","ZStandard","identifier","WASMMemoryManager","initialMemoryPages","InitialMemoryPages","_numPages","_memory","WebAssembly","Memory","initial","_memoryViewByteLength","_memoryViewOffset","_memoryView","path","LoadBinariesFromCurrentThread","reject","fetch","then","response","ok","arrayBuffer","status","statusText","wasmBinary","catch","reason","id","_RequestId","wasmLoadedHandler","msg","action","removeEventListener","addEventListener","postMessage","wasmMemory","getMemoryView","numPages","offset","grow","TranscoderManager","transcoder","_Transcoders","findTranscoder","bypass","length","CanTranscode","indexOf","_getExistingTranscoder","_wasmMemoryManager","_TranscoderInstances","transcoderName","transcoders","t","LiteTranscoder","_loadModule","_modulePromise","LoadWASM","_modulePath","instantiate","env","memory","_memoryManager","moduleWrapper","instance","memoryManager","setModulePath","modulePath","_transcodeInPlace","textureView","uncompressedTextureView","nBlocks","_prepareTranscoding","slice","forceRGBA","texMemoryPages","set","LiteTranscoder_UASTC_ASTC","ASTC_4x4_RGBA","super","WasmModuleURL","LiteTranscoder_UASTC_BC7","BC7_RGBA","LiteTranscoder_UASTC_RGBA_UNORM","RGBA32","decodeRGBA32","LiteTranscoder_UASTC_RGBA_SRGB","MSCTranscoder","_getMSCBasisTranscoder","_mscBasisTranscoderPromise","UseFromWorkerThread","importScripts","JSModuleURL","MSC_TRANSCODER","head","document","getElementsByTagName","script","createElement","setAttribute","onload","basisModule","initTranscoders","_mscBasisModule","onerror","appendChild","imageInfo","result","textureData","UastcImageTranscoder","BasisLzEtc1sImageTranscoder","texFormat","TextureFormat","ImageInfo","targetFormat","TranscodeTarget","isFormatSupported","decodePalettes","decodeTables","rgbByteOffset","rgbByteLength","alphaByteOffset","alphaByteLength","transcodeImage","delete","transcodedImage","get_typed_memory_view","init","heap","IMPORT_OBJECT","emscripten_notify_memory_growth","ZSTDDecoder","_init","instantiateStreaming","decode","array","uncompressedSize","compressedSize","compressedPtr","malloc","Number","ZSTD_findDecompressedSize","uncompressedPtr","actualSize","ZSTD_decompress","dec","free","RGBA8Format","DecisionTree","option","yes","transcodeFormat","engineFormat","roundToMultiple4","no","cap","alpha","ETC2_RGBA","ETC1_RGB","BC3_RGBA","BC1_RGB","needsPowerOfTwo","PVRTC1_4_RGBA","PVRTC1_4_RGB","UASTC","TranscodeDecisionTree","isPowerOfTwo","caps","options","_hasAlpha","_isPowerOfTwo","_caps","_options","_parseNode","node","undefined","_transcodeFormat","_engineFormat","_roundToMultiple4","_IsLeafNode","condition","KTX2Decoder","_transcoderMgr","kfr","_zstdDecoder","_decodeData","srcTexFormat","decisionTree","bypassTranscoders","mipmaps","dataPromises","decodedData","transcodedFormat","firstImageDescIndex","levelWidth","floor","levelHeight","numImagesInLevel","levelImageByteLength","levelUncompressedByteLength","levelDataBuffer","levelDataOffset","imageOffsetInLevel","imageIndex","BasisLZ","mipmap","transcodedData","errors","stack","all","RegisterTranscoder","globalObject","KTX2DECODER"],"sourceRoot":""}
1
+ {"version":3,"file":"babylon.ktx2Decoder.js","mappings":"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","sources":["webpack://KTX2DECODER/webpack/universalModuleDefinition","webpack://KTX2DECODER/webpack/bootstrap","webpack://KTX2DECODER/webpack/runtime/define property getters","webpack://KTX2DECODER/webpack/runtime/global","webpack://KTX2DECODER/webpack/runtime/hasOwnProperty shorthand","webpack://KTX2DECODER/webpack/runtime/make namespace object","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/transcoder.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/ktx2FileReader.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/Misc/dataReader.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/wasmMemoryManager.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/transcoderManager.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/Transcoders/liteTranscoder.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/Transcoders/liteTranscoder_UASTC_ASTC.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/Transcoders/liteTranscoder_UASTC_BC7.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/Transcoders/liteTranscoder_UASTC_RGBA_UNORM.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/Transcoders/liteTranscoder_UASTC_RGBA_SRGB.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/Transcoders/mscTranscoder.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/zstddec.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/transcodeDecisionTree.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/ktx2Decoder.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/legacy/legacy.ts","webpack://KTX2DECODER/./src/index.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"babylonjs-ktx2decoder\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"babylonjs-ktx2decoder\"] = factory();\n\telse\n\t\troot[\"KTX2DECODER\"] = factory();\n})((typeof self !== \"undefined\" ? self : typeof global !== \"undefined\" ? global : this), () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { WASMMemoryManager } from \"./wasmMemoryManager\";\r\nimport type { KTX2FileReader, IKTX2_ImageDesc } from \"./ktx2FileReader\";\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport enum sourceTextureFormat {\r\n ETC1S,\r\n UASTC4x4,\r\n}\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport enum transcodeTarget {\r\n ASTC_4x4_RGBA,\r\n BC7_RGBA,\r\n BC3_RGBA,\r\n BC1_RGB,\r\n PVRTC1_4_RGBA,\r\n PVRTC1_4_RGB,\r\n ETC2_RGBA,\r\n ETC1_RGB,\r\n RGBA32,\r\n}\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport class Transcoder {\r\n public static CanTranscode(src: sourceTextureFormat, dst: transcodeTarget, isInGammaSpace: boolean): boolean {\r\n return false;\r\n }\r\n\r\n public static Name = \"Transcoder\";\r\n\r\n public getName(): string {\r\n return Transcoder.Name;\r\n }\r\n\r\n public initialize(): void {}\r\n\r\n public needMemoryManager(): boolean {\r\n return false;\r\n }\r\n\r\n public setMemoryManager(memoryMgr: WASMMemoryManager): void {}\r\n\r\n public transcode(\r\n src: sourceTextureFormat,\r\n dst: transcodeTarget,\r\n level: number,\r\n width: number,\r\n height: number,\r\n uncompressedByteLength: number,\r\n ktx2Reader: KTX2FileReader,\r\n imageDesc: IKTX2_ImageDesc | null,\r\n encodedData: Uint8Array\r\n ): Promise<Uint8Array | null> {\r\n return Promise.resolve(null);\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { DataReader } from \"./Misc/dataReader\";\r\nimport { sourceTextureFormat } from \"./transcoder\";\r\n\r\n/** @hidden */\r\nexport enum SupercompressionScheme {\r\n None = 0,\r\n BasisLZ = 1,\r\n ZStandard = 2,\r\n ZLib = 3,\r\n}\r\n\r\nconst enum DFDModel {\r\n ETC1S = 163,\r\n UASTC = 166,\r\n}\r\n\r\nconst enum DFDChannel_ETC1S {\r\n RGB = 0,\r\n RRR = 3,\r\n GGG = 4,\r\n AAA = 15,\r\n}\r\n\r\nconst enum DFDChannel_UASTC {\r\n RGB = 0,\r\n RGBA = 3,\r\n RRR = 4,\r\n RRRG = 5,\r\n}\r\n\r\nconst enum DFDTransferFunction {\r\n linear = 1,\r\n sRGB = 2,\r\n}\r\n\r\n/** @hidden */\r\nexport interface IKTX2_Header {\r\n vkFormat: number;\r\n typeSize: number;\r\n pixelWidth: number;\r\n pixelHeight: number;\r\n pixelDepth: number;\r\n layerCount: number;\r\n faceCount: number;\r\n levelCount: number;\r\n supercompressionScheme: number;\r\n dfdByteOffset: number;\r\n dfdByteLength: number;\r\n kvdByteOffset: number;\r\n kvdByteLength: number;\r\n sgdByteOffset: number;\r\n sgdByteLength: number;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IKTX2_Level {\r\n byteOffset: number;\r\n byteLength: number;\r\n uncompressedByteLength: number;\r\n}\r\n\r\ninterface IKTX2_Sample {\r\n bitOffset: number;\r\n bitLength: number;\r\n channelType: number;\r\n channelFlags: number;\r\n samplePosition: number[];\r\n sampleLower: number;\r\n sampleUpper: number;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IKTX2_DFD {\r\n vendorId: number;\r\n descriptorType: number;\r\n versionNumber: number;\r\n descriptorBlockSize: number;\r\n colorModel: number;\r\n colorPrimaries: number;\r\n transferFunction: number;\r\n flags: number;\r\n texelBlockDimension: {\r\n x: number;\r\n y: number;\r\n z: number;\r\n w: number;\r\n };\r\n bytesPlane: Array<number>;\r\n numSamples: number;\r\n samples: Array<IKTX2_Sample>;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IKTX2_ImageDesc {\r\n imageFlags: number;\r\n rgbSliceByteOffset: number;\r\n rgbSliceByteLength: number;\r\n alphaSliceByteOffset: number;\r\n alphaSliceByteLength: number;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IKTX2_SupercompressionGlobalData {\r\n endpointCount?: number;\r\n selectorCount?: number;\r\n endpointsByteLength?: number;\r\n selectorsByteLength?: number;\r\n tablesByteLength?: number;\r\n extendedByteLength?: number;\r\n imageDescs?: Array<IKTX2_ImageDesc>;\r\n endpointsData?: Uint8Array;\r\n selectorsData?: Uint8Array;\r\n tablesData?: Uint8Array;\r\n extendedData?: Uint8Array;\r\n}\r\n\r\nexport class KTX2FileReader {\r\n private _data: Uint8Array;\r\n private _header: IKTX2_Header;\r\n private _levels: Array<IKTX2_Level>;\r\n private _dfdBlock: IKTX2_DFD;\r\n private _supercompressionGlobalData: IKTX2_SupercompressionGlobalData;\r\n\r\n /**\r\n * Will throw an exception if the file can't be parsed\r\n * @param data\r\n */\r\n constructor(data: Uint8Array) {\r\n this._data = data;\r\n }\r\n\r\n public get data(): Uint8Array {\r\n return this._data;\r\n }\r\n\r\n public get header(): IKTX2_Header {\r\n return this._header;\r\n }\r\n\r\n public get levels(): Array<IKTX2_Level> {\r\n return this._levels;\r\n }\r\n\r\n public get dfdBlock(): IKTX2_DFD {\r\n return this._dfdBlock;\r\n }\r\n\r\n public get supercompressionGlobalData(): IKTX2_SupercompressionGlobalData {\r\n return this._supercompressionGlobalData;\r\n }\r\n\r\n public isValid() {\r\n return KTX2FileReader.IsValid(this._data);\r\n }\r\n\r\n public parse() {\r\n let offsetInFile = 12; // skip the header\r\n\r\n /**\r\n * Get the header\r\n */\r\n const hdrReader = new DataReader(this._data, offsetInFile, 17 * 4);\r\n\r\n const header = (this._header = {\r\n vkFormat: hdrReader.readUint32(),\r\n typeSize: hdrReader.readUint32(),\r\n pixelWidth: hdrReader.readUint32(),\r\n pixelHeight: hdrReader.readUint32(),\r\n pixelDepth: hdrReader.readUint32(),\r\n layerCount: hdrReader.readUint32(),\r\n faceCount: hdrReader.readUint32(),\r\n levelCount: hdrReader.readUint32(),\r\n supercompressionScheme: hdrReader.readUint32(),\r\n\r\n dfdByteOffset: hdrReader.readUint32(),\r\n dfdByteLength: hdrReader.readUint32(),\r\n kvdByteOffset: hdrReader.readUint32(),\r\n kvdByteLength: hdrReader.readUint32(),\r\n sgdByteOffset: hdrReader.readUint64(),\r\n sgdByteLength: hdrReader.readUint64(),\r\n });\r\n\r\n if (header.pixelDepth > 0) {\r\n throw new Error(`Failed to parse KTX2 file - Only 2D textures are currently supported.`);\r\n }\r\n\r\n if (header.layerCount > 1) {\r\n throw new Error(`Failed to parse KTX2 file - Array textures are not currently supported.`);\r\n }\r\n\r\n if (header.faceCount > 1) {\r\n throw new Error(`Failed to parse KTX2 file - Cube textures are not currently supported.`);\r\n }\r\n\r\n offsetInFile += hdrReader.byteOffset;\r\n\r\n /**\r\n * Get the levels\r\n */\r\n let levelCount = Math.max(1, header.levelCount);\r\n\r\n const levelReader = new DataReader(this._data, offsetInFile, levelCount * 3 * (2 * 4));\r\n\r\n const levels: Array<IKTX2_Level> = (this._levels = []);\r\n\r\n while (levelCount--) {\r\n levels.push({\r\n byteOffset: levelReader.readUint64(),\r\n byteLength: levelReader.readUint64(),\r\n uncompressedByteLength: levelReader.readUint64(),\r\n });\r\n }\r\n\r\n offsetInFile += levelReader.byteOffset;\r\n\r\n /**\r\n * Get the data format descriptor (DFD) blocks\r\n */\r\n const dfdReader = new DataReader(this._data, header.dfdByteOffset, header.dfdByteLength);\r\n\r\n const dfdBlock = (this._dfdBlock = {\r\n vendorId: dfdReader.skipBytes(4 /* skip totalSize */).readUint16(),\r\n descriptorType: dfdReader.readUint16(),\r\n versionNumber: dfdReader.readUint16(),\r\n descriptorBlockSize: dfdReader.readUint16(),\r\n colorModel: dfdReader.readUint8(),\r\n colorPrimaries: dfdReader.readUint8(),\r\n transferFunction: dfdReader.readUint8(),\r\n flags: dfdReader.readUint8(),\r\n texelBlockDimension: {\r\n x: dfdReader.readUint8() + 1,\r\n y: dfdReader.readUint8() + 1,\r\n z: dfdReader.readUint8() + 1,\r\n w: dfdReader.readUint8() + 1,\r\n },\r\n bytesPlane: [\r\n dfdReader.readUint8() /* bytesPlane0 */,\r\n dfdReader.readUint8() /* bytesPlane1 */,\r\n dfdReader.readUint8() /* bytesPlane2 */,\r\n dfdReader.readUint8() /* bytesPlane3 */,\r\n dfdReader.readUint8() /* bytesPlane4 */,\r\n dfdReader.readUint8() /* bytesPlane5 */,\r\n dfdReader.readUint8() /* bytesPlane6 */,\r\n dfdReader.readUint8() /* bytesPlane7 */,\r\n ],\r\n numSamples: 0,\r\n samples: new Array<IKTX2_Sample>(),\r\n });\r\n\r\n dfdBlock.numSamples = (dfdBlock.descriptorBlockSize - 24) / 16;\r\n\r\n for (let i = 0; i < dfdBlock.numSamples; i++) {\r\n const sample = {\r\n bitOffset: dfdReader.readUint16(),\r\n bitLength: dfdReader.readUint8() + 1,\r\n channelType: dfdReader.readUint8(),\r\n channelFlags: 0,\r\n samplePosition: [\r\n dfdReader.readUint8() /* samplePosition0 */,\r\n dfdReader.readUint8() /* samplePosition1 */,\r\n dfdReader.readUint8() /* samplePosition2 */,\r\n dfdReader.readUint8() /* samplePosition3 */,\r\n ],\r\n sampleLower: dfdReader.readUint32(),\r\n sampleUpper: dfdReader.readUint32(),\r\n };\r\n\r\n sample.channelFlags = (sample.channelType & 0xf0) >> 4;\r\n sample.channelType = sample.channelType & 0x0f;\r\n\r\n dfdBlock.samples.push(sample);\r\n }\r\n\r\n /**\r\n * Get the Supercompression Global Data (sgd)\r\n */\r\n const sgd: IKTX2_SupercompressionGlobalData = (this._supercompressionGlobalData = {});\r\n\r\n if (header.sgdByteLength > 0) {\r\n const sgdReader = new DataReader(this._data, header.sgdByteOffset, header.sgdByteLength);\r\n\r\n sgd.endpointCount = sgdReader.readUint16();\r\n sgd.selectorCount = sgdReader.readUint16();\r\n sgd.endpointsByteLength = sgdReader.readUint32();\r\n sgd.selectorsByteLength = sgdReader.readUint32();\r\n sgd.tablesByteLength = sgdReader.readUint32();\r\n sgd.extendedByteLength = sgdReader.readUint32();\r\n sgd.imageDescs = [];\r\n\r\n const imageCount = this._getImageCount();\r\n\r\n for (let i = 0; i < imageCount; i++) {\r\n sgd.imageDescs.push({\r\n imageFlags: sgdReader.readUint32(),\r\n rgbSliceByteOffset: sgdReader.readUint32(),\r\n rgbSliceByteLength: sgdReader.readUint32(),\r\n alphaSliceByteOffset: sgdReader.readUint32(),\r\n alphaSliceByteLength: sgdReader.readUint32(),\r\n });\r\n }\r\n\r\n const endpointsByteOffset = header.sgdByteOffset + sgdReader.byteOffset;\r\n const selectorsByteOffset = endpointsByteOffset + sgd.endpointsByteLength;\r\n const tablesByteOffset = selectorsByteOffset + sgd.selectorsByteLength;\r\n const extendedByteOffset = tablesByteOffset + sgd.tablesByteLength;\r\n\r\n sgd.endpointsData = new Uint8Array(this._data.buffer, this._data.byteOffset + endpointsByteOffset, sgd.endpointsByteLength);\r\n sgd.selectorsData = new Uint8Array(this._data.buffer, this._data.byteOffset + selectorsByteOffset, sgd.selectorsByteLength);\r\n sgd.tablesData = new Uint8Array(this._data.buffer, this._data.byteOffset + tablesByteOffset, sgd.tablesByteLength);\r\n sgd.extendedData = new Uint8Array(this._data.buffer, this._data.byteOffset + extendedByteOffset, sgd.extendedByteLength);\r\n }\r\n }\r\n\r\n private _getImageCount(): number {\r\n let layerPixelDepth = Math.max(this._header.pixelDepth, 1);\r\n for (let i = 1; i < this._header.levelCount; i++) {\r\n layerPixelDepth += Math.max(this._header.pixelDepth >> i, 1);\r\n }\r\n\r\n return Math.max(this._header.layerCount, 1) * this._header.faceCount * layerPixelDepth;\r\n }\r\n\r\n public get textureFormat(): sourceTextureFormat {\r\n return this._dfdBlock.colorModel === DFDModel.UASTC ? sourceTextureFormat.UASTC4x4 : sourceTextureFormat.ETC1S;\r\n }\r\n\r\n public get hasAlpha(): boolean {\r\n const tformat = this.textureFormat;\r\n\r\n switch (tformat) {\r\n case sourceTextureFormat.ETC1S:\r\n return (\r\n this._dfdBlock.numSamples === 2 &&\r\n (this._dfdBlock.samples[0].channelType === DFDChannel_ETC1S.AAA || this._dfdBlock.samples[1].channelType === DFDChannel_ETC1S.AAA)\r\n );\r\n\r\n case sourceTextureFormat.UASTC4x4:\r\n return this._dfdBlock.samples[0].channelType === DFDChannel_UASTC.RGBA;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public get needZSTDDecoder(): boolean {\r\n return this._header.supercompressionScheme === SupercompressionScheme.ZStandard;\r\n }\r\n\r\n public get isInGammaSpace(): boolean {\r\n return this._dfdBlock.transferFunction === DFDTransferFunction.sRGB;\r\n }\r\n\r\n public static IsValid(data: ArrayBufferView): boolean {\r\n if (data.byteLength >= 12) {\r\n // '«', 'K', 'T', 'X', ' ', '2', '0', '»', '\\r', '\\n', '\\x1A', '\\n'\r\n const identifier = new Uint8Array(data.buffer, data.byteOffset, 12);\r\n if (\r\n identifier[0] === 0xab &&\r\n identifier[1] === 0x4b &&\r\n identifier[2] === 0x54 &&\r\n identifier[3] === 0x58 &&\r\n identifier[4] === 0x20 &&\r\n identifier[5] === 0x32 &&\r\n identifier[6] === 0x30 &&\r\n identifier[7] === 0xbb &&\r\n identifier[8] === 0x0d &&\r\n identifier[9] === 0x0a &&\r\n identifier[10] === 0x1a &&\r\n identifier[11] === 0x0a\r\n ) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n","/**\r\n * Utility class for reading from a data buffer\r\n */\r\nexport class DataReader {\r\n /**\r\n * The current byte offset from the beginning of the data buffer.\r\n */\r\n public get byteOffset() {\r\n return this._dataByteOffset;\r\n }\r\n\r\n private _dataView: DataView;\r\n private _dataByteOffset: number;\r\n\r\n /**\r\n * Constructor\r\n * @param buffer The buffer to set\r\n * @param byteOffset The starting offset in the buffer\r\n * @param byteLength The byte length of the buffer\r\n */\r\n constructor(buffer: ArrayBuffer | ArrayBufferView, byteOffset?: number, byteLength?: number) {\r\n if ((buffer as ArrayBufferView).buffer) {\r\n this._dataView = new DataView(\r\n (buffer as ArrayBufferView).buffer,\r\n (buffer as ArrayBufferView).byteOffset + (byteOffset ?? 0),\r\n byteLength ?? (buffer as ArrayBufferView).byteLength\r\n );\r\n } else {\r\n this._dataView = new DataView(buffer as ArrayBuffer, byteOffset ?? 0, byteLength ?? (buffer as ArrayBuffer).byteLength);\r\n }\r\n\r\n this._dataByteOffset = 0;\r\n }\r\n\r\n /**\r\n * Read a unsigned 8-bit integer from the currently loaded data range.\r\n * @returns The 8-bit integer read\r\n */\r\n public readUint8(): number {\r\n const value = this._dataView.getUint8(this._dataByteOffset);\r\n this._dataByteOffset += 1;\r\n return value;\r\n }\r\n\r\n /**\r\n * Read a signed 8-bit integer from the currently loaded data range.\r\n * @returns The 8-bit integer read\r\n */\r\n public readInt8(): number {\r\n const value = this._dataView.getInt8(this._dataByteOffset);\r\n this._dataByteOffset += 1;\r\n return value;\r\n }\r\n\r\n /**\r\n * Read a unsigned 16-bit integer from the currently loaded data range.\r\n * @returns The 16-bit integer read\r\n */\r\n public readUint16(): number {\r\n const value = this._dataView.getUint16(this._dataByteOffset, true);\r\n this._dataByteOffset += 2;\r\n return value;\r\n }\r\n\r\n /**\r\n * Read a signed 16-bit integer from the currently loaded data range.\r\n * @returns The 16-bit integer read\r\n */\r\n public readInt16(): number {\r\n const value = this._dataView.getInt16(this._dataByteOffset, true);\r\n this._dataByteOffset += 2;\r\n return value;\r\n }\r\n\r\n /**\r\n * Read a unsigned 32-bit integer from the currently loaded data range.\r\n * @returns The 32-bit integer read\r\n */\r\n public readUint32(): number {\r\n const value = this._dataView.getUint32(this._dataByteOffset, true);\r\n this._dataByteOffset += 4;\r\n return value;\r\n }\r\n\r\n /**\r\n * Read a signed 32-bit integer from the currently loaded data range.\r\n * @returns The 32-bit integer read\r\n */\r\n public readInt32(): number {\r\n const value = this._dataView.getInt32(this._dataByteOffset, true);\r\n this._dataByteOffset += 4;\r\n return value;\r\n }\r\n\r\n /**\r\n * Read a unsigned 32-bit integer from the currently loaded data range.\r\n * @returns The 32-bit integer read\r\n */\r\n public readUint64(): number {\r\n // split 64-bit number into two 32-bit (4-byte) parts\r\n const left = this._dataView.getUint32(this._dataByteOffset, true);\r\n const right = this._dataView.getUint32(this._dataByteOffset + 4, true);\r\n\r\n // combine the two 32-bit values\r\n const combined = left + 2 ** 32 * right; // That was weird..Keeping it for posterity: true ? left + 2 ** 32 * right : 2 ** 32 * left + right;\r\n\r\n /*if (!Number.isSafeInteger(combined)) {\r\n console.warn('DataReader: ' + combined + ' exceeds MAX_SAFE_INTEGER. Precision may be lost.');\r\n }*/\r\n\r\n this._dataByteOffset += 8;\r\n return combined;\r\n }\r\n\r\n /**\r\n * Read a byte array from the currently loaded data range.\r\n * @param byteLength The byte length to read\r\n * @returns The byte array read\r\n */\r\n public readUint8Array(byteLength: number): Uint8Array {\r\n const value = new Uint8Array(this._dataView.buffer, this._dataView.byteOffset + this._dataByteOffset, byteLength);\r\n this._dataByteOffset += byteLength;\r\n return value;\r\n }\r\n\r\n /**\r\n * Skips the given byte length the currently loaded data range.\r\n * @param byteLength The byte length to skip\r\n * @returns This instance\r\n */\r\n public skipBytes(byteLength: number) {\r\n this._dataByteOffset += byteLength;\r\n return this;\r\n }\r\n}\r\n","declare function postMessage(message: any, transfer?: any[]): void;\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport class WASMMemoryManager {\r\n public static LoadBinariesFromCurrentThread = true;\r\n public static InitialMemoryPages = (1 * 1024 * 1024) >> 16; // 1 Mbytes\r\n\r\n private static _RequestId = 0;\r\n\r\n public static LoadWASM(path: string): Promise<ArrayBuffer> {\r\n if (this.LoadBinariesFromCurrentThread) {\r\n return new Promise((resolve, reject) => {\r\n fetch(path)\r\n .then((response) => {\r\n if (response.ok) {\r\n return response.arrayBuffer();\r\n }\r\n throw new Error(`Could not fetch the wasm component from \"${path}\": ${response.status} - ${response.statusText}`);\r\n })\r\n .then((wasmBinary) => resolve(wasmBinary))\r\n .catch((reason) => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n\r\n const id = this._RequestId++;\r\n\r\n return new Promise((resolve) => {\r\n const wasmLoadedHandler = (msg: any) => {\r\n if (msg.data.action === \"wasmLoaded\" && msg.data.id === id) {\r\n self.removeEventListener(\"message\", wasmLoadedHandler);\r\n resolve(msg.data.wasmBinary);\r\n }\r\n };\r\n\r\n self.addEventListener(\"message\", wasmLoadedHandler);\r\n\r\n postMessage({ action: \"loadWASM\", path: path, id: id });\r\n });\r\n }\r\n\r\n private _memory: WebAssembly.Memory;\r\n private _numPages: number;\r\n private _memoryView: Uint8Array;\r\n private _memoryViewByteLength: number;\r\n private _memoryViewOffset: number;\r\n\r\n constructor(initialMemoryPages: number = WASMMemoryManager.InitialMemoryPages) {\r\n this._numPages = initialMemoryPages;\r\n\r\n this._memory = new WebAssembly.Memory({ initial: this._numPages });\r\n this._memoryViewByteLength = this._numPages << 16;\r\n this._memoryViewOffset = 0;\r\n this._memoryView = new Uint8Array(this._memory.buffer, this._memoryViewOffset, this._memoryViewByteLength);\r\n }\r\n\r\n public get wasmMemory(): WebAssembly.Memory {\r\n return this._memory;\r\n }\r\n\r\n public getMemoryView(numPages: number, offset: number = 0, byteLength?: number): Uint8Array {\r\n byteLength = byteLength ?? numPages << 16;\r\n\r\n if (this._numPages < numPages) {\r\n this._memory.grow(numPages - this._numPages);\r\n this._numPages = numPages;\r\n this._memoryView = new Uint8Array(this._memory.buffer, offset, byteLength);\r\n this._memoryViewByteLength = byteLength;\r\n this._memoryViewOffset = offset;\r\n } else {\r\n this._memoryView = new Uint8Array(this._memory.buffer, offset, byteLength);\r\n this._memoryViewByteLength = byteLength;\r\n this._memoryViewOffset = offset;\r\n }\r\n\r\n return this._memoryView;\r\n }\r\n}\r\n","import type { Transcoder } from \"./transcoder\";\r\nimport { transcodeTarget, sourceTextureFormat } from \"./transcoder\";\r\nimport { WASMMemoryManager } from \"./wasmMemoryManager\";\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport class TranscoderManager {\r\n public static _Transcoders: Array<typeof Transcoder> = [];\r\n\r\n public static RegisterTranscoder(transcoder: typeof Transcoder) {\r\n TranscoderManager._Transcoders.push(transcoder);\r\n }\r\n\r\n private static _TranscoderInstances: { [key: string]: Array<Transcoder> } = {};\r\n\r\n private _wasmMemoryManager: WASMMemoryManager;\r\n\r\n public findTranscoder(src: sourceTextureFormat, dst: transcodeTarget, isInGammaSpace: boolean, bypass?: string[]): Transcoder | null {\r\n let transcoder: Transcoder | null = null;\r\n\r\n const key = sourceTextureFormat[src] + \"_\" + transcodeTarget[dst];\r\n\r\n for (let i = 0; i < TranscoderManager._Transcoders.length; ++i) {\r\n if (TranscoderManager._Transcoders[i].CanTranscode(src, dst, isInGammaSpace) && (!bypass || bypass.indexOf(TranscoderManager._Transcoders[i].Name) < 0)) {\r\n transcoder = this._getExistingTranscoder(key, TranscoderManager._Transcoders[i].Name);\r\n if (!transcoder) {\r\n transcoder = new TranscoderManager._Transcoders[i]();\r\n transcoder!.initialize();\r\n if (transcoder!.needMemoryManager()) {\r\n if (!this._wasmMemoryManager) {\r\n this._wasmMemoryManager = new WASMMemoryManager();\r\n }\r\n transcoder!.setMemoryManager(this._wasmMemoryManager);\r\n }\r\n if (!TranscoderManager._TranscoderInstances[key]) {\r\n TranscoderManager._TranscoderInstances[key] = [];\r\n }\r\n TranscoderManager._TranscoderInstances[key].push(transcoder);\r\n }\r\n break;\r\n }\r\n }\r\n\r\n return transcoder;\r\n }\r\n\r\n private _getExistingTranscoder(key: string, transcoderName: string): Transcoder | null {\r\n const transcoders = TranscoderManager._TranscoderInstances[key];\r\n\r\n if (transcoders) {\r\n for (let t = 0; t < transcoders.length; ++t) {\r\n const transcoder = transcoders[t];\r\n if (transcoderName === transcoder.getName()) {\r\n return transcoder;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n","import type { sourceTextureFormat, transcodeTarget } from \"../transcoder\";\r\nimport { Transcoder } from \"../transcoder\";\r\nimport { WASMMemoryManager } from \"../wasmMemoryManager\";\r\nimport type { KTX2FileReader, IKTX2_ImageDesc } from \"../ktx2FileReader\";\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport class LiteTranscoder extends Transcoder {\r\n private _modulePath: string;\r\n private _modulePromise: Promise<{ module: any }>;\r\n private _memoryManager: WASMMemoryManager;\r\n protected _transcodeInPlace: boolean;\r\n\r\n protected _loadModule(): Promise<{ module: any }> {\r\n if (this._modulePromise) {\r\n return this._modulePromise;\r\n }\r\n\r\n this._modulePromise = WASMMemoryManager.LoadWASM(this._modulePath).then((wasmBinary) => {\r\n return new Promise((resolve) => {\r\n WebAssembly.instantiate(wasmBinary as ArrayBuffer, { env: { memory: this._memoryManager.wasmMemory } }).then((moduleWrapper) => {\r\n resolve({ module: moduleWrapper.instance.exports });\r\n });\r\n });\r\n });\r\n\r\n return this._modulePromise;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n protected get memoryManager(): WASMMemoryManager {\r\n return this._memoryManager;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n protected setModulePath(modulePath: string): void {\r\n this._modulePath = modulePath;\r\n }\r\n\r\n public initialize(): void {\r\n this._transcodeInPlace = true;\r\n }\r\n\r\n public needMemoryManager(): boolean {\r\n return true;\r\n }\r\n\r\n public setMemoryManager(memoryMgr: WASMMemoryManager): void {\r\n this._memoryManager = memoryMgr;\r\n }\r\n\r\n public transcode(\r\n src: sourceTextureFormat,\r\n dst: transcodeTarget,\r\n level: number,\r\n width: number,\r\n height: number,\r\n uncompressedByteLength: number,\r\n ktx2Reader: KTX2FileReader,\r\n imageDesc: IKTX2_ImageDesc | null,\r\n encodedData: Uint8Array\r\n ): Promise<Uint8Array | null> {\r\n return this._loadModule().then((moduleWrapper: any) => {\r\n const transcoder: any = moduleWrapper.module;\r\n const [textureView, uncompressedTextureView, nBlocks] = this._prepareTranscoding(width, height, uncompressedByteLength, encodedData);\r\n\r\n return transcoder.transcode(nBlocks) === 0 ? (this._transcodeInPlace ? textureView.slice() : uncompressedTextureView!.slice()) : null;\r\n });\r\n }\r\n\r\n protected _prepareTranscoding(\r\n width: number,\r\n height: number,\r\n uncompressedByteLength: number,\r\n encodedData: Uint8Array,\r\n forceRGBA = false\r\n ): [Uint8Array, Uint8Array | null, number] {\r\n const nBlocks = ((width + 3) >> 2) * ((height + 3) >> 2);\r\n\r\n if (forceRGBA) {\r\n uncompressedByteLength = width * ((height + 3) >> 2) * 4 * 4;\r\n }\r\n\r\n const texMemoryPages = ((nBlocks * 16 + 65535 + (this._transcodeInPlace ? 0 : uncompressedByteLength)) >> 16) + 1;\r\n\r\n const textureView = this.memoryManager.getMemoryView(texMemoryPages, 65536, nBlocks * 16);\r\n\r\n const uncompressedTextureView = this._transcodeInPlace\r\n ? null\r\n : new Uint8Array(this._memoryManager.wasmMemory.buffer, 65536 + nBlocks * 16, forceRGBA ? width * height * 4 : uncompressedByteLength);\r\n\r\n textureView.set(encodedData);\r\n\r\n return [textureView, uncompressedTextureView, nBlocks];\r\n }\r\n}\r\n","import { sourceTextureFormat, transcodeTarget } from \"../transcoder\";\r\nimport { LiteTranscoder } from \"./liteTranscoder\";\r\n\r\n/**\r\n * @hidden\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class LiteTranscoder_UASTC_ASTC extends LiteTranscoder {\r\n /**\r\n * URL to use when loading the wasm module for the transcoder\r\n */\r\n public static WasmModuleURL = \"https://preview.babylonjs.com/ktx2Transcoders/uastc_astc.wasm\";\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public static CanTranscode(src: sourceTextureFormat, dst: transcodeTarget, isInGammaSpace: boolean): boolean {\r\n return src === sourceTextureFormat.UASTC4x4 && dst === transcodeTarget.ASTC_4x4_RGBA;\r\n }\r\n\r\n public static Name = \"UniversalTranscoder_UASTC_ASTC\";\r\n\r\n public getName(): string {\r\n return LiteTranscoder_UASTC_ASTC.Name;\r\n }\r\n\r\n public initialize(): void {\r\n super.initialize();\r\n this.setModulePath(LiteTranscoder_UASTC_ASTC.WasmModuleURL);\r\n }\r\n}\r\n","import { sourceTextureFormat, transcodeTarget } from \"../transcoder\";\r\nimport { LiteTranscoder } from \"./liteTranscoder\";\r\n\r\n/**\r\n * @hidden\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class LiteTranscoder_UASTC_BC7 extends LiteTranscoder {\r\n /**\r\n * URL to use when loading the wasm module for the transcoder\r\n */\r\n public static WasmModuleURL = \"https://preview.babylonjs.com/ktx2Transcoders/uastc_bc7.wasm\";\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public static CanTranscode(src: sourceTextureFormat, dst: transcodeTarget, isInGammaSpace: boolean): boolean {\r\n return src === sourceTextureFormat.UASTC4x4 && dst === transcodeTarget.BC7_RGBA;\r\n }\r\n\r\n public static Name = \"UniversalTranscoder_UASTC_BC7\";\r\n\r\n public getName(): string {\r\n return LiteTranscoder_UASTC_BC7.Name;\r\n }\r\n\r\n public initialize(): void {\r\n super.initialize();\r\n this.setModulePath(LiteTranscoder_UASTC_BC7.WasmModuleURL);\r\n }\r\n}\r\n","import { sourceTextureFormat, transcodeTarget } from \"../transcoder\";\r\nimport { LiteTranscoder } from \"./liteTranscoder\";\r\nimport type { KTX2FileReader, IKTX2_ImageDesc } from \"../ktx2FileReader\";\r\n\r\n/**\r\n * @hidden\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class LiteTranscoder_UASTC_RGBA_UNORM extends LiteTranscoder {\r\n /**\r\n * URL to use when loading the wasm module for the transcoder (unorm)\r\n */\r\n public static WasmModuleURL = \"https://preview.babylonjs.com/ktx2Transcoders/uastc_rgba32_unorm.wasm\";\r\n\r\n public static CanTranscode(src: sourceTextureFormat, dst: transcodeTarget, isInGammaSpace: boolean): boolean {\r\n return src === sourceTextureFormat.UASTC4x4 && dst === transcodeTarget.RGBA32 && !isInGammaSpace;\r\n }\r\n\r\n public static Name = \"UniversalTranscoder_UASTC_RGBA_UNORM\";\r\n\r\n public getName(): string {\r\n return LiteTranscoder_UASTC_RGBA_UNORM.Name;\r\n }\r\n\r\n public initialize(): void {\r\n super.initialize();\r\n this._transcodeInPlace = false;\r\n this.setModulePath(LiteTranscoder_UASTC_RGBA_UNORM.WasmModuleURL);\r\n }\r\n\r\n public transcode(\r\n src: sourceTextureFormat,\r\n dst: transcodeTarget,\r\n level: number,\r\n width: number,\r\n height: number,\r\n uncompressedByteLength: number,\r\n ktx2Reader: KTX2FileReader,\r\n imageDesc: IKTX2_ImageDesc | null,\r\n encodedData: Uint8Array\r\n ): Promise<Uint8Array | null> {\r\n return this._loadModule().then((moduleWrapper: any) => {\r\n const transcoder: any = moduleWrapper.module;\r\n const [, uncompressedTextureView] = this._prepareTranscoding(width, height, uncompressedByteLength, encodedData, true);\r\n\r\n return transcoder.decodeRGBA32(width, height) === 0 ? uncompressedTextureView!.slice() : null;\r\n });\r\n }\r\n}\r\n","import { sourceTextureFormat, transcodeTarget } from \"../transcoder\";\r\nimport { LiteTranscoder } from \"./liteTranscoder\";\r\nimport type { KTX2FileReader, IKTX2_ImageDesc } from \"../ktx2FileReader\";\r\n\r\n/**\r\n * @hidden\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class LiteTranscoder_UASTC_RGBA_SRGB extends LiteTranscoder {\r\n /**\r\n * URL to use when loading the wasm module for the transcoder (srgb)\r\n */\r\n public static WasmModuleURL = \"https://preview.babylonjs.com/ktx2Transcoders/uastc_rgba32_srgb.wasm\";\r\n\r\n public static CanTranscode(src: sourceTextureFormat, dst: transcodeTarget, isInGammaSpace: boolean): boolean {\r\n return src === sourceTextureFormat.UASTC4x4 && dst === transcodeTarget.RGBA32 && isInGammaSpace;\r\n }\r\n\r\n public static Name = \"UniversalTranscoder_UASTC_RGBA_SRGB\";\r\n\r\n public getName(): string {\r\n return LiteTranscoder_UASTC_RGBA_SRGB.Name;\r\n }\r\n\r\n public initialize(): void {\r\n super.initialize();\r\n this._transcodeInPlace = false;\r\n this.setModulePath(LiteTranscoder_UASTC_RGBA_SRGB.WasmModuleURL);\r\n }\r\n\r\n public transcode(\r\n src: sourceTextureFormat,\r\n dst: transcodeTarget,\r\n level: number,\r\n width: number,\r\n height: number,\r\n uncompressedByteLength: number,\r\n ktx2Reader: KTX2FileReader,\r\n imageDesc: IKTX2_ImageDesc | null,\r\n encodedData: Uint8Array\r\n ): Promise<Uint8Array | null> {\r\n return this._loadModule().then((moduleWrapper: any) => {\r\n const transcoder: any = moduleWrapper.module;\r\n const [, uncompressedTextureView] = this._prepareTranscoding(width, height, uncompressedByteLength, encodedData, true);\r\n\r\n return transcoder.decodeRGBA32(width, height) === 0 ? uncompressedTextureView!.slice() : null;\r\n });\r\n }\r\n}\r\n","import { Transcoder, sourceTextureFormat, transcodeTarget } from \"../transcoder\";\r\nimport type { KTX2FileReader, IKTX2_ImageDesc } from \"../ktx2FileReader\";\r\nimport { WASMMemoryManager } from \"../wasmMemoryManager\";\r\n\r\ndeclare let MSC_TRANSCODER: any;\r\n\r\ndeclare function importScripts(...urls: string[]): void;\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport class MSCTranscoder extends Transcoder {\r\n /**\r\n * URL to use when loading the MSC transcoder\r\n */\r\n public static JSModuleURL = \"https://preview.babylonjs.com/ktx2Transcoders/msc_basis_transcoder.js\";\r\n /**\r\n * URL to use when loading the wasm module for the transcoder\r\n */\r\n public static WasmModuleURL = \"https://preview.babylonjs.com/ktx2Transcoders/msc_basis_transcoder.wasm\";\r\n\r\n public static UseFromWorkerThread = true;\r\n\r\n public static Name = \"MSCTranscoder\";\r\n\r\n public getName(): string {\r\n return MSCTranscoder.Name;\r\n }\r\n\r\n private _mscBasisTranscoderPromise: Promise<void>;\r\n private _mscBasisModule: any;\r\n\r\n private _getMSCBasisTranscoder(): Promise<void> {\r\n if (this._mscBasisTranscoderPromise) {\r\n return this._mscBasisTranscoderPromise;\r\n }\r\n\r\n this._mscBasisTranscoderPromise = WASMMemoryManager.LoadWASM(MSCTranscoder.WasmModuleURL).then((wasmBinary) => {\r\n if (MSCTranscoder.UseFromWorkerThread) {\r\n importScripts(MSCTranscoder.JSModuleURL);\r\n }\r\n // Worker Number = 0 and MSC_TRANSCODER has not been loaded yet.\r\n else if (typeof MSC_TRANSCODER === \"undefined\") {\r\n return new Promise((resolve, reject) => {\r\n const head = document.getElementsByTagName(\"head\")[0];\r\n const script = document.createElement(\"script\");\r\n script.setAttribute(\"type\", \"text/javascript\");\r\n script.setAttribute(\"src\", MSCTranscoder.JSModuleURL);\r\n\r\n script.onload = () => {\r\n MSC_TRANSCODER({ wasmBinary }).then((basisModule: any) => {\r\n basisModule.initTranscoders();\r\n this._mscBasisModule = basisModule;\r\n resolve();\r\n });\r\n };\r\n\r\n script.onerror = () => {\r\n reject(\"Can not load MSC_TRANSCODER script.\");\r\n };\r\n\r\n head.appendChild(script);\r\n });\r\n }\r\n\r\n return new Promise((resolve) => {\r\n MSC_TRANSCODER({ wasmBinary }).then((basisModule: any) => {\r\n basisModule.initTranscoders();\r\n this._mscBasisModule = basisModule;\r\n resolve();\r\n });\r\n });\r\n });\r\n\r\n return this._mscBasisTranscoderPromise;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public static CanTranscode(src: sourceTextureFormat, dst: transcodeTarget, isInGammaSpace: boolean): boolean {\r\n return true;\r\n }\r\n\r\n public transcode(\r\n src: sourceTextureFormat,\r\n dst: transcodeTarget,\r\n level: number,\r\n width: number,\r\n height: number,\r\n uncompressedByteLength: number,\r\n ktx2Reader: KTX2FileReader,\r\n imageDesc: IKTX2_ImageDesc | null,\r\n encodedData: Uint8Array\r\n ): Promise<Uint8Array | null> {\r\n const isVideo = false;\r\n\r\n return this._getMSCBasisTranscoder().then(() => {\r\n const basisModule = this._mscBasisModule;\r\n\r\n let transcoder: any;\r\n let imageInfo: any;\r\n let result: any;\r\n let textureData: any = null;\r\n\r\n try {\r\n transcoder = src === sourceTextureFormat.UASTC4x4 ? new basisModule.UastcImageTranscoder() : new basisModule.BasisLzEtc1sImageTranscoder();\r\n const texFormat = src === sourceTextureFormat.UASTC4x4 ? basisModule.TextureFormat.UASTC4x4 : basisModule.TextureFormat.ETC1S;\r\n\r\n imageInfo = new basisModule.ImageInfo(texFormat, width, height, level);\r\n\r\n const targetFormat = basisModule.TranscodeTarget[transcodeTarget[dst]]; // works because the labels of the sourceTextureFormat enum are the same as the property names used in TranscodeTarget!\r\n\r\n if (!basisModule.isFormatSupported(targetFormat, texFormat)) {\r\n throw new Error(`MSCTranscoder: Transcoding from \"${sourceTextureFormat[src]}\" to \"${transcodeTarget[dst]}\" not supported by current transcoder build.`);\r\n }\r\n\r\n if (src === sourceTextureFormat.ETC1S) {\r\n const sgd = ktx2Reader.supercompressionGlobalData;\r\n\r\n transcoder.decodePalettes(sgd.endpointCount, sgd.endpointsData, sgd.selectorCount, sgd.selectorsData);\r\n transcoder.decodeTables(sgd.tablesData);\r\n\r\n imageInfo.flags = imageDesc!.imageFlags;\r\n imageInfo.rgbByteOffset = 0;\r\n imageInfo.rgbByteLength = imageDesc!.rgbSliceByteLength;\r\n imageInfo.alphaByteOffset = imageDesc!.alphaSliceByteOffset > 0 ? imageDesc!.rgbSliceByteLength : 0;\r\n imageInfo.alphaByteLength = imageDesc!.alphaSliceByteLength;\r\n\r\n result = transcoder.transcodeImage(targetFormat, encodedData, imageInfo, 0, isVideo);\r\n } else {\r\n imageInfo.flags = 0;\r\n imageInfo.rgbByteOffset = 0;\r\n imageInfo.rgbByteLength = uncompressedByteLength;\r\n imageInfo.alphaByteOffset = 0;\r\n imageInfo.alphaByteLength = 0;\r\n\r\n result = transcoder.transcodeImage(targetFormat, encodedData, imageInfo, 0, ktx2Reader.hasAlpha, isVideo);\r\n }\r\n } finally {\r\n if (transcoder) {\r\n transcoder.delete();\r\n }\r\n\r\n if (imageInfo) {\r\n imageInfo.delete();\r\n }\r\n\r\n if (result && result.transcodedImage) {\r\n textureData = result.transcodedImage.get_typed_memory_view().slice();\r\n result.transcodedImage.delete();\r\n }\r\n }\r\n\r\n return textureData;\r\n });\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/naming-convention */\r\n/**\r\n * From https://github.com/donmccurdy/zstddec by Don McCurdy\r\n */\r\ninterface DecoderExports {\r\n memory: Uint8Array;\r\n\r\n ZSTD_findDecompressedSize: (compressedPtr: number, compressedSize: number) => number;\r\n ZSTD_decompress: (uncompressedPtr: number, uncompressedSize: number, compressedPtr: number, compressedSize: number) => number;\r\n malloc: (ptr: number) => number;\r\n free: (ptr: number) => void;\r\n}\r\n\r\nlet init: Promise<void>;\r\nlet instance: { exports: DecoderExports };\r\nlet heap: Uint8Array;\r\n\r\nconst IMPORT_OBJECT = {\r\n env: {\r\n emscripten_notify_memory_growth: function (): void {\r\n heap = new Uint8Array(instance.exports.memory.buffer);\r\n },\r\n },\r\n};\r\n\r\n/**\r\n * ZSTD (Zstandard) decoder.\r\n */\r\nexport class ZSTDDecoder {\r\n public static WasmModuleURL = \"https://preview.babylonjs.com/zstddec.wasm\";\r\n\r\n init(): Promise<void> {\r\n if (init) {\r\n return init;\r\n }\r\n\r\n if (typeof fetch !== \"undefined\") {\r\n // Web.\r\n\r\n init = fetch(ZSTDDecoder.WasmModuleURL)\r\n .then((response) => {\r\n if (response.ok) {\r\n return response.arrayBuffer();\r\n }\r\n throw new Error(`Could not fetch the wasm component for the Zstandard decompression lib: ${response.status} - ${response.statusText}`);\r\n })\r\n .then((arrayBuffer) => WebAssembly.instantiate(arrayBuffer, IMPORT_OBJECT))\r\n .then(this._init);\r\n } else {\r\n // Node.js.\r\n\r\n init = WebAssembly.instantiateStreaming(fetch(ZSTDDecoder.WasmModuleURL), IMPORT_OBJECT).then(this._init);\r\n }\r\n\r\n return init;\r\n }\r\n\r\n _init(result: WebAssembly.WebAssemblyInstantiatedSource): void {\r\n instance = result.instance as unknown as { exports: DecoderExports };\r\n\r\n IMPORT_OBJECT.env.emscripten_notify_memory_growth(); // initialize heap.\r\n }\r\n\r\n decode(array: Uint8Array, uncompressedSize = 0): Uint8Array {\r\n if (!instance) {\r\n throw new Error(`ZSTDDecoder: Await .init() before decoding.`);\r\n }\r\n\r\n // Write compressed data into WASM memory.\r\n const compressedSize = array.byteLength;\r\n const compressedPtr = instance.exports.malloc(compressedSize);\r\n heap.set(array, compressedPtr);\r\n\r\n // Decompress into WASM memory.\r\n uncompressedSize = uncompressedSize || Number(instance.exports.ZSTD_findDecompressedSize(compressedPtr, compressedSize));\r\n const uncompressedPtr = instance.exports.malloc(uncompressedSize);\r\n const actualSize = instance.exports.ZSTD_decompress(uncompressedPtr, uncompressedSize, compressedPtr, compressedSize);\r\n\r\n // Read decompressed data and free WASM memory.\r\n const dec = heap.slice(uncompressedPtr, uncompressedPtr + actualSize);\r\n instance.exports.free(compressedPtr);\r\n instance.exports.free(uncompressedPtr);\r\n\r\n return dec;\r\n }\r\n}\r\n\r\n/**\r\n * BSD License\r\n *\r\n * For Zstandard software\r\n *\r\n * Copyright (c) 2016-present, Yann Collet, Facebook, Inc. All rights reserved.\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *\r\n * * Redistributions of source code must retain the above copyright notice, this\r\n * list of conditions and the following disclaimer.\r\n *\r\n * * Redistributions in binary form must reproduce the above copyright notice,\r\n * this list of conditions and the following disclaimer in the documentation\r\n * and/or other materials provided with the distribution.\r\n *\r\n * * Neither the name Facebook nor the names of its contributors may be used to\r\n * endorse or promote products derived from this software without specific\r\n * prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\n * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n */\r\n","/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { sourceTextureFormat, transcodeTarget } from \"./transcoder\";\r\n\r\nconst COMPRESSED_RGBA_BPTC_UNORM_EXT = 0x8e8c;\r\nconst COMPRESSED_RGBA_ASTC_4x4_KHR = 0x93b0;\r\nconst COMPRESSED_RGB_S3TC_DXT1_EXT = 0x83f0;\r\nconst COMPRESSED_RGBA_S3TC_DXT5_EXT = 0x83f3;\r\nconst COMPRESSED_RGBA_PVRTC_4BPPV1_IMG = 0x8c02;\r\nconst COMPRESSED_RGB_PVRTC_4BPPV1_IMG = 0x8c00;\r\nconst COMPRESSED_RGBA8_ETC2_EAC = 0x9278;\r\nconst COMPRESSED_RGB8_ETC2 = 0x9274;\r\nconst COMPRESSED_RGB_ETC1_WEBGL = 0x8d64;\r\nconst RGBA8Format = 0x8058;\r\n\r\ninterface ILeaf {\r\n transcodeFormat: number;\r\n engineFormat: number;\r\n roundToMultiple4?: boolean;\r\n}\r\n\r\ninterface INode {\r\n cap?: string;\r\n option?: string;\r\n alpha?: boolean;\r\n needsPowerOfTwo?: boolean;\r\n yes?: INode | ILeaf;\r\n no?: INode | ILeaf;\r\n}\r\n\r\ninterface IDecisionTree {\r\n [textureFormat: string]: INode;\r\n}\r\n\r\nconst DecisionTree: IDecisionTree = {\r\n ETC1S: {\r\n option: \"forceRGBA\",\r\n yes: {\r\n transcodeFormat: transcodeTarget.RGBA32,\r\n engineFormat: RGBA8Format,\r\n roundToMultiple4: false,\r\n },\r\n no: {\r\n cap: \"etc2\",\r\n yes: {\r\n alpha: true,\r\n yes: {\r\n transcodeFormat: transcodeTarget.ETC2_RGBA,\r\n engineFormat: COMPRESSED_RGBA8_ETC2_EAC,\r\n },\r\n no: {\r\n transcodeFormat: transcodeTarget.ETC1_RGB,\r\n engineFormat: COMPRESSED_RGB8_ETC2,\r\n },\r\n },\r\n no: {\r\n cap: \"etc1\",\r\n alpha: false,\r\n yes: {\r\n transcodeFormat: transcodeTarget.ETC1_RGB,\r\n engineFormat: COMPRESSED_RGB_ETC1_WEBGL,\r\n },\r\n no: {\r\n cap: \"bptc\",\r\n yes: {\r\n transcodeFormat: transcodeTarget.BC7_RGBA,\r\n engineFormat: COMPRESSED_RGBA_BPTC_UNORM_EXT,\r\n },\r\n no: {\r\n cap: \"s3tc\",\r\n yes: {\r\n alpha: true,\r\n yes: {\r\n transcodeFormat: transcodeTarget.BC3_RGBA,\r\n engineFormat: COMPRESSED_RGBA_S3TC_DXT5_EXT,\r\n },\r\n no: {\r\n transcodeFormat: transcodeTarget.BC1_RGB,\r\n engineFormat: COMPRESSED_RGB_S3TC_DXT1_EXT,\r\n },\r\n },\r\n no: {\r\n cap: \"pvrtc\",\r\n needsPowerOfTwo: true,\r\n yes: {\r\n alpha: true,\r\n yes: {\r\n transcodeFormat: transcodeTarget.PVRTC1_4_RGBA,\r\n engineFormat: COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,\r\n },\r\n no: {\r\n transcodeFormat: transcodeTarget.PVRTC1_4_RGB,\r\n engineFormat: COMPRESSED_RGB_PVRTC_4BPPV1_IMG,\r\n },\r\n },\r\n no: {\r\n transcodeFormat: transcodeTarget.RGBA32,\r\n engineFormat: RGBA8Format,\r\n roundToMultiple4: false,\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n\r\n UASTC: {\r\n option: \"forceRGBA\",\r\n yes: {\r\n transcodeFormat: transcodeTarget.RGBA32,\r\n engineFormat: RGBA8Format,\r\n roundToMultiple4: false,\r\n },\r\n no: {\r\n cap: \"astc\",\r\n yes: {\r\n transcodeFormat: transcodeTarget.ASTC_4x4_RGBA,\r\n engineFormat: COMPRESSED_RGBA_ASTC_4x4_KHR,\r\n },\r\n no: {\r\n cap: \"bptc\",\r\n yes: {\r\n transcodeFormat: transcodeTarget.BC7_RGBA,\r\n engineFormat: COMPRESSED_RGBA_BPTC_UNORM_EXT,\r\n },\r\n no: {\r\n option: \"useRGBAIfASTCBC7NotAvailableWhenUASTC\",\r\n yes: {\r\n transcodeFormat: transcodeTarget.RGBA32,\r\n engineFormat: RGBA8Format,\r\n roundToMultiple4: false,\r\n },\r\n no: {\r\n cap: \"etc2\",\r\n yes: {\r\n alpha: true,\r\n yes: {\r\n transcodeFormat: transcodeTarget.ETC2_RGBA,\r\n engineFormat: COMPRESSED_RGBA8_ETC2_EAC,\r\n },\r\n no: {\r\n transcodeFormat: transcodeTarget.ETC1_RGB,\r\n engineFormat: COMPRESSED_RGB8_ETC2,\r\n },\r\n },\r\n no: {\r\n cap: \"etc1\",\r\n yes: {\r\n transcodeFormat: transcodeTarget.ETC1_RGB,\r\n engineFormat: COMPRESSED_RGB_ETC1_WEBGL,\r\n },\r\n no: {\r\n cap: \"s3tc\",\r\n yes: {\r\n alpha: true,\r\n yes: {\r\n transcodeFormat: transcodeTarget.BC3_RGBA,\r\n engineFormat: COMPRESSED_RGBA_S3TC_DXT5_EXT,\r\n },\r\n no: {\r\n transcodeFormat: transcodeTarget.BC1_RGB,\r\n engineFormat: COMPRESSED_RGB_S3TC_DXT1_EXT,\r\n },\r\n },\r\n no: {\r\n cap: \"pvrtc\",\r\n needsPowerOfTwo: true,\r\n yes: {\r\n alpha: true,\r\n yes: {\r\n transcodeFormat: transcodeTarget.PVRTC1_4_RGBA,\r\n engineFormat: COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,\r\n },\r\n no: {\r\n transcodeFormat: transcodeTarget.PVRTC1_4_RGB,\r\n engineFormat: COMPRESSED_RGB_PVRTC_4BPPV1_IMG,\r\n },\r\n },\r\n no: {\r\n transcodeFormat: transcodeTarget.RGBA32,\r\n engineFormat: RGBA8Format,\r\n roundToMultiple4: false,\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n};\r\n\r\nexport class TranscodeDecisionTree {\r\n private static _IsLeafNode(node: INode | ILeaf): node is ILeaf {\r\n return (node as ILeaf).transcodeFormat !== undefined;\r\n }\r\n\r\n private _hasAlpha: boolean;\r\n private _isPowerOfTwo: boolean;\r\n private _caps: any;\r\n private _options: any;\r\n private _transcodeFormat: number;\r\n private _engineFormat: number;\r\n private _roundToMultiple4: boolean;\r\n\r\n public get transcodeFormat() {\r\n return this._transcodeFormat;\r\n }\r\n\r\n public get engineFormat() {\r\n return this._engineFormat;\r\n }\r\n\r\n public get roundToMultiple4() {\r\n return this._roundToMultiple4;\r\n }\r\n\r\n constructor(textureFormat: sourceTextureFormat, hasAlpha: boolean, isPowerOfTwo: boolean, caps: any, options?: any) {\r\n this._hasAlpha = hasAlpha;\r\n this._isPowerOfTwo = isPowerOfTwo;\r\n this._caps = caps;\r\n this._options = options ?? {};\r\n\r\n this._parseNode(textureFormat === sourceTextureFormat.UASTC4x4 ? DecisionTree.UASTC : DecisionTree.ETC1S);\r\n }\r\n\r\n private _parseNode(node: INode | ILeaf): void {\r\n if (TranscodeDecisionTree._IsLeafNode(node)) {\r\n this._transcodeFormat = node.transcodeFormat;\r\n this._engineFormat = node.engineFormat;\r\n this._roundToMultiple4 = node.roundToMultiple4 ?? true;\r\n } else {\r\n let condition = true;\r\n\r\n if (node.cap !== undefined) {\r\n condition = condition && this._caps[node.cap];\r\n }\r\n if (node.option !== undefined) {\r\n condition = condition && this._options[node.option];\r\n }\r\n if (node.alpha !== undefined) {\r\n condition = condition && this._hasAlpha === node.alpha;\r\n }\r\n if (node.needsPowerOfTwo !== undefined) {\r\n condition = condition && this._isPowerOfTwo === node.needsPowerOfTwo;\r\n }\r\n\r\n this._parseNode(condition ? node.yes! : node.no!);\r\n }\r\n }\r\n}\r\n","/**\r\n * Resources used for the implementation:\r\n * - 3js KTX2 loader: https://github.com/mrdoob/three.js/blob/dfb5c23ce126ec845e4aa240599915fef5375797/examples/jsm/loaders/KTX2Loader.js\r\n * - Universal Texture Transcoders: https://github.com/KhronosGroup/Universal-Texture-Transcoders\r\n * - KTX2 specification: http://github.khronos.org/KTX-Specification/\r\n * - KTX2 binaries to convert files: https://github.com/KhronosGroup/KTX-Software/releases\r\n * - KTX specification: https://www.khronos.org/registry/DataFormat/specs/1.3/dataformat.1.3.html\r\n * - KTX-Software: https://github.com/KhronosGroup/KTX-Software\r\n */\r\n\r\nimport type { IKTX2_ImageDesc } from \"./ktx2FileReader\";\r\nimport { KTX2FileReader, SupercompressionScheme } from \"./ktx2FileReader\";\r\nimport { TranscoderManager } from \"./transcoderManager\";\r\nimport { LiteTranscoder_UASTC_ASTC } from \"./Transcoders/liteTranscoder_UASTC_ASTC\";\r\nimport { LiteTranscoder_UASTC_BC7 } from \"./Transcoders/liteTranscoder_UASTC_BC7\";\r\nimport { LiteTranscoder_UASTC_RGBA_UNORM } from \"./Transcoders/liteTranscoder_UASTC_RGBA_UNORM\";\r\nimport { LiteTranscoder_UASTC_RGBA_SRGB } from \"./Transcoders/liteTranscoder_UASTC_RGBA_SRGB\";\r\nimport { MSCTranscoder } from \"./Transcoders/mscTranscoder\";\r\nimport { transcodeTarget, sourceTextureFormat } from \"./transcoder\";\r\nimport { ZSTDDecoder } from \"./zstddec\";\r\nimport { TranscodeDecisionTree } from \"./transcodeDecisionTree\";\r\n\r\nexport interface IDecodedData {\r\n width: number;\r\n height: number;\r\n transcodedFormat: number;\r\n mipmaps: Array<IMipmap>;\r\n isInGammaSpace: boolean;\r\n hasAlpha: boolean;\r\n errors?: string;\r\n transcoderName?: string;\r\n}\r\n\r\nexport interface IMipmap {\r\n data: Uint8Array | null;\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport interface ICompressedFormatCapabilities {\r\n astc?: boolean;\r\n bptc?: boolean;\r\n s3tc?: boolean;\r\n pvrtc?: boolean;\r\n etc2?: boolean;\r\n etc1?: boolean;\r\n}\r\n\r\nexport interface IKTX2DecoderOptions {\r\n /** use RGBA format if ASTC and BC7 are not available as transcoded format */\r\n useRGBAIfASTCBC7NotAvailableWhenUASTC?: boolean;\r\n\r\n /** force to always use RGBA for transcoded format */\r\n forceRGBA?: boolean;\r\n\r\n /**\r\n * list of transcoders to bypass when looking for a suitable transcoder. The available transcoders are:\r\n * UniversalTranscoder_UASTC_ASTC\r\n * UniversalTranscoder_UASTC_BC7\r\n * UniversalTranscoder_UASTC_RGBA_UNORM\r\n * UniversalTranscoder_UASTC_RGBA_SRGB\r\n * MSCTranscoder\r\n */\r\n bypassTranscoders?: string[];\r\n}\r\n\r\nconst isPowerOfTwo = (value: number) => {\r\n return (value & (value - 1)) === 0 && value !== 0;\r\n};\r\n\r\n/**\r\n * Class for decoding KTX2 files\r\n *\r\n */\r\nexport class KTX2Decoder {\r\n private _transcoderMgr: TranscoderManager;\r\n private _zstdDecoder: ZSTDDecoder;\r\n\r\n constructor() {\r\n this._transcoderMgr = new TranscoderManager();\r\n }\r\n\r\n public decode(data: Uint8Array, caps: ICompressedFormatCapabilities, options?: IKTX2DecoderOptions): Promise<IDecodedData | null> {\r\n return Promise.resolve().then(() => {\r\n const kfr = new KTX2FileReader(data);\r\n\r\n if (!kfr.isValid()) {\r\n throw new Error(\"Invalid KT2 file: wrong signature\");\r\n }\r\n\r\n kfr.parse();\r\n\r\n if (kfr.needZSTDDecoder) {\r\n if (!this._zstdDecoder) {\r\n this._zstdDecoder = new ZSTDDecoder();\r\n }\r\n\r\n return this._zstdDecoder.init().then(() => {\r\n return this._decodeData(kfr, caps, options);\r\n });\r\n }\r\n\r\n return this._decodeData(kfr, caps, options);\r\n });\r\n }\r\n\r\n private _decodeData(kfr: KTX2FileReader, caps: ICompressedFormatCapabilities, options?: IKTX2DecoderOptions): Promise<IDecodedData> {\r\n const width = kfr.header.pixelWidth;\r\n const height = kfr.header.pixelHeight;\r\n const srcTexFormat = kfr.textureFormat;\r\n\r\n const decisionTree = new TranscodeDecisionTree(srcTexFormat, kfr.hasAlpha, isPowerOfTwo(width) && isPowerOfTwo(height), caps, options);\r\n\r\n const transcodeFormat = decisionTree.transcodeFormat;\r\n const engineFormat = decisionTree.engineFormat;\r\n const roundToMultiple4 = decisionTree.roundToMultiple4;\r\n\r\n const transcoder = this._transcoderMgr.findTranscoder(srcTexFormat, transcodeFormat, kfr.isInGammaSpace, options?.bypassTranscoders);\r\n\r\n if (transcoder === null) {\r\n throw new Error(`no transcoder found to transcode source texture format \"${sourceTextureFormat[srcTexFormat]}\" to format \"${transcodeTarget[transcodeFormat]}\"`);\r\n }\r\n\r\n const mipmaps: Array<IMipmap> = [];\r\n const dataPromises: Array<Promise<Uint8Array | null>> = [];\r\n const decodedData: IDecodedData = {\r\n width: 0,\r\n height: 0,\r\n transcodedFormat: engineFormat,\r\n mipmaps,\r\n isInGammaSpace: kfr.isInGammaSpace,\r\n hasAlpha: kfr.hasAlpha,\r\n transcoderName: transcoder.getName(),\r\n };\r\n\r\n let firstImageDescIndex = 0;\r\n\r\n for (let level = 0; level < kfr.header.levelCount; level++) {\r\n if (level > 0) {\r\n firstImageDescIndex += Math.max(kfr.header.layerCount, 1) * kfr.header.faceCount * Math.max(kfr.header.pixelDepth >> (level - 1), 1);\r\n }\r\n\r\n const levelWidth = Math.floor(width / (1 << level)) || 1;\r\n const levelHeight = Math.floor(height / (1 << level)) || 1;\r\n\r\n const numImagesInLevel = kfr.header.faceCount; // note that cubemap are not supported yet (see KTX2FileReader), so faceCount == 1\r\n const levelImageByteLength = ((levelWidth + 3) >> 2) * ((levelHeight + 3) >> 2) * kfr.dfdBlock.bytesPlane[0];\r\n\r\n const levelUncompressedByteLength = kfr.levels[level].uncompressedByteLength;\r\n\r\n let levelDataBuffer = kfr.data.buffer;\r\n\r\n let levelDataOffset = kfr.levels[level].byteOffset + kfr.data.byteOffset;\r\n let imageOffsetInLevel = 0;\r\n\r\n if (kfr.header.supercompressionScheme === SupercompressionScheme.ZStandard) {\r\n levelDataBuffer = this._zstdDecoder.decode(new Uint8Array(levelDataBuffer, levelDataOffset, kfr.levels[level].byteLength), levelUncompressedByteLength);\r\n levelDataOffset = 0;\r\n }\r\n\r\n if (level === 0) {\r\n decodedData.width = roundToMultiple4 ? (levelWidth + 3) & ~3 : levelWidth;\r\n decodedData.height = roundToMultiple4 ? (levelHeight + 3) & ~3 : levelHeight;\r\n }\r\n\r\n for (let imageIndex = 0; imageIndex < numImagesInLevel; imageIndex++) {\r\n let encodedData: Uint8Array;\r\n let imageDesc: IKTX2_ImageDesc | null = null;\r\n\r\n if (kfr.header.supercompressionScheme === SupercompressionScheme.BasisLZ) {\r\n imageDesc = kfr.supercompressionGlobalData.imageDescs![firstImageDescIndex + imageIndex];\r\n\r\n encodedData = new Uint8Array(levelDataBuffer, levelDataOffset + imageDesc.rgbSliceByteOffset, imageDesc.rgbSliceByteLength + imageDesc.alphaSliceByteLength);\r\n } else {\r\n encodedData = new Uint8Array(levelDataBuffer, levelDataOffset + imageOffsetInLevel, levelImageByteLength);\r\n\r\n imageOffsetInLevel += levelImageByteLength;\r\n }\r\n\r\n const mipmap: IMipmap = {\r\n data: null,\r\n width: levelWidth,\r\n height: levelHeight,\r\n };\r\n\r\n const transcodedData = transcoder\r\n .transcode(srcTexFormat, transcodeFormat, level, levelWidth, levelHeight, levelUncompressedByteLength, kfr, imageDesc, encodedData)\r\n .then((data) => {\r\n mipmap.data = data;\r\n return data;\r\n })\r\n .catch((reason) => {\r\n decodedData.errors = decodedData.errors ?? \"\";\r\n decodedData.errors += reason + \"\\n\" + reason.stack + \"\\n\";\r\n return null;\r\n });\r\n\r\n dataPromises.push(transcodedData);\r\n\r\n mipmaps.push(mipmap);\r\n }\r\n }\r\n\r\n return Promise.all(dataPromises).then(() => {\r\n return decodedData;\r\n });\r\n }\r\n}\r\n\r\n// Put in the order you want the transcoders to be used in priority\r\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_ASTC);\r\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_BC7);\r\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_RGBA_UNORM);\r\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_RGBA_SRGB);\r\nTranscoderManager.RegisterTranscoder(MSCTranscoder); // catch all transcoder - will throw an error if the format can't be transcoded\r\n","/* eslint-disable import/no-internal-modules */\r\nimport { KTX2Decoder } from \"../index\";\r\n\r\nconst globalObject = typeof global !== \"undefined\" ? global : typeof window !== \"undefined\" ? window : undefined;\r\nif (typeof globalObject !== \"undefined\") {\r\n (<any>globalObject).KTX2DECODER = KTX2Decoder;\r\n}\r\n\r\nexport * from \"../index\";\r\n","import * as ktx2decoder from \"ktx2decoder/legacy/legacy\";\r\n\r\nexport { ktx2decoder };\r\nexport default ktx2decoder;\r\n"],"names":["root","factory","exports","module","define","amd","self","global","this","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","g","globalThis","Function","e","window","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","sourceTextureFormat","transcodeTarget","SupercompressionScheme","DataReader","constructor","buffer","byteOffset","byteLength","_dataView","DataView","_dataByteOffset","readUint8","getUint8","readInt8","getInt8","readUint16","getUint16","readInt16","getInt16","readUint32","getUint32","readInt32","getInt32","readUint64","combined","readUint8Array","Uint8Array","skipBytes","Transcoder","static","src","dst","isInGammaSpace","getName","Name","initialize","needMemoryManager","setMemoryManager","memoryMgr","transcode","level","width","height","uncompressedByteLength","ktx2Reader","imageDesc","encodedData","Promise","resolve","KTX2FileReader","data","_data","header","_header","levels","_levels","dfdBlock","_dfdBlock","supercompressionGlobalData","_supercompressionGlobalData","isValid","IsValid","parse","offsetInFile","hdrReader","vkFormat","typeSize","pixelWidth","pixelHeight","pixelDepth","layerCount","faceCount","levelCount","supercompressionScheme","dfdByteOffset","dfdByteLength","kvdByteOffset","kvdByteLength","sgdByteOffset","sgdByteLength","Error","Math","max","levelReader","push","dfdReader","vendorId","descriptorType","versionNumber","descriptorBlockSize","colorModel","colorPrimaries","transferFunction","flags","texelBlockDimension","x","y","z","w","bytesPlane","numSamples","samples","Array","i","sample","bitOffset","bitLength","channelType","channelFlags","samplePosition","sampleLower","sampleUpper","sgd","sgdReader","endpointCount","selectorCount","endpointsByteLength","selectorsByteLength","tablesByteLength","extendedByteLength","imageDescs","imageCount","_getImageCount","imageFlags","rgbSliceByteOffset","rgbSliceByteLength","alphaSliceByteOffset","alphaSliceByteLength","endpointsByteOffset","selectorsByteOffset","tablesByteOffset","extendedByteOffset","endpointsData","selectorsData","tablesData","extendedData","layerPixelDepth","textureFormat","UASTC4x4","ETC1S","hasAlpha","needZSTDDecoder","ZStandard","identifier","WASMMemoryManager","initialMemoryPages","InitialMemoryPages","_numPages","_memory","WebAssembly","Memory","initial","_memoryViewByteLength","_memoryViewOffset","_memoryView","path","LoadBinariesFromCurrentThread","reject","fetch","then","response","ok","arrayBuffer","status","statusText","wasmBinary","catch","reason","id","_RequestId","wasmLoadedHandler","msg","action","removeEventListener","addEventListener","postMessage","wasmMemory","getMemoryView","numPages","offset","grow","TranscoderManager","transcoder","_Transcoders","findTranscoder","bypass","length","CanTranscode","indexOf","_getExistingTranscoder","_wasmMemoryManager","_TranscoderInstances","transcoderName","transcoders","t","LiteTranscoder","_loadModule","_modulePromise","LoadWASM","_modulePath","instantiate","env","memory","_memoryManager","moduleWrapper","instance","memoryManager","setModulePath","modulePath","_transcodeInPlace","textureView","uncompressedTextureView","nBlocks","_prepareTranscoding","slice","forceRGBA","texMemoryPages","set","LiteTranscoder_UASTC_ASTC","ASTC_4x4_RGBA","super","WasmModuleURL","LiteTranscoder_UASTC_BC7","BC7_RGBA","LiteTranscoder_UASTC_RGBA_UNORM","RGBA32","decodeRGBA32","LiteTranscoder_UASTC_RGBA_SRGB","MSCTranscoder","_getMSCBasisTranscoder","_mscBasisTranscoderPromise","UseFromWorkerThread","importScripts","JSModuleURL","MSC_TRANSCODER","head","document","getElementsByTagName","script","createElement","setAttribute","onload","basisModule","initTranscoders","_mscBasisModule","onerror","appendChild","imageInfo","result","textureData","UastcImageTranscoder","BasisLzEtc1sImageTranscoder","texFormat","TextureFormat","ImageInfo","targetFormat","TranscodeTarget","isFormatSupported","decodePalettes","decodeTables","rgbByteOffset","rgbByteLength","alphaByteOffset","alphaByteLength","transcodeImage","delete","transcodedImage","get_typed_memory_view","init","heap","IMPORT_OBJECT","emscripten_notify_memory_growth","ZSTDDecoder","_init","instantiateStreaming","decode","array","uncompressedSize","compressedSize","compressedPtr","malloc","Number","ZSTD_findDecompressedSize","uncompressedPtr","actualSize","ZSTD_decompress","dec","free","RGBA8Format","DecisionTree","option","yes","transcodeFormat","engineFormat","roundToMultiple4","no","cap","alpha","ETC2_RGBA","ETC1_RGB","BC3_RGBA","BC1_RGB","needsPowerOfTwo","PVRTC1_4_RGBA","PVRTC1_4_RGB","UASTC","TranscodeDecisionTree","isPowerOfTwo","caps","options","_hasAlpha","_isPowerOfTwo","_caps","_options","_parseNode","node","undefined","_transcodeFormat","_engineFormat","_roundToMultiple4","_IsLeafNode","condition","KTX2Decoder","_transcoderMgr","kfr","_zstdDecoder","_decodeData","srcTexFormat","decisionTree","bypassTranscoders","mipmaps","dataPromises","decodedData","transcodedFormat","firstImageDescIndex","levelWidth","floor","levelHeight","numImagesInLevel","levelImageByteLength","levelUncompressedByteLength","levelDataBuffer","levelDataOffset","imageOffsetInLevel","imageIndex","BasisLZ","mipmap","transcodedData","errors","stack","all","RegisterTranscoder","globalObject","KTX2DECODER"],"sourceRoot":""}
@@ -34,10 +34,10 @@ class DataReader {
34
34
  */
35
35
  constructor(buffer, byteOffset, byteLength) {
36
36
  if (buffer.buffer) {
37
- this._dataView = new DataView(buffer.buffer, buffer.byteOffset + (byteOffset !== null && byteOffset !== void 0 ? byteOffset : 0), byteLength !== null && byteLength !== void 0 ? byteLength : buffer.byteLength);
37
+ this._dataView = new DataView(buffer.buffer, buffer.byteOffset + (byteOffset ?? 0), byteLength ?? buffer.byteLength);
38
38
  }
39
39
  else {
40
- this._dataView = new DataView(buffer, byteOffset !== null && byteOffset !== void 0 ? byteOffset : 0, byteLength !== null && byteLength !== void 0 ? byteLength : buffer.byteLength);
40
+ this._dataView = new DataView(buffer, byteOffset ?? 0, byteLength ?? buffer.byteLength);
41
41
  }
42
42
  this._dataByteOffset = 0;
43
43
  }
@@ -686,7 +686,7 @@ class KTX2Decoder {
686
686
  const transcodeFormat = decisionTree.transcodeFormat;
687
687
  const engineFormat = decisionTree.engineFormat;
688
688
  const roundToMultiple4 = decisionTree.roundToMultiple4;
689
- const transcoder = this._transcoderMgr.findTranscoder(srcTexFormat, transcodeFormat, kfr.isInGammaSpace, options === null || options === void 0 ? void 0 : options.bypassTranscoders);
689
+ const transcoder = this._transcoderMgr.findTranscoder(srcTexFormat, transcodeFormat, kfr.isInGammaSpace, options?.bypassTranscoders);
690
690
  if (transcoder === null) {
691
691
  throw new Error(`no transcoder found to transcode source texture format "${_transcoder__WEBPACK_IMPORTED_MODULE_7__.sourceTextureFormat[srcTexFormat]}" to format "${_transcoder__WEBPACK_IMPORTED_MODULE_7__.transcodeTarget[transcodeFormat]}"`);
692
692
  }
@@ -745,8 +745,7 @@ class KTX2Decoder {
745
745
  return data;
746
746
  })
747
747
  .catch((reason) => {
748
- var _a;
749
- decodedData.errors = (_a = decodedData.errors) !== null && _a !== void 0 ? _a : "";
748
+ decodedData.errors = decodedData.errors ?? "";
750
749
  decodedData.errors += reason + "\n" + reason.stack + "\n";
751
750
  return null;
752
751
  });
@@ -1227,7 +1226,7 @@ class TranscodeDecisionTree {
1227
1226
  this._hasAlpha = hasAlpha;
1228
1227
  this._isPowerOfTwo = isPowerOfTwo;
1229
1228
  this._caps = caps;
1230
- this._options = options !== null && options !== void 0 ? options : {};
1229
+ this._options = options ?? {};
1231
1230
  this._parseNode(textureFormat === _transcoder__WEBPACK_IMPORTED_MODULE_0__.sourceTextureFormat.UASTC4x4 ? DecisionTree.UASTC : DecisionTree.ETC1S);
1232
1231
  }
1233
1232
  static _IsLeafNode(node) {
@@ -1243,11 +1242,10 @@ class TranscodeDecisionTree {
1243
1242
  return this._roundToMultiple4;
1244
1243
  }
1245
1244
  _parseNode(node) {
1246
- var _a;
1247
1245
  if (TranscodeDecisionTree._IsLeafNode(node)) {
1248
1246
  this._transcodeFormat = node.transcodeFormat;
1249
1247
  this._engineFormat = node.engineFormat;
1250
- this._roundToMultiple4 = (_a = node.roundToMultiple4) !== null && _a !== void 0 ? _a : true;
1248
+ this._roundToMultiple4 = node.roundToMultiple4 ?? true;
1251
1249
  }
1252
1250
  else {
1253
1251
  let condition = true;
@@ -1448,7 +1446,7 @@ class WASMMemoryManager {
1448
1446
  return this._memory;
1449
1447
  }
1450
1448
  getMemoryView(numPages, offset = 0, byteLength) {
1451
- byteLength = byteLength !== null && byteLength !== void 0 ? byteLength : numPages << 16;
1449
+ byteLength = byteLength ?? numPages << 16;
1452
1450
  if (this._numPages < numPages) {
1453
1451
  this._memory.grow(numPages - this._numPages);
1454
1452
  this._numPages = numPages;
@@ -1 +1 @@
1
- {"version":3,"file":"babylon.ktx2Decoder.max.js","mappings":"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","sources":["webpack://KTX2DECODER/webpack/universalModuleDefinition","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/Misc/dataReader.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/Misc/index.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/Transcoders/index.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/Transcoders/liteTranscoder.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/Transcoders/liteTranscoder_UASTC_ASTC.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/Transcoders/liteTranscoder_UASTC_BC7.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/Transcoders/liteTranscoder_UASTC_RGBA_SRGB.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/Transcoders/liteTranscoder_UASTC_RGBA_UNORM.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/Transcoders/mscTranscoder.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/index.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/ktx2Decoder.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/ktx2FileReader.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/legacy/legacy.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/transcodeDecisionTree.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/transcoder.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/transcoderManager.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/wasmMemoryManager.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/zstddec.ts","webpack://KTX2DECODER/webpack/bootstrap","webpack://KTX2DECODER/webpack/runtime/define property getters","webpack://KTX2DECODER/webpack/runtime/global","webpack://KTX2DECODER/webpack/runtime/hasOwnProperty shorthand","webpack://KTX2DECODER/webpack/runtime/make namespace object","webpack://KTX2DECODER/./src/index.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"babylonjs-ktx2decoder\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"babylonjs-ktx2decoder\"] = factory();\n\telse\n\t\troot[\"KTX2DECODER\"] = factory();\n})((typeof self !== \"undefined\" ? self : typeof global !== \"undefined\" ? global : this), () => {\nreturn ","/**\r\n * Utility class for reading from a data buffer\r\n */\r\nexport class DataReader {\r\n /**\r\n * The current byte offset from the beginning of the data buffer.\r\n */\r\n public get byteOffset() {\r\n return this._dataByteOffset;\r\n }\r\n\r\n private _dataView: DataView;\r\n private _dataByteOffset: number;\r\n\r\n /**\r\n * Constructor\r\n * @param buffer The buffer to set\r\n * @param byteOffset The starting offset in the buffer\r\n * @param byteLength The byte length of the buffer\r\n */\r\n constructor(buffer: ArrayBuffer | ArrayBufferView, byteOffset?: number, byteLength?: number) {\r\n if ((buffer as ArrayBufferView).buffer) {\r\n this._dataView = new DataView(\r\n (buffer as ArrayBufferView).buffer,\r\n (buffer as ArrayBufferView).byteOffset + (byteOffset ?? 0),\r\n byteLength ?? (buffer as ArrayBufferView).byteLength\r\n );\r\n } else {\r\n this._dataView = new DataView(buffer as ArrayBuffer, byteOffset ?? 0, byteLength ?? (buffer as ArrayBuffer).byteLength);\r\n }\r\n\r\n this._dataByteOffset = 0;\r\n }\r\n\r\n /**\r\n * Read a unsigned 8-bit integer from the currently loaded data range.\r\n * @returns The 8-bit integer read\r\n */\r\n public readUint8(): number {\r\n const value = this._dataView.getUint8(this._dataByteOffset);\r\n this._dataByteOffset += 1;\r\n return value;\r\n }\r\n\r\n /**\r\n * Read a signed 8-bit integer from the currently loaded data range.\r\n * @returns The 8-bit integer read\r\n */\r\n public readInt8(): number {\r\n const value = this._dataView.getInt8(this._dataByteOffset);\r\n this._dataByteOffset += 1;\r\n return value;\r\n }\r\n\r\n /**\r\n * Read a unsigned 16-bit integer from the currently loaded data range.\r\n * @returns The 16-bit integer read\r\n */\r\n public readUint16(): number {\r\n const value = this._dataView.getUint16(this._dataByteOffset, true);\r\n this._dataByteOffset += 2;\r\n return value;\r\n }\r\n\r\n /**\r\n * Read a signed 16-bit integer from the currently loaded data range.\r\n * @returns The 16-bit integer read\r\n */\r\n public readInt16(): number {\r\n const value = this._dataView.getInt16(this._dataByteOffset, true);\r\n this._dataByteOffset += 2;\r\n return value;\r\n }\r\n\r\n /**\r\n * Read a unsigned 32-bit integer from the currently loaded data range.\r\n * @returns The 32-bit integer read\r\n */\r\n public readUint32(): number {\r\n const value = this._dataView.getUint32(this._dataByteOffset, true);\r\n this._dataByteOffset += 4;\r\n return value;\r\n }\r\n\r\n /**\r\n * Read a signed 32-bit integer from the currently loaded data range.\r\n * @returns The 32-bit integer read\r\n */\r\n public readInt32(): number {\r\n const value = this._dataView.getInt32(this._dataByteOffset, true);\r\n this._dataByteOffset += 4;\r\n return value;\r\n }\r\n\r\n /**\r\n * Read a unsigned 32-bit integer from the currently loaded data range.\r\n * @returns The 32-bit integer read\r\n */\r\n public readUint64(): number {\r\n // split 64-bit number into two 32-bit (4-byte) parts\r\n const left = this._dataView.getUint32(this._dataByteOffset, true);\r\n const right = this._dataView.getUint32(this._dataByteOffset + 4, true);\r\n\r\n // combine the two 32-bit values\r\n const combined = left + 2 ** 32 * right; // That was weird..Keeping it for posterity: true ? left + 2 ** 32 * right : 2 ** 32 * left + right;\r\n\r\n /*if (!Number.isSafeInteger(combined)) {\r\n console.warn('DataReader: ' + combined + ' exceeds MAX_SAFE_INTEGER. Precision may be lost.');\r\n }*/\r\n\r\n this._dataByteOffset += 8;\r\n return combined;\r\n }\r\n\r\n /**\r\n * Read a byte array from the currently loaded data range.\r\n * @param byteLength The byte length to read\r\n * @returns The byte array read\r\n */\r\n public readUint8Array(byteLength: number): Uint8Array {\r\n const value = new Uint8Array(this._dataView.buffer, this._dataView.byteOffset + this._dataByteOffset, byteLength);\r\n this._dataByteOffset += byteLength;\r\n return value;\r\n }\r\n\r\n /**\r\n * Skips the given byte length the currently loaded data range.\r\n * @param byteLength The byte length to skip\r\n * @returns This instance\r\n */\r\n public skipBytes(byteLength: number) {\r\n this._dataByteOffset += byteLength;\r\n return this;\r\n }\r\n}\r\n","export * from \"./dataReader\";\r\n","export * from \"./liteTranscoder\";\r\nexport * from \"./liteTranscoder_UASTC_ASTC\";\r\nexport * from \"./liteTranscoder_UASTC_BC7\";\r\nexport * from \"./liteTranscoder_UASTC_RGBA_UNORM\";\r\nexport * from \"./liteTranscoder_UASTC_RGBA_SRGB\";\r\nexport * from \"./mscTranscoder\";\r\n","import type { sourceTextureFormat, transcodeTarget } from \"../transcoder\";\r\nimport { Transcoder } from \"../transcoder\";\r\nimport { WASMMemoryManager } from \"../wasmMemoryManager\";\r\nimport type { KTX2FileReader, IKTX2_ImageDesc } from \"../ktx2FileReader\";\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport class LiteTranscoder extends Transcoder {\r\n private _modulePath: string;\r\n private _modulePromise: Promise<{ module: any }>;\r\n private _memoryManager: WASMMemoryManager;\r\n protected _transcodeInPlace: boolean;\r\n\r\n protected _loadModule(): Promise<{ module: any }> {\r\n if (this._modulePromise) {\r\n return this._modulePromise;\r\n }\r\n\r\n this._modulePromise = WASMMemoryManager.LoadWASM(this._modulePath).then((wasmBinary) => {\r\n return new Promise((resolve) => {\r\n WebAssembly.instantiate(wasmBinary as ArrayBuffer, { env: { memory: this._memoryManager.wasmMemory } }).then((moduleWrapper) => {\r\n resolve({ module: moduleWrapper.instance.exports });\r\n });\r\n });\r\n });\r\n\r\n return this._modulePromise;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n protected get memoryManager(): WASMMemoryManager {\r\n return this._memoryManager;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n protected setModulePath(modulePath: string): void {\r\n this._modulePath = modulePath;\r\n }\r\n\r\n public initialize(): void {\r\n this._transcodeInPlace = true;\r\n }\r\n\r\n public needMemoryManager(): boolean {\r\n return true;\r\n }\r\n\r\n public setMemoryManager(memoryMgr: WASMMemoryManager): void {\r\n this._memoryManager = memoryMgr;\r\n }\r\n\r\n public transcode(\r\n src: sourceTextureFormat,\r\n dst: transcodeTarget,\r\n level: number,\r\n width: number,\r\n height: number,\r\n uncompressedByteLength: number,\r\n ktx2Reader: KTX2FileReader,\r\n imageDesc: IKTX2_ImageDesc | null,\r\n encodedData: Uint8Array\r\n ): Promise<Uint8Array | null> {\r\n return this._loadModule().then((moduleWrapper: any) => {\r\n const transcoder: any = moduleWrapper.module;\r\n const [textureView, uncompressedTextureView, nBlocks] = this._prepareTranscoding(width, height, uncompressedByteLength, encodedData);\r\n\r\n return transcoder.transcode(nBlocks) === 0 ? (this._transcodeInPlace ? textureView.slice() : uncompressedTextureView!.slice()) : null;\r\n });\r\n }\r\n\r\n protected _prepareTranscoding(\r\n width: number,\r\n height: number,\r\n uncompressedByteLength: number,\r\n encodedData: Uint8Array,\r\n forceRGBA = false\r\n ): [Uint8Array, Uint8Array | null, number] {\r\n const nBlocks = ((width + 3) >> 2) * ((height + 3) >> 2);\r\n\r\n if (forceRGBA) {\r\n uncompressedByteLength = width * ((height + 3) >> 2) * 4 * 4;\r\n }\r\n\r\n const texMemoryPages = ((nBlocks * 16 + 65535 + (this._transcodeInPlace ? 0 : uncompressedByteLength)) >> 16) + 1;\r\n\r\n const textureView = this.memoryManager.getMemoryView(texMemoryPages, 65536, nBlocks * 16);\r\n\r\n const uncompressedTextureView = this._transcodeInPlace\r\n ? null\r\n : new Uint8Array(this._memoryManager.wasmMemory.buffer, 65536 + nBlocks * 16, forceRGBA ? width * height * 4 : uncompressedByteLength);\r\n\r\n textureView.set(encodedData);\r\n\r\n return [textureView, uncompressedTextureView, nBlocks];\r\n }\r\n}\r\n","import { sourceTextureFormat, transcodeTarget } from \"../transcoder\";\r\nimport { LiteTranscoder } from \"./liteTranscoder\";\r\n\r\n/**\r\n * @hidden\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class LiteTranscoder_UASTC_ASTC extends LiteTranscoder {\r\n /**\r\n * URL to use when loading the wasm module for the transcoder\r\n */\r\n public static WasmModuleURL = \"https://preview.babylonjs.com/ktx2Transcoders/uastc_astc.wasm\";\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public static CanTranscode(src: sourceTextureFormat, dst: transcodeTarget, isInGammaSpace: boolean): boolean {\r\n return src === sourceTextureFormat.UASTC4x4 && dst === transcodeTarget.ASTC_4x4_RGBA;\r\n }\r\n\r\n public static Name = \"UniversalTranscoder_UASTC_ASTC\";\r\n\r\n public getName(): string {\r\n return LiteTranscoder_UASTC_ASTC.Name;\r\n }\r\n\r\n public initialize(): void {\r\n super.initialize();\r\n this.setModulePath(LiteTranscoder_UASTC_ASTC.WasmModuleURL);\r\n }\r\n}\r\n","import { sourceTextureFormat, transcodeTarget } from \"../transcoder\";\r\nimport { LiteTranscoder } from \"./liteTranscoder\";\r\n\r\n/**\r\n * @hidden\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class LiteTranscoder_UASTC_BC7 extends LiteTranscoder {\r\n /**\r\n * URL to use when loading the wasm module for the transcoder\r\n */\r\n public static WasmModuleURL = \"https://preview.babylonjs.com/ktx2Transcoders/uastc_bc7.wasm\";\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public static CanTranscode(src: sourceTextureFormat, dst: transcodeTarget, isInGammaSpace: boolean): boolean {\r\n return src === sourceTextureFormat.UASTC4x4 && dst === transcodeTarget.BC7_RGBA;\r\n }\r\n\r\n public static Name = \"UniversalTranscoder_UASTC_BC7\";\r\n\r\n public getName(): string {\r\n return LiteTranscoder_UASTC_BC7.Name;\r\n }\r\n\r\n public initialize(): void {\r\n super.initialize();\r\n this.setModulePath(LiteTranscoder_UASTC_BC7.WasmModuleURL);\r\n }\r\n}\r\n","import { sourceTextureFormat, transcodeTarget } from \"../transcoder\";\r\nimport { LiteTranscoder } from \"./liteTranscoder\";\r\nimport type { KTX2FileReader, IKTX2_ImageDesc } from \"../ktx2FileReader\";\r\n\r\n/**\r\n * @hidden\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class LiteTranscoder_UASTC_RGBA_SRGB extends LiteTranscoder {\r\n /**\r\n * URL to use when loading the wasm module for the transcoder (srgb)\r\n */\r\n public static WasmModuleURL = \"https://preview.babylonjs.com/ktx2Transcoders/uastc_rgba32_srgb.wasm\";\r\n\r\n public static CanTranscode(src: sourceTextureFormat, dst: transcodeTarget, isInGammaSpace: boolean): boolean {\r\n return src === sourceTextureFormat.UASTC4x4 && dst === transcodeTarget.RGBA32 && isInGammaSpace;\r\n }\r\n\r\n public static Name = \"UniversalTranscoder_UASTC_RGBA_SRGB\";\r\n\r\n public getName(): string {\r\n return LiteTranscoder_UASTC_RGBA_SRGB.Name;\r\n }\r\n\r\n public initialize(): void {\r\n super.initialize();\r\n this._transcodeInPlace = false;\r\n this.setModulePath(LiteTranscoder_UASTC_RGBA_SRGB.WasmModuleURL);\r\n }\r\n\r\n public transcode(\r\n src: sourceTextureFormat,\r\n dst: transcodeTarget,\r\n level: number,\r\n width: number,\r\n height: number,\r\n uncompressedByteLength: number,\r\n ktx2Reader: KTX2FileReader,\r\n imageDesc: IKTX2_ImageDesc | null,\r\n encodedData: Uint8Array\r\n ): Promise<Uint8Array | null> {\r\n return this._loadModule().then((moduleWrapper: any) => {\r\n const transcoder: any = moduleWrapper.module;\r\n const [, uncompressedTextureView] = this._prepareTranscoding(width, height, uncompressedByteLength, encodedData, true);\r\n\r\n return transcoder.decodeRGBA32(width, height) === 0 ? uncompressedTextureView!.slice() : null;\r\n });\r\n }\r\n}\r\n","import { sourceTextureFormat, transcodeTarget } from \"../transcoder\";\r\nimport { LiteTranscoder } from \"./liteTranscoder\";\r\nimport type { KTX2FileReader, IKTX2_ImageDesc } from \"../ktx2FileReader\";\r\n\r\n/**\r\n * @hidden\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class LiteTranscoder_UASTC_RGBA_UNORM extends LiteTranscoder {\r\n /**\r\n * URL to use when loading the wasm module for the transcoder (unorm)\r\n */\r\n public static WasmModuleURL = \"https://preview.babylonjs.com/ktx2Transcoders/uastc_rgba32_unorm.wasm\";\r\n\r\n public static CanTranscode(src: sourceTextureFormat, dst: transcodeTarget, isInGammaSpace: boolean): boolean {\r\n return src === sourceTextureFormat.UASTC4x4 && dst === transcodeTarget.RGBA32 && !isInGammaSpace;\r\n }\r\n\r\n public static Name = \"UniversalTranscoder_UASTC_RGBA_UNORM\";\r\n\r\n public getName(): string {\r\n return LiteTranscoder_UASTC_RGBA_UNORM.Name;\r\n }\r\n\r\n public initialize(): void {\r\n super.initialize();\r\n this._transcodeInPlace = false;\r\n this.setModulePath(LiteTranscoder_UASTC_RGBA_UNORM.WasmModuleURL);\r\n }\r\n\r\n public transcode(\r\n src: sourceTextureFormat,\r\n dst: transcodeTarget,\r\n level: number,\r\n width: number,\r\n height: number,\r\n uncompressedByteLength: number,\r\n ktx2Reader: KTX2FileReader,\r\n imageDesc: IKTX2_ImageDesc | null,\r\n encodedData: Uint8Array\r\n ): Promise<Uint8Array | null> {\r\n return this._loadModule().then((moduleWrapper: any) => {\r\n const transcoder: any = moduleWrapper.module;\r\n const [, uncompressedTextureView] = this._prepareTranscoding(width, height, uncompressedByteLength, encodedData, true);\r\n\r\n return transcoder.decodeRGBA32(width, height) === 0 ? uncompressedTextureView!.slice() : null;\r\n });\r\n }\r\n}\r\n","import { Transcoder, sourceTextureFormat, transcodeTarget } from \"../transcoder\";\r\nimport type { KTX2FileReader, IKTX2_ImageDesc } from \"../ktx2FileReader\";\r\nimport { WASMMemoryManager } from \"../wasmMemoryManager\";\r\n\r\ndeclare let MSC_TRANSCODER: any;\r\n\r\ndeclare function importScripts(...urls: string[]): void;\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport class MSCTranscoder extends Transcoder {\r\n /**\r\n * URL to use when loading the MSC transcoder\r\n */\r\n public static JSModuleURL = \"https://preview.babylonjs.com/ktx2Transcoders/msc_basis_transcoder.js\";\r\n /**\r\n * URL to use when loading the wasm module for the transcoder\r\n */\r\n public static WasmModuleURL = \"https://preview.babylonjs.com/ktx2Transcoders/msc_basis_transcoder.wasm\";\r\n\r\n public static UseFromWorkerThread = true;\r\n\r\n public static Name = \"MSCTranscoder\";\r\n\r\n public getName(): string {\r\n return MSCTranscoder.Name;\r\n }\r\n\r\n private _mscBasisTranscoderPromise: Promise<void>;\r\n private _mscBasisModule: any;\r\n\r\n private _getMSCBasisTranscoder(): Promise<void> {\r\n if (this._mscBasisTranscoderPromise) {\r\n return this._mscBasisTranscoderPromise;\r\n }\r\n\r\n this._mscBasisTranscoderPromise = WASMMemoryManager.LoadWASM(MSCTranscoder.WasmModuleURL).then((wasmBinary) => {\r\n if (MSCTranscoder.UseFromWorkerThread) {\r\n importScripts(MSCTranscoder.JSModuleURL);\r\n }\r\n // Worker Number = 0 and MSC_TRANSCODER has not been loaded yet.\r\n else if (typeof MSC_TRANSCODER === \"undefined\") {\r\n return new Promise((resolve, reject) => {\r\n const head = document.getElementsByTagName(\"head\")[0];\r\n const script = document.createElement(\"script\");\r\n script.setAttribute(\"type\", \"text/javascript\");\r\n script.setAttribute(\"src\", MSCTranscoder.JSModuleURL);\r\n\r\n script.onload = () => {\r\n MSC_TRANSCODER({ wasmBinary }).then((basisModule: any) => {\r\n basisModule.initTranscoders();\r\n this._mscBasisModule = basisModule;\r\n resolve();\r\n });\r\n };\r\n\r\n script.onerror = () => {\r\n reject(\"Can not load MSC_TRANSCODER script.\");\r\n };\r\n\r\n head.appendChild(script);\r\n });\r\n }\r\n\r\n return new Promise((resolve) => {\r\n MSC_TRANSCODER({ wasmBinary }).then((basisModule: any) => {\r\n basisModule.initTranscoders();\r\n this._mscBasisModule = basisModule;\r\n resolve();\r\n });\r\n });\r\n });\r\n\r\n return this._mscBasisTranscoderPromise;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public static CanTranscode(src: sourceTextureFormat, dst: transcodeTarget, isInGammaSpace: boolean): boolean {\r\n return true;\r\n }\r\n\r\n public transcode(\r\n src: sourceTextureFormat,\r\n dst: transcodeTarget,\r\n level: number,\r\n width: number,\r\n height: number,\r\n uncompressedByteLength: number,\r\n ktx2Reader: KTX2FileReader,\r\n imageDesc: IKTX2_ImageDesc | null,\r\n encodedData: Uint8Array\r\n ): Promise<Uint8Array | null> {\r\n const isVideo = false;\r\n\r\n return this._getMSCBasisTranscoder().then(() => {\r\n const basisModule = this._mscBasisModule;\r\n\r\n let transcoder: any;\r\n let imageInfo: any;\r\n let result: any;\r\n let textureData: any = null;\r\n\r\n try {\r\n transcoder = src === sourceTextureFormat.UASTC4x4 ? new basisModule.UastcImageTranscoder() : new basisModule.BasisLzEtc1sImageTranscoder();\r\n const texFormat = src === sourceTextureFormat.UASTC4x4 ? basisModule.TextureFormat.UASTC4x4 : basisModule.TextureFormat.ETC1S;\r\n\r\n imageInfo = new basisModule.ImageInfo(texFormat, width, height, level);\r\n\r\n const targetFormat = basisModule.TranscodeTarget[transcodeTarget[dst]]; // works because the labels of the sourceTextureFormat enum are the same as the property names used in TranscodeTarget!\r\n\r\n if (!basisModule.isFormatSupported(targetFormat, texFormat)) {\r\n throw new Error(`MSCTranscoder: Transcoding from \"${sourceTextureFormat[src]}\" to \"${transcodeTarget[dst]}\" not supported by current transcoder build.`);\r\n }\r\n\r\n if (src === sourceTextureFormat.ETC1S) {\r\n const sgd = ktx2Reader.supercompressionGlobalData;\r\n\r\n transcoder.decodePalettes(sgd.endpointCount, sgd.endpointsData, sgd.selectorCount, sgd.selectorsData);\r\n transcoder.decodeTables(sgd.tablesData);\r\n\r\n imageInfo.flags = imageDesc!.imageFlags;\r\n imageInfo.rgbByteOffset = 0;\r\n imageInfo.rgbByteLength = imageDesc!.rgbSliceByteLength;\r\n imageInfo.alphaByteOffset = imageDesc!.alphaSliceByteOffset > 0 ? imageDesc!.rgbSliceByteLength : 0;\r\n imageInfo.alphaByteLength = imageDesc!.alphaSliceByteLength;\r\n\r\n result = transcoder.transcodeImage(targetFormat, encodedData, imageInfo, 0, isVideo);\r\n } else {\r\n imageInfo.flags = 0;\r\n imageInfo.rgbByteOffset = 0;\r\n imageInfo.rgbByteLength = uncompressedByteLength;\r\n imageInfo.alphaByteOffset = 0;\r\n imageInfo.alphaByteLength = 0;\r\n\r\n result = transcoder.transcodeImage(targetFormat, encodedData, imageInfo, 0, ktx2Reader.hasAlpha, isVideo);\r\n }\r\n } finally {\r\n if (transcoder) {\r\n transcoder.delete();\r\n }\r\n\r\n if (imageInfo) {\r\n imageInfo.delete();\r\n }\r\n\r\n if (result && result.transcodedImage) {\r\n textureData = result.transcodedImage.get_typed_memory_view().slice();\r\n result.transcodedImage.delete();\r\n }\r\n }\r\n\r\n return textureData;\r\n });\r\n }\r\n}\r\n","/* eslint-disable import/no-internal-modules */\r\nexport * from \"./ktx2Decoder\";\r\nexport * from \"./ktx2FileReader\";\r\nexport * from \"./transcoder\";\r\nexport * from \"./transcoderManager\";\r\nexport * from \"./wasmMemoryManager\";\r\nexport * from \"./zstddec\";\r\nexport * from \"./Misc/index\";\r\nexport * from \"./Transcoders/index\";\r\n","/**\r\n * Resources used for the implementation:\r\n * - 3js KTX2 loader: https://github.com/mrdoob/three.js/blob/dfb5c23ce126ec845e4aa240599915fef5375797/examples/jsm/loaders/KTX2Loader.js\r\n * - Universal Texture Transcoders: https://github.com/KhronosGroup/Universal-Texture-Transcoders\r\n * - KTX2 specification: http://github.khronos.org/KTX-Specification/\r\n * - KTX2 binaries to convert files: https://github.com/KhronosGroup/KTX-Software/releases\r\n * - KTX specification: https://www.khronos.org/registry/DataFormat/specs/1.3/dataformat.1.3.html\r\n * - KTX-Software: https://github.com/KhronosGroup/KTX-Software\r\n */\r\n\r\nimport type { IKTX2_ImageDesc } from \"./ktx2FileReader\";\r\nimport { KTX2FileReader, SupercompressionScheme } from \"./ktx2FileReader\";\r\nimport { TranscoderManager } from \"./transcoderManager\";\r\nimport { LiteTranscoder_UASTC_ASTC } from \"./Transcoders/liteTranscoder_UASTC_ASTC\";\r\nimport { LiteTranscoder_UASTC_BC7 } from \"./Transcoders/liteTranscoder_UASTC_BC7\";\r\nimport { LiteTranscoder_UASTC_RGBA_UNORM } from \"./Transcoders/liteTranscoder_UASTC_RGBA_UNORM\";\r\nimport { LiteTranscoder_UASTC_RGBA_SRGB } from \"./Transcoders/liteTranscoder_UASTC_RGBA_SRGB\";\r\nimport { MSCTranscoder } from \"./Transcoders/mscTranscoder\";\r\nimport { transcodeTarget, sourceTextureFormat } from \"./transcoder\";\r\nimport { ZSTDDecoder } from \"./zstddec\";\r\nimport { TranscodeDecisionTree } from \"./transcodeDecisionTree\";\r\n\r\nexport interface IDecodedData {\r\n width: number;\r\n height: number;\r\n transcodedFormat: number;\r\n mipmaps: Array<IMipmap>;\r\n isInGammaSpace: boolean;\r\n hasAlpha: boolean;\r\n errors?: string;\r\n transcoderName?: string;\r\n}\r\n\r\nexport interface IMipmap {\r\n data: Uint8Array | null;\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport interface ICompressedFormatCapabilities {\r\n astc?: boolean;\r\n bptc?: boolean;\r\n s3tc?: boolean;\r\n pvrtc?: boolean;\r\n etc2?: boolean;\r\n etc1?: boolean;\r\n}\r\n\r\nexport interface IKTX2DecoderOptions {\r\n /** use RGBA format if ASTC and BC7 are not available as transcoded format */\r\n useRGBAIfASTCBC7NotAvailableWhenUASTC?: boolean;\r\n\r\n /** force to always use RGBA for transcoded format */\r\n forceRGBA?: boolean;\r\n\r\n /**\r\n * list of transcoders to bypass when looking for a suitable transcoder. The available transcoders are:\r\n * UniversalTranscoder_UASTC_ASTC\r\n * UniversalTranscoder_UASTC_BC7\r\n * UniversalTranscoder_UASTC_RGBA_UNORM\r\n * UniversalTranscoder_UASTC_RGBA_SRGB\r\n * MSCTranscoder\r\n */\r\n bypassTranscoders?: string[];\r\n}\r\n\r\nconst isPowerOfTwo = (value: number) => {\r\n return (value & (value - 1)) === 0 && value !== 0;\r\n};\r\n\r\n/**\r\n * Class for decoding KTX2 files\r\n *\r\n */\r\nexport class KTX2Decoder {\r\n private _transcoderMgr: TranscoderManager;\r\n private _zstdDecoder: ZSTDDecoder;\r\n\r\n constructor() {\r\n this._transcoderMgr = new TranscoderManager();\r\n }\r\n\r\n public decode(data: Uint8Array, caps: ICompressedFormatCapabilities, options?: IKTX2DecoderOptions): Promise<IDecodedData | null> {\r\n return Promise.resolve().then(() => {\r\n const kfr = new KTX2FileReader(data);\r\n\r\n if (!kfr.isValid()) {\r\n throw new Error(\"Invalid KT2 file: wrong signature\");\r\n }\r\n\r\n kfr.parse();\r\n\r\n if (kfr.needZSTDDecoder) {\r\n if (!this._zstdDecoder) {\r\n this._zstdDecoder = new ZSTDDecoder();\r\n }\r\n\r\n return this._zstdDecoder.init().then(() => {\r\n return this._decodeData(kfr, caps, options);\r\n });\r\n }\r\n\r\n return this._decodeData(kfr, caps, options);\r\n });\r\n }\r\n\r\n private _decodeData(kfr: KTX2FileReader, caps: ICompressedFormatCapabilities, options?: IKTX2DecoderOptions): Promise<IDecodedData> {\r\n const width = kfr.header.pixelWidth;\r\n const height = kfr.header.pixelHeight;\r\n const srcTexFormat = kfr.textureFormat;\r\n\r\n const decisionTree = new TranscodeDecisionTree(srcTexFormat, kfr.hasAlpha, isPowerOfTwo(width) && isPowerOfTwo(height), caps, options);\r\n\r\n const transcodeFormat = decisionTree.transcodeFormat;\r\n const engineFormat = decisionTree.engineFormat;\r\n const roundToMultiple4 = decisionTree.roundToMultiple4;\r\n\r\n const transcoder = this._transcoderMgr.findTranscoder(srcTexFormat, transcodeFormat, kfr.isInGammaSpace, options?.bypassTranscoders);\r\n\r\n if (transcoder === null) {\r\n throw new Error(`no transcoder found to transcode source texture format \"${sourceTextureFormat[srcTexFormat]}\" to format \"${transcodeTarget[transcodeFormat]}\"`);\r\n }\r\n\r\n const mipmaps: Array<IMipmap> = [];\r\n const dataPromises: Array<Promise<Uint8Array | null>> = [];\r\n const decodedData: IDecodedData = {\r\n width: 0,\r\n height: 0,\r\n transcodedFormat: engineFormat,\r\n mipmaps,\r\n isInGammaSpace: kfr.isInGammaSpace,\r\n hasAlpha: kfr.hasAlpha,\r\n transcoderName: transcoder.getName(),\r\n };\r\n\r\n let firstImageDescIndex = 0;\r\n\r\n for (let level = 0; level < kfr.header.levelCount; level++) {\r\n if (level > 0) {\r\n firstImageDescIndex += Math.max(kfr.header.layerCount, 1) * kfr.header.faceCount * Math.max(kfr.header.pixelDepth >> (level - 1), 1);\r\n }\r\n\r\n const levelWidth = Math.floor(width / (1 << level)) || 1;\r\n const levelHeight = Math.floor(height / (1 << level)) || 1;\r\n\r\n const numImagesInLevel = kfr.header.faceCount; // note that cubemap are not supported yet (see KTX2FileReader), so faceCount == 1\r\n const levelImageByteLength = ((levelWidth + 3) >> 2) * ((levelHeight + 3) >> 2) * kfr.dfdBlock.bytesPlane[0];\r\n\r\n const levelUncompressedByteLength = kfr.levels[level].uncompressedByteLength;\r\n\r\n let levelDataBuffer = kfr.data.buffer;\r\n\r\n let levelDataOffset = kfr.levels[level].byteOffset + kfr.data.byteOffset;\r\n let imageOffsetInLevel = 0;\r\n\r\n if (kfr.header.supercompressionScheme === SupercompressionScheme.ZStandard) {\r\n levelDataBuffer = this._zstdDecoder.decode(new Uint8Array(levelDataBuffer, levelDataOffset, kfr.levels[level].byteLength), levelUncompressedByteLength);\r\n levelDataOffset = 0;\r\n }\r\n\r\n if (level === 0) {\r\n decodedData.width = roundToMultiple4 ? (levelWidth + 3) & ~3 : levelWidth;\r\n decodedData.height = roundToMultiple4 ? (levelHeight + 3) & ~3 : levelHeight;\r\n }\r\n\r\n for (let imageIndex = 0; imageIndex < numImagesInLevel; imageIndex++) {\r\n let encodedData: Uint8Array;\r\n let imageDesc: IKTX2_ImageDesc | null = null;\r\n\r\n if (kfr.header.supercompressionScheme === SupercompressionScheme.BasisLZ) {\r\n imageDesc = kfr.supercompressionGlobalData.imageDescs![firstImageDescIndex + imageIndex];\r\n\r\n encodedData = new Uint8Array(levelDataBuffer, levelDataOffset + imageDesc.rgbSliceByteOffset, imageDesc.rgbSliceByteLength + imageDesc.alphaSliceByteLength);\r\n } else {\r\n encodedData = new Uint8Array(levelDataBuffer, levelDataOffset + imageOffsetInLevel, levelImageByteLength);\r\n\r\n imageOffsetInLevel += levelImageByteLength;\r\n }\r\n\r\n const mipmap: IMipmap = {\r\n data: null,\r\n width: levelWidth,\r\n height: levelHeight,\r\n };\r\n\r\n const transcodedData = transcoder\r\n .transcode(srcTexFormat, transcodeFormat, level, levelWidth, levelHeight, levelUncompressedByteLength, kfr, imageDesc, encodedData)\r\n .then((data) => {\r\n mipmap.data = data;\r\n return data;\r\n })\r\n .catch((reason) => {\r\n decodedData.errors = decodedData.errors ?? \"\";\r\n decodedData.errors += reason + \"\\n\" + reason.stack + \"\\n\";\r\n return null;\r\n });\r\n\r\n dataPromises.push(transcodedData);\r\n\r\n mipmaps.push(mipmap);\r\n }\r\n }\r\n\r\n return Promise.all(dataPromises).then(() => {\r\n return decodedData;\r\n });\r\n }\r\n}\r\n\r\n// Put in the order you want the transcoders to be used in priority\r\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_ASTC);\r\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_BC7);\r\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_RGBA_UNORM);\r\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_RGBA_SRGB);\r\nTranscoderManager.RegisterTranscoder(MSCTranscoder); // catch all transcoder - will throw an error if the format can't be transcoded\r\n","/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { DataReader } from \"./Misc/dataReader\";\r\nimport { sourceTextureFormat } from \"./transcoder\";\r\n\r\n/** @hidden */\r\nexport enum SupercompressionScheme {\r\n None = 0,\r\n BasisLZ = 1,\r\n ZStandard = 2,\r\n ZLib = 3,\r\n}\r\n\r\nconst enum DFDModel {\r\n ETC1S = 163,\r\n UASTC = 166,\r\n}\r\n\r\nconst enum DFDChannel_ETC1S {\r\n RGB = 0,\r\n RRR = 3,\r\n GGG = 4,\r\n AAA = 15,\r\n}\r\n\r\nconst enum DFDChannel_UASTC {\r\n RGB = 0,\r\n RGBA = 3,\r\n RRR = 4,\r\n RRRG = 5,\r\n}\r\n\r\nconst enum DFDTransferFunction {\r\n linear = 1,\r\n sRGB = 2,\r\n}\r\n\r\n/** @hidden */\r\nexport interface IKTX2_Header {\r\n vkFormat: number;\r\n typeSize: number;\r\n pixelWidth: number;\r\n pixelHeight: number;\r\n pixelDepth: number;\r\n layerCount: number;\r\n faceCount: number;\r\n levelCount: number;\r\n supercompressionScheme: number;\r\n dfdByteOffset: number;\r\n dfdByteLength: number;\r\n kvdByteOffset: number;\r\n kvdByteLength: number;\r\n sgdByteOffset: number;\r\n sgdByteLength: number;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IKTX2_Level {\r\n byteOffset: number;\r\n byteLength: number;\r\n uncompressedByteLength: number;\r\n}\r\n\r\ninterface IKTX2_Sample {\r\n bitOffset: number;\r\n bitLength: number;\r\n channelType: number;\r\n channelFlags: number;\r\n samplePosition: number[];\r\n sampleLower: number;\r\n sampleUpper: number;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IKTX2_DFD {\r\n vendorId: number;\r\n descriptorType: number;\r\n versionNumber: number;\r\n descriptorBlockSize: number;\r\n colorModel: number;\r\n colorPrimaries: number;\r\n transferFunction: number;\r\n flags: number;\r\n texelBlockDimension: {\r\n x: number;\r\n y: number;\r\n z: number;\r\n w: number;\r\n };\r\n bytesPlane: Array<number>;\r\n numSamples: number;\r\n samples: Array<IKTX2_Sample>;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IKTX2_ImageDesc {\r\n imageFlags: number;\r\n rgbSliceByteOffset: number;\r\n rgbSliceByteLength: number;\r\n alphaSliceByteOffset: number;\r\n alphaSliceByteLength: number;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IKTX2_SupercompressionGlobalData {\r\n endpointCount?: number;\r\n selectorCount?: number;\r\n endpointsByteLength?: number;\r\n selectorsByteLength?: number;\r\n tablesByteLength?: number;\r\n extendedByteLength?: number;\r\n imageDescs?: Array<IKTX2_ImageDesc>;\r\n endpointsData?: Uint8Array;\r\n selectorsData?: Uint8Array;\r\n tablesData?: Uint8Array;\r\n extendedData?: Uint8Array;\r\n}\r\n\r\nexport class KTX2FileReader {\r\n private _data: Uint8Array;\r\n private _header: IKTX2_Header;\r\n private _levels: Array<IKTX2_Level>;\r\n private _dfdBlock: IKTX2_DFD;\r\n private _supercompressionGlobalData: IKTX2_SupercompressionGlobalData;\r\n\r\n /**\r\n * Will throw an exception if the file can't be parsed\r\n * @param data\r\n */\r\n constructor(data: Uint8Array) {\r\n this._data = data;\r\n }\r\n\r\n public get data(): Uint8Array {\r\n return this._data;\r\n }\r\n\r\n public get header(): IKTX2_Header {\r\n return this._header;\r\n }\r\n\r\n public get levels(): Array<IKTX2_Level> {\r\n return this._levels;\r\n }\r\n\r\n public get dfdBlock(): IKTX2_DFD {\r\n return this._dfdBlock;\r\n }\r\n\r\n public get supercompressionGlobalData(): IKTX2_SupercompressionGlobalData {\r\n return this._supercompressionGlobalData;\r\n }\r\n\r\n public isValid() {\r\n return KTX2FileReader.IsValid(this._data);\r\n }\r\n\r\n public parse() {\r\n let offsetInFile = 12; // skip the header\r\n\r\n /**\r\n * Get the header\r\n */\r\n const hdrReader = new DataReader(this._data, offsetInFile, 17 * 4);\r\n\r\n const header = (this._header = {\r\n vkFormat: hdrReader.readUint32(),\r\n typeSize: hdrReader.readUint32(),\r\n pixelWidth: hdrReader.readUint32(),\r\n pixelHeight: hdrReader.readUint32(),\r\n pixelDepth: hdrReader.readUint32(),\r\n layerCount: hdrReader.readUint32(),\r\n faceCount: hdrReader.readUint32(),\r\n levelCount: hdrReader.readUint32(),\r\n supercompressionScheme: hdrReader.readUint32(),\r\n\r\n dfdByteOffset: hdrReader.readUint32(),\r\n dfdByteLength: hdrReader.readUint32(),\r\n kvdByteOffset: hdrReader.readUint32(),\r\n kvdByteLength: hdrReader.readUint32(),\r\n sgdByteOffset: hdrReader.readUint64(),\r\n sgdByteLength: hdrReader.readUint64(),\r\n });\r\n\r\n if (header.pixelDepth > 0) {\r\n throw new Error(`Failed to parse KTX2 file - Only 2D textures are currently supported.`);\r\n }\r\n\r\n if (header.layerCount > 1) {\r\n throw new Error(`Failed to parse KTX2 file - Array textures are not currently supported.`);\r\n }\r\n\r\n if (header.faceCount > 1) {\r\n throw new Error(`Failed to parse KTX2 file - Cube textures are not currently supported.`);\r\n }\r\n\r\n offsetInFile += hdrReader.byteOffset;\r\n\r\n /**\r\n * Get the levels\r\n */\r\n let levelCount = Math.max(1, header.levelCount);\r\n\r\n const levelReader = new DataReader(this._data, offsetInFile, levelCount * 3 * (2 * 4));\r\n\r\n const levels: Array<IKTX2_Level> = (this._levels = []);\r\n\r\n while (levelCount--) {\r\n levels.push({\r\n byteOffset: levelReader.readUint64(),\r\n byteLength: levelReader.readUint64(),\r\n uncompressedByteLength: levelReader.readUint64(),\r\n });\r\n }\r\n\r\n offsetInFile += levelReader.byteOffset;\r\n\r\n /**\r\n * Get the data format descriptor (DFD) blocks\r\n */\r\n const dfdReader = new DataReader(this._data, header.dfdByteOffset, header.dfdByteLength);\r\n\r\n const dfdBlock = (this._dfdBlock = {\r\n vendorId: dfdReader.skipBytes(4 /* skip totalSize */).readUint16(),\r\n descriptorType: dfdReader.readUint16(),\r\n versionNumber: dfdReader.readUint16(),\r\n descriptorBlockSize: dfdReader.readUint16(),\r\n colorModel: dfdReader.readUint8(),\r\n colorPrimaries: dfdReader.readUint8(),\r\n transferFunction: dfdReader.readUint8(),\r\n flags: dfdReader.readUint8(),\r\n texelBlockDimension: {\r\n x: dfdReader.readUint8() + 1,\r\n y: dfdReader.readUint8() + 1,\r\n z: dfdReader.readUint8() + 1,\r\n w: dfdReader.readUint8() + 1,\r\n },\r\n bytesPlane: [\r\n dfdReader.readUint8() /* bytesPlane0 */,\r\n dfdReader.readUint8() /* bytesPlane1 */,\r\n dfdReader.readUint8() /* bytesPlane2 */,\r\n dfdReader.readUint8() /* bytesPlane3 */,\r\n dfdReader.readUint8() /* bytesPlane4 */,\r\n dfdReader.readUint8() /* bytesPlane5 */,\r\n dfdReader.readUint8() /* bytesPlane6 */,\r\n dfdReader.readUint8() /* bytesPlane7 */,\r\n ],\r\n numSamples: 0,\r\n samples: new Array<IKTX2_Sample>(),\r\n });\r\n\r\n dfdBlock.numSamples = (dfdBlock.descriptorBlockSize - 24) / 16;\r\n\r\n for (let i = 0; i < dfdBlock.numSamples; i++) {\r\n const sample = {\r\n bitOffset: dfdReader.readUint16(),\r\n bitLength: dfdReader.readUint8() + 1,\r\n channelType: dfdReader.readUint8(),\r\n channelFlags: 0,\r\n samplePosition: [\r\n dfdReader.readUint8() /* samplePosition0 */,\r\n dfdReader.readUint8() /* samplePosition1 */,\r\n dfdReader.readUint8() /* samplePosition2 */,\r\n dfdReader.readUint8() /* samplePosition3 */,\r\n ],\r\n sampleLower: dfdReader.readUint32(),\r\n sampleUpper: dfdReader.readUint32(),\r\n };\r\n\r\n sample.channelFlags = (sample.channelType & 0xf0) >> 4;\r\n sample.channelType = sample.channelType & 0x0f;\r\n\r\n dfdBlock.samples.push(sample);\r\n }\r\n\r\n /**\r\n * Get the Supercompression Global Data (sgd)\r\n */\r\n const sgd: IKTX2_SupercompressionGlobalData = (this._supercompressionGlobalData = {});\r\n\r\n if (header.sgdByteLength > 0) {\r\n const sgdReader = new DataReader(this._data, header.sgdByteOffset, header.sgdByteLength);\r\n\r\n sgd.endpointCount = sgdReader.readUint16();\r\n sgd.selectorCount = sgdReader.readUint16();\r\n sgd.endpointsByteLength = sgdReader.readUint32();\r\n sgd.selectorsByteLength = sgdReader.readUint32();\r\n sgd.tablesByteLength = sgdReader.readUint32();\r\n sgd.extendedByteLength = sgdReader.readUint32();\r\n sgd.imageDescs = [];\r\n\r\n const imageCount = this._getImageCount();\r\n\r\n for (let i = 0; i < imageCount; i++) {\r\n sgd.imageDescs.push({\r\n imageFlags: sgdReader.readUint32(),\r\n rgbSliceByteOffset: sgdReader.readUint32(),\r\n rgbSliceByteLength: sgdReader.readUint32(),\r\n alphaSliceByteOffset: sgdReader.readUint32(),\r\n alphaSliceByteLength: sgdReader.readUint32(),\r\n });\r\n }\r\n\r\n const endpointsByteOffset = header.sgdByteOffset + sgdReader.byteOffset;\r\n const selectorsByteOffset = endpointsByteOffset + sgd.endpointsByteLength;\r\n const tablesByteOffset = selectorsByteOffset + sgd.selectorsByteLength;\r\n const extendedByteOffset = tablesByteOffset + sgd.tablesByteLength;\r\n\r\n sgd.endpointsData = new Uint8Array(this._data.buffer, this._data.byteOffset + endpointsByteOffset, sgd.endpointsByteLength);\r\n sgd.selectorsData = new Uint8Array(this._data.buffer, this._data.byteOffset + selectorsByteOffset, sgd.selectorsByteLength);\r\n sgd.tablesData = new Uint8Array(this._data.buffer, this._data.byteOffset + tablesByteOffset, sgd.tablesByteLength);\r\n sgd.extendedData = new Uint8Array(this._data.buffer, this._data.byteOffset + extendedByteOffset, sgd.extendedByteLength);\r\n }\r\n }\r\n\r\n private _getImageCount(): number {\r\n let layerPixelDepth = Math.max(this._header.pixelDepth, 1);\r\n for (let i = 1; i < this._header.levelCount; i++) {\r\n layerPixelDepth += Math.max(this._header.pixelDepth >> i, 1);\r\n }\r\n\r\n return Math.max(this._header.layerCount, 1) * this._header.faceCount * layerPixelDepth;\r\n }\r\n\r\n public get textureFormat(): sourceTextureFormat {\r\n return this._dfdBlock.colorModel === DFDModel.UASTC ? sourceTextureFormat.UASTC4x4 : sourceTextureFormat.ETC1S;\r\n }\r\n\r\n public get hasAlpha(): boolean {\r\n const tformat = this.textureFormat;\r\n\r\n switch (tformat) {\r\n case sourceTextureFormat.ETC1S:\r\n return (\r\n this._dfdBlock.numSamples === 2 &&\r\n (this._dfdBlock.samples[0].channelType === DFDChannel_ETC1S.AAA || this._dfdBlock.samples[1].channelType === DFDChannel_ETC1S.AAA)\r\n );\r\n\r\n case sourceTextureFormat.UASTC4x4:\r\n return this._dfdBlock.samples[0].channelType === DFDChannel_UASTC.RGBA;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public get needZSTDDecoder(): boolean {\r\n return this._header.supercompressionScheme === SupercompressionScheme.ZStandard;\r\n }\r\n\r\n public get isInGammaSpace(): boolean {\r\n return this._dfdBlock.transferFunction === DFDTransferFunction.sRGB;\r\n }\r\n\r\n public static IsValid(data: ArrayBufferView): boolean {\r\n if (data.byteLength >= 12) {\r\n // '«', 'K', 'T', 'X', ' ', '2', '0', '»', '\\r', '\\n', '\\x1A', '\\n'\r\n const identifier = new Uint8Array(data.buffer, data.byteOffset, 12);\r\n if (\r\n identifier[0] === 0xab &&\r\n identifier[1] === 0x4b &&\r\n identifier[2] === 0x54 &&\r\n identifier[3] === 0x58 &&\r\n identifier[4] === 0x20 &&\r\n identifier[5] === 0x32 &&\r\n identifier[6] === 0x30 &&\r\n identifier[7] === 0xbb &&\r\n identifier[8] === 0x0d &&\r\n identifier[9] === 0x0a &&\r\n identifier[10] === 0x1a &&\r\n identifier[11] === 0x0a\r\n ) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n","/* eslint-disable import/no-internal-modules */\r\nimport { KTX2Decoder } from \"../index\";\r\n\r\nconst globalObject = typeof global !== \"undefined\" ? global : typeof window !== \"undefined\" ? window : undefined;\r\nif (typeof globalObject !== \"undefined\") {\r\n (<any>globalObject).KTX2DECODER = KTX2Decoder;\r\n}\r\n\r\nexport * from \"../index\";\r\n","/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { sourceTextureFormat, transcodeTarget } from \"./transcoder\";\r\n\r\nconst COMPRESSED_RGBA_BPTC_UNORM_EXT = 0x8e8c;\r\nconst COMPRESSED_RGBA_ASTC_4x4_KHR = 0x93b0;\r\nconst COMPRESSED_RGB_S3TC_DXT1_EXT = 0x83f0;\r\nconst COMPRESSED_RGBA_S3TC_DXT5_EXT = 0x83f3;\r\nconst COMPRESSED_RGBA_PVRTC_4BPPV1_IMG = 0x8c02;\r\nconst COMPRESSED_RGB_PVRTC_4BPPV1_IMG = 0x8c00;\r\nconst COMPRESSED_RGBA8_ETC2_EAC = 0x9278;\r\nconst COMPRESSED_RGB8_ETC2 = 0x9274;\r\nconst COMPRESSED_RGB_ETC1_WEBGL = 0x8d64;\r\nconst RGBA8Format = 0x8058;\r\n\r\ninterface ILeaf {\r\n transcodeFormat: number;\r\n engineFormat: number;\r\n roundToMultiple4?: boolean;\r\n}\r\n\r\ninterface INode {\r\n cap?: string;\r\n option?: string;\r\n alpha?: boolean;\r\n needsPowerOfTwo?: boolean;\r\n yes?: INode | ILeaf;\r\n no?: INode | ILeaf;\r\n}\r\n\r\ninterface IDecisionTree {\r\n [textureFormat: string]: INode;\r\n}\r\n\r\nconst DecisionTree: IDecisionTree = {\r\n ETC1S: {\r\n option: \"forceRGBA\",\r\n yes: {\r\n transcodeFormat: transcodeTarget.RGBA32,\r\n engineFormat: RGBA8Format,\r\n roundToMultiple4: false,\r\n },\r\n no: {\r\n cap: \"etc2\",\r\n yes: {\r\n alpha: true,\r\n yes: {\r\n transcodeFormat: transcodeTarget.ETC2_RGBA,\r\n engineFormat: COMPRESSED_RGBA8_ETC2_EAC,\r\n },\r\n no: {\r\n transcodeFormat: transcodeTarget.ETC1_RGB,\r\n engineFormat: COMPRESSED_RGB8_ETC2,\r\n },\r\n },\r\n no: {\r\n cap: \"etc1\",\r\n alpha: false,\r\n yes: {\r\n transcodeFormat: transcodeTarget.ETC1_RGB,\r\n engineFormat: COMPRESSED_RGB_ETC1_WEBGL,\r\n },\r\n no: {\r\n cap: \"bptc\",\r\n yes: {\r\n transcodeFormat: transcodeTarget.BC7_RGBA,\r\n engineFormat: COMPRESSED_RGBA_BPTC_UNORM_EXT,\r\n },\r\n no: {\r\n cap: \"s3tc\",\r\n yes: {\r\n alpha: true,\r\n yes: {\r\n transcodeFormat: transcodeTarget.BC3_RGBA,\r\n engineFormat: COMPRESSED_RGBA_S3TC_DXT5_EXT,\r\n },\r\n no: {\r\n transcodeFormat: transcodeTarget.BC1_RGB,\r\n engineFormat: COMPRESSED_RGB_S3TC_DXT1_EXT,\r\n },\r\n },\r\n no: {\r\n cap: \"pvrtc\",\r\n needsPowerOfTwo: true,\r\n yes: {\r\n alpha: true,\r\n yes: {\r\n transcodeFormat: transcodeTarget.PVRTC1_4_RGBA,\r\n engineFormat: COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,\r\n },\r\n no: {\r\n transcodeFormat: transcodeTarget.PVRTC1_4_RGB,\r\n engineFormat: COMPRESSED_RGB_PVRTC_4BPPV1_IMG,\r\n },\r\n },\r\n no: {\r\n transcodeFormat: transcodeTarget.RGBA32,\r\n engineFormat: RGBA8Format,\r\n roundToMultiple4: false,\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n\r\n UASTC: {\r\n option: \"forceRGBA\",\r\n yes: {\r\n transcodeFormat: transcodeTarget.RGBA32,\r\n engineFormat: RGBA8Format,\r\n roundToMultiple4: false,\r\n },\r\n no: {\r\n cap: \"astc\",\r\n yes: {\r\n transcodeFormat: transcodeTarget.ASTC_4x4_RGBA,\r\n engineFormat: COMPRESSED_RGBA_ASTC_4x4_KHR,\r\n },\r\n no: {\r\n cap: \"bptc\",\r\n yes: {\r\n transcodeFormat: transcodeTarget.BC7_RGBA,\r\n engineFormat: COMPRESSED_RGBA_BPTC_UNORM_EXT,\r\n },\r\n no: {\r\n option: \"useRGBAIfASTCBC7NotAvailableWhenUASTC\",\r\n yes: {\r\n transcodeFormat: transcodeTarget.RGBA32,\r\n engineFormat: RGBA8Format,\r\n roundToMultiple4: false,\r\n },\r\n no: {\r\n cap: \"etc2\",\r\n yes: {\r\n alpha: true,\r\n yes: {\r\n transcodeFormat: transcodeTarget.ETC2_RGBA,\r\n engineFormat: COMPRESSED_RGBA8_ETC2_EAC,\r\n },\r\n no: {\r\n transcodeFormat: transcodeTarget.ETC1_RGB,\r\n engineFormat: COMPRESSED_RGB8_ETC2,\r\n },\r\n },\r\n no: {\r\n cap: \"etc1\",\r\n yes: {\r\n transcodeFormat: transcodeTarget.ETC1_RGB,\r\n engineFormat: COMPRESSED_RGB_ETC1_WEBGL,\r\n },\r\n no: {\r\n cap: \"s3tc\",\r\n yes: {\r\n alpha: true,\r\n yes: {\r\n transcodeFormat: transcodeTarget.BC3_RGBA,\r\n engineFormat: COMPRESSED_RGBA_S3TC_DXT5_EXT,\r\n },\r\n no: {\r\n transcodeFormat: transcodeTarget.BC1_RGB,\r\n engineFormat: COMPRESSED_RGB_S3TC_DXT1_EXT,\r\n },\r\n },\r\n no: {\r\n cap: \"pvrtc\",\r\n needsPowerOfTwo: true,\r\n yes: {\r\n alpha: true,\r\n yes: {\r\n transcodeFormat: transcodeTarget.PVRTC1_4_RGBA,\r\n engineFormat: COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,\r\n },\r\n no: {\r\n transcodeFormat: transcodeTarget.PVRTC1_4_RGB,\r\n engineFormat: COMPRESSED_RGB_PVRTC_4BPPV1_IMG,\r\n },\r\n },\r\n no: {\r\n transcodeFormat: transcodeTarget.RGBA32,\r\n engineFormat: RGBA8Format,\r\n roundToMultiple4: false,\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n};\r\n\r\nexport class TranscodeDecisionTree {\r\n private static _IsLeafNode(node: INode | ILeaf): node is ILeaf {\r\n return (node as ILeaf).transcodeFormat !== undefined;\r\n }\r\n\r\n private _hasAlpha: boolean;\r\n private _isPowerOfTwo: boolean;\r\n private _caps: any;\r\n private _options: any;\r\n private _transcodeFormat: number;\r\n private _engineFormat: number;\r\n private _roundToMultiple4: boolean;\r\n\r\n public get transcodeFormat() {\r\n return this._transcodeFormat;\r\n }\r\n\r\n public get engineFormat() {\r\n return this._engineFormat;\r\n }\r\n\r\n public get roundToMultiple4() {\r\n return this._roundToMultiple4;\r\n }\r\n\r\n constructor(textureFormat: sourceTextureFormat, hasAlpha: boolean, isPowerOfTwo: boolean, caps: any, options?: any) {\r\n this._hasAlpha = hasAlpha;\r\n this._isPowerOfTwo = isPowerOfTwo;\r\n this._caps = caps;\r\n this._options = options ?? {};\r\n\r\n this._parseNode(textureFormat === sourceTextureFormat.UASTC4x4 ? DecisionTree.UASTC : DecisionTree.ETC1S);\r\n }\r\n\r\n private _parseNode(node: INode | ILeaf): void {\r\n if (TranscodeDecisionTree._IsLeafNode(node)) {\r\n this._transcodeFormat = node.transcodeFormat;\r\n this._engineFormat = node.engineFormat;\r\n this._roundToMultiple4 = node.roundToMultiple4 ?? true;\r\n } else {\r\n let condition = true;\r\n\r\n if (node.cap !== undefined) {\r\n condition = condition && this._caps[node.cap];\r\n }\r\n if (node.option !== undefined) {\r\n condition = condition && this._options[node.option];\r\n }\r\n if (node.alpha !== undefined) {\r\n condition = condition && this._hasAlpha === node.alpha;\r\n }\r\n if (node.needsPowerOfTwo !== undefined) {\r\n condition = condition && this._isPowerOfTwo === node.needsPowerOfTwo;\r\n }\r\n\r\n this._parseNode(condition ? node.yes! : node.no!);\r\n }\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { WASMMemoryManager } from \"./wasmMemoryManager\";\r\nimport type { KTX2FileReader, IKTX2_ImageDesc } from \"./ktx2FileReader\";\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport enum sourceTextureFormat {\r\n ETC1S,\r\n UASTC4x4,\r\n}\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport enum transcodeTarget {\r\n ASTC_4x4_RGBA,\r\n BC7_RGBA,\r\n BC3_RGBA,\r\n BC1_RGB,\r\n PVRTC1_4_RGBA,\r\n PVRTC1_4_RGB,\r\n ETC2_RGBA,\r\n ETC1_RGB,\r\n RGBA32,\r\n}\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport class Transcoder {\r\n public static CanTranscode(src: sourceTextureFormat, dst: transcodeTarget, isInGammaSpace: boolean): boolean {\r\n return false;\r\n }\r\n\r\n public static Name = \"Transcoder\";\r\n\r\n public getName(): string {\r\n return Transcoder.Name;\r\n }\r\n\r\n public initialize(): void {}\r\n\r\n public needMemoryManager(): boolean {\r\n return false;\r\n }\r\n\r\n public setMemoryManager(memoryMgr: WASMMemoryManager): void {}\r\n\r\n public transcode(\r\n src: sourceTextureFormat,\r\n dst: transcodeTarget,\r\n level: number,\r\n width: number,\r\n height: number,\r\n uncompressedByteLength: number,\r\n ktx2Reader: KTX2FileReader,\r\n imageDesc: IKTX2_ImageDesc | null,\r\n encodedData: Uint8Array\r\n ): Promise<Uint8Array | null> {\r\n return Promise.resolve(null);\r\n }\r\n}\r\n","import type { Transcoder } from \"./transcoder\";\r\nimport { transcodeTarget, sourceTextureFormat } from \"./transcoder\";\r\nimport { WASMMemoryManager } from \"./wasmMemoryManager\";\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport class TranscoderManager {\r\n public static _Transcoders: Array<typeof Transcoder> = [];\r\n\r\n public static RegisterTranscoder(transcoder: typeof Transcoder) {\r\n TranscoderManager._Transcoders.push(transcoder);\r\n }\r\n\r\n private static _TranscoderInstances: { [key: string]: Array<Transcoder> } = {};\r\n\r\n private _wasmMemoryManager: WASMMemoryManager;\r\n\r\n public findTranscoder(src: sourceTextureFormat, dst: transcodeTarget, isInGammaSpace: boolean, bypass?: string[]): Transcoder | null {\r\n let transcoder: Transcoder | null = null;\r\n\r\n const key = sourceTextureFormat[src] + \"_\" + transcodeTarget[dst];\r\n\r\n for (let i = 0; i < TranscoderManager._Transcoders.length; ++i) {\r\n if (TranscoderManager._Transcoders[i].CanTranscode(src, dst, isInGammaSpace) && (!bypass || bypass.indexOf(TranscoderManager._Transcoders[i].Name) < 0)) {\r\n transcoder = this._getExistingTranscoder(key, TranscoderManager._Transcoders[i].Name);\r\n if (!transcoder) {\r\n transcoder = new TranscoderManager._Transcoders[i]();\r\n transcoder!.initialize();\r\n if (transcoder!.needMemoryManager()) {\r\n if (!this._wasmMemoryManager) {\r\n this._wasmMemoryManager = new WASMMemoryManager();\r\n }\r\n transcoder!.setMemoryManager(this._wasmMemoryManager);\r\n }\r\n if (!TranscoderManager._TranscoderInstances[key]) {\r\n TranscoderManager._TranscoderInstances[key] = [];\r\n }\r\n TranscoderManager._TranscoderInstances[key].push(transcoder);\r\n }\r\n break;\r\n }\r\n }\r\n\r\n return transcoder;\r\n }\r\n\r\n private _getExistingTranscoder(key: string, transcoderName: string): Transcoder | null {\r\n const transcoders = TranscoderManager._TranscoderInstances[key];\r\n\r\n if (transcoders) {\r\n for (let t = 0; t < transcoders.length; ++t) {\r\n const transcoder = transcoders[t];\r\n if (transcoderName === transcoder.getName()) {\r\n return transcoder;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n","declare function postMessage(message: any, transfer?: any[]): void;\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport class WASMMemoryManager {\r\n public static LoadBinariesFromCurrentThread = true;\r\n public static InitialMemoryPages = (1 * 1024 * 1024) >> 16; // 1 Mbytes\r\n\r\n private static _RequestId = 0;\r\n\r\n public static LoadWASM(path: string): Promise<ArrayBuffer> {\r\n if (this.LoadBinariesFromCurrentThread) {\r\n return new Promise((resolve, reject) => {\r\n fetch(path)\r\n .then((response) => {\r\n if (response.ok) {\r\n return response.arrayBuffer();\r\n }\r\n throw new Error(`Could not fetch the wasm component from \"${path}\": ${response.status} - ${response.statusText}`);\r\n })\r\n .then((wasmBinary) => resolve(wasmBinary))\r\n .catch((reason) => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n\r\n const id = this._RequestId++;\r\n\r\n return new Promise((resolve) => {\r\n const wasmLoadedHandler = (msg: any) => {\r\n if (msg.data.action === \"wasmLoaded\" && msg.data.id === id) {\r\n self.removeEventListener(\"message\", wasmLoadedHandler);\r\n resolve(msg.data.wasmBinary);\r\n }\r\n };\r\n\r\n self.addEventListener(\"message\", wasmLoadedHandler);\r\n\r\n postMessage({ action: \"loadWASM\", path: path, id: id });\r\n });\r\n }\r\n\r\n private _memory: WebAssembly.Memory;\r\n private _numPages: number;\r\n private _memoryView: Uint8Array;\r\n private _memoryViewByteLength: number;\r\n private _memoryViewOffset: number;\r\n\r\n constructor(initialMemoryPages: number = WASMMemoryManager.InitialMemoryPages) {\r\n this._numPages = initialMemoryPages;\r\n\r\n this._memory = new WebAssembly.Memory({ initial: this._numPages });\r\n this._memoryViewByteLength = this._numPages << 16;\r\n this._memoryViewOffset = 0;\r\n this._memoryView = new Uint8Array(this._memory.buffer, this._memoryViewOffset, this._memoryViewByteLength);\r\n }\r\n\r\n public get wasmMemory(): WebAssembly.Memory {\r\n return this._memory;\r\n }\r\n\r\n public getMemoryView(numPages: number, offset: number = 0, byteLength?: number): Uint8Array {\r\n byteLength = byteLength ?? numPages << 16;\r\n\r\n if (this._numPages < numPages) {\r\n this._memory.grow(numPages - this._numPages);\r\n this._numPages = numPages;\r\n this._memoryView = new Uint8Array(this._memory.buffer, offset, byteLength);\r\n this._memoryViewByteLength = byteLength;\r\n this._memoryViewOffset = offset;\r\n } else {\r\n this._memoryView = new Uint8Array(this._memory.buffer, offset, byteLength);\r\n this._memoryViewByteLength = byteLength;\r\n this._memoryViewOffset = offset;\r\n }\r\n\r\n return this._memoryView;\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/naming-convention */\r\n/**\r\n * From https://github.com/donmccurdy/zstddec by Don McCurdy\r\n */\r\ninterface DecoderExports {\r\n memory: Uint8Array;\r\n\r\n ZSTD_findDecompressedSize: (compressedPtr: number, compressedSize: number) => number;\r\n ZSTD_decompress: (uncompressedPtr: number, uncompressedSize: number, compressedPtr: number, compressedSize: number) => number;\r\n malloc: (ptr: number) => number;\r\n free: (ptr: number) => void;\r\n}\r\n\r\nlet init: Promise<void>;\r\nlet instance: { exports: DecoderExports };\r\nlet heap: Uint8Array;\r\n\r\nconst IMPORT_OBJECT = {\r\n env: {\r\n emscripten_notify_memory_growth: function (): void {\r\n heap = new Uint8Array(instance.exports.memory.buffer);\r\n },\r\n },\r\n};\r\n\r\n/**\r\n * ZSTD (Zstandard) decoder.\r\n */\r\nexport class ZSTDDecoder {\r\n public static WasmModuleURL = \"https://preview.babylonjs.com/zstddec.wasm\";\r\n\r\n init(): Promise<void> {\r\n if (init) {\r\n return init;\r\n }\r\n\r\n if (typeof fetch !== \"undefined\") {\r\n // Web.\r\n\r\n init = fetch(ZSTDDecoder.WasmModuleURL)\r\n .then((response) => {\r\n if (response.ok) {\r\n return response.arrayBuffer();\r\n }\r\n throw new Error(`Could not fetch the wasm component for the Zstandard decompression lib: ${response.status} - ${response.statusText}`);\r\n })\r\n .then((arrayBuffer) => WebAssembly.instantiate(arrayBuffer, IMPORT_OBJECT))\r\n .then(this._init);\r\n } else {\r\n // Node.js.\r\n\r\n init = WebAssembly.instantiateStreaming(fetch(ZSTDDecoder.WasmModuleURL), IMPORT_OBJECT).then(this._init);\r\n }\r\n\r\n return init;\r\n }\r\n\r\n _init(result: WebAssembly.WebAssemblyInstantiatedSource): void {\r\n instance = result.instance as unknown as { exports: DecoderExports };\r\n\r\n IMPORT_OBJECT.env.emscripten_notify_memory_growth(); // initialize heap.\r\n }\r\n\r\n decode(array: Uint8Array, uncompressedSize = 0): Uint8Array {\r\n if (!instance) {\r\n throw new Error(`ZSTDDecoder: Await .init() before decoding.`);\r\n }\r\n\r\n // Write compressed data into WASM memory.\r\n const compressedSize = array.byteLength;\r\n const compressedPtr = instance.exports.malloc(compressedSize);\r\n heap.set(array, compressedPtr);\r\n\r\n // Decompress into WASM memory.\r\n uncompressedSize = uncompressedSize || Number(instance.exports.ZSTD_findDecompressedSize(compressedPtr, compressedSize));\r\n const uncompressedPtr = instance.exports.malloc(uncompressedSize);\r\n const actualSize = instance.exports.ZSTD_decompress(uncompressedPtr, uncompressedSize, compressedPtr, compressedSize);\r\n\r\n // Read decompressed data and free WASM memory.\r\n const dec = heap.slice(uncompressedPtr, uncompressedPtr + actualSize);\r\n instance.exports.free(compressedPtr);\r\n instance.exports.free(uncompressedPtr);\r\n\r\n return dec;\r\n }\r\n}\r\n\r\n/**\r\n * BSD License\r\n *\r\n * For Zstandard software\r\n *\r\n * Copyright (c) 2016-present, Yann Collet, Facebook, Inc. All rights reserved.\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *\r\n * * Redistributions of source code must retain the above copyright notice, this\r\n * list of conditions and the following disclaimer.\r\n *\r\n * * Redistributions in binary form must reproduce the above copyright notice,\r\n * this list of conditions and the following disclaimer in the documentation\r\n * and/or other materials provided with the distribution.\r\n *\r\n * * Neither the name Facebook nor the names of its contributors may be used to\r\n * endorse or promote products derived from this software without specific\r\n * prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\n * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n */\r\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import * as ktx2decoder from \"ktx2decoder/legacy/legacy\";\r\n\r\nexport { ktx2decoder };\r\nexport default ktx2decoder;\r\n"],"names":[],"sourceRoot":""}
1
+ {"version":3,"file":"babylon.ktx2Decoder.max.js","mappings":"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","sources":["webpack://KTX2DECODER/webpack/universalModuleDefinition","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/Misc/dataReader.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/Misc/index.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/Transcoders/index.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/Transcoders/liteTranscoder.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/Transcoders/liteTranscoder_UASTC_ASTC.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/Transcoders/liteTranscoder_UASTC_BC7.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/Transcoders/liteTranscoder_UASTC_RGBA_SRGB.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/Transcoders/liteTranscoder_UASTC_RGBA_UNORM.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/Transcoders/mscTranscoder.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/index.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/ktx2Decoder.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/ktx2FileReader.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/legacy/legacy.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/transcodeDecisionTree.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/transcoder.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/transcoderManager.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/wasmMemoryManager.ts","webpack://KTX2DECODER/../../../tools/ktx2Decoder/src/zstddec.ts","webpack://KTX2DECODER/webpack/bootstrap","webpack://KTX2DECODER/webpack/runtime/define property getters","webpack://KTX2DECODER/webpack/runtime/global","webpack://KTX2DECODER/webpack/runtime/hasOwnProperty shorthand","webpack://KTX2DECODER/webpack/runtime/make namespace object","webpack://KTX2DECODER/./src/index.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"babylonjs-ktx2decoder\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"babylonjs-ktx2decoder\"] = factory();\n\telse\n\t\troot[\"KTX2DECODER\"] = factory();\n})((typeof self !== \"undefined\" ? self : typeof global !== \"undefined\" ? global : this), () => {\nreturn ","/**\r\n * Utility class for reading from a data buffer\r\n */\r\nexport class DataReader {\r\n /**\r\n * The current byte offset from the beginning of the data buffer.\r\n */\r\n public get byteOffset() {\r\n return this._dataByteOffset;\r\n }\r\n\r\n private _dataView: DataView;\r\n private _dataByteOffset: number;\r\n\r\n /**\r\n * Constructor\r\n * @param buffer The buffer to set\r\n * @param byteOffset The starting offset in the buffer\r\n * @param byteLength The byte length of the buffer\r\n */\r\n constructor(buffer: ArrayBuffer | ArrayBufferView, byteOffset?: number, byteLength?: number) {\r\n if ((buffer as ArrayBufferView).buffer) {\r\n this._dataView = new DataView(\r\n (buffer as ArrayBufferView).buffer,\r\n (buffer as ArrayBufferView).byteOffset + (byteOffset ?? 0),\r\n byteLength ?? (buffer as ArrayBufferView).byteLength\r\n );\r\n } else {\r\n this._dataView = new DataView(buffer as ArrayBuffer, byteOffset ?? 0, byteLength ?? (buffer as ArrayBuffer).byteLength);\r\n }\r\n\r\n this._dataByteOffset = 0;\r\n }\r\n\r\n /**\r\n * Read a unsigned 8-bit integer from the currently loaded data range.\r\n * @returns The 8-bit integer read\r\n */\r\n public readUint8(): number {\r\n const value = this._dataView.getUint8(this._dataByteOffset);\r\n this._dataByteOffset += 1;\r\n return value;\r\n }\r\n\r\n /**\r\n * Read a signed 8-bit integer from the currently loaded data range.\r\n * @returns The 8-bit integer read\r\n */\r\n public readInt8(): number {\r\n const value = this._dataView.getInt8(this._dataByteOffset);\r\n this._dataByteOffset += 1;\r\n return value;\r\n }\r\n\r\n /**\r\n * Read a unsigned 16-bit integer from the currently loaded data range.\r\n * @returns The 16-bit integer read\r\n */\r\n public readUint16(): number {\r\n const value = this._dataView.getUint16(this._dataByteOffset, true);\r\n this._dataByteOffset += 2;\r\n return value;\r\n }\r\n\r\n /**\r\n * Read a signed 16-bit integer from the currently loaded data range.\r\n * @returns The 16-bit integer read\r\n */\r\n public readInt16(): number {\r\n const value = this._dataView.getInt16(this._dataByteOffset, true);\r\n this._dataByteOffset += 2;\r\n return value;\r\n }\r\n\r\n /**\r\n * Read a unsigned 32-bit integer from the currently loaded data range.\r\n * @returns The 32-bit integer read\r\n */\r\n public readUint32(): number {\r\n const value = this._dataView.getUint32(this._dataByteOffset, true);\r\n this._dataByteOffset += 4;\r\n return value;\r\n }\r\n\r\n /**\r\n * Read a signed 32-bit integer from the currently loaded data range.\r\n * @returns The 32-bit integer read\r\n */\r\n public readInt32(): number {\r\n const value = this._dataView.getInt32(this._dataByteOffset, true);\r\n this._dataByteOffset += 4;\r\n return value;\r\n }\r\n\r\n /**\r\n * Read a unsigned 32-bit integer from the currently loaded data range.\r\n * @returns The 32-bit integer read\r\n */\r\n public readUint64(): number {\r\n // split 64-bit number into two 32-bit (4-byte) parts\r\n const left = this._dataView.getUint32(this._dataByteOffset, true);\r\n const right = this._dataView.getUint32(this._dataByteOffset + 4, true);\r\n\r\n // combine the two 32-bit values\r\n const combined = left + 2 ** 32 * right; // That was weird..Keeping it for posterity: true ? left + 2 ** 32 * right : 2 ** 32 * left + right;\r\n\r\n /*if (!Number.isSafeInteger(combined)) {\r\n console.warn('DataReader: ' + combined + ' exceeds MAX_SAFE_INTEGER. Precision may be lost.');\r\n }*/\r\n\r\n this._dataByteOffset += 8;\r\n return combined;\r\n }\r\n\r\n /**\r\n * Read a byte array from the currently loaded data range.\r\n * @param byteLength The byte length to read\r\n * @returns The byte array read\r\n */\r\n public readUint8Array(byteLength: number): Uint8Array {\r\n const value = new Uint8Array(this._dataView.buffer, this._dataView.byteOffset + this._dataByteOffset, byteLength);\r\n this._dataByteOffset += byteLength;\r\n return value;\r\n }\r\n\r\n /**\r\n * Skips the given byte length the currently loaded data range.\r\n * @param byteLength The byte length to skip\r\n * @returns This instance\r\n */\r\n public skipBytes(byteLength: number) {\r\n this._dataByteOffset += byteLength;\r\n return this;\r\n }\r\n}\r\n","export * from \"./dataReader\";\r\n","export * from \"./liteTranscoder\";\r\nexport * from \"./liteTranscoder_UASTC_ASTC\";\r\nexport * from \"./liteTranscoder_UASTC_BC7\";\r\nexport * from \"./liteTranscoder_UASTC_RGBA_UNORM\";\r\nexport * from \"./liteTranscoder_UASTC_RGBA_SRGB\";\r\nexport * from \"./mscTranscoder\";\r\n","import type { sourceTextureFormat, transcodeTarget } from \"../transcoder\";\r\nimport { Transcoder } from \"../transcoder\";\r\nimport { WASMMemoryManager } from \"../wasmMemoryManager\";\r\nimport type { KTX2FileReader, IKTX2_ImageDesc } from \"../ktx2FileReader\";\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport class LiteTranscoder extends Transcoder {\r\n private _modulePath: string;\r\n private _modulePromise: Promise<{ module: any }>;\r\n private _memoryManager: WASMMemoryManager;\r\n protected _transcodeInPlace: boolean;\r\n\r\n protected _loadModule(): Promise<{ module: any }> {\r\n if (this._modulePromise) {\r\n return this._modulePromise;\r\n }\r\n\r\n this._modulePromise = WASMMemoryManager.LoadWASM(this._modulePath).then((wasmBinary) => {\r\n return new Promise((resolve) => {\r\n WebAssembly.instantiate(wasmBinary as ArrayBuffer, { env: { memory: this._memoryManager.wasmMemory } }).then((moduleWrapper) => {\r\n resolve({ module: moduleWrapper.instance.exports });\r\n });\r\n });\r\n });\r\n\r\n return this._modulePromise;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n protected get memoryManager(): WASMMemoryManager {\r\n return this._memoryManager;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n protected setModulePath(modulePath: string): void {\r\n this._modulePath = modulePath;\r\n }\r\n\r\n public initialize(): void {\r\n this._transcodeInPlace = true;\r\n }\r\n\r\n public needMemoryManager(): boolean {\r\n return true;\r\n }\r\n\r\n public setMemoryManager(memoryMgr: WASMMemoryManager): void {\r\n this._memoryManager = memoryMgr;\r\n }\r\n\r\n public transcode(\r\n src: sourceTextureFormat,\r\n dst: transcodeTarget,\r\n level: number,\r\n width: number,\r\n height: number,\r\n uncompressedByteLength: number,\r\n ktx2Reader: KTX2FileReader,\r\n imageDesc: IKTX2_ImageDesc | null,\r\n encodedData: Uint8Array\r\n ): Promise<Uint8Array | null> {\r\n return this._loadModule().then((moduleWrapper: any) => {\r\n const transcoder: any = moduleWrapper.module;\r\n const [textureView, uncompressedTextureView, nBlocks] = this._prepareTranscoding(width, height, uncompressedByteLength, encodedData);\r\n\r\n return transcoder.transcode(nBlocks) === 0 ? (this._transcodeInPlace ? textureView.slice() : uncompressedTextureView!.slice()) : null;\r\n });\r\n }\r\n\r\n protected _prepareTranscoding(\r\n width: number,\r\n height: number,\r\n uncompressedByteLength: number,\r\n encodedData: Uint8Array,\r\n forceRGBA = false\r\n ): [Uint8Array, Uint8Array | null, number] {\r\n const nBlocks = ((width + 3) >> 2) * ((height + 3) >> 2);\r\n\r\n if (forceRGBA) {\r\n uncompressedByteLength = width * ((height + 3) >> 2) * 4 * 4;\r\n }\r\n\r\n const texMemoryPages = ((nBlocks * 16 + 65535 + (this._transcodeInPlace ? 0 : uncompressedByteLength)) >> 16) + 1;\r\n\r\n const textureView = this.memoryManager.getMemoryView(texMemoryPages, 65536, nBlocks * 16);\r\n\r\n const uncompressedTextureView = this._transcodeInPlace\r\n ? null\r\n : new Uint8Array(this._memoryManager.wasmMemory.buffer, 65536 + nBlocks * 16, forceRGBA ? width * height * 4 : uncompressedByteLength);\r\n\r\n textureView.set(encodedData);\r\n\r\n return [textureView, uncompressedTextureView, nBlocks];\r\n }\r\n}\r\n","import { sourceTextureFormat, transcodeTarget } from \"../transcoder\";\r\nimport { LiteTranscoder } from \"./liteTranscoder\";\r\n\r\n/**\r\n * @hidden\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class LiteTranscoder_UASTC_ASTC extends LiteTranscoder {\r\n /**\r\n * URL to use when loading the wasm module for the transcoder\r\n */\r\n public static WasmModuleURL = \"https://preview.babylonjs.com/ktx2Transcoders/uastc_astc.wasm\";\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public static CanTranscode(src: sourceTextureFormat, dst: transcodeTarget, isInGammaSpace: boolean): boolean {\r\n return src === sourceTextureFormat.UASTC4x4 && dst === transcodeTarget.ASTC_4x4_RGBA;\r\n }\r\n\r\n public static Name = \"UniversalTranscoder_UASTC_ASTC\";\r\n\r\n public getName(): string {\r\n return LiteTranscoder_UASTC_ASTC.Name;\r\n }\r\n\r\n public initialize(): void {\r\n super.initialize();\r\n this.setModulePath(LiteTranscoder_UASTC_ASTC.WasmModuleURL);\r\n }\r\n}\r\n","import { sourceTextureFormat, transcodeTarget } from \"../transcoder\";\r\nimport { LiteTranscoder } from \"./liteTranscoder\";\r\n\r\n/**\r\n * @hidden\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class LiteTranscoder_UASTC_BC7 extends LiteTranscoder {\r\n /**\r\n * URL to use when loading the wasm module for the transcoder\r\n */\r\n public static WasmModuleURL = \"https://preview.babylonjs.com/ktx2Transcoders/uastc_bc7.wasm\";\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public static CanTranscode(src: sourceTextureFormat, dst: transcodeTarget, isInGammaSpace: boolean): boolean {\r\n return src === sourceTextureFormat.UASTC4x4 && dst === transcodeTarget.BC7_RGBA;\r\n }\r\n\r\n public static Name = \"UniversalTranscoder_UASTC_BC7\";\r\n\r\n public getName(): string {\r\n return LiteTranscoder_UASTC_BC7.Name;\r\n }\r\n\r\n public initialize(): void {\r\n super.initialize();\r\n this.setModulePath(LiteTranscoder_UASTC_BC7.WasmModuleURL);\r\n }\r\n}\r\n","import { sourceTextureFormat, transcodeTarget } from \"../transcoder\";\r\nimport { LiteTranscoder } from \"./liteTranscoder\";\r\nimport type { KTX2FileReader, IKTX2_ImageDesc } from \"../ktx2FileReader\";\r\n\r\n/**\r\n * @hidden\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class LiteTranscoder_UASTC_RGBA_SRGB extends LiteTranscoder {\r\n /**\r\n * URL to use when loading the wasm module for the transcoder (srgb)\r\n */\r\n public static WasmModuleURL = \"https://preview.babylonjs.com/ktx2Transcoders/uastc_rgba32_srgb.wasm\";\r\n\r\n public static CanTranscode(src: sourceTextureFormat, dst: transcodeTarget, isInGammaSpace: boolean): boolean {\r\n return src === sourceTextureFormat.UASTC4x4 && dst === transcodeTarget.RGBA32 && isInGammaSpace;\r\n }\r\n\r\n public static Name = \"UniversalTranscoder_UASTC_RGBA_SRGB\";\r\n\r\n public getName(): string {\r\n return LiteTranscoder_UASTC_RGBA_SRGB.Name;\r\n }\r\n\r\n public initialize(): void {\r\n super.initialize();\r\n this._transcodeInPlace = false;\r\n this.setModulePath(LiteTranscoder_UASTC_RGBA_SRGB.WasmModuleURL);\r\n }\r\n\r\n public transcode(\r\n src: sourceTextureFormat,\r\n dst: transcodeTarget,\r\n level: number,\r\n width: number,\r\n height: number,\r\n uncompressedByteLength: number,\r\n ktx2Reader: KTX2FileReader,\r\n imageDesc: IKTX2_ImageDesc | null,\r\n encodedData: Uint8Array\r\n ): Promise<Uint8Array | null> {\r\n return this._loadModule().then((moduleWrapper: any) => {\r\n const transcoder: any = moduleWrapper.module;\r\n const [, uncompressedTextureView] = this._prepareTranscoding(width, height, uncompressedByteLength, encodedData, true);\r\n\r\n return transcoder.decodeRGBA32(width, height) === 0 ? uncompressedTextureView!.slice() : null;\r\n });\r\n }\r\n}\r\n","import { sourceTextureFormat, transcodeTarget } from \"../transcoder\";\r\nimport { LiteTranscoder } from \"./liteTranscoder\";\r\nimport type { KTX2FileReader, IKTX2_ImageDesc } from \"../ktx2FileReader\";\r\n\r\n/**\r\n * @hidden\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class LiteTranscoder_UASTC_RGBA_UNORM extends LiteTranscoder {\r\n /**\r\n * URL to use when loading the wasm module for the transcoder (unorm)\r\n */\r\n public static WasmModuleURL = \"https://preview.babylonjs.com/ktx2Transcoders/uastc_rgba32_unorm.wasm\";\r\n\r\n public static CanTranscode(src: sourceTextureFormat, dst: transcodeTarget, isInGammaSpace: boolean): boolean {\r\n return src === sourceTextureFormat.UASTC4x4 && dst === transcodeTarget.RGBA32 && !isInGammaSpace;\r\n }\r\n\r\n public static Name = \"UniversalTranscoder_UASTC_RGBA_UNORM\";\r\n\r\n public getName(): string {\r\n return LiteTranscoder_UASTC_RGBA_UNORM.Name;\r\n }\r\n\r\n public initialize(): void {\r\n super.initialize();\r\n this._transcodeInPlace = false;\r\n this.setModulePath(LiteTranscoder_UASTC_RGBA_UNORM.WasmModuleURL);\r\n }\r\n\r\n public transcode(\r\n src: sourceTextureFormat,\r\n dst: transcodeTarget,\r\n level: number,\r\n width: number,\r\n height: number,\r\n uncompressedByteLength: number,\r\n ktx2Reader: KTX2FileReader,\r\n imageDesc: IKTX2_ImageDesc | null,\r\n encodedData: Uint8Array\r\n ): Promise<Uint8Array | null> {\r\n return this._loadModule().then((moduleWrapper: any) => {\r\n const transcoder: any = moduleWrapper.module;\r\n const [, uncompressedTextureView] = this._prepareTranscoding(width, height, uncompressedByteLength, encodedData, true);\r\n\r\n return transcoder.decodeRGBA32(width, height) === 0 ? uncompressedTextureView!.slice() : null;\r\n });\r\n }\r\n}\r\n","import { Transcoder, sourceTextureFormat, transcodeTarget } from \"../transcoder\";\r\nimport type { KTX2FileReader, IKTX2_ImageDesc } from \"../ktx2FileReader\";\r\nimport { WASMMemoryManager } from \"../wasmMemoryManager\";\r\n\r\ndeclare let MSC_TRANSCODER: any;\r\n\r\ndeclare function importScripts(...urls: string[]): void;\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport class MSCTranscoder extends Transcoder {\r\n /**\r\n * URL to use when loading the MSC transcoder\r\n */\r\n public static JSModuleURL = \"https://preview.babylonjs.com/ktx2Transcoders/msc_basis_transcoder.js\";\r\n /**\r\n * URL to use when loading the wasm module for the transcoder\r\n */\r\n public static WasmModuleURL = \"https://preview.babylonjs.com/ktx2Transcoders/msc_basis_transcoder.wasm\";\r\n\r\n public static UseFromWorkerThread = true;\r\n\r\n public static Name = \"MSCTranscoder\";\r\n\r\n public getName(): string {\r\n return MSCTranscoder.Name;\r\n }\r\n\r\n private _mscBasisTranscoderPromise: Promise<void>;\r\n private _mscBasisModule: any;\r\n\r\n private _getMSCBasisTranscoder(): Promise<void> {\r\n if (this._mscBasisTranscoderPromise) {\r\n return this._mscBasisTranscoderPromise;\r\n }\r\n\r\n this._mscBasisTranscoderPromise = WASMMemoryManager.LoadWASM(MSCTranscoder.WasmModuleURL).then((wasmBinary) => {\r\n if (MSCTranscoder.UseFromWorkerThread) {\r\n importScripts(MSCTranscoder.JSModuleURL);\r\n }\r\n // Worker Number = 0 and MSC_TRANSCODER has not been loaded yet.\r\n else if (typeof MSC_TRANSCODER === \"undefined\") {\r\n return new Promise((resolve, reject) => {\r\n const head = document.getElementsByTagName(\"head\")[0];\r\n const script = document.createElement(\"script\");\r\n script.setAttribute(\"type\", \"text/javascript\");\r\n script.setAttribute(\"src\", MSCTranscoder.JSModuleURL);\r\n\r\n script.onload = () => {\r\n MSC_TRANSCODER({ wasmBinary }).then((basisModule: any) => {\r\n basisModule.initTranscoders();\r\n this._mscBasisModule = basisModule;\r\n resolve();\r\n });\r\n };\r\n\r\n script.onerror = () => {\r\n reject(\"Can not load MSC_TRANSCODER script.\");\r\n };\r\n\r\n head.appendChild(script);\r\n });\r\n }\r\n\r\n return new Promise((resolve) => {\r\n MSC_TRANSCODER({ wasmBinary }).then((basisModule: any) => {\r\n basisModule.initTranscoders();\r\n this._mscBasisModule = basisModule;\r\n resolve();\r\n });\r\n });\r\n });\r\n\r\n return this._mscBasisTranscoderPromise;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public static CanTranscode(src: sourceTextureFormat, dst: transcodeTarget, isInGammaSpace: boolean): boolean {\r\n return true;\r\n }\r\n\r\n public transcode(\r\n src: sourceTextureFormat,\r\n dst: transcodeTarget,\r\n level: number,\r\n width: number,\r\n height: number,\r\n uncompressedByteLength: number,\r\n ktx2Reader: KTX2FileReader,\r\n imageDesc: IKTX2_ImageDesc | null,\r\n encodedData: Uint8Array\r\n ): Promise<Uint8Array | null> {\r\n const isVideo = false;\r\n\r\n return this._getMSCBasisTranscoder().then(() => {\r\n const basisModule = this._mscBasisModule;\r\n\r\n let transcoder: any;\r\n let imageInfo: any;\r\n let result: any;\r\n let textureData: any = null;\r\n\r\n try {\r\n transcoder = src === sourceTextureFormat.UASTC4x4 ? new basisModule.UastcImageTranscoder() : new basisModule.BasisLzEtc1sImageTranscoder();\r\n const texFormat = src === sourceTextureFormat.UASTC4x4 ? basisModule.TextureFormat.UASTC4x4 : basisModule.TextureFormat.ETC1S;\r\n\r\n imageInfo = new basisModule.ImageInfo(texFormat, width, height, level);\r\n\r\n const targetFormat = basisModule.TranscodeTarget[transcodeTarget[dst]]; // works because the labels of the sourceTextureFormat enum are the same as the property names used in TranscodeTarget!\r\n\r\n if (!basisModule.isFormatSupported(targetFormat, texFormat)) {\r\n throw new Error(`MSCTranscoder: Transcoding from \"${sourceTextureFormat[src]}\" to \"${transcodeTarget[dst]}\" not supported by current transcoder build.`);\r\n }\r\n\r\n if (src === sourceTextureFormat.ETC1S) {\r\n const sgd = ktx2Reader.supercompressionGlobalData;\r\n\r\n transcoder.decodePalettes(sgd.endpointCount, sgd.endpointsData, sgd.selectorCount, sgd.selectorsData);\r\n transcoder.decodeTables(sgd.tablesData);\r\n\r\n imageInfo.flags = imageDesc!.imageFlags;\r\n imageInfo.rgbByteOffset = 0;\r\n imageInfo.rgbByteLength = imageDesc!.rgbSliceByteLength;\r\n imageInfo.alphaByteOffset = imageDesc!.alphaSliceByteOffset > 0 ? imageDesc!.rgbSliceByteLength : 0;\r\n imageInfo.alphaByteLength = imageDesc!.alphaSliceByteLength;\r\n\r\n result = transcoder.transcodeImage(targetFormat, encodedData, imageInfo, 0, isVideo);\r\n } else {\r\n imageInfo.flags = 0;\r\n imageInfo.rgbByteOffset = 0;\r\n imageInfo.rgbByteLength = uncompressedByteLength;\r\n imageInfo.alphaByteOffset = 0;\r\n imageInfo.alphaByteLength = 0;\r\n\r\n result = transcoder.transcodeImage(targetFormat, encodedData, imageInfo, 0, ktx2Reader.hasAlpha, isVideo);\r\n }\r\n } finally {\r\n if (transcoder) {\r\n transcoder.delete();\r\n }\r\n\r\n if (imageInfo) {\r\n imageInfo.delete();\r\n }\r\n\r\n if (result && result.transcodedImage) {\r\n textureData = result.transcodedImage.get_typed_memory_view().slice();\r\n result.transcodedImage.delete();\r\n }\r\n }\r\n\r\n return textureData;\r\n });\r\n }\r\n}\r\n","/* eslint-disable import/no-internal-modules */\r\nexport * from \"./ktx2Decoder\";\r\nexport * from \"./ktx2FileReader\";\r\nexport * from \"./transcoder\";\r\nexport * from \"./transcoderManager\";\r\nexport * from \"./wasmMemoryManager\";\r\nexport * from \"./zstddec\";\r\nexport * from \"./Misc/index\";\r\nexport * from \"./Transcoders/index\";\r\n","/**\r\n * Resources used for the implementation:\r\n * - 3js KTX2 loader: https://github.com/mrdoob/three.js/blob/dfb5c23ce126ec845e4aa240599915fef5375797/examples/jsm/loaders/KTX2Loader.js\r\n * - Universal Texture Transcoders: https://github.com/KhronosGroup/Universal-Texture-Transcoders\r\n * - KTX2 specification: http://github.khronos.org/KTX-Specification/\r\n * - KTX2 binaries to convert files: https://github.com/KhronosGroup/KTX-Software/releases\r\n * - KTX specification: https://www.khronos.org/registry/DataFormat/specs/1.3/dataformat.1.3.html\r\n * - KTX-Software: https://github.com/KhronosGroup/KTX-Software\r\n */\r\n\r\nimport type { IKTX2_ImageDesc } from \"./ktx2FileReader\";\r\nimport { KTX2FileReader, SupercompressionScheme } from \"./ktx2FileReader\";\r\nimport { TranscoderManager } from \"./transcoderManager\";\r\nimport { LiteTranscoder_UASTC_ASTC } from \"./Transcoders/liteTranscoder_UASTC_ASTC\";\r\nimport { LiteTranscoder_UASTC_BC7 } from \"./Transcoders/liteTranscoder_UASTC_BC7\";\r\nimport { LiteTranscoder_UASTC_RGBA_UNORM } from \"./Transcoders/liteTranscoder_UASTC_RGBA_UNORM\";\r\nimport { LiteTranscoder_UASTC_RGBA_SRGB } from \"./Transcoders/liteTranscoder_UASTC_RGBA_SRGB\";\r\nimport { MSCTranscoder } from \"./Transcoders/mscTranscoder\";\r\nimport { transcodeTarget, sourceTextureFormat } from \"./transcoder\";\r\nimport { ZSTDDecoder } from \"./zstddec\";\r\nimport { TranscodeDecisionTree } from \"./transcodeDecisionTree\";\r\n\r\nexport interface IDecodedData {\r\n width: number;\r\n height: number;\r\n transcodedFormat: number;\r\n mipmaps: Array<IMipmap>;\r\n isInGammaSpace: boolean;\r\n hasAlpha: boolean;\r\n errors?: string;\r\n transcoderName?: string;\r\n}\r\n\r\nexport interface IMipmap {\r\n data: Uint8Array | null;\r\n width: number;\r\n height: number;\r\n}\r\n\r\nexport interface ICompressedFormatCapabilities {\r\n astc?: boolean;\r\n bptc?: boolean;\r\n s3tc?: boolean;\r\n pvrtc?: boolean;\r\n etc2?: boolean;\r\n etc1?: boolean;\r\n}\r\n\r\nexport interface IKTX2DecoderOptions {\r\n /** use RGBA format if ASTC and BC7 are not available as transcoded format */\r\n useRGBAIfASTCBC7NotAvailableWhenUASTC?: boolean;\r\n\r\n /** force to always use RGBA for transcoded format */\r\n forceRGBA?: boolean;\r\n\r\n /**\r\n * list of transcoders to bypass when looking for a suitable transcoder. The available transcoders are:\r\n * UniversalTranscoder_UASTC_ASTC\r\n * UniversalTranscoder_UASTC_BC7\r\n * UniversalTranscoder_UASTC_RGBA_UNORM\r\n * UniversalTranscoder_UASTC_RGBA_SRGB\r\n * MSCTranscoder\r\n */\r\n bypassTranscoders?: string[];\r\n}\r\n\r\nconst isPowerOfTwo = (value: number) => {\r\n return (value & (value - 1)) === 0 && value !== 0;\r\n};\r\n\r\n/**\r\n * Class for decoding KTX2 files\r\n *\r\n */\r\nexport class KTX2Decoder {\r\n private _transcoderMgr: TranscoderManager;\r\n private _zstdDecoder: ZSTDDecoder;\r\n\r\n constructor() {\r\n this._transcoderMgr = new TranscoderManager();\r\n }\r\n\r\n public decode(data: Uint8Array, caps: ICompressedFormatCapabilities, options?: IKTX2DecoderOptions): Promise<IDecodedData | null> {\r\n return Promise.resolve().then(() => {\r\n const kfr = new KTX2FileReader(data);\r\n\r\n if (!kfr.isValid()) {\r\n throw new Error(\"Invalid KT2 file: wrong signature\");\r\n }\r\n\r\n kfr.parse();\r\n\r\n if (kfr.needZSTDDecoder) {\r\n if (!this._zstdDecoder) {\r\n this._zstdDecoder = new ZSTDDecoder();\r\n }\r\n\r\n return this._zstdDecoder.init().then(() => {\r\n return this._decodeData(kfr, caps, options);\r\n });\r\n }\r\n\r\n return this._decodeData(kfr, caps, options);\r\n });\r\n }\r\n\r\n private _decodeData(kfr: KTX2FileReader, caps: ICompressedFormatCapabilities, options?: IKTX2DecoderOptions): Promise<IDecodedData> {\r\n const width = kfr.header.pixelWidth;\r\n const height = kfr.header.pixelHeight;\r\n const srcTexFormat = kfr.textureFormat;\r\n\r\n const decisionTree = new TranscodeDecisionTree(srcTexFormat, kfr.hasAlpha, isPowerOfTwo(width) && isPowerOfTwo(height), caps, options);\r\n\r\n const transcodeFormat = decisionTree.transcodeFormat;\r\n const engineFormat = decisionTree.engineFormat;\r\n const roundToMultiple4 = decisionTree.roundToMultiple4;\r\n\r\n const transcoder = this._transcoderMgr.findTranscoder(srcTexFormat, transcodeFormat, kfr.isInGammaSpace, options?.bypassTranscoders);\r\n\r\n if (transcoder === null) {\r\n throw new Error(`no transcoder found to transcode source texture format \"${sourceTextureFormat[srcTexFormat]}\" to format \"${transcodeTarget[transcodeFormat]}\"`);\r\n }\r\n\r\n const mipmaps: Array<IMipmap> = [];\r\n const dataPromises: Array<Promise<Uint8Array | null>> = [];\r\n const decodedData: IDecodedData = {\r\n width: 0,\r\n height: 0,\r\n transcodedFormat: engineFormat,\r\n mipmaps,\r\n isInGammaSpace: kfr.isInGammaSpace,\r\n hasAlpha: kfr.hasAlpha,\r\n transcoderName: transcoder.getName(),\r\n };\r\n\r\n let firstImageDescIndex = 0;\r\n\r\n for (let level = 0; level < kfr.header.levelCount; level++) {\r\n if (level > 0) {\r\n firstImageDescIndex += Math.max(kfr.header.layerCount, 1) * kfr.header.faceCount * Math.max(kfr.header.pixelDepth >> (level - 1), 1);\r\n }\r\n\r\n const levelWidth = Math.floor(width / (1 << level)) || 1;\r\n const levelHeight = Math.floor(height / (1 << level)) || 1;\r\n\r\n const numImagesInLevel = kfr.header.faceCount; // note that cubemap are not supported yet (see KTX2FileReader), so faceCount == 1\r\n const levelImageByteLength = ((levelWidth + 3) >> 2) * ((levelHeight + 3) >> 2) * kfr.dfdBlock.bytesPlane[0];\r\n\r\n const levelUncompressedByteLength = kfr.levels[level].uncompressedByteLength;\r\n\r\n let levelDataBuffer = kfr.data.buffer;\r\n\r\n let levelDataOffset = kfr.levels[level].byteOffset + kfr.data.byteOffset;\r\n let imageOffsetInLevel = 0;\r\n\r\n if (kfr.header.supercompressionScheme === SupercompressionScheme.ZStandard) {\r\n levelDataBuffer = this._zstdDecoder.decode(new Uint8Array(levelDataBuffer, levelDataOffset, kfr.levels[level].byteLength), levelUncompressedByteLength);\r\n levelDataOffset = 0;\r\n }\r\n\r\n if (level === 0) {\r\n decodedData.width = roundToMultiple4 ? (levelWidth + 3) & ~3 : levelWidth;\r\n decodedData.height = roundToMultiple4 ? (levelHeight + 3) & ~3 : levelHeight;\r\n }\r\n\r\n for (let imageIndex = 0; imageIndex < numImagesInLevel; imageIndex++) {\r\n let encodedData: Uint8Array;\r\n let imageDesc: IKTX2_ImageDesc | null = null;\r\n\r\n if (kfr.header.supercompressionScheme === SupercompressionScheme.BasisLZ) {\r\n imageDesc = kfr.supercompressionGlobalData.imageDescs![firstImageDescIndex + imageIndex];\r\n\r\n encodedData = new Uint8Array(levelDataBuffer, levelDataOffset + imageDesc.rgbSliceByteOffset, imageDesc.rgbSliceByteLength + imageDesc.alphaSliceByteLength);\r\n } else {\r\n encodedData = new Uint8Array(levelDataBuffer, levelDataOffset + imageOffsetInLevel, levelImageByteLength);\r\n\r\n imageOffsetInLevel += levelImageByteLength;\r\n }\r\n\r\n const mipmap: IMipmap = {\r\n data: null,\r\n width: levelWidth,\r\n height: levelHeight,\r\n };\r\n\r\n const transcodedData = transcoder\r\n .transcode(srcTexFormat, transcodeFormat, level, levelWidth, levelHeight, levelUncompressedByteLength, kfr, imageDesc, encodedData)\r\n .then((data) => {\r\n mipmap.data = data;\r\n return data;\r\n })\r\n .catch((reason) => {\r\n decodedData.errors = decodedData.errors ?? \"\";\r\n decodedData.errors += reason + \"\\n\" + reason.stack + \"\\n\";\r\n return null;\r\n });\r\n\r\n dataPromises.push(transcodedData);\r\n\r\n mipmaps.push(mipmap);\r\n }\r\n }\r\n\r\n return Promise.all(dataPromises).then(() => {\r\n return decodedData;\r\n });\r\n }\r\n}\r\n\r\n// Put in the order you want the transcoders to be used in priority\r\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_ASTC);\r\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_BC7);\r\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_RGBA_UNORM);\r\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_RGBA_SRGB);\r\nTranscoderManager.RegisterTranscoder(MSCTranscoder); // catch all transcoder - will throw an error if the format can't be transcoded\r\n","/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { DataReader } from \"./Misc/dataReader\";\r\nimport { sourceTextureFormat } from \"./transcoder\";\r\n\r\n/** @hidden */\r\nexport enum SupercompressionScheme {\r\n None = 0,\r\n BasisLZ = 1,\r\n ZStandard = 2,\r\n ZLib = 3,\r\n}\r\n\r\nconst enum DFDModel {\r\n ETC1S = 163,\r\n UASTC = 166,\r\n}\r\n\r\nconst enum DFDChannel_ETC1S {\r\n RGB = 0,\r\n RRR = 3,\r\n GGG = 4,\r\n AAA = 15,\r\n}\r\n\r\nconst enum DFDChannel_UASTC {\r\n RGB = 0,\r\n RGBA = 3,\r\n RRR = 4,\r\n RRRG = 5,\r\n}\r\n\r\nconst enum DFDTransferFunction {\r\n linear = 1,\r\n sRGB = 2,\r\n}\r\n\r\n/** @hidden */\r\nexport interface IKTX2_Header {\r\n vkFormat: number;\r\n typeSize: number;\r\n pixelWidth: number;\r\n pixelHeight: number;\r\n pixelDepth: number;\r\n layerCount: number;\r\n faceCount: number;\r\n levelCount: number;\r\n supercompressionScheme: number;\r\n dfdByteOffset: number;\r\n dfdByteLength: number;\r\n kvdByteOffset: number;\r\n kvdByteLength: number;\r\n sgdByteOffset: number;\r\n sgdByteLength: number;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IKTX2_Level {\r\n byteOffset: number;\r\n byteLength: number;\r\n uncompressedByteLength: number;\r\n}\r\n\r\ninterface IKTX2_Sample {\r\n bitOffset: number;\r\n bitLength: number;\r\n channelType: number;\r\n channelFlags: number;\r\n samplePosition: number[];\r\n sampleLower: number;\r\n sampleUpper: number;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IKTX2_DFD {\r\n vendorId: number;\r\n descriptorType: number;\r\n versionNumber: number;\r\n descriptorBlockSize: number;\r\n colorModel: number;\r\n colorPrimaries: number;\r\n transferFunction: number;\r\n flags: number;\r\n texelBlockDimension: {\r\n x: number;\r\n y: number;\r\n z: number;\r\n w: number;\r\n };\r\n bytesPlane: Array<number>;\r\n numSamples: number;\r\n samples: Array<IKTX2_Sample>;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IKTX2_ImageDesc {\r\n imageFlags: number;\r\n rgbSliceByteOffset: number;\r\n rgbSliceByteLength: number;\r\n alphaSliceByteOffset: number;\r\n alphaSliceByteLength: number;\r\n}\r\n\r\n/** @hidden */\r\nexport interface IKTX2_SupercompressionGlobalData {\r\n endpointCount?: number;\r\n selectorCount?: number;\r\n endpointsByteLength?: number;\r\n selectorsByteLength?: number;\r\n tablesByteLength?: number;\r\n extendedByteLength?: number;\r\n imageDescs?: Array<IKTX2_ImageDesc>;\r\n endpointsData?: Uint8Array;\r\n selectorsData?: Uint8Array;\r\n tablesData?: Uint8Array;\r\n extendedData?: Uint8Array;\r\n}\r\n\r\nexport class KTX2FileReader {\r\n private _data: Uint8Array;\r\n private _header: IKTX2_Header;\r\n private _levels: Array<IKTX2_Level>;\r\n private _dfdBlock: IKTX2_DFD;\r\n private _supercompressionGlobalData: IKTX2_SupercompressionGlobalData;\r\n\r\n /**\r\n * Will throw an exception if the file can't be parsed\r\n * @param data\r\n */\r\n constructor(data: Uint8Array) {\r\n this._data = data;\r\n }\r\n\r\n public get data(): Uint8Array {\r\n return this._data;\r\n }\r\n\r\n public get header(): IKTX2_Header {\r\n return this._header;\r\n }\r\n\r\n public get levels(): Array<IKTX2_Level> {\r\n return this._levels;\r\n }\r\n\r\n public get dfdBlock(): IKTX2_DFD {\r\n return this._dfdBlock;\r\n }\r\n\r\n public get supercompressionGlobalData(): IKTX2_SupercompressionGlobalData {\r\n return this._supercompressionGlobalData;\r\n }\r\n\r\n public isValid() {\r\n return KTX2FileReader.IsValid(this._data);\r\n }\r\n\r\n public parse() {\r\n let offsetInFile = 12; // skip the header\r\n\r\n /**\r\n * Get the header\r\n */\r\n const hdrReader = new DataReader(this._data, offsetInFile, 17 * 4);\r\n\r\n const header = (this._header = {\r\n vkFormat: hdrReader.readUint32(),\r\n typeSize: hdrReader.readUint32(),\r\n pixelWidth: hdrReader.readUint32(),\r\n pixelHeight: hdrReader.readUint32(),\r\n pixelDepth: hdrReader.readUint32(),\r\n layerCount: hdrReader.readUint32(),\r\n faceCount: hdrReader.readUint32(),\r\n levelCount: hdrReader.readUint32(),\r\n supercompressionScheme: hdrReader.readUint32(),\r\n\r\n dfdByteOffset: hdrReader.readUint32(),\r\n dfdByteLength: hdrReader.readUint32(),\r\n kvdByteOffset: hdrReader.readUint32(),\r\n kvdByteLength: hdrReader.readUint32(),\r\n sgdByteOffset: hdrReader.readUint64(),\r\n sgdByteLength: hdrReader.readUint64(),\r\n });\r\n\r\n if (header.pixelDepth > 0) {\r\n throw new Error(`Failed to parse KTX2 file - Only 2D textures are currently supported.`);\r\n }\r\n\r\n if (header.layerCount > 1) {\r\n throw new Error(`Failed to parse KTX2 file - Array textures are not currently supported.`);\r\n }\r\n\r\n if (header.faceCount > 1) {\r\n throw new Error(`Failed to parse KTX2 file - Cube textures are not currently supported.`);\r\n }\r\n\r\n offsetInFile += hdrReader.byteOffset;\r\n\r\n /**\r\n * Get the levels\r\n */\r\n let levelCount = Math.max(1, header.levelCount);\r\n\r\n const levelReader = new DataReader(this._data, offsetInFile, levelCount * 3 * (2 * 4));\r\n\r\n const levels: Array<IKTX2_Level> = (this._levels = []);\r\n\r\n while (levelCount--) {\r\n levels.push({\r\n byteOffset: levelReader.readUint64(),\r\n byteLength: levelReader.readUint64(),\r\n uncompressedByteLength: levelReader.readUint64(),\r\n });\r\n }\r\n\r\n offsetInFile += levelReader.byteOffset;\r\n\r\n /**\r\n * Get the data format descriptor (DFD) blocks\r\n */\r\n const dfdReader = new DataReader(this._data, header.dfdByteOffset, header.dfdByteLength);\r\n\r\n const dfdBlock = (this._dfdBlock = {\r\n vendorId: dfdReader.skipBytes(4 /* skip totalSize */).readUint16(),\r\n descriptorType: dfdReader.readUint16(),\r\n versionNumber: dfdReader.readUint16(),\r\n descriptorBlockSize: dfdReader.readUint16(),\r\n colorModel: dfdReader.readUint8(),\r\n colorPrimaries: dfdReader.readUint8(),\r\n transferFunction: dfdReader.readUint8(),\r\n flags: dfdReader.readUint8(),\r\n texelBlockDimension: {\r\n x: dfdReader.readUint8() + 1,\r\n y: dfdReader.readUint8() + 1,\r\n z: dfdReader.readUint8() + 1,\r\n w: dfdReader.readUint8() + 1,\r\n },\r\n bytesPlane: [\r\n dfdReader.readUint8() /* bytesPlane0 */,\r\n dfdReader.readUint8() /* bytesPlane1 */,\r\n dfdReader.readUint8() /* bytesPlane2 */,\r\n dfdReader.readUint8() /* bytesPlane3 */,\r\n dfdReader.readUint8() /* bytesPlane4 */,\r\n dfdReader.readUint8() /* bytesPlane5 */,\r\n dfdReader.readUint8() /* bytesPlane6 */,\r\n dfdReader.readUint8() /* bytesPlane7 */,\r\n ],\r\n numSamples: 0,\r\n samples: new Array<IKTX2_Sample>(),\r\n });\r\n\r\n dfdBlock.numSamples = (dfdBlock.descriptorBlockSize - 24) / 16;\r\n\r\n for (let i = 0; i < dfdBlock.numSamples; i++) {\r\n const sample = {\r\n bitOffset: dfdReader.readUint16(),\r\n bitLength: dfdReader.readUint8() + 1,\r\n channelType: dfdReader.readUint8(),\r\n channelFlags: 0,\r\n samplePosition: [\r\n dfdReader.readUint8() /* samplePosition0 */,\r\n dfdReader.readUint8() /* samplePosition1 */,\r\n dfdReader.readUint8() /* samplePosition2 */,\r\n dfdReader.readUint8() /* samplePosition3 */,\r\n ],\r\n sampleLower: dfdReader.readUint32(),\r\n sampleUpper: dfdReader.readUint32(),\r\n };\r\n\r\n sample.channelFlags = (sample.channelType & 0xf0) >> 4;\r\n sample.channelType = sample.channelType & 0x0f;\r\n\r\n dfdBlock.samples.push(sample);\r\n }\r\n\r\n /**\r\n * Get the Supercompression Global Data (sgd)\r\n */\r\n const sgd: IKTX2_SupercompressionGlobalData = (this._supercompressionGlobalData = {});\r\n\r\n if (header.sgdByteLength > 0) {\r\n const sgdReader = new DataReader(this._data, header.sgdByteOffset, header.sgdByteLength);\r\n\r\n sgd.endpointCount = sgdReader.readUint16();\r\n sgd.selectorCount = sgdReader.readUint16();\r\n sgd.endpointsByteLength = sgdReader.readUint32();\r\n sgd.selectorsByteLength = sgdReader.readUint32();\r\n sgd.tablesByteLength = sgdReader.readUint32();\r\n sgd.extendedByteLength = sgdReader.readUint32();\r\n sgd.imageDescs = [];\r\n\r\n const imageCount = this._getImageCount();\r\n\r\n for (let i = 0; i < imageCount; i++) {\r\n sgd.imageDescs.push({\r\n imageFlags: sgdReader.readUint32(),\r\n rgbSliceByteOffset: sgdReader.readUint32(),\r\n rgbSliceByteLength: sgdReader.readUint32(),\r\n alphaSliceByteOffset: sgdReader.readUint32(),\r\n alphaSliceByteLength: sgdReader.readUint32(),\r\n });\r\n }\r\n\r\n const endpointsByteOffset = header.sgdByteOffset + sgdReader.byteOffset;\r\n const selectorsByteOffset = endpointsByteOffset + sgd.endpointsByteLength;\r\n const tablesByteOffset = selectorsByteOffset + sgd.selectorsByteLength;\r\n const extendedByteOffset = tablesByteOffset + sgd.tablesByteLength;\r\n\r\n sgd.endpointsData = new Uint8Array(this._data.buffer, this._data.byteOffset + endpointsByteOffset, sgd.endpointsByteLength);\r\n sgd.selectorsData = new Uint8Array(this._data.buffer, this._data.byteOffset + selectorsByteOffset, sgd.selectorsByteLength);\r\n sgd.tablesData = new Uint8Array(this._data.buffer, this._data.byteOffset + tablesByteOffset, sgd.tablesByteLength);\r\n sgd.extendedData = new Uint8Array(this._data.buffer, this._data.byteOffset + extendedByteOffset, sgd.extendedByteLength);\r\n }\r\n }\r\n\r\n private _getImageCount(): number {\r\n let layerPixelDepth = Math.max(this._header.pixelDepth, 1);\r\n for (let i = 1; i < this._header.levelCount; i++) {\r\n layerPixelDepth += Math.max(this._header.pixelDepth >> i, 1);\r\n }\r\n\r\n return Math.max(this._header.layerCount, 1) * this._header.faceCount * layerPixelDepth;\r\n }\r\n\r\n public get textureFormat(): sourceTextureFormat {\r\n return this._dfdBlock.colorModel === DFDModel.UASTC ? sourceTextureFormat.UASTC4x4 : sourceTextureFormat.ETC1S;\r\n }\r\n\r\n public get hasAlpha(): boolean {\r\n const tformat = this.textureFormat;\r\n\r\n switch (tformat) {\r\n case sourceTextureFormat.ETC1S:\r\n return (\r\n this._dfdBlock.numSamples === 2 &&\r\n (this._dfdBlock.samples[0].channelType === DFDChannel_ETC1S.AAA || this._dfdBlock.samples[1].channelType === DFDChannel_ETC1S.AAA)\r\n );\r\n\r\n case sourceTextureFormat.UASTC4x4:\r\n return this._dfdBlock.samples[0].channelType === DFDChannel_UASTC.RGBA;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public get needZSTDDecoder(): boolean {\r\n return this._header.supercompressionScheme === SupercompressionScheme.ZStandard;\r\n }\r\n\r\n public get isInGammaSpace(): boolean {\r\n return this._dfdBlock.transferFunction === DFDTransferFunction.sRGB;\r\n }\r\n\r\n public static IsValid(data: ArrayBufferView): boolean {\r\n if (data.byteLength >= 12) {\r\n // '«', 'K', 'T', 'X', ' ', '2', '0', '»', '\\r', '\\n', '\\x1A', '\\n'\r\n const identifier = new Uint8Array(data.buffer, data.byteOffset, 12);\r\n if (\r\n identifier[0] === 0xab &&\r\n identifier[1] === 0x4b &&\r\n identifier[2] === 0x54 &&\r\n identifier[3] === 0x58 &&\r\n identifier[4] === 0x20 &&\r\n identifier[5] === 0x32 &&\r\n identifier[6] === 0x30 &&\r\n identifier[7] === 0xbb &&\r\n identifier[8] === 0x0d &&\r\n identifier[9] === 0x0a &&\r\n identifier[10] === 0x1a &&\r\n identifier[11] === 0x0a\r\n ) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n","/* eslint-disable import/no-internal-modules */\r\nimport { KTX2Decoder } from \"../index\";\r\n\r\nconst globalObject = typeof global !== \"undefined\" ? global : typeof window !== \"undefined\" ? window : undefined;\r\nif (typeof globalObject !== \"undefined\") {\r\n (<any>globalObject).KTX2DECODER = KTX2Decoder;\r\n}\r\n\r\nexport * from \"../index\";\r\n","/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { sourceTextureFormat, transcodeTarget } from \"./transcoder\";\r\n\r\nconst COMPRESSED_RGBA_BPTC_UNORM_EXT = 0x8e8c;\r\nconst COMPRESSED_RGBA_ASTC_4x4_KHR = 0x93b0;\r\nconst COMPRESSED_RGB_S3TC_DXT1_EXT = 0x83f0;\r\nconst COMPRESSED_RGBA_S3TC_DXT5_EXT = 0x83f3;\r\nconst COMPRESSED_RGBA_PVRTC_4BPPV1_IMG = 0x8c02;\r\nconst COMPRESSED_RGB_PVRTC_4BPPV1_IMG = 0x8c00;\r\nconst COMPRESSED_RGBA8_ETC2_EAC = 0x9278;\r\nconst COMPRESSED_RGB8_ETC2 = 0x9274;\r\nconst COMPRESSED_RGB_ETC1_WEBGL = 0x8d64;\r\nconst RGBA8Format = 0x8058;\r\n\r\ninterface ILeaf {\r\n transcodeFormat: number;\r\n engineFormat: number;\r\n roundToMultiple4?: boolean;\r\n}\r\n\r\ninterface INode {\r\n cap?: string;\r\n option?: string;\r\n alpha?: boolean;\r\n needsPowerOfTwo?: boolean;\r\n yes?: INode | ILeaf;\r\n no?: INode | ILeaf;\r\n}\r\n\r\ninterface IDecisionTree {\r\n [textureFormat: string]: INode;\r\n}\r\n\r\nconst DecisionTree: IDecisionTree = {\r\n ETC1S: {\r\n option: \"forceRGBA\",\r\n yes: {\r\n transcodeFormat: transcodeTarget.RGBA32,\r\n engineFormat: RGBA8Format,\r\n roundToMultiple4: false,\r\n },\r\n no: {\r\n cap: \"etc2\",\r\n yes: {\r\n alpha: true,\r\n yes: {\r\n transcodeFormat: transcodeTarget.ETC2_RGBA,\r\n engineFormat: COMPRESSED_RGBA8_ETC2_EAC,\r\n },\r\n no: {\r\n transcodeFormat: transcodeTarget.ETC1_RGB,\r\n engineFormat: COMPRESSED_RGB8_ETC2,\r\n },\r\n },\r\n no: {\r\n cap: \"etc1\",\r\n alpha: false,\r\n yes: {\r\n transcodeFormat: transcodeTarget.ETC1_RGB,\r\n engineFormat: COMPRESSED_RGB_ETC1_WEBGL,\r\n },\r\n no: {\r\n cap: \"bptc\",\r\n yes: {\r\n transcodeFormat: transcodeTarget.BC7_RGBA,\r\n engineFormat: COMPRESSED_RGBA_BPTC_UNORM_EXT,\r\n },\r\n no: {\r\n cap: \"s3tc\",\r\n yes: {\r\n alpha: true,\r\n yes: {\r\n transcodeFormat: transcodeTarget.BC3_RGBA,\r\n engineFormat: COMPRESSED_RGBA_S3TC_DXT5_EXT,\r\n },\r\n no: {\r\n transcodeFormat: transcodeTarget.BC1_RGB,\r\n engineFormat: COMPRESSED_RGB_S3TC_DXT1_EXT,\r\n },\r\n },\r\n no: {\r\n cap: \"pvrtc\",\r\n needsPowerOfTwo: true,\r\n yes: {\r\n alpha: true,\r\n yes: {\r\n transcodeFormat: transcodeTarget.PVRTC1_4_RGBA,\r\n engineFormat: COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,\r\n },\r\n no: {\r\n transcodeFormat: transcodeTarget.PVRTC1_4_RGB,\r\n engineFormat: COMPRESSED_RGB_PVRTC_4BPPV1_IMG,\r\n },\r\n },\r\n no: {\r\n transcodeFormat: transcodeTarget.RGBA32,\r\n engineFormat: RGBA8Format,\r\n roundToMultiple4: false,\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n\r\n UASTC: {\r\n option: \"forceRGBA\",\r\n yes: {\r\n transcodeFormat: transcodeTarget.RGBA32,\r\n engineFormat: RGBA8Format,\r\n roundToMultiple4: false,\r\n },\r\n no: {\r\n cap: \"astc\",\r\n yes: {\r\n transcodeFormat: transcodeTarget.ASTC_4x4_RGBA,\r\n engineFormat: COMPRESSED_RGBA_ASTC_4x4_KHR,\r\n },\r\n no: {\r\n cap: \"bptc\",\r\n yes: {\r\n transcodeFormat: transcodeTarget.BC7_RGBA,\r\n engineFormat: COMPRESSED_RGBA_BPTC_UNORM_EXT,\r\n },\r\n no: {\r\n option: \"useRGBAIfASTCBC7NotAvailableWhenUASTC\",\r\n yes: {\r\n transcodeFormat: transcodeTarget.RGBA32,\r\n engineFormat: RGBA8Format,\r\n roundToMultiple4: false,\r\n },\r\n no: {\r\n cap: \"etc2\",\r\n yes: {\r\n alpha: true,\r\n yes: {\r\n transcodeFormat: transcodeTarget.ETC2_RGBA,\r\n engineFormat: COMPRESSED_RGBA8_ETC2_EAC,\r\n },\r\n no: {\r\n transcodeFormat: transcodeTarget.ETC1_RGB,\r\n engineFormat: COMPRESSED_RGB8_ETC2,\r\n },\r\n },\r\n no: {\r\n cap: \"etc1\",\r\n yes: {\r\n transcodeFormat: transcodeTarget.ETC1_RGB,\r\n engineFormat: COMPRESSED_RGB_ETC1_WEBGL,\r\n },\r\n no: {\r\n cap: \"s3tc\",\r\n yes: {\r\n alpha: true,\r\n yes: {\r\n transcodeFormat: transcodeTarget.BC3_RGBA,\r\n engineFormat: COMPRESSED_RGBA_S3TC_DXT5_EXT,\r\n },\r\n no: {\r\n transcodeFormat: transcodeTarget.BC1_RGB,\r\n engineFormat: COMPRESSED_RGB_S3TC_DXT1_EXT,\r\n },\r\n },\r\n no: {\r\n cap: \"pvrtc\",\r\n needsPowerOfTwo: true,\r\n yes: {\r\n alpha: true,\r\n yes: {\r\n transcodeFormat: transcodeTarget.PVRTC1_4_RGBA,\r\n engineFormat: COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,\r\n },\r\n no: {\r\n transcodeFormat: transcodeTarget.PVRTC1_4_RGB,\r\n engineFormat: COMPRESSED_RGB_PVRTC_4BPPV1_IMG,\r\n },\r\n },\r\n no: {\r\n transcodeFormat: transcodeTarget.RGBA32,\r\n engineFormat: RGBA8Format,\r\n roundToMultiple4: false,\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n};\r\n\r\nexport class TranscodeDecisionTree {\r\n private static _IsLeafNode(node: INode | ILeaf): node is ILeaf {\r\n return (node as ILeaf).transcodeFormat !== undefined;\r\n }\r\n\r\n private _hasAlpha: boolean;\r\n private _isPowerOfTwo: boolean;\r\n private _caps: any;\r\n private _options: any;\r\n private _transcodeFormat: number;\r\n private _engineFormat: number;\r\n private _roundToMultiple4: boolean;\r\n\r\n public get transcodeFormat() {\r\n return this._transcodeFormat;\r\n }\r\n\r\n public get engineFormat() {\r\n return this._engineFormat;\r\n }\r\n\r\n public get roundToMultiple4() {\r\n return this._roundToMultiple4;\r\n }\r\n\r\n constructor(textureFormat: sourceTextureFormat, hasAlpha: boolean, isPowerOfTwo: boolean, caps: any, options?: any) {\r\n this._hasAlpha = hasAlpha;\r\n this._isPowerOfTwo = isPowerOfTwo;\r\n this._caps = caps;\r\n this._options = options ?? {};\r\n\r\n this._parseNode(textureFormat === sourceTextureFormat.UASTC4x4 ? DecisionTree.UASTC : DecisionTree.ETC1S);\r\n }\r\n\r\n private _parseNode(node: INode | ILeaf): void {\r\n if (TranscodeDecisionTree._IsLeafNode(node)) {\r\n this._transcodeFormat = node.transcodeFormat;\r\n this._engineFormat = node.engineFormat;\r\n this._roundToMultiple4 = node.roundToMultiple4 ?? true;\r\n } else {\r\n let condition = true;\r\n\r\n if (node.cap !== undefined) {\r\n condition = condition && this._caps[node.cap];\r\n }\r\n if (node.option !== undefined) {\r\n condition = condition && this._options[node.option];\r\n }\r\n if (node.alpha !== undefined) {\r\n condition = condition && this._hasAlpha === node.alpha;\r\n }\r\n if (node.needsPowerOfTwo !== undefined) {\r\n condition = condition && this._isPowerOfTwo === node.needsPowerOfTwo;\r\n }\r\n\r\n this._parseNode(condition ? node.yes! : node.no!);\r\n }\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { WASMMemoryManager } from \"./wasmMemoryManager\";\r\nimport type { KTX2FileReader, IKTX2_ImageDesc } from \"./ktx2FileReader\";\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport enum sourceTextureFormat {\r\n ETC1S,\r\n UASTC4x4,\r\n}\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport enum transcodeTarget {\r\n ASTC_4x4_RGBA,\r\n BC7_RGBA,\r\n BC3_RGBA,\r\n BC1_RGB,\r\n PVRTC1_4_RGBA,\r\n PVRTC1_4_RGB,\r\n ETC2_RGBA,\r\n ETC1_RGB,\r\n RGBA32,\r\n}\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport class Transcoder {\r\n public static CanTranscode(src: sourceTextureFormat, dst: transcodeTarget, isInGammaSpace: boolean): boolean {\r\n return false;\r\n }\r\n\r\n public static Name = \"Transcoder\";\r\n\r\n public getName(): string {\r\n return Transcoder.Name;\r\n }\r\n\r\n public initialize(): void {}\r\n\r\n public needMemoryManager(): boolean {\r\n return false;\r\n }\r\n\r\n public setMemoryManager(memoryMgr: WASMMemoryManager): void {}\r\n\r\n public transcode(\r\n src: sourceTextureFormat,\r\n dst: transcodeTarget,\r\n level: number,\r\n width: number,\r\n height: number,\r\n uncompressedByteLength: number,\r\n ktx2Reader: KTX2FileReader,\r\n imageDesc: IKTX2_ImageDesc | null,\r\n encodedData: Uint8Array\r\n ): Promise<Uint8Array | null> {\r\n return Promise.resolve(null);\r\n }\r\n}\r\n","import type { Transcoder } from \"./transcoder\";\r\nimport { transcodeTarget, sourceTextureFormat } from \"./transcoder\";\r\nimport { WASMMemoryManager } from \"./wasmMemoryManager\";\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport class TranscoderManager {\r\n public static _Transcoders: Array<typeof Transcoder> = [];\r\n\r\n public static RegisterTranscoder(transcoder: typeof Transcoder) {\r\n TranscoderManager._Transcoders.push(transcoder);\r\n }\r\n\r\n private static _TranscoderInstances: { [key: string]: Array<Transcoder> } = {};\r\n\r\n private _wasmMemoryManager: WASMMemoryManager;\r\n\r\n public findTranscoder(src: sourceTextureFormat, dst: transcodeTarget, isInGammaSpace: boolean, bypass?: string[]): Transcoder | null {\r\n let transcoder: Transcoder | null = null;\r\n\r\n const key = sourceTextureFormat[src] + \"_\" + transcodeTarget[dst];\r\n\r\n for (let i = 0; i < TranscoderManager._Transcoders.length; ++i) {\r\n if (TranscoderManager._Transcoders[i].CanTranscode(src, dst, isInGammaSpace) && (!bypass || bypass.indexOf(TranscoderManager._Transcoders[i].Name) < 0)) {\r\n transcoder = this._getExistingTranscoder(key, TranscoderManager._Transcoders[i].Name);\r\n if (!transcoder) {\r\n transcoder = new TranscoderManager._Transcoders[i]();\r\n transcoder!.initialize();\r\n if (transcoder!.needMemoryManager()) {\r\n if (!this._wasmMemoryManager) {\r\n this._wasmMemoryManager = new WASMMemoryManager();\r\n }\r\n transcoder!.setMemoryManager(this._wasmMemoryManager);\r\n }\r\n if (!TranscoderManager._TranscoderInstances[key]) {\r\n TranscoderManager._TranscoderInstances[key] = [];\r\n }\r\n TranscoderManager._TranscoderInstances[key].push(transcoder);\r\n }\r\n break;\r\n }\r\n }\r\n\r\n return transcoder;\r\n }\r\n\r\n private _getExistingTranscoder(key: string, transcoderName: string): Transcoder | null {\r\n const transcoders = TranscoderManager._TranscoderInstances[key];\r\n\r\n if (transcoders) {\r\n for (let t = 0; t < transcoders.length; ++t) {\r\n const transcoder = transcoders[t];\r\n if (transcoderName === transcoder.getName()) {\r\n return transcoder;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n","declare function postMessage(message: any, transfer?: any[]): void;\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport class WASMMemoryManager {\r\n public static LoadBinariesFromCurrentThread = true;\r\n public static InitialMemoryPages = (1 * 1024 * 1024) >> 16; // 1 Mbytes\r\n\r\n private static _RequestId = 0;\r\n\r\n public static LoadWASM(path: string): Promise<ArrayBuffer> {\r\n if (this.LoadBinariesFromCurrentThread) {\r\n return new Promise((resolve, reject) => {\r\n fetch(path)\r\n .then((response) => {\r\n if (response.ok) {\r\n return response.arrayBuffer();\r\n }\r\n throw new Error(`Could not fetch the wasm component from \"${path}\": ${response.status} - ${response.statusText}`);\r\n })\r\n .then((wasmBinary) => resolve(wasmBinary))\r\n .catch((reason) => {\r\n reject(reason);\r\n });\r\n });\r\n }\r\n\r\n const id = this._RequestId++;\r\n\r\n return new Promise((resolve) => {\r\n const wasmLoadedHandler = (msg: any) => {\r\n if (msg.data.action === \"wasmLoaded\" && msg.data.id === id) {\r\n self.removeEventListener(\"message\", wasmLoadedHandler);\r\n resolve(msg.data.wasmBinary);\r\n }\r\n };\r\n\r\n self.addEventListener(\"message\", wasmLoadedHandler);\r\n\r\n postMessage({ action: \"loadWASM\", path: path, id: id });\r\n });\r\n }\r\n\r\n private _memory: WebAssembly.Memory;\r\n private _numPages: number;\r\n private _memoryView: Uint8Array;\r\n private _memoryViewByteLength: number;\r\n private _memoryViewOffset: number;\r\n\r\n constructor(initialMemoryPages: number = WASMMemoryManager.InitialMemoryPages) {\r\n this._numPages = initialMemoryPages;\r\n\r\n this._memory = new WebAssembly.Memory({ initial: this._numPages });\r\n this._memoryViewByteLength = this._numPages << 16;\r\n this._memoryViewOffset = 0;\r\n this._memoryView = new Uint8Array(this._memory.buffer, this._memoryViewOffset, this._memoryViewByteLength);\r\n }\r\n\r\n public get wasmMemory(): WebAssembly.Memory {\r\n return this._memory;\r\n }\r\n\r\n public getMemoryView(numPages: number, offset: number = 0, byteLength?: number): Uint8Array {\r\n byteLength = byteLength ?? numPages << 16;\r\n\r\n if (this._numPages < numPages) {\r\n this._memory.grow(numPages - this._numPages);\r\n this._numPages = numPages;\r\n this._memoryView = new Uint8Array(this._memory.buffer, offset, byteLength);\r\n this._memoryViewByteLength = byteLength;\r\n this._memoryViewOffset = offset;\r\n } else {\r\n this._memoryView = new Uint8Array(this._memory.buffer, offset, byteLength);\r\n this._memoryViewByteLength = byteLength;\r\n this._memoryViewOffset = offset;\r\n }\r\n\r\n return this._memoryView;\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/naming-convention */\r\n/**\r\n * From https://github.com/donmccurdy/zstddec by Don McCurdy\r\n */\r\ninterface DecoderExports {\r\n memory: Uint8Array;\r\n\r\n ZSTD_findDecompressedSize: (compressedPtr: number, compressedSize: number) => number;\r\n ZSTD_decompress: (uncompressedPtr: number, uncompressedSize: number, compressedPtr: number, compressedSize: number) => number;\r\n malloc: (ptr: number) => number;\r\n free: (ptr: number) => void;\r\n}\r\n\r\nlet init: Promise<void>;\r\nlet instance: { exports: DecoderExports };\r\nlet heap: Uint8Array;\r\n\r\nconst IMPORT_OBJECT = {\r\n env: {\r\n emscripten_notify_memory_growth: function (): void {\r\n heap = new Uint8Array(instance.exports.memory.buffer);\r\n },\r\n },\r\n};\r\n\r\n/**\r\n * ZSTD (Zstandard) decoder.\r\n */\r\nexport class ZSTDDecoder {\r\n public static WasmModuleURL = \"https://preview.babylonjs.com/zstddec.wasm\";\r\n\r\n init(): Promise<void> {\r\n if (init) {\r\n return init;\r\n }\r\n\r\n if (typeof fetch !== \"undefined\") {\r\n // Web.\r\n\r\n init = fetch(ZSTDDecoder.WasmModuleURL)\r\n .then((response) => {\r\n if (response.ok) {\r\n return response.arrayBuffer();\r\n }\r\n throw new Error(`Could not fetch the wasm component for the Zstandard decompression lib: ${response.status} - ${response.statusText}`);\r\n })\r\n .then((arrayBuffer) => WebAssembly.instantiate(arrayBuffer, IMPORT_OBJECT))\r\n .then(this._init);\r\n } else {\r\n // Node.js.\r\n\r\n init = WebAssembly.instantiateStreaming(fetch(ZSTDDecoder.WasmModuleURL), IMPORT_OBJECT).then(this._init);\r\n }\r\n\r\n return init;\r\n }\r\n\r\n _init(result: WebAssembly.WebAssemblyInstantiatedSource): void {\r\n instance = result.instance as unknown as { exports: DecoderExports };\r\n\r\n IMPORT_OBJECT.env.emscripten_notify_memory_growth(); // initialize heap.\r\n }\r\n\r\n decode(array: Uint8Array, uncompressedSize = 0): Uint8Array {\r\n if (!instance) {\r\n throw new Error(`ZSTDDecoder: Await .init() before decoding.`);\r\n }\r\n\r\n // Write compressed data into WASM memory.\r\n const compressedSize = array.byteLength;\r\n const compressedPtr = instance.exports.malloc(compressedSize);\r\n heap.set(array, compressedPtr);\r\n\r\n // Decompress into WASM memory.\r\n uncompressedSize = uncompressedSize || Number(instance.exports.ZSTD_findDecompressedSize(compressedPtr, compressedSize));\r\n const uncompressedPtr = instance.exports.malloc(uncompressedSize);\r\n const actualSize = instance.exports.ZSTD_decompress(uncompressedPtr, uncompressedSize, compressedPtr, compressedSize);\r\n\r\n // Read decompressed data and free WASM memory.\r\n const dec = heap.slice(uncompressedPtr, uncompressedPtr + actualSize);\r\n instance.exports.free(compressedPtr);\r\n instance.exports.free(uncompressedPtr);\r\n\r\n return dec;\r\n }\r\n}\r\n\r\n/**\r\n * BSD License\r\n *\r\n * For Zstandard software\r\n *\r\n * Copyright (c) 2016-present, Yann Collet, Facebook, Inc. All rights reserved.\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *\r\n * * Redistributions of source code must retain the above copyright notice, this\r\n * list of conditions and the following disclaimer.\r\n *\r\n * * Redistributions in binary form must reproduce the above copyright notice,\r\n * this list of conditions and the following disclaimer in the documentation\r\n * and/or other materials provided with the distribution.\r\n *\r\n * * Neither the name Facebook nor the names of its contributors may be used to\r\n * endorse or promote products derived from this software without specific\r\n * prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\r\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\r\n * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\r\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n */\r\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import * as ktx2decoder from \"ktx2decoder/legacy/legacy\";\r\n\r\nexport { ktx2decoder };\r\nexport default ktx2decoder;\r\n"],"names":[],"sourceRoot":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "babylonjs-ktx2decoder",
3
- "version": "5.19.0",
3
+ "version": "5.22.0",
4
4
  "main": "babylon.ktx2Decoder.js",
5
5
  "types": "babylon.ktx2Decoder.module.d.ts",
6
6
  "files": [
@@ -14,7 +14,7 @@
14
14
  "clean": "rimraf dist && rimraf babylon*.*"
15
15
  },
16
16
  "dependencies": {
17
- "babylonjs": "^5.19.0"
17
+ "babylonjs": "^5.22.0"
18
18
  },
19
19
  "devDependencies": {
20
20
  "@dev/build-tools": "1.0.0",