{"ast":null,"code":"import { AutoReleaseWorkerPool } from \"./workerPool.js\";\nimport { Tools } from \"./tools.js\";\nimport { TranscodeTarget } from \"../Materials/Textures/ktx2decoderTypes.js\";\nimport { applyConfig, initializeWebWorker, workerFunction } from \"./khronosTextureContainer2Worker.js\";\n/**\n * Class that defines the default KTX2 decoder options.\n *\n * This class is useful for providing options to the KTX2 decoder to control how the source data is transcoded.\n */\nexport class DefaultKTX2DecoderOptions {\n constructor() {\n this._isDirty = true;\n this._useRGBAIfOnlyBC1BC3AvailableWhenUASTC = true;\n this._ktx2DecoderOptions = {};\n }\n /**\n * Gets the dirty flag\n */\n get isDirty() {\n return this._isDirty;\n }\n /**\n * force a (uncompressed) RGBA transcoded format if transcoding a UASTC source format and ASTC + BC7 are not available as a compressed transcoded format\n */\n get useRGBAIfASTCBC7NotAvailableWhenUASTC() {\n return this._useRGBAIfASTCBC7NotAvailableWhenUASTC;\n }\n set useRGBAIfASTCBC7NotAvailableWhenUASTC(value) {\n if (this._useRGBAIfASTCBC7NotAvailableWhenUASTC === value) {\n return;\n }\n this._useRGBAIfASTCBC7NotAvailableWhenUASTC = value;\n this._isDirty = true;\n }\n /**\n * force a (uncompressed) RGBA transcoded format if transcoding a UASTC source format and only BC1 or BC3 are available as a compressed transcoded format.\n * This property is true by default to favor speed over memory, because currently transcoding from UASTC to BC1/3 is slow because the transcoder transcodes\n * to uncompressed and then recompresses the texture\n */\n get useRGBAIfOnlyBC1BC3AvailableWhenUASTC() {\n return this._useRGBAIfOnlyBC1BC3AvailableWhenUASTC;\n }\n set useRGBAIfOnlyBC1BC3AvailableWhenUASTC(value) {\n if (this._useRGBAIfOnlyBC1BC3AvailableWhenUASTC === value) {\n return;\n }\n this._useRGBAIfOnlyBC1BC3AvailableWhenUASTC = value;\n this._isDirty = true;\n }\n /**\n * force to always use (uncompressed) RGBA for transcoded format\n */\n get forceRGBA() {\n return this._forceRGBA;\n }\n set forceRGBA(value) {\n if (this._forceRGBA === value) {\n return;\n }\n this._forceRGBA = value;\n this._isDirty = true;\n }\n /**\n * force to always use (uncompressed) R8 for transcoded format\n */\n get forceR8() {\n return this._forceR8;\n }\n set forceR8(value) {\n if (this._forceR8 === value) {\n return;\n }\n this._forceR8 = value;\n this._isDirty = true;\n }\n /**\n * force to always use (uncompressed) RG8 for transcoded format\n */\n get forceRG8() {\n return this._forceRG8;\n }\n set forceRG8(value) {\n if (this._forceRG8 === value) {\n return;\n }\n this._forceRG8 = value;\n this._isDirty = true;\n }\n /**\n * list of transcoders to bypass when looking for a suitable transcoder. The available transcoders are:\n * UniversalTranscoder_UASTC_ASTC\n * UniversalTranscoder_UASTC_BC7\n * UniversalTranscoder_UASTC_RGBA_UNORM\n * UniversalTranscoder_UASTC_RGBA_SRGB\n * UniversalTranscoder_UASTC_R8_UNORM\n * UniversalTranscoder_UASTC_RG8_UNORM\n * MSCTranscoder\n */\n get bypassTranscoders() {\n return this._bypassTranscoders;\n }\n set bypassTranscoders(value) {\n if (this._bypassTranscoders === value) {\n return;\n }\n this._bypassTranscoders = value;\n this._isDirty = true;\n }\n /** @internal */\n _getKTX2DecoderOptions() {\n if (!this._isDirty) {\n return this._ktx2DecoderOptions;\n }\n this._isDirty = false;\n const options = {\n useRGBAIfASTCBC7NotAvailableWhenUASTC: this._useRGBAIfASTCBC7NotAvailableWhenUASTC,\n forceRGBA: this._forceRGBA,\n forceR8: this._forceR8,\n forceRG8: this._forceRG8,\n bypassTranscoders: this._bypassTranscoders\n };\n if (this.useRGBAIfOnlyBC1BC3AvailableWhenUASTC) {\n options.transcodeFormatDecisionTree = {\n UASTC: {\n transcodeFormat: [TranscodeTarget.BC1_RGB, TranscodeTarget.BC3_RGBA],\n yes: {\n transcodeFormat: TranscodeTarget.RGBA32,\n engineFormat: 32856 /* EngineFormat.RGBA8Format */,\n roundToMultiple4: false\n }\n }\n };\n }\n this._ktx2DecoderOptions = options;\n return options;\n }\n}\n/**\n * Class for loading KTX2 files\n */\nexport class KhronosTextureContainer2 {\n static GetDefaultNumWorkers() {\n if (typeof navigator !== \"object\" || !navigator.hardwareConcurrency) {\n return 1;\n }\n // Use 50% of the available logical processors but capped at 4.\n return Math.min(Math.floor(navigator.hardwareConcurrency * 0.5), 4);\n }\n static _Initialize(numWorkers) {\n if (KhronosTextureContainer2._WorkerPoolPromise || KhronosTextureContainer2._DecoderModulePromise) {\n return;\n }\n const urls = {\n jsDecoderModule: Tools.GetBabylonScriptURL(this.URLConfig.jsDecoderModule, true),\n wasmUASTCToASTC: Tools.GetBabylonScriptURL(this.URLConfig.wasmUASTCToASTC, true),\n wasmUASTCToBC7: Tools.GetBabylonScriptURL(this.URLConfig.wasmUASTCToBC7, true),\n wasmUASTCToRGBA_UNORM: Tools.GetBabylonScriptURL(this.URLConfig.wasmUASTCToRGBA_UNORM, true),\n wasmUASTCToRGBA_SRGB: Tools.GetBabylonScriptURL(this.URLConfig.wasmUASTCToRGBA_SRGB, true),\n wasmUASTCToR8_UNORM: Tools.GetBabylonScriptURL(this.URLConfig.wasmUASTCToR8_UNORM, true),\n wasmUASTCToRG8_UNORM: Tools.GetBabylonScriptURL(this.URLConfig.wasmUASTCToRG8_UNORM, true),\n jsMSCTranscoder: Tools.GetBabylonScriptURL(this.URLConfig.jsMSCTranscoder, true),\n wasmMSCTranscoder: Tools.GetBabylonScriptURL(this.URLConfig.wasmMSCTranscoder, true),\n wasmZSTDDecoder: Tools.GetBabylonScriptURL(this.URLConfig.wasmZSTDDecoder, true)\n };\n if (numWorkers && typeof Worker === \"function\" && typeof URL !== \"undefined\") {\n KhronosTextureContainer2._WorkerPoolPromise = new Promise(resolve => {\n const workerContent = `${applyConfig}(${workerFunction})()`;\n const workerBlobUrl = URL.createObjectURL(new Blob([workerContent], {\n type: \"application/javascript\"\n }));\n resolve(new AutoReleaseWorkerPool(numWorkers, () => initializeWebWorker(new Worker(workerBlobUrl), undefined, urls)));\n });\n } else {\n if (typeof KhronosTextureContainer2._KTX2DecoderModule === \"undefined\") {\n KhronosTextureContainer2._DecoderModulePromise = Tools.LoadBabylonScriptAsync(urls.jsDecoderModule).then(() => {\n KhronosTextureContainer2._KTX2DecoderModule = KTX2DECODER;\n KhronosTextureContainer2._KTX2DecoderModule.MSCTranscoder.UseFromWorkerThread = false;\n KhronosTextureContainer2._KTX2DecoderModule.WASMMemoryManager.LoadBinariesFromCurrentThread = true;\n applyConfig(urls, KhronosTextureContainer2._KTX2DecoderModule);\n return new KhronosTextureContainer2._KTX2DecoderModule.KTX2Decoder();\n });\n } else {\n KhronosTextureContainer2._KTX2DecoderModule.MSCTranscoder.UseFromWorkerThread = false;\n KhronosTextureContainer2._KTX2DecoderModule.WASMMemoryManager.LoadBinariesFromCurrentThread = true;\n KhronosTextureContainer2._DecoderModulePromise = Promise.resolve(new KhronosTextureContainer2._KTX2DecoderModule.KTX2Decoder());\n }\n }\n }\n /**\n * Constructor\n * @param engine The engine to use\n * @param numWorkersOrOptions The number of workers for async operations. Specify `0` to disable web workers and run synchronously in the current context.\n */\n constructor(engine, numWorkersOrOptions = KhronosTextureContainer2.DefaultNumWorkers) {\n this._engine = engine;\n const workerPoolOption = typeof numWorkersOrOptions === \"object\" && numWorkersOrOptions.workerPool || KhronosTextureContainer2.WorkerPool;\n if (workerPoolOption) {\n KhronosTextureContainer2._WorkerPoolPromise = Promise.resolve(workerPoolOption);\n } else {\n var _numWorkersOrOptions$2;\n // set the KTX2 decoder module\n if (typeof numWorkersOrOptions === \"object\") {\n var _numWorkersOrOptions$;\n KhronosTextureContainer2._KTX2DecoderModule = numWorkersOrOptions === null || numWorkersOrOptions === void 0 || (_numWorkersOrOptions$ = numWorkersOrOptions.binariesAndModulesContainer) === null || _numWorkersOrOptions$ === void 0 ? void 0 : _numWorkersOrOptions$.jsDecoderModule;\n } else if (typeof KTX2DECODER !== \"undefined\") {\n KhronosTextureContainer2._KTX2DecoderModule = KTX2DECODER;\n }\n const numberOfWorkers = typeof numWorkersOrOptions === \"number\" ? numWorkersOrOptions : (_numWorkersOrOptions$2 = numWorkersOrOptions.numWorkers) !== null && _numWorkersOrOptions$2 !== void 0 ? _numWorkersOrOptions$2 : KhronosTextureContainer2.DefaultNumWorkers;\n KhronosTextureContainer2._Initialize(numberOfWorkers);\n }\n }\n /**\n * @internal\n */\n _uploadAsync(data, internalTexture, options) {\n const caps = this._engine.getCaps();\n const compressedTexturesCaps = {\n astc: !!caps.astc,\n bptc: !!caps.bptc,\n s3tc: !!caps.s3tc,\n pvrtc: !!caps.pvrtc,\n etc2: !!caps.etc2,\n etc1: !!caps.etc1\n };\n if (KhronosTextureContainer2._WorkerPoolPromise) {\n return KhronosTextureContainer2._WorkerPoolPromise.then(workerPool => {\n return new Promise((resolve, reject) => {\n workerPool.push((worker, onComplete) => {\n const onError = error => {\n worker.removeEventListener(\"error\", onError);\n worker.removeEventListener(\"message\", onMessage);\n reject(error);\n onComplete();\n };\n const onMessage = message => {\n if (message.data.action === \"decoded\") {\n worker.removeEventListener(\"error\", onError);\n worker.removeEventListener(\"message\", onMessage);\n if (!message.data.success) {\n reject({\n message: message.data.msg\n });\n } else {\n try {\n this._createTexture(message.data.decodedData, internalTexture, options);\n resolve();\n } catch (err) {\n reject({\n message: err\n });\n }\n }\n onComplete();\n }\n };\n worker.addEventListener(\"error\", onError);\n worker.addEventListener(\"message\", onMessage);\n worker.postMessage({\n action: \"setDefaultDecoderOptions\",\n options: KhronosTextureContainer2.DefaultDecoderOptions._getKTX2DecoderOptions()\n });\n const dataCopy = new Uint8Array(data.byteLength);\n dataCopy.set(new Uint8Array(data.buffer, data.byteOffset, data.byteLength));\n worker.postMessage({\n action: \"decode\",\n data: dataCopy,\n caps: compressedTexturesCaps,\n options\n }, [dataCopy.buffer]);\n });\n });\n });\n } else if (KhronosTextureContainer2._DecoderModulePromise) {\n return KhronosTextureContainer2._DecoderModulePromise.then(decoder => {\n if (KhronosTextureContainer2.DefaultDecoderOptions.isDirty) {\n KhronosTextureContainer2._KTX2DecoderModule.KTX2Decoder.DefaultDecoderOptions = KhronosTextureContainer2.DefaultDecoderOptions._getKTX2DecoderOptions();\n }\n return new Promise((resolve, reject) => {\n decoder.decode(data, caps).then(data => {\n this._createTexture(data, internalTexture);\n resolve();\n }).catch(reason => {\n reject({\n message: reason\n });\n });\n });\n });\n }\n throw new Error(\"KTX2 decoder module is not available\");\n }\n _createTexture(data, internalTexture, options) {\n const oglTexture2D = 3553; // gl.TEXTURE_2D\n this._engine._bindTextureDirectly(oglTexture2D, internalTexture);\n if (options) {\n // return back some information about the decoded data\n options.transcodedFormat = data.transcodedFormat;\n options.isInGammaSpace = data.isInGammaSpace;\n options.hasAlpha = data.hasAlpha;\n options.transcoderName = data.transcoderName;\n }\n let isUncompressedFormat = true;\n switch (data.transcodedFormat) {\n case 0x8058 /* RGBA8 */:\n internalTexture.type = 0;\n internalTexture.format = 5;\n break;\n case 0x8229 /* R8 */:\n internalTexture.type = 0;\n internalTexture.format = 6;\n break;\n case 0x822b /* RG8 */:\n internalTexture.type = 0;\n internalTexture.format = 7;\n break;\n default:\n internalTexture.format = data.transcodedFormat;\n isUncompressedFormat = false;\n break;\n }\n internalTexture._gammaSpace = data.isInGammaSpace;\n internalTexture.generateMipMaps = data.mipmaps.length > 1;\n if (data.errors) {\n throw new Error(\"KTX2 container - could not transcode the data. \" + data.errors);\n }\n for (let t = 0; t < data.mipmaps.length; ++t) {\n const mipmap = data.mipmaps[t];\n if (!mipmap || !mipmap.data) {\n throw new Error(\"KTX2 container - could not transcode one of the image\");\n }\n if (isUncompressedFormat) {\n // uncompressed RGBA / R8 / RG8\n internalTexture.width = mipmap.width; // need to set width/height so that the call to _uploadDataToTextureDirectly uses the right dimensions\n internalTexture.height = mipmap.height;\n this._engine._uploadDataToTextureDirectly(internalTexture, mipmap.data, 0, t, undefined, true);\n } else {\n this._engine._uploadCompressedDataToTextureDirectly(internalTexture, data.transcodedFormat, mipmap.width, mipmap.height, mipmap.data, 0, t);\n }\n }\n internalTexture._extension = \".ktx2\";\n internalTexture.width = data.mipmaps[0].width;\n internalTexture.height = data.mipmaps[0].height;\n internalTexture.isReady = true;\n this._engine._bindTextureDirectly(oglTexture2D, null);\n }\n /**\n * Checks if the given data starts with a KTX2 file identifier.\n * @param data the data to check\n * @returns true if the data is a KTX2 file or false otherwise\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 && identifier[1] === 0x4b && identifier[2] === 0x54 && identifier[3] === 0x58 && identifier[4] === 0x20 && identifier[5] === 0x32 && identifier[6] === 0x30 && identifier[7] === 0xbb && identifier[8] === 0x0d && identifier[9] === 0x0a && identifier[10] === 0x1a && identifier[11] === 0x0a) {\n return true;\n }\n }\n return false;\n }\n}\n/**\n * URLs to use when loading the KTX2 decoder module as well as its dependencies\n * If a url is null, the default url is used (pointing to https://preview.babylonjs.com)\n * Note that jsDecoderModule can't be null and that the other dependencies will only be loaded if necessary\n * Urls you can change:\n * URLConfig.jsDecoderModule\n * URLConfig.wasmUASTCToASTC\n * URLConfig.wasmUASTCToBC7\n * URLConfig.wasmUASTCToRGBA_UNORM\n * URLConfig.wasmUASTCToRGBA_SRGB\n * URLConfig.wasmUASTCToR8_UNORM\n * URLConfig.wasmUASTCToRG8_UNORM\n * URLConfig.jsMSCTranscoder\n * URLConfig.wasmMSCTranscoder\n * URLConfig.wasmZSTDDecoder\n * You can see their default values in this PG: https://playground.babylonjs.com/#EIJH8L#29\n */\nKhronosTextureContainer2.URLConfig = {\n jsDecoderModule: \"https://cdn.babylonjs.com/babylon.ktx2Decoder.js\",\n wasmUASTCToASTC: null,\n wasmUASTCToBC7: null,\n wasmUASTCToRGBA_UNORM: null,\n wasmUASTCToRGBA_SRGB: null,\n wasmUASTCToR8_UNORM: null,\n wasmUASTCToRG8_UNORM: null,\n jsMSCTranscoder: null,\n wasmMSCTranscoder: null,\n wasmZSTDDecoder: null\n};\n/**\n * Default number of workers used to handle data decoding\n */\nKhronosTextureContainer2.DefaultNumWorkers = KhronosTextureContainer2.GetDefaultNumWorkers();\n/**\n * Default configuration for the KTX2 decoder.\n * The options defined in this way have priority over those passed when creating a KTX2 texture with new Texture(...).\n */\nKhronosTextureContainer2.DefaultDecoderOptions = new DefaultKTX2DecoderOptions();","map":{"version":3,"names":["AutoReleaseWorkerPool","Tools","TranscodeTarget","applyConfig","initializeWebWorker","workerFunction","DefaultKTX2DecoderOptions","constructor","_isDirty","_useRGBAIfOnlyBC1BC3AvailableWhenUASTC","_ktx2DecoderOptions","isDirty","useRGBAIfASTCBC7NotAvailableWhenUASTC","_useRGBAIfASTCBC7NotAvailableWhenUASTC","value","useRGBAIfOnlyBC1BC3AvailableWhenUASTC","forceRGBA","_forceRGBA","forceR8","_forceR8","forceRG8","_forceRG8","bypassTranscoders","_bypassTranscoders","_getKTX2DecoderOptions","options","transcodeFormatDecisionTree","UASTC","transcodeFormat","BC1_RGB","BC3_RGBA","yes","RGBA32","engineFormat","roundToMultiple4","KhronosTextureContainer2","GetDefaultNumWorkers","navigator","hardwareConcurrency","Math","min","floor","_Initialize","numWorkers","_WorkerPoolPromise","_DecoderModulePromise","urls","jsDecoderModule","GetBabylonScriptURL","URLConfig","wasmUASTCToASTC","wasmUASTCToBC7","wasmUASTCToRGBA_UNORM","wasmUASTCToRGBA_SRGB","wasmUASTCToR8_UNORM","wasmUASTCToRG8_UNORM","jsMSCTranscoder","wasmMSCTranscoder","wasmZSTDDecoder","Worker","URL","Promise","resolve","workerContent","workerBlobUrl","createObjectURL","Blob","type","undefined","_KTX2DecoderModule","LoadBabylonScriptAsync","then","KTX2DECODER","MSCTranscoder","UseFromWorkerThread","WASMMemoryManager","LoadBinariesFromCurrentThread","KTX2Decoder","engine","numWorkersOrOptions","DefaultNumWorkers","_engine","workerPoolOption","workerPool","WorkerPool","_numWorkersOrOptions$2","_numWorkersOrOptions$","binariesAndModulesContainer","numberOfWorkers","_uploadAsync","data","internalTexture","caps","getCaps","compressedTexturesCaps","astc","bptc","s3tc","pvrtc","etc2","etc1","reject","push","worker","onComplete","onError","error","removeEventListener","onMessage","message","action","success","msg","_createTexture","decodedData","err","addEventListener","postMessage","DefaultDecoderOptions","dataCopy","Uint8Array","byteLength","set","buffer","byteOffset","decoder","decode","catch","reason","Error","oglTexture2D","_bindTextureDirectly","transcodedFormat","isInGammaSpace","hasAlpha","transcoderName","isUncompressedFormat","format","_gammaSpace","generateMipMaps","mipmaps","length","errors","t","mipmap","width","height","_uploadDataToTextureDirectly","_uploadCompressedDataToTextureDirectly","_extension","isReady","IsValid","identifier"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Misc/khronosTextureContainer2.js"],"sourcesContent":["\nimport { AutoReleaseWorkerPool } from \"./workerPool.js\";\nimport { Tools } from \"./tools.js\";\nimport { TranscodeTarget } from \"../Materials/Textures/ktx2decoderTypes.js\";\nimport { applyConfig, initializeWebWorker, workerFunction } from \"./khronosTextureContainer2Worker.js\";\n/**\n * Class that defines the default KTX2 decoder options.\n *\n * This class is useful for providing options to the KTX2 decoder to control how the source data is transcoded.\n */\nexport class DefaultKTX2DecoderOptions {\n constructor() {\n this._isDirty = true;\n this._useRGBAIfOnlyBC1BC3AvailableWhenUASTC = true;\n this._ktx2DecoderOptions = {};\n }\n /**\n * Gets the dirty flag\n */\n get isDirty() {\n return this._isDirty;\n }\n /**\n * force a (uncompressed) RGBA transcoded format if transcoding a UASTC source format and ASTC + BC7 are not available as a compressed transcoded format\n */\n get useRGBAIfASTCBC7NotAvailableWhenUASTC() {\n return this._useRGBAIfASTCBC7NotAvailableWhenUASTC;\n }\n set useRGBAIfASTCBC7NotAvailableWhenUASTC(value) {\n if (this._useRGBAIfASTCBC7NotAvailableWhenUASTC === value) {\n return;\n }\n this._useRGBAIfASTCBC7NotAvailableWhenUASTC = value;\n this._isDirty = true;\n }\n /**\n * force a (uncompressed) RGBA transcoded format if transcoding a UASTC source format and only BC1 or BC3 are available as a compressed transcoded format.\n * This property is true by default to favor speed over memory, because currently transcoding from UASTC to BC1/3 is slow because the transcoder transcodes\n * to uncompressed and then recompresses the texture\n */\n get useRGBAIfOnlyBC1BC3AvailableWhenUASTC() {\n return this._useRGBAIfOnlyBC1BC3AvailableWhenUASTC;\n }\n set useRGBAIfOnlyBC1BC3AvailableWhenUASTC(value) {\n if (this._useRGBAIfOnlyBC1BC3AvailableWhenUASTC === value) {\n return;\n }\n this._useRGBAIfOnlyBC1BC3AvailableWhenUASTC = value;\n this._isDirty = true;\n }\n /**\n * force to always use (uncompressed) RGBA for transcoded format\n */\n get forceRGBA() {\n return this._forceRGBA;\n }\n set forceRGBA(value) {\n if (this._forceRGBA === value) {\n return;\n }\n this._forceRGBA = value;\n this._isDirty = true;\n }\n /**\n * force to always use (uncompressed) R8 for transcoded format\n */\n get forceR8() {\n return this._forceR8;\n }\n set forceR8(value) {\n if (this._forceR8 === value) {\n return;\n }\n this._forceR8 = value;\n this._isDirty = true;\n }\n /**\n * force to always use (uncompressed) RG8 for transcoded format\n */\n get forceRG8() {\n return this._forceRG8;\n }\n set forceRG8(value) {\n if (this._forceRG8 === value) {\n return;\n }\n this._forceRG8 = value;\n this._isDirty = true;\n }\n /**\n * list of transcoders to bypass when looking for a suitable transcoder. The available transcoders are:\n * UniversalTranscoder_UASTC_ASTC\n * UniversalTranscoder_UASTC_BC7\n * UniversalTranscoder_UASTC_RGBA_UNORM\n * UniversalTranscoder_UASTC_RGBA_SRGB\n * UniversalTranscoder_UASTC_R8_UNORM\n * UniversalTranscoder_UASTC_RG8_UNORM\n * MSCTranscoder\n */\n get bypassTranscoders() {\n return this._bypassTranscoders;\n }\n set bypassTranscoders(value) {\n if (this._bypassTranscoders === value) {\n return;\n }\n this._bypassTranscoders = value;\n this._isDirty = true;\n }\n /** @internal */\n _getKTX2DecoderOptions() {\n if (!this._isDirty) {\n return this._ktx2DecoderOptions;\n }\n this._isDirty = false;\n const options = {\n useRGBAIfASTCBC7NotAvailableWhenUASTC: this._useRGBAIfASTCBC7NotAvailableWhenUASTC,\n forceRGBA: this._forceRGBA,\n forceR8: this._forceR8,\n forceRG8: this._forceRG8,\n bypassTranscoders: this._bypassTranscoders,\n };\n if (this.useRGBAIfOnlyBC1BC3AvailableWhenUASTC) {\n options.transcodeFormatDecisionTree = {\n UASTC: {\n transcodeFormat: [TranscodeTarget.BC1_RGB, TranscodeTarget.BC3_RGBA],\n yes: {\n transcodeFormat: TranscodeTarget.RGBA32,\n engineFormat: 32856 /* EngineFormat.RGBA8Format */,\n roundToMultiple4: false,\n },\n },\n };\n }\n this._ktx2DecoderOptions = options;\n return options;\n }\n}\n/**\n * Class for loading KTX2 files\n */\nexport class KhronosTextureContainer2 {\n static GetDefaultNumWorkers() {\n if (typeof navigator !== \"object\" || !navigator.hardwareConcurrency) {\n return 1;\n }\n // Use 50% of the available logical processors but capped at 4.\n return Math.min(Math.floor(navigator.hardwareConcurrency * 0.5), 4);\n }\n static _Initialize(numWorkers) {\n if (KhronosTextureContainer2._WorkerPoolPromise || KhronosTextureContainer2._DecoderModulePromise) {\n return;\n }\n const urls = {\n jsDecoderModule: Tools.GetBabylonScriptURL(this.URLConfig.jsDecoderModule, true),\n wasmUASTCToASTC: Tools.GetBabylonScriptURL(this.URLConfig.wasmUASTCToASTC, true),\n wasmUASTCToBC7: Tools.GetBabylonScriptURL(this.URLConfig.wasmUASTCToBC7, true),\n wasmUASTCToRGBA_UNORM: Tools.GetBabylonScriptURL(this.URLConfig.wasmUASTCToRGBA_UNORM, true),\n wasmUASTCToRGBA_SRGB: Tools.GetBabylonScriptURL(this.URLConfig.wasmUASTCToRGBA_SRGB, true),\n wasmUASTCToR8_UNORM: Tools.GetBabylonScriptURL(this.URLConfig.wasmUASTCToR8_UNORM, true),\n wasmUASTCToRG8_UNORM: Tools.GetBabylonScriptURL(this.URLConfig.wasmUASTCToRG8_UNORM, true),\n jsMSCTranscoder: Tools.GetBabylonScriptURL(this.URLConfig.jsMSCTranscoder, true),\n wasmMSCTranscoder: Tools.GetBabylonScriptURL(this.URLConfig.wasmMSCTranscoder, true),\n wasmZSTDDecoder: Tools.GetBabylonScriptURL(this.URLConfig.wasmZSTDDecoder, true),\n };\n if (numWorkers && typeof Worker === \"function\" && typeof URL !== \"undefined\") {\n KhronosTextureContainer2._WorkerPoolPromise = new Promise((resolve) => {\n const workerContent = `${applyConfig}(${workerFunction})()`;\n const workerBlobUrl = URL.createObjectURL(new Blob([workerContent], { type: \"application/javascript\" }));\n resolve(new AutoReleaseWorkerPool(numWorkers, () => initializeWebWorker(new Worker(workerBlobUrl), undefined, urls)));\n });\n }\n else {\n if (typeof KhronosTextureContainer2._KTX2DecoderModule === \"undefined\") {\n KhronosTextureContainer2._DecoderModulePromise = Tools.LoadBabylonScriptAsync(urls.jsDecoderModule).then(() => {\n KhronosTextureContainer2._KTX2DecoderModule = KTX2DECODER;\n KhronosTextureContainer2._KTX2DecoderModule.MSCTranscoder.UseFromWorkerThread = false;\n KhronosTextureContainer2._KTX2DecoderModule.WASMMemoryManager.LoadBinariesFromCurrentThread = true;\n applyConfig(urls, KhronosTextureContainer2._KTX2DecoderModule);\n return new KhronosTextureContainer2._KTX2DecoderModule.KTX2Decoder();\n });\n }\n else {\n KhronosTextureContainer2._KTX2DecoderModule.MSCTranscoder.UseFromWorkerThread = false;\n KhronosTextureContainer2._KTX2DecoderModule.WASMMemoryManager.LoadBinariesFromCurrentThread = true;\n KhronosTextureContainer2._DecoderModulePromise = Promise.resolve(new KhronosTextureContainer2._KTX2DecoderModule.KTX2Decoder());\n }\n }\n }\n /**\n * Constructor\n * @param engine The engine to use\n * @param numWorkersOrOptions The number of workers for async operations. Specify `0` to disable web workers and run synchronously in the current context.\n */\n constructor(engine, numWorkersOrOptions = KhronosTextureContainer2.DefaultNumWorkers) {\n this._engine = engine;\n const workerPoolOption = (typeof numWorkersOrOptions === \"object\" && numWorkersOrOptions.workerPool) || KhronosTextureContainer2.WorkerPool;\n if (workerPoolOption) {\n KhronosTextureContainer2._WorkerPoolPromise = Promise.resolve(workerPoolOption);\n }\n else {\n // set the KTX2 decoder module\n if (typeof numWorkersOrOptions === \"object\") {\n KhronosTextureContainer2._KTX2DecoderModule = numWorkersOrOptions?.binariesAndModulesContainer?.jsDecoderModule;\n }\n else if (typeof KTX2DECODER !== \"undefined\") {\n KhronosTextureContainer2._KTX2DecoderModule = KTX2DECODER;\n }\n const numberOfWorkers = typeof numWorkersOrOptions === \"number\" ? numWorkersOrOptions : (numWorkersOrOptions.numWorkers ?? KhronosTextureContainer2.DefaultNumWorkers);\n KhronosTextureContainer2._Initialize(numberOfWorkers);\n }\n }\n /**\n * @internal\n */\n _uploadAsync(data, internalTexture, options) {\n const caps = this._engine.getCaps();\n const compressedTexturesCaps = {\n astc: !!caps.astc,\n bptc: !!caps.bptc,\n s3tc: !!caps.s3tc,\n pvrtc: !!caps.pvrtc,\n etc2: !!caps.etc2,\n etc1: !!caps.etc1,\n };\n if (KhronosTextureContainer2._WorkerPoolPromise) {\n return KhronosTextureContainer2._WorkerPoolPromise.then((workerPool) => {\n return new Promise((resolve, reject) => {\n workerPool.push((worker, onComplete) => {\n const onError = (error) => {\n worker.removeEventListener(\"error\", onError);\n worker.removeEventListener(\"message\", onMessage);\n reject(error);\n onComplete();\n };\n const onMessage = (message) => {\n if (message.data.action === \"decoded\") {\n worker.removeEventListener(\"error\", onError);\n worker.removeEventListener(\"message\", onMessage);\n if (!message.data.success) {\n reject({ message: message.data.msg });\n }\n else {\n try {\n this._createTexture(message.data.decodedData, internalTexture, options);\n resolve();\n }\n catch (err) {\n reject({ message: err });\n }\n }\n onComplete();\n }\n };\n worker.addEventListener(\"error\", onError);\n worker.addEventListener(\"message\", onMessage);\n worker.postMessage({ action: \"setDefaultDecoderOptions\", options: KhronosTextureContainer2.DefaultDecoderOptions._getKTX2DecoderOptions() });\n const dataCopy = new Uint8Array(data.byteLength);\n dataCopy.set(new Uint8Array(data.buffer, data.byteOffset, data.byteLength));\n worker.postMessage({ action: \"decode\", data: dataCopy, caps: compressedTexturesCaps, options }, [dataCopy.buffer]);\n });\n });\n });\n }\n else if (KhronosTextureContainer2._DecoderModulePromise) {\n return KhronosTextureContainer2._DecoderModulePromise.then((decoder) => {\n if (KhronosTextureContainer2.DefaultDecoderOptions.isDirty) {\n KhronosTextureContainer2._KTX2DecoderModule.KTX2Decoder.DefaultDecoderOptions = KhronosTextureContainer2.DefaultDecoderOptions._getKTX2DecoderOptions();\n }\n return new Promise((resolve, reject) => {\n decoder\n .decode(data, caps)\n .then((data) => {\n this._createTexture(data, internalTexture);\n resolve();\n })\n .catch((reason) => {\n reject({ message: reason });\n });\n });\n });\n }\n throw new Error(\"KTX2 decoder module is not available\");\n }\n _createTexture(data, internalTexture, options) {\n const oglTexture2D = 3553; // gl.TEXTURE_2D\n this._engine._bindTextureDirectly(oglTexture2D, internalTexture);\n if (options) {\n // return back some information about the decoded data\n options.transcodedFormat = data.transcodedFormat;\n options.isInGammaSpace = data.isInGammaSpace;\n options.hasAlpha = data.hasAlpha;\n options.transcoderName = data.transcoderName;\n }\n let isUncompressedFormat = true;\n switch (data.transcodedFormat) {\n case 0x8058 /* RGBA8 */:\n internalTexture.type = 0;\n internalTexture.format = 5;\n break;\n case 0x8229 /* R8 */:\n internalTexture.type = 0;\n internalTexture.format = 6;\n break;\n case 0x822b /* RG8 */:\n internalTexture.type = 0;\n internalTexture.format = 7;\n break;\n default:\n internalTexture.format = data.transcodedFormat;\n isUncompressedFormat = false;\n break;\n }\n internalTexture._gammaSpace = data.isInGammaSpace;\n internalTexture.generateMipMaps = data.mipmaps.length > 1;\n if (data.errors) {\n throw new Error(\"KTX2 container - could not transcode the data. \" + data.errors);\n }\n for (let t = 0; t < data.mipmaps.length; ++t) {\n const mipmap = data.mipmaps[t];\n if (!mipmap || !mipmap.data) {\n throw new Error(\"KTX2 container - could not transcode one of the image\");\n }\n if (isUncompressedFormat) {\n // uncompressed RGBA / R8 / RG8\n internalTexture.width = mipmap.width; // need to set width/height so that the call to _uploadDataToTextureDirectly uses the right dimensions\n internalTexture.height = mipmap.height;\n this._engine._uploadDataToTextureDirectly(internalTexture, mipmap.data, 0, t, undefined, true);\n }\n else {\n this._engine._uploadCompressedDataToTextureDirectly(internalTexture, data.transcodedFormat, mipmap.width, mipmap.height, mipmap.data, 0, t);\n }\n }\n internalTexture._extension = \".ktx2\";\n internalTexture.width = data.mipmaps[0].width;\n internalTexture.height = data.mipmaps[0].height;\n internalTexture.isReady = true;\n this._engine._bindTextureDirectly(oglTexture2D, null);\n }\n /**\n * Checks if the given data starts with a KTX2 file identifier.\n * @param data the data to check\n * @returns true if the data is a KTX2 file or false otherwise\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/**\n * URLs to use when loading the KTX2 decoder module as well as its dependencies\n * If a url is null, the default url is used (pointing to https://preview.babylonjs.com)\n * Note that jsDecoderModule can't be null and that the other dependencies will only be loaded if necessary\n * Urls you can change:\n * URLConfig.jsDecoderModule\n * URLConfig.wasmUASTCToASTC\n * URLConfig.wasmUASTCToBC7\n * URLConfig.wasmUASTCToRGBA_UNORM\n * URLConfig.wasmUASTCToRGBA_SRGB\n * URLConfig.wasmUASTCToR8_UNORM\n * URLConfig.wasmUASTCToRG8_UNORM\n * URLConfig.jsMSCTranscoder\n * URLConfig.wasmMSCTranscoder\n * URLConfig.wasmZSTDDecoder\n * You can see their default values in this PG: https://playground.babylonjs.com/#EIJH8L#29\n */\nKhronosTextureContainer2.URLConfig = {\n jsDecoderModule: \"https://cdn.babylonjs.com/babylon.ktx2Decoder.js\",\n wasmUASTCToASTC: null,\n wasmUASTCToBC7: null,\n wasmUASTCToRGBA_UNORM: null,\n wasmUASTCToRGBA_SRGB: null,\n wasmUASTCToR8_UNORM: null,\n wasmUASTCToRG8_UNORM: null,\n jsMSCTranscoder: null,\n wasmMSCTranscoder: null,\n wasmZSTDDecoder: null,\n};\n/**\n * Default number of workers used to handle data decoding\n */\nKhronosTextureContainer2.DefaultNumWorkers = KhronosTextureContainer2.GetDefaultNumWorkers();\n/**\n * Default configuration for the KTX2 decoder.\n * The options defined in this way have priority over those passed when creating a KTX2 texture with new Texture(...).\n */\nKhronosTextureContainer2.DefaultDecoderOptions = new DefaultKTX2DecoderOptions();\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}