babylonjs-ktx2decoder 9.5.1 → 9.6.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 +1 @@
1
- {"version":3,"file":"babylon.ktx2Decoder.js","sources":["file:///home/vsts/work/1/s/packages/dev/core/dist/Materials/Textures/ktx2decoderTypes.js","file:///home/vsts/work/1/s/packages/tools/ktx2Decoder/dist/ktx2FileReader.js","file:///home/vsts/work/1/s/packages/tools/ktx2Decoder/dist/Misc/dataReader.js","file:///home/vsts/work/1/s/packages/tools/ktx2Decoder/dist/wasmMemoryManager.js","file:///home/vsts/work/1/s/packages/tools/ktx2Decoder/dist/transcoderManager.js","file:///home/vsts/work/1/s/packages/tools/ktx2Decoder/dist/transcoder.js","file:///home/vsts/work/1/s/packages/tools/ktx2Decoder/dist/Transcoders/liteTranscoder.js","file:///home/vsts/work/1/s/packages/tools/ktx2Decoder/dist/Transcoders/liteTranscoder_UASTC_ASTC.js","file:///home/vsts/work/1/s/packages/tools/ktx2Decoder/dist/Transcoders/liteTranscoder_UASTC_BC7.js","file:///home/vsts/work/1/s/packages/tools/ktx2Decoder/dist/Transcoders/liteTranscoder_UASTC_RGBA_UNORM.js","file:///home/vsts/work/1/s/packages/tools/ktx2Decoder/dist/Transcoders/liteTranscoder_UASTC_RGBA_SRGB.js","file:///home/vsts/work/1/s/packages/tools/ktx2Decoder/dist/Transcoders/liteTranscoder_UASTC_R8_UNORM.js","file:///home/vsts/work/1/s/packages/tools/ktx2Decoder/dist/Transcoders/liteTranscoder_UASTC_RG8_UNORM.js","file:///home/vsts/work/1/s/packages/tools/ktx2Decoder/dist/Transcoders/mscTranscoder.js","file:///home/vsts/work/1/s/packages/tools/ktx2Decoder/dist/zstddec.js","file:///home/vsts/work/1/s/packages/tools/ktx2Decoder/dist/transcodeDecisionTree.js","file:///home/vsts/work/1/s/packages/tools/ktx2Decoder/dist/ktx2Decoder.js"],"sourcesContent":["export var SourceTextureFormat;\n(function (SourceTextureFormat) {\n SourceTextureFormat[SourceTextureFormat[\"ETC1S\"] = 0] = \"ETC1S\";\n // eslint-disable-next-line @typescript-eslint/naming-convention\n SourceTextureFormat[SourceTextureFormat[\"UASTC4x4\"] = 1] = \"UASTC4x4\";\n})(SourceTextureFormat || (SourceTextureFormat = {}));\nexport var TranscodeTarget;\n(function (TranscodeTarget) {\n TranscodeTarget[TranscodeTarget[\"ASTC_4X4_RGBA\"] = 0] = \"ASTC_4X4_RGBA\";\n // eslint-disable-next-line @typescript-eslint/naming-convention\n TranscodeTarget[TranscodeTarget[\"ASTC_4x4_RGBA\"] = 0] = \"ASTC_4x4_RGBA\";\n TranscodeTarget[TranscodeTarget[\"BC7_RGBA\"] = 1] = \"BC7_RGBA\";\n TranscodeTarget[TranscodeTarget[\"BC3_RGBA\"] = 2] = \"BC3_RGBA\";\n TranscodeTarget[TranscodeTarget[\"BC1_RGB\"] = 3] = \"BC1_RGB\";\n TranscodeTarget[TranscodeTarget[\"PVRTC1_4_RGBA\"] = 4] = \"PVRTC1_4_RGBA\";\n TranscodeTarget[TranscodeTarget[\"PVRTC1_4_RGB\"] = 5] = \"PVRTC1_4_RGB\";\n TranscodeTarget[TranscodeTarget[\"ETC2_RGBA\"] = 6] = \"ETC2_RGBA\";\n TranscodeTarget[TranscodeTarget[\"ETC1_RGB\"] = 7] = \"ETC1_RGB\";\n TranscodeTarget[TranscodeTarget[\"RGBA32\"] = 8] = \"RGBA32\";\n TranscodeTarget[TranscodeTarget[\"R8\"] = 9] = \"R8\";\n TranscodeTarget[TranscodeTarget[\"RG8\"] = 10] = \"RG8\";\n})(TranscodeTarget || (TranscodeTarget = {}));\nexport var EngineFormat;\n(function (EngineFormat) {\n EngineFormat[EngineFormat[\"COMPRESSED_RGBA_BPTC_UNORM_EXT\"] = 36492] = \"COMPRESSED_RGBA_BPTC_UNORM_EXT\";\n EngineFormat[EngineFormat[\"COMPRESSED_RGBA_ASTC_4X4_KHR\"] = 37808] = \"COMPRESSED_RGBA_ASTC_4X4_KHR\";\n EngineFormat[EngineFormat[\"COMPRESSED_RGB_S3TC_DXT1_EXT\"] = 33776] = \"COMPRESSED_RGB_S3TC_DXT1_EXT\";\n EngineFormat[EngineFormat[\"COMPRESSED_RGBA_S3TC_DXT5_EXT\"] = 33779] = \"COMPRESSED_RGBA_S3TC_DXT5_EXT\";\n EngineFormat[EngineFormat[\"COMPRESSED_RGBA_PVRTC_4BPPV1_IMG\"] = 35842] = \"COMPRESSED_RGBA_PVRTC_4BPPV1_IMG\";\n EngineFormat[EngineFormat[\"COMPRESSED_RGB_PVRTC_4BPPV1_IMG\"] = 35840] = \"COMPRESSED_RGB_PVRTC_4BPPV1_IMG\";\n EngineFormat[EngineFormat[\"COMPRESSED_RGBA8_ETC2_EAC\"] = 37496] = \"COMPRESSED_RGBA8_ETC2_EAC\";\n EngineFormat[EngineFormat[\"COMPRESSED_RGB8_ETC2\"] = 37492] = \"COMPRESSED_RGB8_ETC2\";\n EngineFormat[EngineFormat[\"COMPRESSED_RGB_ETC1_WEBGL\"] = 36196] = \"COMPRESSED_RGB_ETC1_WEBGL\";\n EngineFormat[EngineFormat[\"RGBA8Format\"] = 32856] = \"RGBA8Format\";\n EngineFormat[EngineFormat[\"R8Format\"] = 33321] = \"R8Format\";\n // eslint-disable-next-line @typescript-eslint/naming-convention\n EngineFormat[EngineFormat[\"RG8Format\"] = 33323] = \"RG8Format\";\n})(EngineFormat || (EngineFormat = {}));\n//# sourceMappingURL=ktx2decoderTypes.js.map","/* eslint-disable @typescript-eslint/naming-convention */\nimport * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\nimport { DataReader } from \"./Misc/dataReader\";\n/** @internal */\nexport var SupercompressionScheme;\n(function (SupercompressionScheme) {\n SupercompressionScheme[SupercompressionScheme[\"None\"] = 0] = \"None\";\n SupercompressionScheme[SupercompressionScheme[\"BasisLZ\"] = 1] = \"BasisLZ\";\n SupercompressionScheme[SupercompressionScheme[\"ZStandard\"] = 2] = \"ZStandard\";\n SupercompressionScheme[SupercompressionScheme[\"ZLib\"] = 3] = \"ZLib\";\n})(SupercompressionScheme || (SupercompressionScheme = {}));\nvar DFDModel;\n(function (DFDModel) {\n DFDModel[DFDModel[\"ETC1S\"] = 163] = \"ETC1S\";\n DFDModel[DFDModel[\"UASTC\"] = 166] = \"UASTC\";\n})(DFDModel || (DFDModel = {}));\nvar DFDChannel_ETC1S;\n(function (DFDChannel_ETC1S) {\n DFDChannel_ETC1S[DFDChannel_ETC1S[\"RGB\"] = 0] = \"RGB\";\n DFDChannel_ETC1S[DFDChannel_ETC1S[\"RRR\"] = 3] = \"RRR\";\n DFDChannel_ETC1S[DFDChannel_ETC1S[\"GGG\"] = 4] = \"GGG\";\n DFDChannel_ETC1S[DFDChannel_ETC1S[\"AAA\"] = 15] = \"AAA\";\n})(DFDChannel_ETC1S || (DFDChannel_ETC1S = {}));\nvar DFDChannel_UASTC;\n(function (DFDChannel_UASTC) {\n DFDChannel_UASTC[DFDChannel_UASTC[\"RGB\"] = 0] = \"RGB\";\n DFDChannel_UASTC[DFDChannel_UASTC[\"RGBA\"] = 3] = \"RGBA\";\n DFDChannel_UASTC[DFDChannel_UASTC[\"RRR\"] = 4] = \"RRR\";\n DFDChannel_UASTC[DFDChannel_UASTC[\"RRRG\"] = 5] = \"RRRG\";\n})(DFDChannel_UASTC || (DFDChannel_UASTC = {}));\nvar DFDTransferFunction;\n(function (DFDTransferFunction) {\n DFDTransferFunction[DFDTransferFunction[\"linear\"] = 1] = \"linear\";\n DFDTransferFunction[DFDTransferFunction[\"sRGB\"] = 2] = \"sRGB\";\n})(DFDTransferFunction || (DFDTransferFunction = {}));\nexport class KTX2FileReader {\n /**\n * Will throw an exception if the file can't be parsed\n * @param data\n */\n constructor(data) {\n this._data = data;\n }\n get data() {\n return this._data;\n }\n get header() {\n return this._header;\n }\n get levels() {\n return this._levels;\n }\n get dfdBlock() {\n return this._dfdBlock;\n }\n get supercompressionGlobalData() {\n return this._supercompressionGlobalData;\n }\n isValid() {\n return KTX2FileReader.IsValid(this._data);\n }\n parse() {\n let offsetInFile = 12; // skip the header\n /**\n * Get the header\n */\n const hdrReader = new DataReader(this._data, offsetInFile, 17 * 4);\n const header = (this._header = {\n vkFormat: hdrReader.readUint32(),\n typeSize: hdrReader.readUint32(),\n pixelWidth: hdrReader.readUint32(),\n pixelHeight: hdrReader.readUint32(),\n pixelDepth: hdrReader.readUint32(),\n layerCount: hdrReader.readUint32(),\n faceCount: hdrReader.readUint32(),\n levelCount: hdrReader.readUint32(),\n supercompressionScheme: hdrReader.readUint32(),\n dfdByteOffset: hdrReader.readUint32(),\n dfdByteLength: hdrReader.readUint32(),\n kvdByteOffset: hdrReader.readUint32(),\n kvdByteLength: hdrReader.readUint32(),\n sgdByteOffset: hdrReader.readUint64(),\n sgdByteLength: hdrReader.readUint64(),\n });\n if (header.pixelDepth > 0) {\n throw new Error(`Failed to parse KTX2 file - Only 2D textures are currently supported.`);\n }\n if (header.layerCount > 1) {\n throw new Error(`Failed to parse KTX2 file - Array textures are not currently supported.`);\n }\n if (header.faceCount > 1) {\n throw new Error(`Failed to parse KTX2 file - Cube textures are not currently supported.`);\n }\n offsetInFile += hdrReader.byteOffset;\n /**\n * Get the levels\n */\n let levelCount = Math.max(1, header.levelCount);\n const levelReader = new DataReader(this._data, offsetInFile, levelCount * 3 * (2 * 4));\n const levels = (this._levels = []);\n while (levelCount--) {\n levels.push({\n byteOffset: levelReader.readUint64(),\n byteLength: levelReader.readUint64(),\n uncompressedByteLength: levelReader.readUint64(),\n });\n }\n /**\n * Get the data format descriptor (DFD) blocks\n */\n const dfdReader = new DataReader(this._data, header.dfdByteOffset, header.dfdByteLength);\n const dfdBlock = (this._dfdBlock = {\n vendorId: dfdReader.skipBytes(4 /* skip totalSize */).readUint16(),\n descriptorType: dfdReader.readUint16(),\n versionNumber: dfdReader.readUint16(),\n descriptorBlockSize: dfdReader.readUint16(),\n colorModel: dfdReader.readUint8(),\n colorPrimaries: dfdReader.readUint8(),\n transferFunction: dfdReader.readUint8(),\n flags: dfdReader.readUint8(),\n texelBlockDimension: {\n x: dfdReader.readUint8() + 1,\n y: dfdReader.readUint8() + 1,\n z: dfdReader.readUint8() + 1,\n w: dfdReader.readUint8() + 1,\n },\n bytesPlane: [\n dfdReader.readUint8() /* bytesPlane0 */,\n dfdReader.readUint8() /* bytesPlane1 */,\n dfdReader.readUint8() /* bytesPlane2 */,\n dfdReader.readUint8() /* bytesPlane3 */,\n dfdReader.readUint8() /* bytesPlane4 */,\n dfdReader.readUint8() /* bytesPlane5 */,\n dfdReader.readUint8() /* bytesPlane6 */,\n dfdReader.readUint8() /* bytesPlane7 */,\n ],\n numSamples: 0,\n samples: new Array(),\n });\n dfdBlock.numSamples = (dfdBlock.descriptorBlockSize - 24) / 16;\n for (let i = 0; i < dfdBlock.numSamples; i++) {\n const sample = {\n bitOffset: dfdReader.readUint16(),\n bitLength: dfdReader.readUint8() + 1,\n channelType: dfdReader.readUint8(),\n channelFlags: 0,\n samplePosition: [\n dfdReader.readUint8() /* samplePosition0 */,\n dfdReader.readUint8() /* samplePosition1 */,\n dfdReader.readUint8() /* samplePosition2 */,\n dfdReader.readUint8() /* samplePosition3 */,\n ],\n sampleLower: dfdReader.readUint32(),\n sampleUpper: dfdReader.readUint32(),\n };\n sample.channelFlags = (sample.channelType & 0xf0) >> 4;\n sample.channelType = sample.channelType & 0x0f;\n dfdBlock.samples.push(sample);\n }\n /**\n * Get the Supercompression Global Data (sgd)\n */\n const sgd = (this._supercompressionGlobalData = {});\n if (header.sgdByteLength > 0) {\n const sgdReader = new DataReader(this._data, header.sgdByteOffset, header.sgdByteLength);\n sgd.endpointCount = sgdReader.readUint16();\n sgd.selectorCount = sgdReader.readUint16();\n sgd.endpointsByteLength = sgdReader.readUint32();\n sgd.selectorsByteLength = sgdReader.readUint32();\n sgd.tablesByteLength = sgdReader.readUint32();\n sgd.extendedByteLength = sgdReader.readUint32();\n sgd.imageDescs = [];\n const imageCount = this._getImageCount();\n for (let i = 0; i < imageCount; i++) {\n sgd.imageDescs.push({\n imageFlags: sgdReader.readUint32(),\n rgbSliceByteOffset: sgdReader.readUint32(),\n rgbSliceByteLength: sgdReader.readUint32(),\n alphaSliceByteOffset: sgdReader.readUint32(),\n alphaSliceByteLength: sgdReader.readUint32(),\n });\n }\n const endpointsByteOffset = header.sgdByteOffset + sgdReader.byteOffset;\n const selectorsByteOffset = endpointsByteOffset + sgd.endpointsByteLength;\n const tablesByteOffset = selectorsByteOffset + sgd.selectorsByteLength;\n const extendedByteOffset = tablesByteOffset + sgd.tablesByteLength;\n sgd.endpointsData = new Uint8Array(this._data.buffer, this._data.byteOffset + endpointsByteOffset, sgd.endpointsByteLength);\n sgd.selectorsData = new Uint8Array(this._data.buffer, this._data.byteOffset + selectorsByteOffset, sgd.selectorsByteLength);\n sgd.tablesData = new Uint8Array(this._data.buffer, this._data.byteOffset + tablesByteOffset, sgd.tablesByteLength);\n sgd.extendedData = new Uint8Array(this._data.buffer, this._data.byteOffset + extendedByteOffset, sgd.extendedByteLength);\n }\n }\n _getImageCount() {\n let layerPixelDepth = Math.max(this._header.pixelDepth, 1);\n for (let i = 1; i < this._header.levelCount; i++) {\n layerPixelDepth += Math.max(this._header.pixelDepth >> i, 1);\n }\n return Math.max(this._header.layerCount, 1) * this._header.faceCount * layerPixelDepth;\n }\n get textureFormat() {\n return this._dfdBlock.colorModel === 166 /* DFDModel.UASTC */ ? KTX2.SourceTextureFormat.UASTC4x4 : KTX2.SourceTextureFormat.ETC1S;\n }\n get hasAlpha() {\n const tformat = this.textureFormat;\n switch (tformat) {\n case KTX2.SourceTextureFormat.ETC1S:\n return (this._dfdBlock.numSamples === 2 &&\n (this._dfdBlock.samples[0].channelType === 15 /* DFDChannel_ETC1S.AAA */ || this._dfdBlock.samples[1].channelType === 15 /* DFDChannel_ETC1S.AAA */));\n case KTX2.SourceTextureFormat.UASTC4x4:\n return this._dfdBlock.samples[0].channelType === 3 /* DFDChannel_UASTC.RGBA */;\n }\n return false;\n }\n get needZSTDDecoder() {\n return this._header.supercompressionScheme === SupercompressionScheme.ZStandard;\n }\n get isInGammaSpace() {\n return this._dfdBlock.transferFunction === 2 /* DFDTransferFunction.sRGB */;\n }\n static IsValid(data) {\n if (data.byteLength >= 12) {\n // '«', 'K', 'T', 'X', ' ', '2', '0', '»', '\\r', '\\n', '\\x1A', '\\n'\n const identifier = new Uint8Array(data.buffer, data.byteOffset, 12);\n if (identifier[0] === 0xab &&\n identifier[1] === 0x4b &&\n identifier[2] === 0x54 &&\n identifier[3] === 0x58 &&\n identifier[4] === 0x20 &&\n identifier[5] === 0x32 &&\n identifier[6] === 0x30 &&\n identifier[7] === 0xbb &&\n identifier[8] === 0x0d &&\n identifier[9] === 0x0a &&\n identifier[10] === 0x1a &&\n identifier[11] === 0x0a) {\n return true;\n }\n }\n return false;\n }\n}\n//# sourceMappingURL=ktx2FileReader.js.map","/**\n * Utility class for reading from a data buffer\n */\nexport class DataReader {\n /**\n * The current byte offset from the beginning of the data buffer.\n */\n get byteOffset() {\n return this._dataByteOffset;\n }\n /**\n * Constructor\n * @param buffer The buffer to set\n * @param byteOffset The starting offset in the buffer\n * @param byteLength The byte length of the buffer\n */\n constructor(buffer, byteOffset, byteLength) {\n if (buffer.buffer) {\n this._dataView = new DataView(buffer.buffer, buffer.byteOffset + (byteOffset ?? 0), byteLength ?? buffer.byteLength);\n }\n else {\n this._dataView = new DataView(buffer, byteOffset ?? 0, byteLength ?? buffer.byteLength);\n }\n this._dataByteOffset = 0;\n }\n /**\n * Read a unsigned 8-bit integer from the currently loaded data range.\n * @returns The 8-bit integer read\n */\n readUint8() {\n const value = this._dataView.getUint8(this._dataByteOffset);\n this._dataByteOffset += 1;\n return value;\n }\n /**\n * Read a signed 8-bit integer from the currently loaded data range.\n * @returns The 8-bit integer read\n */\n readInt8() {\n const value = this._dataView.getInt8(this._dataByteOffset);\n this._dataByteOffset += 1;\n return value;\n }\n /**\n * Read a unsigned 16-bit integer from the currently loaded data range.\n * @returns The 16-bit integer read\n */\n readUint16() {\n const value = this._dataView.getUint16(this._dataByteOffset, true);\n this._dataByteOffset += 2;\n return value;\n }\n /**\n * Read a signed 16-bit integer from the currently loaded data range.\n * @returns The 16-bit integer read\n */\n readInt16() {\n const value = this._dataView.getInt16(this._dataByteOffset, true);\n this._dataByteOffset += 2;\n return value;\n }\n /**\n * Read a unsigned 32-bit integer from the currently loaded data range.\n * @returns The 32-bit integer read\n */\n readUint32() {\n const value = this._dataView.getUint32(this._dataByteOffset, true);\n this._dataByteOffset += 4;\n return value;\n }\n /**\n * Read a signed 32-bit integer from the currently loaded data range.\n * @returns The 32-bit integer read\n */\n readInt32() {\n const value = this._dataView.getInt32(this._dataByteOffset, true);\n this._dataByteOffset += 4;\n return value;\n }\n /**\n * Read a unsigned 32-bit integer from the currently loaded data range.\n * @returns The 32-bit integer read\n */\n readUint64() {\n // split 64-bit number into two 32-bit (4-byte) parts\n const left = this._dataView.getUint32(this._dataByteOffset, true);\n const right = this._dataView.getUint32(this._dataByteOffset + 4, true);\n // combine the two 32-bit values\n const combined = left + 2 ** 32 * right; // That was weird..Keeping it for posterity: true ? left + 2 ** 32 * right : 2 ** 32 * left + right;\n /*if (!Number.isSafeInteger(combined)) {\n console.warn('DataReader: ' + combined + ' exceeds MAX_SAFE_INTEGER. Precision may be lost.');\n }*/\n this._dataByteOffset += 8;\n return combined;\n }\n /**\n * Read a byte array from the currently loaded data range.\n * @param byteLength The byte length to read\n * @returns The byte array read\n */\n readUint8Array(byteLength) {\n const value = new Uint8Array(this._dataView.buffer, this._dataView.byteOffset + this._dataByteOffset, byteLength);\n this._dataByteOffset += byteLength;\n return value;\n }\n /**\n * Skips the given byte length the currently loaded data range.\n * @param byteLength The byte length to skip\n * @returns This instance\n */\n skipBytes(byteLength) {\n this._dataByteOffset += byteLength;\n return this;\n }\n}\n//# sourceMappingURL=dataReader.js.map","/**\n * @internal\n */\nexport class WASMMemoryManager {\n static async LoadWASM(path) {\n if (this.LoadBinariesFromCurrentThread) {\n return await new Promise((resolve, reject) => {\n fetch(path)\n // eslint-disable-next-line github/no-then\n .then(async (response) => {\n if (response.ok) {\n return await response.arrayBuffer();\n }\n throw new Error(`Could not fetch the wasm component from \"${path}\": ${response.status} - ${response.statusText}`);\n })\n // eslint-disable-next-line github/no-then\n .then((wasmBinary) => resolve(wasmBinary))\n // eslint-disable-next-line github/no-then\n .catch((reason) => {\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n reject(reason);\n });\n });\n }\n const id = this._RequestId++;\n return await new Promise((resolve) => {\n const wasmLoadedHandler = (msg) => {\n if (msg.data.action === \"wasmLoaded\" && msg.data.id === id) {\n self.removeEventListener(\"message\", wasmLoadedHandler);\n resolve(msg.data.wasmBinary);\n }\n };\n self.addEventListener(\"message\", wasmLoadedHandler);\n postMessage({ action: \"loadWASM\", path: path, id: id });\n });\n }\n constructor(initialMemoryPages = WASMMemoryManager.InitialMemoryPages) {\n this._numPages = initialMemoryPages;\n this._memory = new WebAssembly.Memory({ initial: this._numPages });\n this._memoryViewByteLength = this._numPages << 16;\n this._memoryViewOffset = 0;\n this._memoryView = new Uint8Array(this._memory.buffer, this._memoryViewOffset, this._memoryViewByteLength);\n }\n get wasmMemory() {\n return this._memory;\n }\n getMemoryView(numPages, offset = 0, byteLength) {\n byteLength = byteLength ?? numPages << 16;\n if (this._numPages < numPages) {\n this._memory.grow(numPages - this._numPages);\n this._numPages = numPages;\n this._memoryView = new Uint8Array(this._memory.buffer, offset, byteLength);\n this._memoryViewByteLength = byteLength;\n this._memoryViewOffset = offset;\n }\n else {\n this._memoryView = new Uint8Array(this._memory.buffer, offset, byteLength);\n this._memoryViewByteLength = byteLength;\n this._memoryViewOffset = offset;\n }\n return this._memoryView;\n }\n}\nWASMMemoryManager.LoadBinariesFromCurrentThread = true;\nWASMMemoryManager.InitialMemoryPages = (1 * 1024 * 1024) >> 16; // 1 Mbytes\nWASMMemoryManager._RequestId = 0;\n//# sourceMappingURL=wasmMemoryManager.js.map","// eslint-disable-next-line @typescript-eslint/naming-convention\nimport * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\nimport { WASMMemoryManager } from \"./wasmMemoryManager\";\n/**\n * @internal\n */\nexport class TranscoderManager {\n static RegisterTranscoder(transcoder) {\n TranscoderManager._Transcoders.push(transcoder);\n }\n findTranscoder(src, dst, isInGammaSpace, bypass) {\n let transcoder = null;\n const key = KTX2.SourceTextureFormat[src] + \"_\" + KTX2.TranscodeTarget[dst];\n for (let i = 0; i < TranscoderManager._Transcoders.length; ++i) {\n if (TranscoderManager._Transcoders[i].CanTranscode(src, dst, isInGammaSpace) && (!bypass || bypass.indexOf(TranscoderManager._Transcoders[i].Name) < 0)) {\n transcoder = this._getExistingTranscoder(key, TranscoderManager._Transcoders[i].Name);\n if (!transcoder) {\n transcoder = new TranscoderManager._Transcoders[i]();\n transcoder.initialize();\n if (transcoder.needMemoryManager()) {\n if (!this._wasmMemoryManager) {\n this._wasmMemoryManager = new WASMMemoryManager();\n }\n transcoder.setMemoryManager(this._wasmMemoryManager);\n }\n if (!TranscoderManager._TranscoderInstances[key]) {\n TranscoderManager._TranscoderInstances[key] = [];\n }\n TranscoderManager._TranscoderInstances[key].push(transcoder);\n }\n break;\n }\n }\n return transcoder;\n }\n _getExistingTranscoder(key, transcoderName) {\n const transcoders = TranscoderManager._TranscoderInstances[key];\n if (transcoders) {\n for (let t = 0; t < transcoders.length; ++t) {\n const transcoder = transcoders[t];\n if (transcoderName === transcoder.getName()) {\n return transcoder;\n }\n }\n }\n return null;\n }\n}\nTranscoderManager._Transcoders = [];\nTranscoderManager._TranscoderInstances = {};\n//# sourceMappingURL=transcoderManager.js.map","/**\n * @internal\n */\nexport class Transcoder {\n static CanTranscode(src, dst, isInGammaSpace) {\n return false;\n }\n static GetWasmUrl(wasmUrl) {\n if (wasmUrl.startsWith(Transcoder._DefaultCdnUrl)) {\n if (Transcoder.WasmBaseUrl) {\n // Normalize the base url\n const baseUrl = Transcoder.WasmBaseUrl.endsWith(\"/\") ? Transcoder.WasmBaseUrl.slice(0, -1) : Transcoder.WasmBaseUrl;\n wasmUrl = wasmUrl.replace(Transcoder._DefaultCdnUrl, baseUrl);\n }\n else if (Transcoder.CdnVersion) {\n const versionedBase = `${Transcoder._DefaultCdnUrl}/v${Transcoder.CdnVersion}`;\n // Guard against double-versioning if the URL already contains the version prefix\n // (e.g. when GetWasmUrl is called multiple times on the same URL)\n if (!wasmUrl.startsWith(versionedBase)) {\n wasmUrl = wasmUrl.replace(Transcoder._DefaultCdnUrl, versionedBase);\n }\n }\n }\n return wasmUrl;\n }\n getName() {\n return Transcoder.Name;\n }\n initialize() { }\n needMemoryManager() {\n return false;\n }\n setMemoryManager(memoryMgr) { }\n async transcode(src, dst, level, width, height, uncompressedByteLength, ktx2Reader, imageDesc, encodedData) {\n return null;\n }\n}\nTranscoder.Name = \"Transcoder\";\nTranscoder.WasmBaseUrl = \"\";\n/**\n * The CDN version to use when constructing versioned CDN URLs.\n * Injected at build time by the version update script.\n * When set, unversioned CDN URLs will be rewritten to include this version prefix.\n * @internal\n */\nTranscoder.CdnVersion = \"9.5.1\";\nTranscoder._DefaultCdnUrl = \"https://cdn.babylonjs.com\";\n//# sourceMappingURL=transcoder.js.map","import { Transcoder } from \"../transcoder\";\nimport { WASMMemoryManager } from \"../wasmMemoryManager\";\n/**\n * @internal\n */\nexport class LiteTranscoder extends Transcoder {\n constructor() {\n super(...arguments);\n this._wasmBinary = null;\n }\n async _instantiateWebAssemblyAsync(wasmBinary) {\n // eslint-disable-next-line github/no-then\n return await WebAssembly.instantiate(wasmBinary, { env: { memory: this._memoryManager.wasmMemory } }).then((moduleWrapper) => {\n return { module: moduleWrapper.instance.exports };\n });\n }\n async _loadModuleAsync(wasmBinary = this._wasmBinary) {\n this._modulePromise =\n this._modulePromise ||\n // eslint-disable-next-line github/no-then\n (wasmBinary ? Promise.resolve(wasmBinary) : WASMMemoryManager.LoadWASM(this._modulePath)).then(async (wasmBinary) => {\n return await this._instantiateWebAssemblyAsync(wasmBinary);\n });\n return await this._modulePromise;\n }\n // eslint-disable-next-line @typescript-eslint/naming-convention\n get memoryManager() {\n return this._memoryManager;\n }\n // eslint-disable-next-line @typescript-eslint/naming-convention\n setModulePath(modulePath, wasmBinary) {\n this._modulePath = Transcoder.GetWasmUrl(modulePath);\n this._wasmBinary = wasmBinary;\n }\n initialize() {\n this._transcodeInPlace = true;\n }\n needMemoryManager() {\n return true;\n }\n setMemoryManager(memoryMgr) {\n this._memoryManager = memoryMgr;\n }\n // eslint-disable-next-line @typescript-eslint/naming-convention\n async transcode(src, dst, level, width, height, uncompressedByteLength, ktx2Reader, imageDesc, encodedData) {\n // eslint-disable-next-line github/no-then\n return await this._loadModuleAsync().then((moduleWrapper) => {\n const transcoder = moduleWrapper.module;\n const [textureView, uncompressedTextureView, nBlocks] = this._prepareTranscoding(width, height, uncompressedByteLength, encodedData);\n return transcoder.transcode(nBlocks) === 0 ? (this._transcodeInPlace ? textureView.slice() : uncompressedTextureView.slice()) : null;\n });\n }\n _prepareTranscoding(width, height, uncompressedByteLength, encodedData, uncompressedNumComponents) {\n const nBlocks = ((width + 3) >> 2) * ((height + 3) >> 2);\n if (uncompressedNumComponents !== undefined) {\n uncompressedByteLength = width * ((height + 3) >> 2) * 4 * uncompressedNumComponents;\n }\n const texMemoryPages = ((nBlocks * 16 + 65535 + (this._transcodeInPlace ? 0 : uncompressedByteLength)) >> 16) + 1;\n const textureView = this.memoryManager.getMemoryView(texMemoryPages, 65536, nBlocks * 16);\n const uncompressedTextureView = this._transcodeInPlace\n ? null\n : new Uint8Array(this._memoryManager.wasmMemory.buffer, 65536 + nBlocks * 16, uncompressedNumComponents !== undefined ? width * height * uncompressedNumComponents : uncompressedByteLength);\n textureView.set(encodedData);\n return [textureView, uncompressedTextureView, nBlocks];\n }\n}\n//# sourceMappingURL=liteTranscoder.js.map","// eslint-disable-next-line @typescript-eslint/naming-convention\nimport * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\nimport { LiteTranscoder } from \"./liteTranscoder\";\n/**\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class LiteTranscoder_UASTC_ASTC extends LiteTranscoder {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n static CanTranscode(src, dst, isInGammaSpace) {\n return src === KTX2.SourceTextureFormat.UASTC4x4 && dst === KTX2.TranscodeTarget.ASTC_4X4_RGBA;\n }\n getName() {\n return LiteTranscoder_UASTC_ASTC.Name;\n }\n initialize() {\n super.initialize();\n this.setModulePath(LiteTranscoder_UASTC_ASTC.WasmModuleURL, LiteTranscoder_UASTC_ASTC.WasmBinary);\n }\n}\n/**\n * URL to use when loading the wasm module for the transcoder\n */\nLiteTranscoder_UASTC_ASTC.WasmModuleURL = \"https://cdn.babylonjs.com/ktx2Transcoders/1/uastc_astc.wasm\";\n/**\n * Binary data of the wasm module\n */\nLiteTranscoder_UASTC_ASTC.WasmBinary = null;\nLiteTranscoder_UASTC_ASTC.Name = \"UniversalTranscoder_UASTC_ASTC\";\n//# sourceMappingURL=liteTranscoder_UASTC_ASTC.js.map","// eslint-disable-next-line @typescript-eslint/naming-convention\nimport * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\nimport { LiteTranscoder } from \"./liteTranscoder\";\n/**\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class LiteTranscoder_UASTC_BC7 extends LiteTranscoder {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n static CanTranscode(src, dst, isInGammaSpace) {\n return src === KTX2.SourceTextureFormat.UASTC4x4 && dst === KTX2.TranscodeTarget.BC7_RGBA;\n }\n getName() {\n return LiteTranscoder_UASTC_BC7.Name;\n }\n initialize() {\n super.initialize();\n this.setModulePath(LiteTranscoder_UASTC_BC7.WasmModuleURL, LiteTranscoder_UASTC_BC7.WasmBinary);\n }\n}\n/**\n * URL to use when loading the wasm module for the transcoder\n */\nLiteTranscoder_UASTC_BC7.WasmModuleURL = \"https://cdn.babylonjs.com/ktx2Transcoders/1/uastc_bc7.wasm\";\n/**\n * Binary data of the wasm module\n */\nLiteTranscoder_UASTC_BC7.WasmBinary = null;\nLiteTranscoder_UASTC_BC7.Name = \"UniversalTranscoder_UASTC_BC7\";\n//# sourceMappingURL=liteTranscoder_UASTC_BC7.js.map","// eslint-disable-next-line @typescript-eslint/naming-convention\nimport * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\nimport { LiteTranscoder } from \"./liteTranscoder\";\n/**\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class LiteTranscoder_UASTC_RGBA_UNORM extends LiteTranscoder {\n static CanTranscode(src, dst, isInGammaSpace) {\n return src === KTX2.SourceTextureFormat.UASTC4x4 && dst === KTX2.TranscodeTarget.RGBA32 && !isInGammaSpace;\n }\n getName() {\n return LiteTranscoder_UASTC_RGBA_UNORM.Name;\n }\n initialize() {\n super.initialize();\n this._transcodeInPlace = false;\n this.setModulePath(LiteTranscoder_UASTC_RGBA_UNORM.WasmModuleURL, LiteTranscoder_UASTC_RGBA_UNORM.WasmBinary);\n }\n // eslint-disable-next-line @typescript-eslint/naming-convention\n async transcode(src, dst, level, width, height, uncompressedByteLength, ktx2Reader, imageDesc, encodedData) {\n const moduleWrapper = await this._loadModuleAsync();\n const transcoder = moduleWrapper.module;\n const [, uncompressedTextureView] = this._prepareTranscoding(width, height, uncompressedByteLength, encodedData, 4);\n return transcoder.decode(width, height) === 0 ? uncompressedTextureView.slice() : null;\n }\n}\n/**\n * URL to use when loading the wasm module for the transcoder (unorm)\n */\nLiteTranscoder_UASTC_RGBA_UNORM.WasmModuleURL = \"https://cdn.babylonjs.com/ktx2Transcoders/1/uastc_rgba8_unorm_v2.wasm\";\n/**\n * Binary data of the wasm module\n */\nLiteTranscoder_UASTC_RGBA_UNORM.WasmBinary = null;\nLiteTranscoder_UASTC_RGBA_UNORM.Name = \"UniversalTranscoder_UASTC_RGBA_UNORM\";\n//# sourceMappingURL=liteTranscoder_UASTC_RGBA_UNORM.js.map","// eslint-disable-next-line @typescript-eslint/naming-convention\nimport * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\nimport { LiteTranscoder } from \"./liteTranscoder\";\n/**\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class LiteTranscoder_UASTC_RGBA_SRGB extends LiteTranscoder {\n static CanTranscode(src, dst, isInGammaSpace) {\n return src === KTX2.SourceTextureFormat.UASTC4x4 && dst === KTX2.TranscodeTarget.RGBA32 && isInGammaSpace;\n }\n getName() {\n return LiteTranscoder_UASTC_RGBA_SRGB.Name;\n }\n initialize() {\n super.initialize();\n this._transcodeInPlace = false;\n this.setModulePath(LiteTranscoder_UASTC_RGBA_SRGB.WasmModuleURL, LiteTranscoder_UASTC_RGBA_SRGB.WasmBinary);\n }\n // eslint-disable-next-line @typescript-eslint/naming-convention\n async transcode(src, dst, level, width, height, uncompressedByteLength, ktx2Reader, imageDesc, encodedData) {\n const moduleWrapper = await this._loadModuleAsync();\n const transcoder = moduleWrapper.module;\n const [, uncompressedTextureView] = this._prepareTranscoding(width, height, uncompressedByteLength, encodedData, 4);\n return transcoder.decode(width, height) === 0 ? uncompressedTextureView.slice() : null;\n }\n}\n/**\n * URL to use when loading the wasm module for the transcoder (srgb)\n */\nLiteTranscoder_UASTC_RGBA_SRGB.WasmModuleURL = \"https://cdn.babylonjs.com/ktx2Transcoders/1/uastc_rgba8_srgb_v2.wasm\";\n/**\n * Binary data of the wasm module\n */\nLiteTranscoder_UASTC_RGBA_SRGB.WasmBinary = null;\nLiteTranscoder_UASTC_RGBA_SRGB.Name = \"UniversalTranscoder_UASTC_RGBA_SRGB\";\n//# sourceMappingURL=liteTranscoder_UASTC_RGBA_SRGB.js.map","// eslint-disable-next-line @typescript-eslint/naming-convention\nimport * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\nimport { LiteTranscoder } from \"./liteTranscoder\";\n/**\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class LiteTranscoder_UASTC_R8_UNORM extends LiteTranscoder {\n static CanTranscode(src, dst, isInGammaSpace) {\n return src === KTX2.SourceTextureFormat.UASTC4x4 && dst === KTX2.TranscodeTarget.R8;\n }\n getName() {\n return LiteTranscoder_UASTC_R8_UNORM.Name;\n }\n initialize() {\n super.initialize();\n this._transcodeInPlace = false;\n this.setModulePath(LiteTranscoder_UASTC_R8_UNORM.WasmModuleURL, LiteTranscoder_UASTC_R8_UNORM.WasmBinary);\n }\n // eslint-disable-next-line @typescript-eslint/naming-convention\n async transcode(src, dst, level, width, height, uncompressedByteLength, ktx2Reader, imageDesc, encodedData) {\n const moduleWrapper = await this._loadModuleAsync();\n const transcoder = moduleWrapper.module;\n const [, uncompressedTextureView] = this._prepareTranscoding(width, height, uncompressedByteLength, encodedData, 1);\n return transcoder.decode(width, height) === 0 ? uncompressedTextureView.slice() : null;\n }\n}\n/**\n * URL to use when loading the wasm module for the transcoder (unorm)\n */\nLiteTranscoder_UASTC_R8_UNORM.WasmModuleURL = \"https://cdn.babylonjs.com/ktx2Transcoders/1/uastc_r8_unorm.wasm\";\n/**\n * Binary data of the wasm module\n */\nLiteTranscoder_UASTC_R8_UNORM.WasmBinary = null;\nLiteTranscoder_UASTC_R8_UNORM.Name = \"UniversalTranscoder_UASTC_R8_UNORM\";\n//# sourceMappingURL=liteTranscoder_UASTC_R8_UNORM.js.map","// eslint-disable-next-line @typescript-eslint/naming-convention\nimport * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\nimport { LiteTranscoder } from \"./liteTranscoder\";\n/**\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class LiteTranscoder_UASTC_RG8_UNORM extends LiteTranscoder {\n static CanTranscode(src, dst, isInGammaSpace) {\n return src === KTX2.SourceTextureFormat.UASTC4x4 && dst === KTX2.TranscodeTarget.RG8;\n }\n getName() {\n return LiteTranscoder_UASTC_RG8_UNORM.Name;\n }\n initialize() {\n super.initialize();\n this._transcodeInPlace = false;\n this.setModulePath(LiteTranscoder_UASTC_RG8_UNORM.WasmModuleURL, LiteTranscoder_UASTC_RG8_UNORM.WasmBinary);\n }\n // eslint-disable-next-line @typescript-eslint/naming-convention\n async transcode(src, dst, level, width, height, uncompressedByteLength, ktx2Reader, imageDesc, encodedData) {\n const moduleWrapper = await this._loadModuleAsync();\n const transcoder = moduleWrapper.module;\n const [, uncompressedTextureView] = this._prepareTranscoding(width, height, uncompressedByteLength, encodedData, 2);\n return transcoder.decode(width, height) === 0 ? uncompressedTextureView.slice() : null;\n }\n}\n/**\n * URL to use when loading the wasm module for the transcoder (unorm)\n */\nLiteTranscoder_UASTC_RG8_UNORM.WasmModuleURL = \"https://cdn.babylonjs.com/ktx2Transcoders/1/uastc_rg8_unorm.wasm\";\n/**\n * Binary data of the wasm module\n */\nLiteTranscoder_UASTC_RG8_UNORM.WasmBinary = null;\nLiteTranscoder_UASTC_RG8_UNORM.Name = \"UniversalTranscoder_UASTC_RG8_UNORM\";\n//# sourceMappingURL=liteTranscoder_UASTC_RG8_UNORM.js.map","// eslint-disable-next-line @typescript-eslint/naming-convention\nimport * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\nimport { Transcoder } from \"../transcoder\";\nimport { WASMMemoryManager } from \"../wasmMemoryManager\";\n/**\n * @internal\n */\nexport class MSCTranscoder extends Transcoder {\n getName() {\n return MSCTranscoder.Name;\n }\n async _getMSCBasisTranscoder() {\n if (this._mscBasisTranscoderPromise) {\n return await this._mscBasisTranscoderPromise;\n }\n this._mscBasisTranscoderPromise = (MSCTranscoder.WasmBinary ? Promise.resolve(MSCTranscoder.WasmBinary) : WASMMemoryManager.LoadWASM(Transcoder.GetWasmUrl(MSCTranscoder.WasmModuleURL)))\n // eslint-disable-next-line github/no-then\n .then(async (wasmBinary) => {\n if (MSCTranscoder.JSModule) {\n // this must be set on the global scope for the MSC transcoder to work. Mainly due to back-compat with the old way of loading the MSC transcoder.\n globalThis.MSC_TRANSCODER = MSCTranscoder.JSModule;\n }\n else {\n if (MSCTranscoder.UseFromWorkerThread) {\n importScripts(Transcoder.GetWasmUrl(MSCTranscoder.JSModuleURL));\n }\n // Worker Number = 0 and MSC_TRANSCODER has not been loaded yet.\n else if (typeof MSC_TRANSCODER === \"undefined\") {\n return await new Promise((resolve, reject) => {\n const head = document.getElementsByTagName(\"head\")[0];\n const script = document.createElement(\"script\");\n script.setAttribute(\"type\", \"text/javascript\");\n script.setAttribute(\"src\", Transcoder.GetWasmUrl(MSCTranscoder.JSModuleURL));\n script.onload = () => {\n // defensive\n if (typeof MSC_TRANSCODER === \"undefined\") {\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n reject(\"MSC_TRANSCODER script loaded but MSC_TRANSCODER is not defined.\");\n return;\n }\n // eslint-disable-next-line github/no-then\n MSC_TRANSCODER({ wasmBinary }).then((basisModule) => {\n basisModule.initTranscoders();\n this._mscBasisModule = basisModule;\n resolve();\n });\n };\n script.onerror = () => {\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n reject(\"Can not load MSC_TRANSCODER script.\");\n };\n head.appendChild(script);\n });\n }\n }\n return await new Promise((resolve) => {\n // eslint-disable-next-line github/no-then\n MSC_TRANSCODER({ wasmBinary }).then((basisModule) => {\n basisModule.initTranscoders();\n this._mscBasisModule = basisModule;\n resolve();\n });\n });\n });\n return await this._mscBasisTranscoderPromise;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n static CanTranscode(src, dst, isInGammaSpace) {\n return true;\n }\n // eslint-disable-next-line @typescript-eslint/naming-convention\n async transcode(src, dst, level, width, height, uncompressedByteLength, ktx2Reader, imageDesc, encodedData) {\n const isVideo = false;\n // eslint-disable-next-line github/no-then\n return await this._getMSCBasisTranscoder().then(() => {\n const basisModule = this._mscBasisModule;\n let transcoder;\n let imageInfo;\n let result;\n let textureData = null;\n try {\n transcoder = src === KTX2.SourceTextureFormat.UASTC4x4 ? new basisModule.UastcImageTranscoder() : new basisModule.BasisLzEtc1sImageTranscoder();\n const texFormat = src === KTX2.SourceTextureFormat.UASTC4x4 ? basisModule.TextureFormat.UASTC4x4 : basisModule.TextureFormat.ETC1S;\n imageInfo = new basisModule.ImageInfo(texFormat, width, height, level);\n const targetFormat = basisModule.TranscodeTarget[KTX2.TranscodeTarget[dst]]; // works because the labels of the sourceTextureFormat enum are the same as the property names used in TranscodeTarget!\n if (!basisModule.isFormatSupported(targetFormat, texFormat)) {\n throw new Error(`MSCTranscoder: Transcoding from \"${KTX2.SourceTextureFormat[src]}\" to \"${KTX2.TranscodeTarget[dst]}\" not supported by current transcoder build.`);\n }\n if (src === KTX2.SourceTextureFormat.ETC1S) {\n const sgd = ktx2Reader.supercompressionGlobalData;\n transcoder.decodePalettes(sgd.endpointCount, sgd.endpointsData, sgd.selectorCount, sgd.selectorsData);\n transcoder.decodeTables(sgd.tablesData);\n imageInfo.flags = imageDesc.imageFlags;\n imageInfo.rgbByteOffset = 0;\n imageInfo.rgbByteLength = imageDesc.rgbSliceByteLength;\n imageInfo.alphaByteOffset = imageDesc.alphaSliceByteOffset > 0 ? imageDesc.rgbSliceByteLength : 0;\n imageInfo.alphaByteLength = imageDesc.alphaSliceByteLength;\n result = transcoder.transcodeImage(targetFormat, encodedData, imageInfo, 0, isVideo);\n }\n else {\n imageInfo.flags = 0;\n imageInfo.rgbByteOffset = 0;\n imageInfo.rgbByteLength = uncompressedByteLength;\n imageInfo.alphaByteOffset = 0;\n imageInfo.alphaByteLength = 0;\n result = transcoder.transcodeImage(targetFormat, encodedData, imageInfo, 0, ktx2Reader.hasAlpha, isVideo);\n }\n }\n finally {\n if (transcoder) {\n transcoder.delete();\n }\n if (imageInfo) {\n imageInfo.delete();\n }\n if (result && result.transcodedImage) {\n textureData = result.transcodedImage.get_typed_memory_view().slice();\n result.transcodedImage.delete();\n }\n }\n return textureData;\n });\n }\n}\n/**\n * URL to use when loading the MSC transcoder\n */\nMSCTranscoder.JSModuleURL = \"https://cdn.babylonjs.com/ktx2Transcoders/1/msc_basis_transcoder.js\";\n/**\n * URL to use when loading the wasm module for the transcoder\n */\nMSCTranscoder.WasmModuleURL = \"https://cdn.babylonjs.com/ktx2Transcoders/1/msc_basis_transcoder.wasm\";\n/**\n * Binary data of the wasm module\n */\nMSCTranscoder.WasmBinary = null;\n/**\n * MSC transcoder module, if provided externally\n */\nMSCTranscoder.JSModule = null;\nMSCTranscoder.UseFromWorkerThread = true;\nMSCTranscoder.Name = \"MSCTranscoder\";\n//# sourceMappingURL=mscTranscoder.js.map","/* eslint-disable @typescript-eslint/naming-convention */\nimport { Transcoder } from \"./transcoder\";\nlet init;\nlet instance;\nlet heap;\nconst IMPORT_OBJECT = {\n env: {\n emscripten_notify_memory_growth: function () {\n heap = new Uint8Array(instance.exports.memory.buffer);\n },\n },\n};\n/**\n * ZSTD (Zstandard) decoder.\n */\nexport class ZSTDDecoder {\n async init() {\n if (init) {\n return await init;\n }\n if (typeof fetch !== \"undefined\") {\n // Web.\n init = fetch(Transcoder.GetWasmUrl(ZSTDDecoder.WasmModuleURL))\n // eslint-disable-next-line github/no-then\n .then(async (response) => {\n if (response.ok) {\n return await response.arrayBuffer();\n }\n throw new Error(`Could not fetch the wasm component for the Zstandard decompression lib: ${response.status} - ${response.statusText}`);\n })\n // eslint-disable-next-line github/no-then\n .then(async (arrayBuffer) => await WebAssembly.instantiate(arrayBuffer, IMPORT_OBJECT))\n // eslint-disable-next-line github/no-then\n .then(this._init);\n }\n else {\n // Node.js.\n // eslint-disable-next-line github/no-then\n init = WebAssembly.instantiateStreaming(fetch(ZSTDDecoder.WasmModuleURL), IMPORT_OBJECT).then(this._init);\n }\n return await init;\n }\n _init(result) {\n instance = result.instance;\n IMPORT_OBJECT.env.emscripten_notify_memory_growth(); // initialize heap.\n }\n decode(array, uncompressedSize = 0) {\n if (!instance) {\n throw new Error(`ZSTDDecoder: Await .init() before decoding.`);\n }\n // Write compressed data into WASM memory.\n const compressedSize = array.byteLength;\n const compressedPtr = instance.exports.malloc(compressedSize);\n heap.set(array, compressedPtr);\n // Decompress into WASM memory.\n uncompressedSize = uncompressedSize || Number(instance.exports.ZSTD_findDecompressedSize(compressedPtr, compressedSize));\n const uncompressedPtr = instance.exports.malloc(uncompressedSize);\n const actualSize = instance.exports.ZSTD_decompress(uncompressedPtr, uncompressedSize, compressedPtr, compressedSize);\n // Read decompressed data and free WASM memory.\n const dec = heap.slice(uncompressedPtr, uncompressedPtr + actualSize);\n instance.exports.free(compressedPtr);\n instance.exports.free(uncompressedPtr);\n return dec;\n }\n}\nZSTDDecoder.WasmModuleURL = \"https://cdn.babylonjs.com/zstddec.wasm\";\n/**\n * BSD License\n *\n * For Zstandard software\n *\n * Copyright (c) 2016-present, Yann Collet, Facebook, Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * * Neither the name Facebook nor the names of its contributors may be used to\n * endorse or promote products derived from this software without specific\n * prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n//# sourceMappingURL=zstddec.js.map","/* eslint-disable @typescript-eslint/naming-convention */\nimport * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\nconst DecisionTree = {\n ETC1S: {\n option: \"forceRGBA\",\n yes: {\n transcodeFormat: KTX2.TranscodeTarget.RGBA32,\n engineFormat: 32856 /* KTX2.EngineFormat.RGBA8Format */,\n roundToMultiple4: false,\n },\n no: {\n cap: \"etc2\",\n yes: {\n alpha: true,\n yes: {\n transcodeFormat: KTX2.TranscodeTarget.ETC2_RGBA,\n engineFormat: 37496 /* KTX2.EngineFormat.COMPRESSED_RGBA8_ETC2_EAC */,\n },\n no: {\n transcodeFormat: KTX2.TranscodeTarget.ETC1_RGB,\n engineFormat: 37492 /* KTX2.EngineFormat.COMPRESSED_RGB8_ETC2 */,\n },\n },\n no: {\n cap: \"etc1\",\n alpha: false,\n yes: {\n transcodeFormat: KTX2.TranscodeTarget.ETC1_RGB,\n engineFormat: 36196 /* KTX2.EngineFormat.COMPRESSED_RGB_ETC1_WEBGL */,\n },\n no: {\n cap: \"bptc\",\n yes: {\n transcodeFormat: KTX2.TranscodeTarget.BC7_RGBA,\n engineFormat: 36492 /* KTX2.EngineFormat.COMPRESSED_RGBA_BPTC_UNORM_EXT */,\n },\n no: {\n cap: \"s3tc\",\n yes: {\n alpha: true,\n yes: {\n transcodeFormat: KTX2.TranscodeTarget.BC3_RGBA,\n engineFormat: 33779 /* KTX2.EngineFormat.COMPRESSED_RGBA_S3TC_DXT5_EXT */,\n },\n no: {\n transcodeFormat: KTX2.TranscodeTarget.BC1_RGB,\n engineFormat: 33776 /* KTX2.EngineFormat.COMPRESSED_RGB_S3TC_DXT1_EXT */,\n },\n },\n no: {\n cap: \"pvrtc\",\n needsPowerOfTwo: true,\n yes: {\n alpha: true,\n yes: {\n transcodeFormat: KTX2.TranscodeTarget.PVRTC1_4_RGBA,\n engineFormat: 35842 /* KTX2.EngineFormat.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG */,\n },\n no: {\n transcodeFormat: KTX2.TranscodeTarget.PVRTC1_4_RGB,\n engineFormat: 35840 /* KTX2.EngineFormat.COMPRESSED_RGB_PVRTC_4BPPV1_IMG */,\n },\n },\n no: {\n transcodeFormat: KTX2.TranscodeTarget.RGBA32,\n engineFormat: 32856 /* KTX2.EngineFormat.RGBA8Format */,\n roundToMultiple4: false,\n },\n },\n },\n },\n },\n },\n },\n UASTC: {\n option: \"forceRGBA\",\n yes: {\n transcodeFormat: KTX2.TranscodeTarget.RGBA32,\n engineFormat: 32856 /* KTX2.EngineFormat.RGBA8Format */,\n roundToMultiple4: false,\n },\n no: {\n option: \"forceR8\",\n yes: {\n transcodeFormat: KTX2.TranscodeTarget.R8,\n engineFormat: 33321 /* KTX2.EngineFormat.R8Format */,\n roundToMultiple4: false,\n },\n no: {\n option: \"forceRG8\",\n yes: {\n transcodeFormat: KTX2.TranscodeTarget.RG8,\n engineFormat: 33323 /* KTX2.EngineFormat.RG8Format */,\n roundToMultiple4: false,\n },\n no: {\n cap: \"astc\",\n yes: {\n transcodeFormat: KTX2.TranscodeTarget.ASTC_4X4_RGBA,\n engineFormat: 37808 /* KTX2.EngineFormat.COMPRESSED_RGBA_ASTC_4X4_KHR */,\n },\n no: {\n cap: \"bptc\",\n yes: {\n transcodeFormat: KTX2.TranscodeTarget.BC7_RGBA,\n engineFormat: 36492 /* KTX2.EngineFormat.COMPRESSED_RGBA_BPTC_UNORM_EXT */,\n },\n no: {\n option: \"useRGBAIfASTCBC7NotAvailableWhenUASTC\",\n yes: {\n transcodeFormat: KTX2.TranscodeTarget.RGBA32,\n engineFormat: 32856 /* KTX2.EngineFormat.RGBA8Format */,\n roundToMultiple4: false,\n },\n no: {\n cap: \"etc2\",\n yes: {\n alpha: true,\n yes: {\n transcodeFormat: KTX2.TranscodeTarget.ETC2_RGBA,\n engineFormat: 37496 /* KTX2.EngineFormat.COMPRESSED_RGBA8_ETC2_EAC */,\n },\n no: {\n transcodeFormat: KTX2.TranscodeTarget.ETC1_RGB,\n engineFormat: 37492 /* KTX2.EngineFormat.COMPRESSED_RGB8_ETC2 */,\n },\n },\n no: {\n cap: \"etc1\",\n yes: {\n transcodeFormat: KTX2.TranscodeTarget.ETC1_RGB,\n engineFormat: 36196 /* KTX2.EngineFormat.COMPRESSED_RGB_ETC1_WEBGL */,\n },\n no: {\n cap: \"s3tc\",\n yes: {\n alpha: true,\n yes: {\n transcodeFormat: KTX2.TranscodeTarget.BC3_RGBA,\n engineFormat: 33779 /* KTX2.EngineFormat.COMPRESSED_RGBA_S3TC_DXT5_EXT */,\n },\n no: {\n transcodeFormat: KTX2.TranscodeTarget.BC1_RGB,\n engineFormat: 33776 /* KTX2.EngineFormat.COMPRESSED_RGB_S3TC_DXT1_EXT */,\n },\n },\n no: {\n cap: \"pvrtc\",\n needsPowerOfTwo: true,\n yes: {\n alpha: true,\n yes: {\n transcodeFormat: KTX2.TranscodeTarget.PVRTC1_4_RGBA,\n engineFormat: 35842 /* KTX2.EngineFormat.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG */,\n },\n no: {\n transcodeFormat: KTX2.TranscodeTarget.PVRTC1_4_RGB,\n engineFormat: 35840 /* KTX2.EngineFormat.COMPRESSED_RGB_PVRTC_4BPPV1_IMG */,\n },\n },\n no: {\n transcodeFormat: KTX2.TranscodeTarget.RGBA32,\n engineFormat: 32856 /* KTX2.EngineFormat.RGBA8Format */,\n roundToMultiple4: false,\n },\n },\n },\n },\n },\n },\n },\n },\n },\n },\n },\n};\nexport class TranscodeDecisionTree {\n static _IsLeafNode(node) {\n return node.engineFormat !== undefined;\n }\n get transcodeFormat() {\n return this._transcodeFormat;\n }\n get engineFormat() {\n return this._engineFormat;\n }\n get roundToMultiple4() {\n return this._roundToMultiple4;\n }\n constructor(textureFormat, hasAlpha, isPowerOfTwo, caps, options) {\n this._textureFormat = textureFormat;\n this._hasAlpha = hasAlpha;\n this._isPowerOfTwo = isPowerOfTwo;\n this._caps = caps;\n this._options = options ?? {};\n this.parseTree(DecisionTree);\n }\n parseTree(tree) {\n const node = this._textureFormat === KTX2.SourceTextureFormat.UASTC4x4 ? tree.UASTC : tree.ETC1S;\n if (node) {\n this._parseNode(node);\n }\n return node !== undefined;\n }\n _parseNode(node) {\n if (!node) {\n return;\n }\n if (TranscodeDecisionTree._IsLeafNode(node)) {\n this._transcodeFormat = node.transcodeFormat;\n this._engineFormat = node.engineFormat;\n this._roundToMultiple4 = node.roundToMultiple4 ?? true;\n }\n else {\n let condition = true;\n if (node.cap !== undefined) {\n condition = condition && !!this._caps[node.cap];\n }\n if (node.option !== undefined) {\n condition = condition && !!this._options[node.option];\n }\n if (node.alpha !== undefined) {\n condition = condition && this._hasAlpha === node.alpha;\n }\n if (node.needsPowerOfTwo !== undefined) {\n condition = condition && this._isPowerOfTwo === node.needsPowerOfTwo;\n }\n if (node.transcodeFormat !== undefined) {\n if (Array.isArray(node.transcodeFormat)) {\n condition = condition && node.transcodeFormat.indexOf(this._transcodeFormat) !== -1;\n }\n else {\n condition = condition && node.transcodeFormat === this._transcodeFormat;\n }\n }\n this._parseNode(condition ? node.yes : node.no);\n }\n }\n}\n//# sourceMappingURL=transcodeDecisionTree.js.map","/**\n * Resources used for the implementation:\n * - 3js KTX2 loader: https://github.com/mrdoob/three.js/blob/dfb5c23ce126ec845e4aa240599915fef5375797/examples/jsm/loaders/KTX2Loader.js\n * - Universal Texture Transcoders: https://github.com/KhronosGroup/Universal-Texture-Transcoders\n * - KTX2 specification: http://github.khronos.org/KTX-Specification/\n * - KTX2 binaries to convert files: https://github.com/KhronosGroup/KTX-Software/releases\n * - KTX specification: https://www.khronos.org/registry/DataFormat/specs/1.3/dataformat.1.3.html\n * - KTX-Software: https://github.com/KhronosGroup/KTX-Software\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nimport * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\nimport { KTX2FileReader, SupercompressionScheme } from \"./ktx2FileReader\";\nimport { TranscoderManager } from \"./transcoderManager\";\nimport { LiteTranscoder_UASTC_ASTC } from \"./Transcoders/liteTranscoder_UASTC_ASTC\";\nimport { LiteTranscoder_UASTC_BC7 } from \"./Transcoders/liteTranscoder_UASTC_BC7\";\nimport { LiteTranscoder_UASTC_RGBA_UNORM } from \"./Transcoders/liteTranscoder_UASTC_RGBA_UNORM\";\nimport { LiteTranscoder_UASTC_RGBA_SRGB } from \"./Transcoders/liteTranscoder_UASTC_RGBA_SRGB\";\nimport { LiteTranscoder_UASTC_R8_UNORM } from \"./Transcoders/liteTranscoder_UASTC_R8_UNORM\";\nimport { LiteTranscoder_UASTC_RG8_UNORM } from \"./Transcoders/liteTranscoder_UASTC_RG8_UNORM\";\nimport { MSCTranscoder } from \"./Transcoders/mscTranscoder\";\nimport { ZSTDDecoder } from \"./zstddec\";\nimport { TranscodeDecisionTree } from \"./transcodeDecisionTree\";\nconst IsPowerOfTwo = (value) => {\n return (value & (value - 1)) === 0 && value !== 0;\n};\n/**\n * Class for decoding KTX2 files\n *\n */\nexport class KTX2Decoder {\n constructor() {\n this._transcoderMgr = new TranscoderManager();\n }\n // eslint-disable-next-line @typescript-eslint/naming-convention\n async decode(data, caps, options) {\n const finalOptions = { ...options, ...KTX2Decoder.DefaultDecoderOptions };\n const kfr = new KTX2FileReader(data);\n if (!kfr.isValid()) {\n throw new Error(\"Invalid KT2 file: wrong signature\");\n }\n kfr.parse();\n if (kfr.needZSTDDecoder) {\n if (!this._zstdDecoder) {\n this._zstdDecoder = new ZSTDDecoder();\n }\n await this._zstdDecoder.init();\n return await this._decodeDataAsync(kfr, caps, finalOptions);\n }\n return await this._decodeDataAsync(kfr, caps, finalOptions);\n }\n async _decodeDataAsync(kfr, caps, options) {\n const width = kfr.header.pixelWidth;\n const height = kfr.header.pixelHeight;\n const srcTexFormat = kfr.textureFormat;\n const decisionTree = new TranscodeDecisionTree(srcTexFormat, kfr.hasAlpha, IsPowerOfTwo(width) && IsPowerOfTwo(height), caps, options);\n if (options?.transcodeFormatDecisionTree) {\n decisionTree.parseTree(options?.transcodeFormatDecisionTree);\n }\n const transcodeFormat = decisionTree.transcodeFormat;\n const engineFormat = decisionTree.engineFormat;\n const roundToMultiple4 = decisionTree.roundToMultiple4;\n const transcoder = this._transcoderMgr.findTranscoder(srcTexFormat, transcodeFormat, kfr.isInGammaSpace, options?.bypassTranscoders);\n if (transcoder === null) {\n throw new Error(`no transcoder found to transcode source texture format \"${KTX2.SourceTextureFormat[srcTexFormat]}\" to format \"${KTX2.TranscodeTarget[transcodeFormat]}\"`);\n }\n const mipmaps = [];\n const dataPromises = [];\n const decodedData = {\n width: 0,\n height: 0,\n transcodedFormat: engineFormat,\n mipmaps,\n isInGammaSpace: kfr.isInGammaSpace,\n hasAlpha: kfr.hasAlpha,\n transcoderName: transcoder.getName(),\n };\n let firstImageDescIndex = 0;\n for (let level = 0; level < kfr.header.levelCount; level++) {\n if (level > 0) {\n firstImageDescIndex += Math.max(kfr.header.layerCount, 1) * kfr.header.faceCount * Math.max(kfr.header.pixelDepth >> (level - 1), 1);\n }\n const levelWidth = Math.floor(width / (1 << level)) || 1;\n const levelHeight = Math.floor(height / (1 << level)) || 1;\n const numImagesInLevel = kfr.header.faceCount; // note that cubemap are not supported yet (see KTX2FileReader), so faceCount == 1\n const levelImageByteLength = ((levelWidth + 3) >> 2) * ((levelHeight + 3) >> 2) * kfr.dfdBlock.bytesPlane[0];\n const levelUncompressedByteLength = kfr.levels[level].uncompressedByteLength;\n let levelDataBuffer = kfr.data.buffer;\n let levelDataOffset = kfr.levels[level].byteOffset + kfr.data.byteOffset;\n let imageOffsetInLevel = 0;\n if (kfr.header.supercompressionScheme === SupercompressionScheme.ZStandard) {\n levelDataBuffer = this._zstdDecoder.decode(new Uint8Array(levelDataBuffer, levelDataOffset, kfr.levels[level].byteLength), levelUncompressedByteLength);\n levelDataOffset = 0;\n }\n if (level === 0) {\n decodedData.width = roundToMultiple4 ? (levelWidth + 3) & ~3 : levelWidth;\n decodedData.height = roundToMultiple4 ? (levelHeight + 3) & ~3 : levelHeight;\n }\n for (let imageIndex = 0; imageIndex < numImagesInLevel; imageIndex++) {\n let encodedData;\n let imageDesc = null;\n if (kfr.header.supercompressionScheme === SupercompressionScheme.BasisLZ) {\n imageDesc = kfr.supercompressionGlobalData.imageDescs[firstImageDescIndex + imageIndex];\n encodedData = new Uint8Array(levelDataBuffer, levelDataOffset + imageDesc.rgbSliceByteOffset, imageDesc.rgbSliceByteLength + imageDesc.alphaSliceByteLength);\n }\n else {\n encodedData = new Uint8Array(levelDataBuffer, levelDataOffset + imageOffsetInLevel, levelImageByteLength);\n imageOffsetInLevel += levelImageByteLength;\n }\n const mipmap = {\n data: null,\n width: levelWidth,\n height: levelHeight,\n };\n const transcodedData = transcoder\n .transcode(srcTexFormat, transcodeFormat, level, levelWidth, levelHeight, levelUncompressedByteLength, kfr, imageDesc, encodedData)\n // eslint-disable-next-line github/no-then\n .then((data) => {\n mipmap.data = data;\n return data;\n })\n // eslint-disable-next-line github/no-then\n .catch((reason) => {\n decodedData.errors = decodedData.errors ?? \"\";\n decodedData.errors += reason + \"\\n\" + reason.stack + \"\\n\";\n return null;\n });\n dataPromises.push(transcodedData);\n mipmaps.push(mipmap);\n }\n }\n await Promise.all(dataPromises);\n return decodedData;\n }\n}\nKTX2Decoder.DefaultDecoderOptions = {};\n// Put in the order you want the transcoders to be used in priority\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_ASTC);\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_BC7);\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_RGBA_UNORM);\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_RGBA_SRGB);\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_R8_UNORM);\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_RG8_UNORM);\nTranscoderManager.RegisterTranscoder(MSCTranscoder); // catch all transcoder - will throw an error if the format can't be transcoded\n//# sourceMappingURL=ktx2Decoder.js.map"],"names":["SourceTextureFormat","TranscodeTarget","EngineFormat","SupercompressionScheme","DFDModel","DFDChannel_ETC1S","DFDChannel_UASTC","DFDTransferFunction","DataReader","byteOffset","this","_dataByteOffset","constructor","buffer","byteLength","_dataView","DataView","readUint8","value","getUint8","readInt8","getInt8","readUint16","getUint16","readInt16","getInt16","readUint32","getUint32","readInt32","getInt32","readUint64","combined","readUint8Array","Uint8Array","skipBytes","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","uncompressedByteLength","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","KTX2.SourceTextureFormat","UASTC4x4","ETC1S","hasAlpha","needZSTDDecoder","ZStandard","isInGammaSpace","identifier","WASMMemoryManager","LoadWASM","path","LoadBinariesFromCurrentThread","Promise","resolve","reject","fetch","then","async","response","ok","arrayBuffer","status","statusText","wasmBinary","catch","reason","id","_RequestId","wasmLoadedHandler","msg","action","self","removeEventListener","addEventListener","postMessage","initialMemoryPages","InitialMemoryPages","_numPages","_memory","WebAssembly","Memory","initial","_memoryViewByteLength","_memoryViewOffset","_memoryView","wasmMemory","getMemoryView","numPages","offset","grow","TranscoderManager","RegisterTranscoder","transcoder","_Transcoders","findTranscoder","src","dst","bypass","key","KTX2.TranscodeTarget","length","CanTranscode","indexOf","Name","_getExistingTranscoder","initialize","needMemoryManager","_wasmMemoryManager","setMemoryManager","_TranscoderInstances","transcoderName","transcoders","t","getName","Transcoder","GetWasmUrl","wasmUrl","startsWith","_DefaultCdnUrl","WasmBaseUrl","baseUrl","endsWith","slice","replace","CdnVersion","versionedBase","memoryMgr","transcode","level","width","height","ktx2Reader","imageDesc","encodedData","LiteTranscoder","super","arguments","_wasmBinary","_instantiateWebAssemblyAsync","instantiate","env","memory","_memoryManager","moduleWrapper","module","instance","exports","_loadModuleAsync","_modulePromise","_modulePath","memoryManager","setModulePath","modulePath","_transcodeInPlace","textureView","uncompressedTextureView","nBlocks","_prepareTranscoding","uncompressedNumComponents","undefined","texMemoryPages","set","LiteTranscoder_UASTC_ASTC","ASTC_4X4_RGBA","WasmModuleURL","WasmBinary","LiteTranscoder_UASTC_BC7","BC7_RGBA","LiteTranscoder_UASTC_RGBA_UNORM","RGBA32","decode","LiteTranscoder_UASTC_RGBA_SRGB","LiteTranscoder_UASTC_R8_UNORM","R8","LiteTranscoder_UASTC_RG8_UNORM","RG8","MSCTranscoder","_getMSCBasisTranscoder","_mscBasisTranscoderPromise","JSModule","globalThis","MSC_TRANSCODER","UseFromWorkerThread","importScripts","JSModuleURL","head","document","getElementsByTagName","script","createElement","setAttribute","onload","basisModule","initTranscoders","_mscBasisModule","onerror","appendChild","isVideo","imageInfo","result","textureData","UastcImageTranscoder","BasisLzEtc1sImageTranscoder","texFormat","TextureFormat","ImageInfo","targetFormat","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","array","uncompressedSize","compressedSize","compressedPtr","malloc","Number","ZSTD_findDecompressedSize","uncompressedPtr","actualSize","ZSTD_decompress","dec","free","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","_IsLeafNode","node","_transcodeFormat","_engineFormat","_roundToMultiple4","isPowerOfTwo","caps","options","_textureFormat","_hasAlpha","_isPowerOfTwo","_caps","_options","parseTree","tree","_parseNode","condition","isArray","IsPowerOfTwo","KTX2Decoder","_transcoderMgr","finalOptions","DefaultDecoderOptions","kfr","_zstdDecoder","_decodeDataAsync","srcTexFormat","decisionTree","transcodeFormatDecisionTree","bypassTranscoders","mipmaps","dataPromises","decodedData","transcodedFormat","firstImageDescIndex","levelWidth","floor","levelHeight","numImagesInLevel","levelImageByteLength","levelUncompressedByteLength","levelDataBuffer","levelDataOffset","imageOffsetInLevel","imageIndex","BasisLZ","mipmap","transcodedData","errors","stack","all"],"mappings":"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"}
1
+ {"version":3,"file":"babylon.ktx2Decoder.js","sources":["file:///home/vsts/work/1/s/packages/dev/core/dist/Materials/Textures/ktx2decoderTypes.js","file:///home/vsts/work/1/s/packages/tools/ktx2Decoder/dist/ktx2FileReader.js","file:///home/vsts/work/1/s/packages/tools/ktx2Decoder/dist/Misc/dataReader.js","file:///home/vsts/work/1/s/packages/tools/ktx2Decoder/dist/wasmMemoryManager.js","file:///home/vsts/work/1/s/packages/tools/ktx2Decoder/dist/transcoderManager.js","file:///home/vsts/work/1/s/packages/tools/ktx2Decoder/dist/transcoder.js","file:///home/vsts/work/1/s/packages/tools/ktx2Decoder/dist/Transcoders/liteTranscoder.js","file:///home/vsts/work/1/s/packages/tools/ktx2Decoder/dist/Transcoders/liteTranscoder_UASTC_ASTC.js","file:///home/vsts/work/1/s/packages/tools/ktx2Decoder/dist/Transcoders/liteTranscoder_UASTC_BC7.js","file:///home/vsts/work/1/s/packages/tools/ktx2Decoder/dist/Transcoders/liteTranscoder_UASTC_RGBA_UNORM.js","file:///home/vsts/work/1/s/packages/tools/ktx2Decoder/dist/Transcoders/liteTranscoder_UASTC_RGBA_SRGB.js","file:///home/vsts/work/1/s/packages/tools/ktx2Decoder/dist/Transcoders/liteTranscoder_UASTC_R8_UNORM.js","file:///home/vsts/work/1/s/packages/tools/ktx2Decoder/dist/Transcoders/liteTranscoder_UASTC_RG8_UNORM.js","file:///home/vsts/work/1/s/packages/tools/ktx2Decoder/dist/Transcoders/mscTranscoder.js","file:///home/vsts/work/1/s/packages/tools/ktx2Decoder/dist/zstddec.js","file:///home/vsts/work/1/s/packages/tools/ktx2Decoder/dist/transcodeDecisionTree.js","file:///home/vsts/work/1/s/packages/tools/ktx2Decoder/dist/ktx2Decoder.js"],"sourcesContent":["export var SourceTextureFormat;\n(function (SourceTextureFormat) {\n SourceTextureFormat[SourceTextureFormat[\"ETC1S\"] = 0] = \"ETC1S\";\n // eslint-disable-next-line @typescript-eslint/naming-convention\n SourceTextureFormat[SourceTextureFormat[\"UASTC4x4\"] = 1] = \"UASTC4x4\";\n})(SourceTextureFormat || (SourceTextureFormat = {}));\nexport var TranscodeTarget;\n(function (TranscodeTarget) {\n TranscodeTarget[TranscodeTarget[\"ASTC_4X4_RGBA\"] = 0] = \"ASTC_4X4_RGBA\";\n // eslint-disable-next-line @typescript-eslint/naming-convention\n TranscodeTarget[TranscodeTarget[\"ASTC_4x4_RGBA\"] = 0] = \"ASTC_4x4_RGBA\";\n TranscodeTarget[TranscodeTarget[\"BC7_RGBA\"] = 1] = \"BC7_RGBA\";\n TranscodeTarget[TranscodeTarget[\"BC3_RGBA\"] = 2] = \"BC3_RGBA\";\n TranscodeTarget[TranscodeTarget[\"BC1_RGB\"] = 3] = \"BC1_RGB\";\n TranscodeTarget[TranscodeTarget[\"PVRTC1_4_RGBA\"] = 4] = \"PVRTC1_4_RGBA\";\n TranscodeTarget[TranscodeTarget[\"PVRTC1_4_RGB\"] = 5] = \"PVRTC1_4_RGB\";\n TranscodeTarget[TranscodeTarget[\"ETC2_RGBA\"] = 6] = \"ETC2_RGBA\";\n TranscodeTarget[TranscodeTarget[\"ETC1_RGB\"] = 7] = \"ETC1_RGB\";\n TranscodeTarget[TranscodeTarget[\"RGBA32\"] = 8] = \"RGBA32\";\n TranscodeTarget[TranscodeTarget[\"R8\"] = 9] = \"R8\";\n TranscodeTarget[TranscodeTarget[\"RG8\"] = 10] = \"RG8\";\n})(TranscodeTarget || (TranscodeTarget = {}));\nexport var EngineFormat;\n(function (EngineFormat) {\n EngineFormat[EngineFormat[\"COMPRESSED_RGBA_BPTC_UNORM_EXT\"] = 36492] = \"COMPRESSED_RGBA_BPTC_UNORM_EXT\";\n EngineFormat[EngineFormat[\"COMPRESSED_RGBA_ASTC_4X4_KHR\"] = 37808] = \"COMPRESSED_RGBA_ASTC_4X4_KHR\";\n EngineFormat[EngineFormat[\"COMPRESSED_RGB_S3TC_DXT1_EXT\"] = 33776] = \"COMPRESSED_RGB_S3TC_DXT1_EXT\";\n EngineFormat[EngineFormat[\"COMPRESSED_RGBA_S3TC_DXT5_EXT\"] = 33779] = \"COMPRESSED_RGBA_S3TC_DXT5_EXT\";\n EngineFormat[EngineFormat[\"COMPRESSED_RGBA_PVRTC_4BPPV1_IMG\"] = 35842] = \"COMPRESSED_RGBA_PVRTC_4BPPV1_IMG\";\n EngineFormat[EngineFormat[\"COMPRESSED_RGB_PVRTC_4BPPV1_IMG\"] = 35840] = \"COMPRESSED_RGB_PVRTC_4BPPV1_IMG\";\n EngineFormat[EngineFormat[\"COMPRESSED_RGBA8_ETC2_EAC\"] = 37496] = \"COMPRESSED_RGBA8_ETC2_EAC\";\n EngineFormat[EngineFormat[\"COMPRESSED_RGB8_ETC2\"] = 37492] = \"COMPRESSED_RGB8_ETC2\";\n EngineFormat[EngineFormat[\"COMPRESSED_RGB_ETC1_WEBGL\"] = 36196] = \"COMPRESSED_RGB_ETC1_WEBGL\";\n EngineFormat[EngineFormat[\"RGBA8Format\"] = 32856] = \"RGBA8Format\";\n EngineFormat[EngineFormat[\"R8Format\"] = 33321] = \"R8Format\";\n // eslint-disable-next-line @typescript-eslint/naming-convention\n EngineFormat[EngineFormat[\"RG8Format\"] = 33323] = \"RG8Format\";\n})(EngineFormat || (EngineFormat = {}));\n//# sourceMappingURL=ktx2decoderTypes.js.map","/* eslint-disable @typescript-eslint/naming-convention */\nimport * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\nimport { DataReader } from \"./Misc/dataReader\";\n/** @internal */\nexport var SupercompressionScheme;\n(function (SupercompressionScheme) {\n SupercompressionScheme[SupercompressionScheme[\"None\"] = 0] = \"None\";\n SupercompressionScheme[SupercompressionScheme[\"BasisLZ\"] = 1] = \"BasisLZ\";\n SupercompressionScheme[SupercompressionScheme[\"ZStandard\"] = 2] = \"ZStandard\";\n SupercompressionScheme[SupercompressionScheme[\"ZLib\"] = 3] = \"ZLib\";\n})(SupercompressionScheme || (SupercompressionScheme = {}));\nvar DFDModel;\n(function (DFDModel) {\n DFDModel[DFDModel[\"ETC1S\"] = 163] = \"ETC1S\";\n DFDModel[DFDModel[\"UASTC\"] = 166] = \"UASTC\";\n})(DFDModel || (DFDModel = {}));\nvar DFDChannel_ETC1S;\n(function (DFDChannel_ETC1S) {\n DFDChannel_ETC1S[DFDChannel_ETC1S[\"RGB\"] = 0] = \"RGB\";\n DFDChannel_ETC1S[DFDChannel_ETC1S[\"RRR\"] = 3] = \"RRR\";\n DFDChannel_ETC1S[DFDChannel_ETC1S[\"GGG\"] = 4] = \"GGG\";\n DFDChannel_ETC1S[DFDChannel_ETC1S[\"AAA\"] = 15] = \"AAA\";\n})(DFDChannel_ETC1S || (DFDChannel_ETC1S = {}));\nvar DFDChannel_UASTC;\n(function (DFDChannel_UASTC) {\n DFDChannel_UASTC[DFDChannel_UASTC[\"RGB\"] = 0] = \"RGB\";\n DFDChannel_UASTC[DFDChannel_UASTC[\"RGBA\"] = 3] = \"RGBA\";\n DFDChannel_UASTC[DFDChannel_UASTC[\"RRR\"] = 4] = \"RRR\";\n DFDChannel_UASTC[DFDChannel_UASTC[\"RRRG\"] = 5] = \"RRRG\";\n})(DFDChannel_UASTC || (DFDChannel_UASTC = {}));\nvar DFDTransferFunction;\n(function (DFDTransferFunction) {\n DFDTransferFunction[DFDTransferFunction[\"linear\"] = 1] = \"linear\";\n DFDTransferFunction[DFDTransferFunction[\"sRGB\"] = 2] = \"sRGB\";\n})(DFDTransferFunction || (DFDTransferFunction = {}));\nexport class KTX2FileReader {\n /**\n * Will throw an exception if the file can't be parsed\n * @param data\n */\n constructor(data) {\n this._data = data;\n }\n get data() {\n return this._data;\n }\n get header() {\n return this._header;\n }\n get levels() {\n return this._levels;\n }\n get dfdBlock() {\n return this._dfdBlock;\n }\n get supercompressionGlobalData() {\n return this._supercompressionGlobalData;\n }\n isValid() {\n return KTX2FileReader.IsValid(this._data);\n }\n parse() {\n let offsetInFile = 12; // skip the header\n /**\n * Get the header\n */\n const hdrReader = new DataReader(this._data, offsetInFile, 17 * 4);\n const header = (this._header = {\n vkFormat: hdrReader.readUint32(),\n typeSize: hdrReader.readUint32(),\n pixelWidth: hdrReader.readUint32(),\n pixelHeight: hdrReader.readUint32(),\n pixelDepth: hdrReader.readUint32(),\n layerCount: hdrReader.readUint32(),\n faceCount: hdrReader.readUint32(),\n levelCount: hdrReader.readUint32(),\n supercompressionScheme: hdrReader.readUint32(),\n dfdByteOffset: hdrReader.readUint32(),\n dfdByteLength: hdrReader.readUint32(),\n kvdByteOffset: hdrReader.readUint32(),\n kvdByteLength: hdrReader.readUint32(),\n sgdByteOffset: hdrReader.readUint64(),\n sgdByteLength: hdrReader.readUint64(),\n });\n if (header.pixelDepth > 0) {\n throw new Error(`Failed to parse KTX2 file - Only 2D textures are currently supported.`);\n }\n if (header.layerCount > 1) {\n throw new Error(`Failed to parse KTX2 file - Array textures are not currently supported.`);\n }\n if (header.faceCount > 1) {\n throw new Error(`Failed to parse KTX2 file - Cube textures are not currently supported.`);\n }\n offsetInFile += hdrReader.byteOffset;\n /**\n * Get the levels\n */\n let levelCount = Math.max(1, header.levelCount);\n const levelReader = new DataReader(this._data, offsetInFile, levelCount * 3 * (2 * 4));\n const levels = (this._levels = []);\n while (levelCount--) {\n levels.push({\n byteOffset: levelReader.readUint64(),\n byteLength: levelReader.readUint64(),\n uncompressedByteLength: levelReader.readUint64(),\n });\n }\n /**\n * Get the data format descriptor (DFD) blocks\n */\n const dfdReader = new DataReader(this._data, header.dfdByteOffset, header.dfdByteLength);\n const dfdBlock = (this._dfdBlock = {\n vendorId: dfdReader.skipBytes(4 /* skip totalSize */).readUint16(),\n descriptorType: dfdReader.readUint16(),\n versionNumber: dfdReader.readUint16(),\n descriptorBlockSize: dfdReader.readUint16(),\n colorModel: dfdReader.readUint8(),\n colorPrimaries: dfdReader.readUint8(),\n transferFunction: dfdReader.readUint8(),\n flags: dfdReader.readUint8(),\n texelBlockDimension: {\n x: dfdReader.readUint8() + 1,\n y: dfdReader.readUint8() + 1,\n z: dfdReader.readUint8() + 1,\n w: dfdReader.readUint8() + 1,\n },\n bytesPlane: [\n dfdReader.readUint8() /* bytesPlane0 */,\n dfdReader.readUint8() /* bytesPlane1 */,\n dfdReader.readUint8() /* bytesPlane2 */,\n dfdReader.readUint8() /* bytesPlane3 */,\n dfdReader.readUint8() /* bytesPlane4 */,\n dfdReader.readUint8() /* bytesPlane5 */,\n dfdReader.readUint8() /* bytesPlane6 */,\n dfdReader.readUint8() /* bytesPlane7 */,\n ],\n numSamples: 0,\n samples: new Array(),\n });\n dfdBlock.numSamples = (dfdBlock.descriptorBlockSize - 24) / 16;\n for (let i = 0; i < dfdBlock.numSamples; i++) {\n const sample = {\n bitOffset: dfdReader.readUint16(),\n bitLength: dfdReader.readUint8() + 1,\n channelType: dfdReader.readUint8(),\n channelFlags: 0,\n samplePosition: [\n dfdReader.readUint8() /* samplePosition0 */,\n dfdReader.readUint8() /* samplePosition1 */,\n dfdReader.readUint8() /* samplePosition2 */,\n dfdReader.readUint8() /* samplePosition3 */,\n ],\n sampleLower: dfdReader.readUint32(),\n sampleUpper: dfdReader.readUint32(),\n };\n sample.channelFlags = (sample.channelType & 0xf0) >> 4;\n sample.channelType = sample.channelType & 0x0f;\n dfdBlock.samples.push(sample);\n }\n /**\n * Get the Supercompression Global Data (sgd)\n */\n const sgd = (this._supercompressionGlobalData = {});\n if (header.sgdByteLength > 0) {\n const sgdReader = new DataReader(this._data, header.sgdByteOffset, header.sgdByteLength);\n sgd.endpointCount = sgdReader.readUint16();\n sgd.selectorCount = sgdReader.readUint16();\n sgd.endpointsByteLength = sgdReader.readUint32();\n sgd.selectorsByteLength = sgdReader.readUint32();\n sgd.tablesByteLength = sgdReader.readUint32();\n sgd.extendedByteLength = sgdReader.readUint32();\n sgd.imageDescs = [];\n const imageCount = this._getImageCount();\n for (let i = 0; i < imageCount; i++) {\n sgd.imageDescs.push({\n imageFlags: sgdReader.readUint32(),\n rgbSliceByteOffset: sgdReader.readUint32(),\n rgbSliceByteLength: sgdReader.readUint32(),\n alphaSliceByteOffset: sgdReader.readUint32(),\n alphaSliceByteLength: sgdReader.readUint32(),\n });\n }\n const endpointsByteOffset = header.sgdByteOffset + sgdReader.byteOffset;\n const selectorsByteOffset = endpointsByteOffset + sgd.endpointsByteLength;\n const tablesByteOffset = selectorsByteOffset + sgd.selectorsByteLength;\n const extendedByteOffset = tablesByteOffset + sgd.tablesByteLength;\n sgd.endpointsData = new Uint8Array(this._data.buffer, this._data.byteOffset + endpointsByteOffset, sgd.endpointsByteLength);\n sgd.selectorsData = new Uint8Array(this._data.buffer, this._data.byteOffset + selectorsByteOffset, sgd.selectorsByteLength);\n sgd.tablesData = new Uint8Array(this._data.buffer, this._data.byteOffset + tablesByteOffset, sgd.tablesByteLength);\n sgd.extendedData = new Uint8Array(this._data.buffer, this._data.byteOffset + extendedByteOffset, sgd.extendedByteLength);\n }\n }\n _getImageCount() {\n let layerPixelDepth = Math.max(this._header.pixelDepth, 1);\n for (let i = 1; i < this._header.levelCount; i++) {\n layerPixelDepth += Math.max(this._header.pixelDepth >> i, 1);\n }\n return Math.max(this._header.layerCount, 1) * this._header.faceCount * layerPixelDepth;\n }\n get textureFormat() {\n return this._dfdBlock.colorModel === 166 /* DFDModel.UASTC */ ? KTX2.SourceTextureFormat.UASTC4x4 : KTX2.SourceTextureFormat.ETC1S;\n }\n get hasAlpha() {\n const tformat = this.textureFormat;\n switch (tformat) {\n case KTX2.SourceTextureFormat.ETC1S:\n return (this._dfdBlock.numSamples === 2 &&\n (this._dfdBlock.samples[0].channelType === 15 /* DFDChannel_ETC1S.AAA */ || this._dfdBlock.samples[1].channelType === 15 /* DFDChannel_ETC1S.AAA */));\n case KTX2.SourceTextureFormat.UASTC4x4:\n return this._dfdBlock.samples[0].channelType === 3 /* DFDChannel_UASTC.RGBA */;\n }\n return false;\n }\n get needZSTDDecoder() {\n return this._header.supercompressionScheme === SupercompressionScheme.ZStandard;\n }\n get isInGammaSpace() {\n return this._dfdBlock.transferFunction === 2 /* DFDTransferFunction.sRGB */;\n }\n static IsValid(data) {\n if (data.byteLength >= 12) {\n // '«', 'K', 'T', 'X', ' ', '2', '0', '»', '\\r', '\\n', '\\x1A', '\\n'\n const identifier = new Uint8Array(data.buffer, data.byteOffset, 12);\n if (identifier[0] === 0xab &&\n identifier[1] === 0x4b &&\n identifier[2] === 0x54 &&\n identifier[3] === 0x58 &&\n identifier[4] === 0x20 &&\n identifier[5] === 0x32 &&\n identifier[6] === 0x30 &&\n identifier[7] === 0xbb &&\n identifier[8] === 0x0d &&\n identifier[9] === 0x0a &&\n identifier[10] === 0x1a &&\n identifier[11] === 0x0a) {\n return true;\n }\n }\n return false;\n }\n}\n//# sourceMappingURL=ktx2FileReader.js.map","/**\n * Utility class for reading from a data buffer\n */\nexport class DataReader {\n /**\n * The current byte offset from the beginning of the data buffer.\n */\n get byteOffset() {\n return this._dataByteOffset;\n }\n /**\n * Constructor\n * @param buffer The buffer to set\n * @param byteOffset The starting offset in the buffer\n * @param byteLength The byte length of the buffer\n */\n constructor(buffer, byteOffset, byteLength) {\n if (buffer.buffer) {\n this._dataView = new DataView(buffer.buffer, buffer.byteOffset + (byteOffset ?? 0), byteLength ?? buffer.byteLength);\n }\n else {\n this._dataView = new DataView(buffer, byteOffset ?? 0, byteLength ?? buffer.byteLength);\n }\n this._dataByteOffset = 0;\n }\n /**\n * Read a unsigned 8-bit integer from the currently loaded data range.\n * @returns The 8-bit integer read\n */\n readUint8() {\n const value = this._dataView.getUint8(this._dataByteOffset);\n this._dataByteOffset += 1;\n return value;\n }\n /**\n * Read a signed 8-bit integer from the currently loaded data range.\n * @returns The 8-bit integer read\n */\n readInt8() {\n const value = this._dataView.getInt8(this._dataByteOffset);\n this._dataByteOffset += 1;\n return value;\n }\n /**\n * Read a unsigned 16-bit integer from the currently loaded data range.\n * @returns The 16-bit integer read\n */\n readUint16() {\n const value = this._dataView.getUint16(this._dataByteOffset, true);\n this._dataByteOffset += 2;\n return value;\n }\n /**\n * Read a signed 16-bit integer from the currently loaded data range.\n * @returns The 16-bit integer read\n */\n readInt16() {\n const value = this._dataView.getInt16(this._dataByteOffset, true);\n this._dataByteOffset += 2;\n return value;\n }\n /**\n * Read a unsigned 32-bit integer from the currently loaded data range.\n * @returns The 32-bit integer read\n */\n readUint32() {\n const value = this._dataView.getUint32(this._dataByteOffset, true);\n this._dataByteOffset += 4;\n return value;\n }\n /**\n * Read a signed 32-bit integer from the currently loaded data range.\n * @returns The 32-bit integer read\n */\n readInt32() {\n const value = this._dataView.getInt32(this._dataByteOffset, true);\n this._dataByteOffset += 4;\n return value;\n }\n /**\n * Read a unsigned 32-bit integer from the currently loaded data range.\n * @returns The 32-bit integer read\n */\n readUint64() {\n // split 64-bit number into two 32-bit (4-byte) parts\n const left = this._dataView.getUint32(this._dataByteOffset, true);\n const right = this._dataView.getUint32(this._dataByteOffset + 4, true);\n // combine the two 32-bit values\n const combined = left + 2 ** 32 * right; // That was weird..Keeping it for posterity: true ? left + 2 ** 32 * right : 2 ** 32 * left + right;\n /*if (!Number.isSafeInteger(combined)) {\n console.warn('DataReader: ' + combined + ' exceeds MAX_SAFE_INTEGER. Precision may be lost.');\n }*/\n this._dataByteOffset += 8;\n return combined;\n }\n /**\n * Read a byte array from the currently loaded data range.\n * @param byteLength The byte length to read\n * @returns The byte array read\n */\n readUint8Array(byteLength) {\n const value = new Uint8Array(this._dataView.buffer, this._dataView.byteOffset + this._dataByteOffset, byteLength);\n this._dataByteOffset += byteLength;\n return value;\n }\n /**\n * Skips the given byte length the currently loaded data range.\n * @param byteLength The byte length to skip\n * @returns This instance\n */\n skipBytes(byteLength) {\n this._dataByteOffset += byteLength;\n return this;\n }\n}\n//# sourceMappingURL=dataReader.js.map","/**\n * @internal\n */\nexport class WASMMemoryManager {\n static async LoadWASM(path) {\n if (this.LoadBinariesFromCurrentThread) {\n return await new Promise((resolve, reject) => {\n fetch(path)\n // eslint-disable-next-line github/no-then\n .then(async (response) => {\n if (response.ok) {\n return await response.arrayBuffer();\n }\n throw new Error(`Could not fetch the wasm component from \"${path}\": ${response.status} - ${response.statusText}`);\n })\n // eslint-disable-next-line github/no-then\n .then((wasmBinary) => resolve(wasmBinary))\n // eslint-disable-next-line github/no-then\n .catch((reason) => {\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n reject(reason);\n });\n });\n }\n const id = this._RequestId++;\n return await new Promise((resolve) => {\n const wasmLoadedHandler = (msg) => {\n if (msg.data.action === \"wasmLoaded\" && msg.data.id === id) {\n self.removeEventListener(\"message\", wasmLoadedHandler);\n resolve(msg.data.wasmBinary);\n }\n };\n self.addEventListener(\"message\", wasmLoadedHandler);\n postMessage({ action: \"loadWASM\", path: path, id: id });\n });\n }\n constructor(initialMemoryPages = WASMMemoryManager.InitialMemoryPages) {\n this._numPages = initialMemoryPages;\n this._memory = new WebAssembly.Memory({ initial: this._numPages });\n this._memoryViewByteLength = this._numPages << 16;\n this._memoryViewOffset = 0;\n this._memoryView = new Uint8Array(this._memory.buffer, this._memoryViewOffset, this._memoryViewByteLength);\n }\n get wasmMemory() {\n return this._memory;\n }\n getMemoryView(numPages, offset = 0, byteLength) {\n byteLength = byteLength ?? numPages << 16;\n if (this._numPages < numPages) {\n this._memory.grow(numPages - this._numPages);\n this._numPages = numPages;\n this._memoryView = new Uint8Array(this._memory.buffer, offset, byteLength);\n this._memoryViewByteLength = byteLength;\n this._memoryViewOffset = offset;\n }\n else {\n this._memoryView = new Uint8Array(this._memory.buffer, offset, byteLength);\n this._memoryViewByteLength = byteLength;\n this._memoryViewOffset = offset;\n }\n return this._memoryView;\n }\n}\nWASMMemoryManager.LoadBinariesFromCurrentThread = true;\nWASMMemoryManager.InitialMemoryPages = (1 * 1024 * 1024) >> 16; // 1 Mbytes\nWASMMemoryManager._RequestId = 0;\n//# sourceMappingURL=wasmMemoryManager.js.map","// eslint-disable-next-line @typescript-eslint/naming-convention\nimport * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\nimport { WASMMemoryManager } from \"./wasmMemoryManager\";\n/**\n * @internal\n */\nexport class TranscoderManager {\n static RegisterTranscoder(transcoder) {\n TranscoderManager._Transcoders.push(transcoder);\n }\n findTranscoder(src, dst, isInGammaSpace, bypass) {\n let transcoder = null;\n const key = KTX2.SourceTextureFormat[src] + \"_\" + KTX2.TranscodeTarget[dst];\n for (let i = 0; i < TranscoderManager._Transcoders.length; ++i) {\n if (TranscoderManager._Transcoders[i].CanTranscode(src, dst, isInGammaSpace) && (!bypass || bypass.indexOf(TranscoderManager._Transcoders[i].Name) < 0)) {\n transcoder = this._getExistingTranscoder(key, TranscoderManager._Transcoders[i].Name);\n if (!transcoder) {\n transcoder = new TranscoderManager._Transcoders[i]();\n transcoder.initialize();\n if (transcoder.needMemoryManager()) {\n if (!this._wasmMemoryManager) {\n this._wasmMemoryManager = new WASMMemoryManager();\n }\n transcoder.setMemoryManager(this._wasmMemoryManager);\n }\n if (!TranscoderManager._TranscoderInstances[key]) {\n TranscoderManager._TranscoderInstances[key] = [];\n }\n TranscoderManager._TranscoderInstances[key].push(transcoder);\n }\n break;\n }\n }\n return transcoder;\n }\n _getExistingTranscoder(key, transcoderName) {\n const transcoders = TranscoderManager._TranscoderInstances[key];\n if (transcoders) {\n for (let t = 0; t < transcoders.length; ++t) {\n const transcoder = transcoders[t];\n if (transcoderName === transcoder.getName()) {\n return transcoder;\n }\n }\n }\n return null;\n }\n}\nTranscoderManager._Transcoders = [];\nTranscoderManager._TranscoderInstances = {};\n//# sourceMappingURL=transcoderManager.js.map","/**\n * @internal\n */\nexport class Transcoder {\n static CanTranscode(src, dst, isInGammaSpace) {\n return false;\n }\n static GetWasmUrl(wasmUrl) {\n if (wasmUrl.startsWith(Transcoder._DefaultCdnUrl)) {\n if (Transcoder.WasmBaseUrl) {\n // Normalize the base url\n const baseUrl = Transcoder.WasmBaseUrl.endsWith(\"/\") ? Transcoder.WasmBaseUrl.slice(0, -1) : Transcoder.WasmBaseUrl;\n wasmUrl = wasmUrl.replace(Transcoder._DefaultCdnUrl, baseUrl);\n }\n else if (Transcoder.CdnVersion) {\n const versionedBase = `${Transcoder._DefaultCdnUrl}/v${Transcoder.CdnVersion}`;\n // Guard against double-versioning if the URL already contains the version prefix\n // (e.g. when GetWasmUrl is called multiple times on the same URL)\n if (!wasmUrl.startsWith(versionedBase)) {\n wasmUrl = wasmUrl.replace(Transcoder._DefaultCdnUrl, versionedBase);\n }\n }\n }\n return wasmUrl;\n }\n getName() {\n return Transcoder.Name;\n }\n initialize() { }\n needMemoryManager() {\n return false;\n }\n setMemoryManager(memoryMgr) { }\n async transcode(src, dst, level, width, height, uncompressedByteLength, ktx2Reader, imageDesc, encodedData) {\n return null;\n }\n}\nTranscoder.Name = \"Transcoder\";\nTranscoder.WasmBaseUrl = \"\";\n/**\n * The CDN version to use when constructing versioned CDN URLs.\n * Injected at build time by the version update script.\n * When set, unversioned CDN URLs will be rewritten to include this version prefix.\n * @internal\n */\nTranscoder.CdnVersion = \"9.6.0\";\nTranscoder._DefaultCdnUrl = \"https://cdn.babylonjs.com\";\n//# sourceMappingURL=transcoder.js.map","import { Transcoder } from \"../transcoder\";\nimport { WASMMemoryManager } from \"../wasmMemoryManager\";\n/**\n * @internal\n */\nexport class LiteTranscoder extends Transcoder {\n constructor() {\n super(...arguments);\n this._wasmBinary = null;\n }\n async _instantiateWebAssemblyAsync(wasmBinary) {\n // eslint-disable-next-line github/no-then\n return await WebAssembly.instantiate(wasmBinary, { env: { memory: this._memoryManager.wasmMemory } }).then((moduleWrapper) => {\n return { module: moduleWrapper.instance.exports };\n });\n }\n async _loadModuleAsync(wasmBinary = this._wasmBinary) {\n this._modulePromise =\n this._modulePromise ||\n // eslint-disable-next-line github/no-then\n (wasmBinary ? Promise.resolve(wasmBinary) : WASMMemoryManager.LoadWASM(this._modulePath)).then(async (wasmBinary) => {\n return await this._instantiateWebAssemblyAsync(wasmBinary);\n });\n return await this._modulePromise;\n }\n // eslint-disable-next-line @typescript-eslint/naming-convention\n get memoryManager() {\n return this._memoryManager;\n }\n // eslint-disable-next-line @typescript-eslint/naming-convention\n setModulePath(modulePath, wasmBinary) {\n this._modulePath = Transcoder.GetWasmUrl(modulePath);\n this._wasmBinary = wasmBinary;\n }\n initialize() {\n this._transcodeInPlace = true;\n }\n needMemoryManager() {\n return true;\n }\n setMemoryManager(memoryMgr) {\n this._memoryManager = memoryMgr;\n }\n // eslint-disable-next-line @typescript-eslint/naming-convention\n async transcode(src, dst, level, width, height, uncompressedByteLength, ktx2Reader, imageDesc, encodedData) {\n // eslint-disable-next-line github/no-then\n return await this._loadModuleAsync().then((moduleWrapper) => {\n const transcoder = moduleWrapper.module;\n const [textureView, uncompressedTextureView, nBlocks] = this._prepareTranscoding(width, height, uncompressedByteLength, encodedData);\n return transcoder.transcode(nBlocks) === 0 ? (this._transcodeInPlace ? textureView.slice() : uncompressedTextureView.slice()) : null;\n });\n }\n _prepareTranscoding(width, height, uncompressedByteLength, encodedData, uncompressedNumComponents) {\n const nBlocks = ((width + 3) >> 2) * ((height + 3) >> 2);\n if (uncompressedNumComponents !== undefined) {\n uncompressedByteLength = width * ((height + 3) >> 2) * 4 * uncompressedNumComponents;\n }\n const texMemoryPages = ((nBlocks * 16 + 65535 + (this._transcodeInPlace ? 0 : uncompressedByteLength)) >> 16) + 1;\n const textureView = this.memoryManager.getMemoryView(texMemoryPages, 65536, nBlocks * 16);\n const uncompressedTextureView = this._transcodeInPlace\n ? null\n : new Uint8Array(this._memoryManager.wasmMemory.buffer, 65536 + nBlocks * 16, uncompressedNumComponents !== undefined ? width * height * uncompressedNumComponents : uncompressedByteLength);\n textureView.set(encodedData);\n return [textureView, uncompressedTextureView, nBlocks];\n }\n}\n//# sourceMappingURL=liteTranscoder.js.map","// eslint-disable-next-line @typescript-eslint/naming-convention\nimport * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\nimport { LiteTranscoder } from \"./liteTranscoder\";\n/**\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class LiteTranscoder_UASTC_ASTC extends LiteTranscoder {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n static CanTranscode(src, dst, isInGammaSpace) {\n return src === KTX2.SourceTextureFormat.UASTC4x4 && dst === KTX2.TranscodeTarget.ASTC_4X4_RGBA;\n }\n getName() {\n return LiteTranscoder_UASTC_ASTC.Name;\n }\n initialize() {\n super.initialize();\n this.setModulePath(LiteTranscoder_UASTC_ASTC.WasmModuleURL, LiteTranscoder_UASTC_ASTC.WasmBinary);\n }\n}\n/**\n * URL to use when loading the wasm module for the transcoder\n */\nLiteTranscoder_UASTC_ASTC.WasmModuleURL = \"https://cdn.babylonjs.com/ktx2Transcoders/1/uastc_astc.wasm\";\n/**\n * Binary data of the wasm module\n */\nLiteTranscoder_UASTC_ASTC.WasmBinary = null;\nLiteTranscoder_UASTC_ASTC.Name = \"UniversalTranscoder_UASTC_ASTC\";\n//# sourceMappingURL=liteTranscoder_UASTC_ASTC.js.map","// eslint-disable-next-line @typescript-eslint/naming-convention\nimport * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\nimport { LiteTranscoder } from \"./liteTranscoder\";\n/**\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class LiteTranscoder_UASTC_BC7 extends LiteTranscoder {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n static CanTranscode(src, dst, isInGammaSpace) {\n return src === KTX2.SourceTextureFormat.UASTC4x4 && dst === KTX2.TranscodeTarget.BC7_RGBA;\n }\n getName() {\n return LiteTranscoder_UASTC_BC7.Name;\n }\n initialize() {\n super.initialize();\n this.setModulePath(LiteTranscoder_UASTC_BC7.WasmModuleURL, LiteTranscoder_UASTC_BC7.WasmBinary);\n }\n}\n/**\n * URL to use when loading the wasm module for the transcoder\n */\nLiteTranscoder_UASTC_BC7.WasmModuleURL = \"https://cdn.babylonjs.com/ktx2Transcoders/1/uastc_bc7.wasm\";\n/**\n * Binary data of the wasm module\n */\nLiteTranscoder_UASTC_BC7.WasmBinary = null;\nLiteTranscoder_UASTC_BC7.Name = \"UniversalTranscoder_UASTC_BC7\";\n//# sourceMappingURL=liteTranscoder_UASTC_BC7.js.map","// eslint-disable-next-line @typescript-eslint/naming-convention\nimport * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\nimport { LiteTranscoder } from \"./liteTranscoder\";\n/**\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class LiteTranscoder_UASTC_RGBA_UNORM extends LiteTranscoder {\n static CanTranscode(src, dst, isInGammaSpace) {\n return src === KTX2.SourceTextureFormat.UASTC4x4 && dst === KTX2.TranscodeTarget.RGBA32 && !isInGammaSpace;\n }\n getName() {\n return LiteTranscoder_UASTC_RGBA_UNORM.Name;\n }\n initialize() {\n super.initialize();\n this._transcodeInPlace = false;\n this.setModulePath(LiteTranscoder_UASTC_RGBA_UNORM.WasmModuleURL, LiteTranscoder_UASTC_RGBA_UNORM.WasmBinary);\n }\n // eslint-disable-next-line @typescript-eslint/naming-convention\n async transcode(src, dst, level, width, height, uncompressedByteLength, ktx2Reader, imageDesc, encodedData) {\n const moduleWrapper = await this._loadModuleAsync();\n const transcoder = moduleWrapper.module;\n const [, uncompressedTextureView] = this._prepareTranscoding(width, height, uncompressedByteLength, encodedData, 4);\n return transcoder.decode(width, height) === 0 ? uncompressedTextureView.slice() : null;\n }\n}\n/**\n * URL to use when loading the wasm module for the transcoder (unorm)\n */\nLiteTranscoder_UASTC_RGBA_UNORM.WasmModuleURL = \"https://cdn.babylonjs.com/ktx2Transcoders/1/uastc_rgba8_unorm_v2.wasm\";\n/**\n * Binary data of the wasm module\n */\nLiteTranscoder_UASTC_RGBA_UNORM.WasmBinary = null;\nLiteTranscoder_UASTC_RGBA_UNORM.Name = \"UniversalTranscoder_UASTC_RGBA_UNORM\";\n//# sourceMappingURL=liteTranscoder_UASTC_RGBA_UNORM.js.map","// eslint-disable-next-line @typescript-eslint/naming-convention\nimport * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\nimport { LiteTranscoder } from \"./liteTranscoder\";\n/**\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class LiteTranscoder_UASTC_RGBA_SRGB extends LiteTranscoder {\n static CanTranscode(src, dst, isInGammaSpace) {\n return src === KTX2.SourceTextureFormat.UASTC4x4 && dst === KTX2.TranscodeTarget.RGBA32 && isInGammaSpace;\n }\n getName() {\n return LiteTranscoder_UASTC_RGBA_SRGB.Name;\n }\n initialize() {\n super.initialize();\n this._transcodeInPlace = false;\n this.setModulePath(LiteTranscoder_UASTC_RGBA_SRGB.WasmModuleURL, LiteTranscoder_UASTC_RGBA_SRGB.WasmBinary);\n }\n // eslint-disable-next-line @typescript-eslint/naming-convention\n async transcode(src, dst, level, width, height, uncompressedByteLength, ktx2Reader, imageDesc, encodedData) {\n const moduleWrapper = await this._loadModuleAsync();\n const transcoder = moduleWrapper.module;\n const [, uncompressedTextureView] = this._prepareTranscoding(width, height, uncompressedByteLength, encodedData, 4);\n return transcoder.decode(width, height) === 0 ? uncompressedTextureView.slice() : null;\n }\n}\n/**\n * URL to use when loading the wasm module for the transcoder (srgb)\n */\nLiteTranscoder_UASTC_RGBA_SRGB.WasmModuleURL = \"https://cdn.babylonjs.com/ktx2Transcoders/1/uastc_rgba8_srgb_v2.wasm\";\n/**\n * Binary data of the wasm module\n */\nLiteTranscoder_UASTC_RGBA_SRGB.WasmBinary = null;\nLiteTranscoder_UASTC_RGBA_SRGB.Name = \"UniversalTranscoder_UASTC_RGBA_SRGB\";\n//# sourceMappingURL=liteTranscoder_UASTC_RGBA_SRGB.js.map","// eslint-disable-next-line @typescript-eslint/naming-convention\nimport * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\nimport { LiteTranscoder } from \"./liteTranscoder\";\n/**\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class LiteTranscoder_UASTC_R8_UNORM extends LiteTranscoder {\n static CanTranscode(src, dst, isInGammaSpace) {\n return src === KTX2.SourceTextureFormat.UASTC4x4 && dst === KTX2.TranscodeTarget.R8;\n }\n getName() {\n return LiteTranscoder_UASTC_R8_UNORM.Name;\n }\n initialize() {\n super.initialize();\n this._transcodeInPlace = false;\n this.setModulePath(LiteTranscoder_UASTC_R8_UNORM.WasmModuleURL, LiteTranscoder_UASTC_R8_UNORM.WasmBinary);\n }\n // eslint-disable-next-line @typescript-eslint/naming-convention\n async transcode(src, dst, level, width, height, uncompressedByteLength, ktx2Reader, imageDesc, encodedData) {\n const moduleWrapper = await this._loadModuleAsync();\n const transcoder = moduleWrapper.module;\n const [, uncompressedTextureView] = this._prepareTranscoding(width, height, uncompressedByteLength, encodedData, 1);\n return transcoder.decode(width, height) === 0 ? uncompressedTextureView.slice() : null;\n }\n}\n/**\n * URL to use when loading the wasm module for the transcoder (unorm)\n */\nLiteTranscoder_UASTC_R8_UNORM.WasmModuleURL = \"https://cdn.babylonjs.com/ktx2Transcoders/1/uastc_r8_unorm.wasm\";\n/**\n * Binary data of the wasm module\n */\nLiteTranscoder_UASTC_R8_UNORM.WasmBinary = null;\nLiteTranscoder_UASTC_R8_UNORM.Name = \"UniversalTranscoder_UASTC_R8_UNORM\";\n//# sourceMappingURL=liteTranscoder_UASTC_R8_UNORM.js.map","// eslint-disable-next-line @typescript-eslint/naming-convention\nimport * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\nimport { LiteTranscoder } from \"./liteTranscoder\";\n/**\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport class LiteTranscoder_UASTC_RG8_UNORM extends LiteTranscoder {\n static CanTranscode(src, dst, isInGammaSpace) {\n return src === KTX2.SourceTextureFormat.UASTC4x4 && dst === KTX2.TranscodeTarget.RG8;\n }\n getName() {\n return LiteTranscoder_UASTC_RG8_UNORM.Name;\n }\n initialize() {\n super.initialize();\n this._transcodeInPlace = false;\n this.setModulePath(LiteTranscoder_UASTC_RG8_UNORM.WasmModuleURL, LiteTranscoder_UASTC_RG8_UNORM.WasmBinary);\n }\n // eslint-disable-next-line @typescript-eslint/naming-convention\n async transcode(src, dst, level, width, height, uncompressedByteLength, ktx2Reader, imageDesc, encodedData) {\n const moduleWrapper = await this._loadModuleAsync();\n const transcoder = moduleWrapper.module;\n const [, uncompressedTextureView] = this._prepareTranscoding(width, height, uncompressedByteLength, encodedData, 2);\n return transcoder.decode(width, height) === 0 ? uncompressedTextureView.slice() : null;\n }\n}\n/**\n * URL to use when loading the wasm module for the transcoder (unorm)\n */\nLiteTranscoder_UASTC_RG8_UNORM.WasmModuleURL = \"https://cdn.babylonjs.com/ktx2Transcoders/1/uastc_rg8_unorm.wasm\";\n/**\n * Binary data of the wasm module\n */\nLiteTranscoder_UASTC_RG8_UNORM.WasmBinary = null;\nLiteTranscoder_UASTC_RG8_UNORM.Name = \"UniversalTranscoder_UASTC_RG8_UNORM\";\n//# sourceMappingURL=liteTranscoder_UASTC_RG8_UNORM.js.map","// eslint-disable-next-line @typescript-eslint/naming-convention\nimport * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\nimport { Transcoder } from \"../transcoder\";\nimport { WASMMemoryManager } from \"../wasmMemoryManager\";\n/**\n * @internal\n */\nexport class MSCTranscoder extends Transcoder {\n getName() {\n return MSCTranscoder.Name;\n }\n async _getMSCBasisTranscoder() {\n if (this._mscBasisTranscoderPromise) {\n return await this._mscBasisTranscoderPromise;\n }\n this._mscBasisTranscoderPromise = (MSCTranscoder.WasmBinary ? Promise.resolve(MSCTranscoder.WasmBinary) : WASMMemoryManager.LoadWASM(Transcoder.GetWasmUrl(MSCTranscoder.WasmModuleURL)))\n // eslint-disable-next-line github/no-then\n .then(async (wasmBinary) => {\n if (MSCTranscoder.JSModule) {\n // this must be set on the global scope for the MSC transcoder to work. Mainly due to back-compat with the old way of loading the MSC transcoder.\n globalThis.MSC_TRANSCODER = MSCTranscoder.JSModule;\n }\n else {\n if (MSCTranscoder.UseFromWorkerThread) {\n importScripts(Transcoder.GetWasmUrl(MSCTranscoder.JSModuleURL));\n }\n // Worker Number = 0 and MSC_TRANSCODER has not been loaded yet.\n else if (typeof MSC_TRANSCODER === \"undefined\") {\n return await new Promise((resolve, reject) => {\n const head = document.getElementsByTagName(\"head\")[0];\n const script = document.createElement(\"script\");\n script.setAttribute(\"type\", \"text/javascript\");\n script.setAttribute(\"src\", Transcoder.GetWasmUrl(MSCTranscoder.JSModuleURL));\n script.onload = () => {\n // defensive\n if (typeof MSC_TRANSCODER === \"undefined\") {\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n reject(\"MSC_TRANSCODER script loaded but MSC_TRANSCODER is not defined.\");\n return;\n }\n // eslint-disable-next-line github/no-then\n MSC_TRANSCODER({ wasmBinary }).then((basisModule) => {\n basisModule.initTranscoders();\n this._mscBasisModule = basisModule;\n resolve();\n });\n };\n script.onerror = () => {\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n reject(\"Can not load MSC_TRANSCODER script.\");\n };\n head.appendChild(script);\n });\n }\n }\n return await new Promise((resolve) => {\n // eslint-disable-next-line github/no-then\n MSC_TRANSCODER({ wasmBinary }).then((basisModule) => {\n basisModule.initTranscoders();\n this._mscBasisModule = basisModule;\n resolve();\n });\n });\n });\n return await this._mscBasisTranscoderPromise;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n static CanTranscode(src, dst, isInGammaSpace) {\n return true;\n }\n // eslint-disable-next-line @typescript-eslint/naming-convention\n async transcode(src, dst, level, width, height, uncompressedByteLength, ktx2Reader, imageDesc, encodedData) {\n const isVideo = false;\n // eslint-disable-next-line github/no-then\n return await this._getMSCBasisTranscoder().then(() => {\n const basisModule = this._mscBasisModule;\n let transcoder;\n let imageInfo;\n let result;\n let textureData = null;\n try {\n transcoder = src === KTX2.SourceTextureFormat.UASTC4x4 ? new basisModule.UastcImageTranscoder() : new basisModule.BasisLzEtc1sImageTranscoder();\n const texFormat = src === KTX2.SourceTextureFormat.UASTC4x4 ? basisModule.TextureFormat.UASTC4x4 : basisModule.TextureFormat.ETC1S;\n imageInfo = new basisModule.ImageInfo(texFormat, width, height, level);\n const targetFormat = basisModule.TranscodeTarget[KTX2.TranscodeTarget[dst]]; // works because the labels of the sourceTextureFormat enum are the same as the property names used in TranscodeTarget!\n if (!basisModule.isFormatSupported(targetFormat, texFormat)) {\n throw new Error(`MSCTranscoder: Transcoding from \"${KTX2.SourceTextureFormat[src]}\" to \"${KTX2.TranscodeTarget[dst]}\" not supported by current transcoder build.`);\n }\n if (src === KTX2.SourceTextureFormat.ETC1S) {\n const sgd = ktx2Reader.supercompressionGlobalData;\n transcoder.decodePalettes(sgd.endpointCount, sgd.endpointsData, sgd.selectorCount, sgd.selectorsData);\n transcoder.decodeTables(sgd.tablesData);\n imageInfo.flags = imageDesc.imageFlags;\n imageInfo.rgbByteOffset = 0;\n imageInfo.rgbByteLength = imageDesc.rgbSliceByteLength;\n imageInfo.alphaByteOffset = imageDesc.alphaSliceByteOffset > 0 ? imageDesc.rgbSliceByteLength : 0;\n imageInfo.alphaByteLength = imageDesc.alphaSliceByteLength;\n result = transcoder.transcodeImage(targetFormat, encodedData, imageInfo, 0, isVideo);\n }\n else {\n imageInfo.flags = 0;\n imageInfo.rgbByteOffset = 0;\n imageInfo.rgbByteLength = uncompressedByteLength;\n imageInfo.alphaByteOffset = 0;\n imageInfo.alphaByteLength = 0;\n result = transcoder.transcodeImage(targetFormat, encodedData, imageInfo, 0, ktx2Reader.hasAlpha, isVideo);\n }\n }\n finally {\n if (transcoder) {\n transcoder.delete();\n }\n if (imageInfo) {\n imageInfo.delete();\n }\n if (result && result.transcodedImage) {\n textureData = result.transcodedImage.get_typed_memory_view().slice();\n result.transcodedImage.delete();\n }\n }\n return textureData;\n });\n }\n}\n/**\n * URL to use when loading the MSC transcoder\n */\nMSCTranscoder.JSModuleURL = \"https://cdn.babylonjs.com/ktx2Transcoders/1/msc_basis_transcoder.js\";\n/**\n * URL to use when loading the wasm module for the transcoder\n */\nMSCTranscoder.WasmModuleURL = \"https://cdn.babylonjs.com/ktx2Transcoders/1/msc_basis_transcoder.wasm\";\n/**\n * Binary data of the wasm module\n */\nMSCTranscoder.WasmBinary = null;\n/**\n * MSC transcoder module, if provided externally\n */\nMSCTranscoder.JSModule = null;\nMSCTranscoder.UseFromWorkerThread = true;\nMSCTranscoder.Name = \"MSCTranscoder\";\n//# sourceMappingURL=mscTranscoder.js.map","/* eslint-disable @typescript-eslint/naming-convention */\nimport { Transcoder } from \"./transcoder\";\nlet init;\nlet instance;\nlet heap;\nconst IMPORT_OBJECT = {\n env: {\n emscripten_notify_memory_growth: function () {\n heap = new Uint8Array(instance.exports.memory.buffer);\n },\n },\n};\n/**\n * ZSTD (Zstandard) decoder.\n */\nexport class ZSTDDecoder {\n async init() {\n if (init) {\n return await init;\n }\n if (typeof fetch !== \"undefined\") {\n // Web.\n init = fetch(Transcoder.GetWasmUrl(ZSTDDecoder.WasmModuleURL))\n // eslint-disable-next-line github/no-then\n .then(async (response) => {\n if (response.ok) {\n return await response.arrayBuffer();\n }\n throw new Error(`Could not fetch the wasm component for the Zstandard decompression lib: ${response.status} - ${response.statusText}`);\n })\n // eslint-disable-next-line github/no-then\n .then(async (arrayBuffer) => await WebAssembly.instantiate(arrayBuffer, IMPORT_OBJECT))\n // eslint-disable-next-line github/no-then\n .then(this._init);\n }\n else {\n // Node.js.\n // eslint-disable-next-line github/no-then\n init = WebAssembly.instantiateStreaming(fetch(ZSTDDecoder.WasmModuleURL), IMPORT_OBJECT).then(this._init);\n }\n return await init;\n }\n _init(result) {\n instance = result.instance;\n IMPORT_OBJECT.env.emscripten_notify_memory_growth(); // initialize heap.\n }\n decode(array, uncompressedSize = 0) {\n if (!instance) {\n throw new Error(`ZSTDDecoder: Await .init() before decoding.`);\n }\n // Write compressed data into WASM memory.\n const compressedSize = array.byteLength;\n const compressedPtr = instance.exports.malloc(compressedSize);\n heap.set(array, compressedPtr);\n // Decompress into WASM memory.\n uncompressedSize = uncompressedSize || Number(instance.exports.ZSTD_findDecompressedSize(compressedPtr, compressedSize));\n const uncompressedPtr = instance.exports.malloc(uncompressedSize);\n const actualSize = instance.exports.ZSTD_decompress(uncompressedPtr, uncompressedSize, compressedPtr, compressedSize);\n // Read decompressed data and free WASM memory.\n const dec = heap.slice(uncompressedPtr, uncompressedPtr + actualSize);\n instance.exports.free(compressedPtr);\n instance.exports.free(uncompressedPtr);\n return dec;\n }\n}\nZSTDDecoder.WasmModuleURL = \"https://cdn.babylonjs.com/zstddec.wasm\";\n/**\n * BSD License\n *\n * For Zstandard software\n *\n * Copyright (c) 2016-present, Yann Collet, Facebook, Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * * Neither the name Facebook nor the names of its contributors may be used to\n * endorse or promote products derived from this software without specific\n * prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n//# sourceMappingURL=zstddec.js.map","/* eslint-disable @typescript-eslint/naming-convention */\nimport * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\nconst DecisionTree = {\n ETC1S: {\n option: \"forceRGBA\",\n yes: {\n transcodeFormat: KTX2.TranscodeTarget.RGBA32,\n engineFormat: 32856 /* KTX2.EngineFormat.RGBA8Format */,\n roundToMultiple4: false,\n },\n no: {\n cap: \"etc2\",\n yes: {\n alpha: true,\n yes: {\n transcodeFormat: KTX2.TranscodeTarget.ETC2_RGBA,\n engineFormat: 37496 /* KTX2.EngineFormat.COMPRESSED_RGBA8_ETC2_EAC */,\n },\n no: {\n transcodeFormat: KTX2.TranscodeTarget.ETC1_RGB,\n engineFormat: 37492 /* KTX2.EngineFormat.COMPRESSED_RGB8_ETC2 */,\n },\n },\n no: {\n cap: \"etc1\",\n alpha: false,\n yes: {\n transcodeFormat: KTX2.TranscodeTarget.ETC1_RGB,\n engineFormat: 36196 /* KTX2.EngineFormat.COMPRESSED_RGB_ETC1_WEBGL */,\n },\n no: {\n cap: \"bptc\",\n yes: {\n transcodeFormat: KTX2.TranscodeTarget.BC7_RGBA,\n engineFormat: 36492 /* KTX2.EngineFormat.COMPRESSED_RGBA_BPTC_UNORM_EXT */,\n },\n no: {\n cap: \"s3tc\",\n yes: {\n alpha: true,\n yes: {\n transcodeFormat: KTX2.TranscodeTarget.BC3_RGBA,\n engineFormat: 33779 /* KTX2.EngineFormat.COMPRESSED_RGBA_S3TC_DXT5_EXT */,\n },\n no: {\n transcodeFormat: KTX2.TranscodeTarget.BC1_RGB,\n engineFormat: 33776 /* KTX2.EngineFormat.COMPRESSED_RGB_S3TC_DXT1_EXT */,\n },\n },\n no: {\n cap: \"pvrtc\",\n needsPowerOfTwo: true,\n yes: {\n alpha: true,\n yes: {\n transcodeFormat: KTX2.TranscodeTarget.PVRTC1_4_RGBA,\n engineFormat: 35842 /* KTX2.EngineFormat.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG */,\n },\n no: {\n transcodeFormat: KTX2.TranscodeTarget.PVRTC1_4_RGB,\n engineFormat: 35840 /* KTX2.EngineFormat.COMPRESSED_RGB_PVRTC_4BPPV1_IMG */,\n },\n },\n no: {\n transcodeFormat: KTX2.TranscodeTarget.RGBA32,\n engineFormat: 32856 /* KTX2.EngineFormat.RGBA8Format */,\n roundToMultiple4: false,\n },\n },\n },\n },\n },\n },\n },\n UASTC: {\n option: \"forceRGBA\",\n yes: {\n transcodeFormat: KTX2.TranscodeTarget.RGBA32,\n engineFormat: 32856 /* KTX2.EngineFormat.RGBA8Format */,\n roundToMultiple4: false,\n },\n no: {\n option: \"forceR8\",\n yes: {\n transcodeFormat: KTX2.TranscodeTarget.R8,\n engineFormat: 33321 /* KTX2.EngineFormat.R8Format */,\n roundToMultiple4: false,\n },\n no: {\n option: \"forceRG8\",\n yes: {\n transcodeFormat: KTX2.TranscodeTarget.RG8,\n engineFormat: 33323 /* KTX2.EngineFormat.RG8Format */,\n roundToMultiple4: false,\n },\n no: {\n cap: \"astc\",\n yes: {\n transcodeFormat: KTX2.TranscodeTarget.ASTC_4X4_RGBA,\n engineFormat: 37808 /* KTX2.EngineFormat.COMPRESSED_RGBA_ASTC_4X4_KHR */,\n },\n no: {\n cap: \"bptc\",\n yes: {\n transcodeFormat: KTX2.TranscodeTarget.BC7_RGBA,\n engineFormat: 36492 /* KTX2.EngineFormat.COMPRESSED_RGBA_BPTC_UNORM_EXT */,\n },\n no: {\n option: \"useRGBAIfASTCBC7NotAvailableWhenUASTC\",\n yes: {\n transcodeFormat: KTX2.TranscodeTarget.RGBA32,\n engineFormat: 32856 /* KTX2.EngineFormat.RGBA8Format */,\n roundToMultiple4: false,\n },\n no: {\n cap: \"etc2\",\n yes: {\n alpha: true,\n yes: {\n transcodeFormat: KTX2.TranscodeTarget.ETC2_RGBA,\n engineFormat: 37496 /* KTX2.EngineFormat.COMPRESSED_RGBA8_ETC2_EAC */,\n },\n no: {\n transcodeFormat: KTX2.TranscodeTarget.ETC1_RGB,\n engineFormat: 37492 /* KTX2.EngineFormat.COMPRESSED_RGB8_ETC2 */,\n },\n },\n no: {\n cap: \"etc1\",\n yes: {\n transcodeFormat: KTX2.TranscodeTarget.ETC1_RGB,\n engineFormat: 36196 /* KTX2.EngineFormat.COMPRESSED_RGB_ETC1_WEBGL */,\n },\n no: {\n cap: \"s3tc\",\n yes: {\n alpha: true,\n yes: {\n transcodeFormat: KTX2.TranscodeTarget.BC3_RGBA,\n engineFormat: 33779 /* KTX2.EngineFormat.COMPRESSED_RGBA_S3TC_DXT5_EXT */,\n },\n no: {\n transcodeFormat: KTX2.TranscodeTarget.BC1_RGB,\n engineFormat: 33776 /* KTX2.EngineFormat.COMPRESSED_RGB_S3TC_DXT1_EXT */,\n },\n },\n no: {\n cap: \"pvrtc\",\n needsPowerOfTwo: true,\n yes: {\n alpha: true,\n yes: {\n transcodeFormat: KTX2.TranscodeTarget.PVRTC1_4_RGBA,\n engineFormat: 35842 /* KTX2.EngineFormat.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG */,\n },\n no: {\n transcodeFormat: KTX2.TranscodeTarget.PVRTC1_4_RGB,\n engineFormat: 35840 /* KTX2.EngineFormat.COMPRESSED_RGB_PVRTC_4BPPV1_IMG */,\n },\n },\n no: {\n transcodeFormat: KTX2.TranscodeTarget.RGBA32,\n engineFormat: 32856 /* KTX2.EngineFormat.RGBA8Format */,\n roundToMultiple4: false,\n },\n },\n },\n },\n },\n },\n },\n },\n },\n },\n },\n};\nexport class TranscodeDecisionTree {\n static _IsLeafNode(node) {\n return node.engineFormat !== undefined;\n }\n get transcodeFormat() {\n return this._transcodeFormat;\n }\n get engineFormat() {\n return this._engineFormat;\n }\n get roundToMultiple4() {\n return this._roundToMultiple4;\n }\n constructor(textureFormat, hasAlpha, isPowerOfTwo, caps, options) {\n this._textureFormat = textureFormat;\n this._hasAlpha = hasAlpha;\n this._isPowerOfTwo = isPowerOfTwo;\n this._caps = caps;\n this._options = options ?? {};\n this.parseTree(DecisionTree);\n }\n parseTree(tree) {\n const node = this._textureFormat === KTX2.SourceTextureFormat.UASTC4x4 ? tree.UASTC : tree.ETC1S;\n if (node) {\n this._parseNode(node);\n }\n return node !== undefined;\n }\n _parseNode(node) {\n if (!node) {\n return;\n }\n if (TranscodeDecisionTree._IsLeafNode(node)) {\n this._transcodeFormat = node.transcodeFormat;\n this._engineFormat = node.engineFormat;\n this._roundToMultiple4 = node.roundToMultiple4 ?? true;\n }\n else {\n let condition = true;\n if (node.cap !== undefined) {\n condition = condition && !!this._caps[node.cap];\n }\n if (node.option !== undefined) {\n condition = condition && !!this._options[node.option];\n }\n if (node.alpha !== undefined) {\n condition = condition && this._hasAlpha === node.alpha;\n }\n if (node.needsPowerOfTwo !== undefined) {\n condition = condition && this._isPowerOfTwo === node.needsPowerOfTwo;\n }\n if (node.transcodeFormat !== undefined) {\n if (Array.isArray(node.transcodeFormat)) {\n condition = condition && node.transcodeFormat.indexOf(this._transcodeFormat) !== -1;\n }\n else {\n condition = condition && node.transcodeFormat === this._transcodeFormat;\n }\n }\n this._parseNode(condition ? node.yes : node.no);\n }\n }\n}\n//# sourceMappingURL=transcodeDecisionTree.js.map","/**\n * Resources used for the implementation:\n * - 3js KTX2 loader: https://github.com/mrdoob/three.js/blob/dfb5c23ce126ec845e4aa240599915fef5375797/examples/jsm/loaders/KTX2Loader.js\n * - Universal Texture Transcoders: https://github.com/KhronosGroup/Universal-Texture-Transcoders\n * - KTX2 specification: http://github.khronos.org/KTX-Specification/\n * - KTX2 binaries to convert files: https://github.com/KhronosGroup/KTX-Software/releases\n * - KTX specification: https://www.khronos.org/registry/DataFormat/specs/1.3/dataformat.1.3.html\n * - KTX-Software: https://github.com/KhronosGroup/KTX-Software\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nimport * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\nimport { KTX2FileReader, SupercompressionScheme } from \"./ktx2FileReader\";\nimport { TranscoderManager } from \"./transcoderManager\";\nimport { LiteTranscoder_UASTC_ASTC } from \"./Transcoders/liteTranscoder_UASTC_ASTC\";\nimport { LiteTranscoder_UASTC_BC7 } from \"./Transcoders/liteTranscoder_UASTC_BC7\";\nimport { LiteTranscoder_UASTC_RGBA_UNORM } from \"./Transcoders/liteTranscoder_UASTC_RGBA_UNORM\";\nimport { LiteTranscoder_UASTC_RGBA_SRGB } from \"./Transcoders/liteTranscoder_UASTC_RGBA_SRGB\";\nimport { LiteTranscoder_UASTC_R8_UNORM } from \"./Transcoders/liteTranscoder_UASTC_R8_UNORM\";\nimport { LiteTranscoder_UASTC_RG8_UNORM } from \"./Transcoders/liteTranscoder_UASTC_RG8_UNORM\";\nimport { MSCTranscoder } from \"./Transcoders/mscTranscoder\";\nimport { ZSTDDecoder } from \"./zstddec\";\nimport { TranscodeDecisionTree } from \"./transcodeDecisionTree\";\nconst IsPowerOfTwo = (value) => {\n return (value & (value - 1)) === 0 && value !== 0;\n};\n/**\n * Class for decoding KTX2 files\n *\n */\nexport class KTX2Decoder {\n constructor() {\n this._transcoderMgr = new TranscoderManager();\n }\n // eslint-disable-next-line @typescript-eslint/naming-convention\n async decode(data, caps, options) {\n const finalOptions = { ...options, ...KTX2Decoder.DefaultDecoderOptions };\n const kfr = new KTX2FileReader(data);\n if (!kfr.isValid()) {\n throw new Error(\"Invalid KT2 file: wrong signature\");\n }\n kfr.parse();\n if (kfr.needZSTDDecoder) {\n if (!this._zstdDecoder) {\n this._zstdDecoder = new ZSTDDecoder();\n }\n await this._zstdDecoder.init();\n return await this._decodeDataAsync(kfr, caps, finalOptions);\n }\n return await this._decodeDataAsync(kfr, caps, finalOptions);\n }\n async _decodeDataAsync(kfr, caps, options) {\n const width = kfr.header.pixelWidth;\n const height = kfr.header.pixelHeight;\n const srcTexFormat = kfr.textureFormat;\n const decisionTree = new TranscodeDecisionTree(srcTexFormat, kfr.hasAlpha, IsPowerOfTwo(width) && IsPowerOfTwo(height), caps, options);\n if (options?.transcodeFormatDecisionTree) {\n decisionTree.parseTree(options?.transcodeFormatDecisionTree);\n }\n const transcodeFormat = decisionTree.transcodeFormat;\n const engineFormat = decisionTree.engineFormat;\n const roundToMultiple4 = decisionTree.roundToMultiple4;\n const transcoder = this._transcoderMgr.findTranscoder(srcTexFormat, transcodeFormat, kfr.isInGammaSpace, options?.bypassTranscoders);\n if (transcoder === null) {\n throw new Error(`no transcoder found to transcode source texture format \"${KTX2.SourceTextureFormat[srcTexFormat]}\" to format \"${KTX2.TranscodeTarget[transcodeFormat]}\"`);\n }\n const mipmaps = [];\n const dataPromises = [];\n const decodedData = {\n width: 0,\n height: 0,\n transcodedFormat: engineFormat,\n mipmaps,\n isInGammaSpace: kfr.isInGammaSpace,\n hasAlpha: kfr.hasAlpha,\n transcoderName: transcoder.getName(),\n };\n let firstImageDescIndex = 0;\n for (let level = 0; level < kfr.header.levelCount; level++) {\n if (level > 0) {\n firstImageDescIndex += Math.max(kfr.header.layerCount, 1) * kfr.header.faceCount * Math.max(kfr.header.pixelDepth >> (level - 1), 1);\n }\n const levelWidth = Math.floor(width / (1 << level)) || 1;\n const levelHeight = Math.floor(height / (1 << level)) || 1;\n const numImagesInLevel = kfr.header.faceCount; // note that cubemap are not supported yet (see KTX2FileReader), so faceCount == 1\n const levelImageByteLength = ((levelWidth + 3) >> 2) * ((levelHeight + 3) >> 2) * kfr.dfdBlock.bytesPlane[0];\n const levelUncompressedByteLength = kfr.levels[level].uncompressedByteLength;\n let levelDataBuffer = kfr.data.buffer;\n let levelDataOffset = kfr.levels[level].byteOffset + kfr.data.byteOffset;\n let imageOffsetInLevel = 0;\n if (kfr.header.supercompressionScheme === SupercompressionScheme.ZStandard) {\n levelDataBuffer = this._zstdDecoder.decode(new Uint8Array(levelDataBuffer, levelDataOffset, kfr.levels[level].byteLength), levelUncompressedByteLength);\n levelDataOffset = 0;\n }\n if (level === 0) {\n decodedData.width = roundToMultiple4 ? (levelWidth + 3) & ~3 : levelWidth;\n decodedData.height = roundToMultiple4 ? (levelHeight + 3) & ~3 : levelHeight;\n }\n for (let imageIndex = 0; imageIndex < numImagesInLevel; imageIndex++) {\n let encodedData;\n let imageDesc = null;\n if (kfr.header.supercompressionScheme === SupercompressionScheme.BasisLZ) {\n imageDesc = kfr.supercompressionGlobalData.imageDescs[firstImageDescIndex + imageIndex];\n encodedData = new Uint8Array(levelDataBuffer, levelDataOffset + imageDesc.rgbSliceByteOffset, imageDesc.rgbSliceByteLength + imageDesc.alphaSliceByteLength);\n }\n else {\n encodedData = new Uint8Array(levelDataBuffer, levelDataOffset + imageOffsetInLevel, levelImageByteLength);\n imageOffsetInLevel += levelImageByteLength;\n }\n const mipmap = {\n data: null,\n width: levelWidth,\n height: levelHeight,\n };\n const transcodedData = transcoder\n .transcode(srcTexFormat, transcodeFormat, level, levelWidth, levelHeight, levelUncompressedByteLength, kfr, imageDesc, encodedData)\n // eslint-disable-next-line github/no-then\n .then((data) => {\n mipmap.data = data;\n return data;\n })\n // eslint-disable-next-line github/no-then\n .catch((reason) => {\n decodedData.errors = decodedData.errors ?? \"\";\n decodedData.errors += reason + \"\\n\" + reason.stack + \"\\n\";\n return null;\n });\n dataPromises.push(transcodedData);\n mipmaps.push(mipmap);\n }\n }\n await Promise.all(dataPromises);\n return decodedData;\n }\n}\nKTX2Decoder.DefaultDecoderOptions = {};\n// Put in the order you want the transcoders to be used in priority\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_ASTC);\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_BC7);\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_RGBA_UNORM);\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_RGBA_SRGB);\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_R8_UNORM);\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_RG8_UNORM);\nTranscoderManager.RegisterTranscoder(MSCTranscoder); // catch all transcoder - will throw an error if the format can't be transcoded\n//# sourceMappingURL=ktx2Decoder.js.map"],"names":["SourceTextureFormat","TranscodeTarget","EngineFormat","SupercompressionScheme","DFDModel","DFDChannel_ETC1S","DFDChannel_UASTC","DFDTransferFunction","DataReader","byteOffset","this","_dataByteOffset","constructor","buffer","byteLength","_dataView","DataView","readUint8","value","getUint8","readInt8","getInt8","readUint16","getUint16","readInt16","getInt16","readUint32","getUint32","readInt32","getInt32","readUint64","combined","readUint8Array","Uint8Array","skipBytes","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","uncompressedByteLength","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","KTX2.SourceTextureFormat","UASTC4x4","ETC1S","hasAlpha","needZSTDDecoder","ZStandard","isInGammaSpace","identifier","WASMMemoryManager","LoadWASM","path","LoadBinariesFromCurrentThread","Promise","resolve","reject","fetch","then","async","response","ok","arrayBuffer","status","statusText","wasmBinary","catch","reason","id","_RequestId","wasmLoadedHandler","msg","action","self","removeEventListener","addEventListener","postMessage","initialMemoryPages","InitialMemoryPages","_numPages","_memory","WebAssembly","Memory","initial","_memoryViewByteLength","_memoryViewOffset","_memoryView","wasmMemory","getMemoryView","numPages","offset","grow","TranscoderManager","RegisterTranscoder","transcoder","_Transcoders","findTranscoder","src","dst","bypass","key","KTX2.TranscodeTarget","length","CanTranscode","indexOf","Name","_getExistingTranscoder","initialize","needMemoryManager","_wasmMemoryManager","setMemoryManager","_TranscoderInstances","transcoderName","transcoders","t","getName","Transcoder","GetWasmUrl","wasmUrl","startsWith","_DefaultCdnUrl","WasmBaseUrl","baseUrl","endsWith","slice","replace","CdnVersion","versionedBase","memoryMgr","transcode","level","width","height","ktx2Reader","imageDesc","encodedData","LiteTranscoder","super","arguments","_wasmBinary","_instantiateWebAssemblyAsync","instantiate","env","memory","_memoryManager","moduleWrapper","module","instance","exports","_loadModuleAsync","_modulePromise","_modulePath","memoryManager","setModulePath","modulePath","_transcodeInPlace","textureView","uncompressedTextureView","nBlocks","_prepareTranscoding","uncompressedNumComponents","undefined","texMemoryPages","set","LiteTranscoder_UASTC_ASTC","ASTC_4X4_RGBA","WasmModuleURL","WasmBinary","LiteTranscoder_UASTC_BC7","BC7_RGBA","LiteTranscoder_UASTC_RGBA_UNORM","RGBA32","decode","LiteTranscoder_UASTC_RGBA_SRGB","LiteTranscoder_UASTC_R8_UNORM","R8","LiteTranscoder_UASTC_RG8_UNORM","RG8","MSCTranscoder","_getMSCBasisTranscoder","_mscBasisTranscoderPromise","JSModule","globalThis","MSC_TRANSCODER","UseFromWorkerThread","importScripts","JSModuleURL","head","document","getElementsByTagName","script","createElement","setAttribute","onload","basisModule","initTranscoders","_mscBasisModule","onerror","appendChild","isVideo","imageInfo","result","textureData","UastcImageTranscoder","BasisLzEtc1sImageTranscoder","texFormat","TextureFormat","ImageInfo","targetFormat","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","array","uncompressedSize","compressedSize","compressedPtr","malloc","Number","ZSTD_findDecompressedSize","uncompressedPtr","actualSize","ZSTD_decompress","dec","free","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","_IsLeafNode","node","_transcodeFormat","_engineFormat","_roundToMultiple4","isPowerOfTwo","caps","options","_textureFormat","_hasAlpha","_isPowerOfTwo","_caps","_options","parseTree","tree","_parseNode","condition","isArray","IsPowerOfTwo","KTX2Decoder","_transcoderMgr","finalOptions","DefaultDecoderOptions","kfr","_zstdDecoder","_decodeDataAsync","srcTexFormat","decisionTree","transcodeFormatDecisionTree","bypassTranscoders","mipmaps","dataPromises","decodedData","transcodedFormat","firstImageDescIndex","levelWidth","floor","levelHeight","numImagesInLevel","levelImageByteLength","levelUncompressedByteLength","levelDataBuffer","levelDataOffset","imageOffsetInLevel","imageIndex","BasisLZ","mipmap","transcodedData","errors","stack","all"],"mappings":"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"}