feb2c412e2fead5f0a79567d9dfef93b572ea0fb84929c4c19d321603bbc3468.json 33 KB

1
  1. {"ast":null,"code":"import { Tools } from \"./tools.js\";\nimport { Texture } from \"../Materials/Textures/texture.js\";\nimport { InternalTexture } from \"../Materials/Textures/internalTexture.js\";\nimport { initializeWebWorker, workerFunction } from \"./basisWorker.js\";\n/**\n * Info about the .basis files\n */\nexport class BasisFileInfo {}\n/**\n * Result of transcoding a basis file\n */\nclass TranscodeResult {}\n/**\n * Configuration options for the Basis transcoder\n */\nexport class BasisTranscodeConfiguration {}\n/**\n * @internal\n * Enum of basis transcoder formats\n */\nvar BASIS_FORMATS;\n(function (BASIS_FORMATS) {\n BASIS_FORMATS[BASIS_FORMATS[\"cTFETC1\"] = 0] = \"cTFETC1\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFETC2\"] = 1] = \"cTFETC2\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFBC1\"] = 2] = \"cTFBC1\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFBC3\"] = 3] = \"cTFBC3\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFBC4\"] = 4] = \"cTFBC4\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFBC5\"] = 5] = \"cTFBC5\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFBC7\"] = 6] = \"cTFBC7\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFPVRTC1_4_RGB\"] = 8] = \"cTFPVRTC1_4_RGB\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFPVRTC1_4_RGBA\"] = 9] = \"cTFPVRTC1_4_RGBA\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFASTC_4x4\"] = 10] = \"cTFASTC_4x4\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFATC_RGB\"] = 11] = \"cTFATC_RGB\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFATC_RGBA_INTERPOLATED_ALPHA\"] = 12] = \"cTFATC_RGBA_INTERPOLATED_ALPHA\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFRGBA32\"] = 13] = \"cTFRGBA32\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFRGB565\"] = 14] = \"cTFRGB565\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFBGR565\"] = 15] = \"cTFBGR565\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFRGBA4444\"] = 16] = \"cTFRGBA4444\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFFXT1_RGB\"] = 17] = \"cTFFXT1_RGB\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFPVRTC2_4_RGB\"] = 18] = \"cTFPVRTC2_4_RGB\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFPVRTC2_4_RGBA\"] = 19] = \"cTFPVRTC2_4_RGBA\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFETC2_EAC_R11\"] = 20] = \"cTFETC2_EAC_R11\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFETC2_EAC_RG11\"] = 21] = \"cTFETC2_EAC_RG11\";\n})(BASIS_FORMATS || (BASIS_FORMATS = {}));\n/**\n * Used to load .Basis files\n * See https://github.com/BinomialLLC/basis_universal/tree/master/webgl\n */\nexport const BasisToolsOptions = {\n /**\n * URL to use when loading the basis transcoder\n */\n JSModuleURL: `${Tools._DefaultCdnUrl}/basisTranscoder/1/basis_transcoder.js`,\n /**\n * URL to use when loading the wasm module for the transcoder\n */\n WasmModuleURL: `${Tools._DefaultCdnUrl}/basisTranscoder/1/basis_transcoder.wasm`\n};\n/**\n * Get the internal format to be passed to texImage2D corresponding to the .basis format value\n * @param basisFormat format chosen from GetSupportedTranscodeFormat\n * @param engine\n * @returns internal format corresponding to the Basis format\n */\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport const GetInternalFormatFromBasisFormat = (basisFormat, engine) => {\n let format;\n switch (basisFormat) {\n case BASIS_FORMATS.cTFETC1:\n format = 36196;\n break;\n case BASIS_FORMATS.cTFBC1:\n format = 33776;\n break;\n case BASIS_FORMATS.cTFBC4:\n format = 33779;\n break;\n case BASIS_FORMATS.cTFASTC_4x4:\n format = 37808;\n break;\n case BASIS_FORMATS.cTFETC2:\n format = 37496;\n break;\n case BASIS_FORMATS.cTFBC7:\n format = 36492;\n break;\n }\n if (format === undefined) {\n // eslint-disable-next-line no-throw-literal\n throw \"The chosen Basis transcoder format is not currently supported\";\n }\n return format;\n};\nlet _WorkerPromise = null;\nlet _Worker = null;\nlet _actionId = 0;\nconst _IgnoreSupportedFormats = false;\nconst _CreateWorkerAsync = () => {\n if (!_WorkerPromise) {\n _WorkerPromise = new Promise((res, reject) => {\n if (_Worker) {\n res(_Worker);\n } else {\n Tools.LoadFileAsync(Tools.GetBabylonScriptURL(BasisToolsOptions.WasmModuleURL)).then(wasmBinary => {\n if (typeof URL !== \"function\") {\n return reject(\"Basis transcoder requires an environment with a URL constructor\");\n }\n const workerBlobUrl = URL.createObjectURL(new Blob([`(${workerFunction})()`], {\n type: \"application/javascript\"\n }));\n _Worker = new Worker(workerBlobUrl);\n initializeWebWorker(_Worker, wasmBinary, BasisToolsOptions.JSModuleURL).then(res, reject);\n }).catch(reject);\n }\n });\n }\n return _WorkerPromise;\n};\n/**\n * Set the worker to use for transcoding\n * @param worker The worker that will be used for transcoding\n */\nexport const SetBasisTranscoderWorker = worker => {\n _Worker = worker;\n};\n/**\n * Transcodes a loaded image file to compressed pixel data\n * @param data image data to transcode\n * @param config configuration options for the transcoding\n * @returns a promise resulting in the transcoded image\n */\nexport const TranscodeAsync = (data, config) => {\n const dataView = data instanceof ArrayBuffer ? new Uint8Array(data) : data;\n return new Promise((res, rej) => {\n _CreateWorkerAsync().then(() => {\n const actionId = _actionId++;\n const messageHandler = msg => {\n if (msg.data.action === \"transcode\" && msg.data.id === actionId) {\n _Worker.removeEventListener(\"message\", messageHandler);\n if (!msg.data.success) {\n rej(\"Transcode is not supported on this device\");\n } else {\n res(msg.data);\n }\n }\n };\n _Worker.addEventListener(\"message\", messageHandler);\n const dataViewCopy = new Uint8Array(dataView.byteLength);\n dataViewCopy.set(new Uint8Array(dataView.buffer, dataView.byteOffset, dataView.byteLength));\n _Worker.postMessage({\n action: \"transcode\",\n id: actionId,\n imageData: dataViewCopy,\n config: config,\n ignoreSupportedFormats: _IgnoreSupportedFormats\n }, [dataViewCopy.buffer]);\n }, error => {\n rej(error);\n });\n });\n};\n/**\n * Binds a texture according to its underlying target.\n * @param texture texture to bind\n * @param engine the engine to bind the texture in\n */\nconst BindTexture = (texture, engine) => {\n var _engine$_gl;\n let target = (_engine$_gl = engine._gl) === null || _engine$_gl === void 0 ? void 0 : _engine$_gl.TEXTURE_2D;\n if (texture.isCube) {\n var _engine$_gl2;\n target = (_engine$_gl2 = engine._gl) === null || _engine$_gl2 === void 0 ? void 0 : _engine$_gl2.TEXTURE_CUBE_MAP;\n }\n engine._bindTextureDirectly(target, texture, true);\n};\n/**\n * Loads a texture from the transcode result\n * @param texture texture load to\n * @param transcodeResult the result of transcoding the basis file to load from\n */\nexport const LoadTextureFromTranscodeResult = (texture, transcodeResult) => {\n const engine = texture.getEngine();\n for (let i = 0; i < transcodeResult.fileInfo.images.length; i++) {\n const rootImage = transcodeResult.fileInfo.images[i].levels[0];\n texture._invertVScale = texture.invertY;\n if (transcodeResult.format === -1 || transcodeResult.format === BASIS_FORMATS.cTFRGB565) {\n // No compatable compressed format found, fallback to RGB\n texture.type = 10;\n texture.format = 4;\n if (engine._features.basisNeedsPOT && (Math.log2(rootImage.width) % 1 !== 0 || Math.log2(rootImage.height) % 1 !== 0)) {\n // Create non power of two texture\n const source = new InternalTexture(engine, 2 /* InternalTextureSource.Temp */);\n texture._invertVScale = texture.invertY;\n source.type = 10;\n source.format = 4;\n // Fallback requires aligned width/height\n source.width = rootImage.width + 3 & ~3;\n source.height = rootImage.height + 3 & ~3;\n BindTexture(source, engine);\n engine._uploadDataToTextureDirectly(source, new Uint16Array(rootImage.transcodedPixels.buffer), i, 0, 4, true);\n // Resize to power of two\n engine._rescaleTexture(source, texture, engine.scenes[0], engine._getInternalFormat(4), () => {\n engine._releaseTexture(source);\n BindTexture(texture, engine);\n });\n } else {\n // Fallback is already inverted\n texture._invertVScale = !texture.invertY;\n // Upload directly\n texture.width = rootImage.width + 3 & ~3;\n texture.height = rootImage.height + 3 & ~3;\n texture.samplingMode = 2;\n BindTexture(texture, engine);\n engine._uploadDataToTextureDirectly(texture, new Uint16Array(rootImage.transcodedPixels.buffer), i, 0, 4, true);\n }\n } else {\n texture.width = rootImage.width;\n texture.height = rootImage.height;\n texture.generateMipMaps = transcodeResult.fileInfo.images[i].levels.length > 1;\n const format = BasisTools.GetInternalFormatFromBasisFormat(transcodeResult.format, engine);\n texture.format = format;\n BindTexture(texture, engine);\n // Upload all mip levels in the file\n transcodeResult.fileInfo.images[i].levels.forEach((level, index) => {\n engine._uploadCompressedDataToTextureDirectly(texture, format, level.width, level.height, level.transcodedPixels, i, index);\n });\n if (engine._features.basisNeedsPOT && (Math.log2(texture.width) % 1 !== 0 || Math.log2(texture.height) % 1 !== 0)) {\n Tools.Warn(\"Loaded .basis texture width and height are not a power of two. Texture wrapping will be set to Texture.CLAMP_ADDRESSMODE as other modes are not supported with non power of two dimensions in webGL 1.\");\n texture._cachedWrapU = Texture.CLAMP_ADDRESSMODE;\n texture._cachedWrapV = Texture.CLAMP_ADDRESSMODE;\n }\n }\n }\n};\n/**\n * Used to load .Basis files\n * See https://github.com/BinomialLLC/basis_universal/tree/master/webgl\n */\nexport const BasisTools = {\n /**\n * URL to use when loading the basis transcoder\n */\n JSModuleURL: BasisToolsOptions.JSModuleURL,\n /**\n * URL to use when loading the wasm module for the transcoder\n */\n WasmModuleURL: BasisToolsOptions.WasmModuleURL,\n /**\n * Get the internal format to be passed to texImage2D corresponding to the .basis format value\n * @param basisFormat format chosen from GetSupportedTranscodeFormat\n * @returns internal format corresponding to the Basis format\n */\n GetInternalFormatFromBasisFormat,\n /**\n * Transcodes a loaded image file to compressed pixel data\n * @param data image data to transcode\n * @param config configuration options for the transcoding\n * @returns a promise resulting in the transcoded image\n */\n TranscodeAsync,\n /**\n * Loads a texture from the transcode result\n * @param texture texture load to\n * @param transcodeResult the result of transcoding the basis file to load from\n */\n LoadTextureFromTranscodeResult\n};\nObject.defineProperty(BasisTools, \"JSModuleURL\", {\n get: function () {\n return BasisToolsOptions.JSModuleURL;\n },\n set: function (value) {\n BasisToolsOptions.JSModuleURL = value;\n }\n});\nObject.defineProperty(BasisTools, \"WasmModuleURL\", {\n get: function () {\n return BasisToolsOptions.WasmModuleURL;\n },\n set: function (value) {\n BasisToolsOptions.WasmModuleURL = value;\n }\n});","map":{"version":3,"names":["Tools","Texture","InternalTexture","initializeWebWorker","workerFunction","BasisFileInfo","TranscodeResult","BasisTranscodeConfiguration","BASIS_FORMATS","BasisToolsOptions","JSModuleURL","_DefaultCdnUrl","WasmModuleURL","GetInternalFormatFromBasisFormat","basisFormat","engine","format","cTFETC1","cTFBC1","cTFBC4","cTFASTC_4x4","cTFETC2","cTFBC7","undefined","_WorkerPromise","_Worker","_actionId","_IgnoreSupportedFormats","_CreateWorkerAsync","Promise","res","reject","LoadFileAsync","GetBabylonScriptURL","then","wasmBinary","URL","workerBlobUrl","createObjectURL","Blob","type","Worker","catch","SetBasisTranscoderWorker","worker","TranscodeAsync","data","config","dataView","ArrayBuffer","Uint8Array","rej","actionId","messageHandler","msg","action","id","removeEventListener","success","addEventListener","dataViewCopy","byteLength","set","buffer","byteOffset","postMessage","imageData","ignoreSupportedFormats","error","BindTexture","texture","_engine$_gl","target","_gl","TEXTURE_2D","isCube","_engine$_gl2","TEXTURE_CUBE_MAP","_bindTextureDirectly","LoadTextureFromTranscodeResult","transcodeResult","getEngine","i","fileInfo","images","length","rootImage","levels","_invertVScale","invertY","cTFRGB565","_features","basisNeedsPOT","Math","log2","width","height","source","_uploadDataToTextureDirectly","Uint16Array","transcodedPixels","_rescaleTexture","scenes","_getInternalFormat","_releaseTexture","samplingMode","generateMipMaps","BasisTools","forEach","level","index","_uploadCompressedDataToTextureDirectly","Warn","_cachedWrapU","CLAMP_ADDRESSMODE","_cachedWrapV","Object","defineProperty","get","value"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Misc/basis.js"],"sourcesContent":["import { Tools } from \"./tools.js\";\nimport { Texture } from \"../Materials/Textures/texture.js\";\nimport { InternalTexture } from \"../Materials/Textures/internalTexture.js\";\n\nimport { initializeWebWorker, workerFunction } from \"./basisWorker.js\";\n/**\n * Info about the .basis files\n */\nexport class BasisFileInfo {\n}\n/**\n * Result of transcoding a basis file\n */\nclass TranscodeResult {\n}\n/**\n * Configuration options for the Basis transcoder\n */\nexport class BasisTranscodeConfiguration {\n}\n/**\n * @internal\n * Enum of basis transcoder formats\n */\nvar BASIS_FORMATS;\n(function (BASIS_FORMATS) {\n BASIS_FORMATS[BASIS_FORMATS[\"cTFETC1\"] = 0] = \"cTFETC1\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFETC2\"] = 1] = \"cTFETC2\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFBC1\"] = 2] = \"cTFBC1\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFBC3\"] = 3] = \"cTFBC3\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFBC4\"] = 4] = \"cTFBC4\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFBC5\"] = 5] = \"cTFBC5\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFBC7\"] = 6] = \"cTFBC7\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFPVRTC1_4_RGB\"] = 8] = \"cTFPVRTC1_4_RGB\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFPVRTC1_4_RGBA\"] = 9] = \"cTFPVRTC1_4_RGBA\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFASTC_4x4\"] = 10] = \"cTFASTC_4x4\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFATC_RGB\"] = 11] = \"cTFATC_RGB\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFATC_RGBA_INTERPOLATED_ALPHA\"] = 12] = \"cTFATC_RGBA_INTERPOLATED_ALPHA\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFRGBA32\"] = 13] = \"cTFRGBA32\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFRGB565\"] = 14] = \"cTFRGB565\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFBGR565\"] = 15] = \"cTFBGR565\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFRGBA4444\"] = 16] = \"cTFRGBA4444\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFFXT1_RGB\"] = 17] = \"cTFFXT1_RGB\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFPVRTC2_4_RGB\"] = 18] = \"cTFPVRTC2_4_RGB\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFPVRTC2_4_RGBA\"] = 19] = \"cTFPVRTC2_4_RGBA\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFETC2_EAC_R11\"] = 20] = \"cTFETC2_EAC_R11\";\n BASIS_FORMATS[BASIS_FORMATS[\"cTFETC2_EAC_RG11\"] = 21] = \"cTFETC2_EAC_RG11\";\n})(BASIS_FORMATS || (BASIS_FORMATS = {}));\n/**\n * Used to load .Basis files\n * See https://github.com/BinomialLLC/basis_universal/tree/master/webgl\n */\nexport const BasisToolsOptions = {\n /**\n * URL to use when loading the basis transcoder\n */\n JSModuleURL: `${Tools._DefaultCdnUrl}/basisTranscoder/1/basis_transcoder.js`,\n /**\n * URL to use when loading the wasm module for the transcoder\n */\n WasmModuleURL: `${Tools._DefaultCdnUrl}/basisTranscoder/1/basis_transcoder.wasm`,\n};\n/**\n * Get the internal format to be passed to texImage2D corresponding to the .basis format value\n * @param basisFormat format chosen from GetSupportedTranscodeFormat\n * @param engine\n * @returns internal format corresponding to the Basis format\n */\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport const GetInternalFormatFromBasisFormat = (basisFormat, engine) => {\n let format;\n switch (basisFormat) {\n case BASIS_FORMATS.cTFETC1:\n format = 36196;\n break;\n case BASIS_FORMATS.cTFBC1:\n format = 33776;\n break;\n case BASIS_FORMATS.cTFBC4:\n format = 33779;\n break;\n case BASIS_FORMATS.cTFASTC_4x4:\n format = 37808;\n break;\n case BASIS_FORMATS.cTFETC2:\n format = 37496;\n break;\n case BASIS_FORMATS.cTFBC7:\n format = 36492;\n break;\n }\n if (format === undefined) {\n // eslint-disable-next-line no-throw-literal\n throw \"The chosen Basis transcoder format is not currently supported\";\n }\n return format;\n};\nlet _WorkerPromise = null;\nlet _Worker = null;\nlet _actionId = 0;\nconst _IgnoreSupportedFormats = false;\nconst _CreateWorkerAsync = () => {\n if (!_WorkerPromise) {\n _WorkerPromise = new Promise((res, reject) => {\n if (_Worker) {\n res(_Worker);\n }\n else {\n Tools.LoadFileAsync(Tools.GetBabylonScriptURL(BasisToolsOptions.WasmModuleURL))\n .then((wasmBinary) => {\n if (typeof URL !== \"function\") {\n return reject(\"Basis transcoder requires an environment with a URL constructor\");\n }\n const workerBlobUrl = URL.createObjectURL(new Blob([`(${workerFunction})()`], { type: \"application/javascript\" }));\n _Worker = new Worker(workerBlobUrl);\n initializeWebWorker(_Worker, wasmBinary, BasisToolsOptions.JSModuleURL).then(res, reject);\n })\n .catch(reject);\n }\n });\n }\n return _WorkerPromise;\n};\n/**\n * Set the worker to use for transcoding\n * @param worker The worker that will be used for transcoding\n */\nexport const SetBasisTranscoderWorker = (worker) => {\n _Worker = worker;\n};\n/**\n * Transcodes a loaded image file to compressed pixel data\n * @param data image data to transcode\n * @param config configuration options for the transcoding\n * @returns a promise resulting in the transcoded image\n */\nexport const TranscodeAsync = (data, config) => {\n const dataView = data instanceof ArrayBuffer ? new Uint8Array(data) : data;\n return new Promise((res, rej) => {\n _CreateWorkerAsync().then(() => {\n const actionId = _actionId++;\n const messageHandler = (msg) => {\n if (msg.data.action === \"transcode\" && msg.data.id === actionId) {\n _Worker.removeEventListener(\"message\", messageHandler);\n if (!msg.data.success) {\n rej(\"Transcode is not supported on this device\");\n }\n else {\n res(msg.data);\n }\n }\n };\n _Worker.addEventListener(\"message\", messageHandler);\n const dataViewCopy = new Uint8Array(dataView.byteLength);\n dataViewCopy.set(new Uint8Array(dataView.buffer, dataView.byteOffset, dataView.byteLength));\n _Worker.postMessage({ action: \"transcode\", id: actionId, imageData: dataViewCopy, config: config, ignoreSupportedFormats: _IgnoreSupportedFormats }, [\n dataViewCopy.buffer,\n ]);\n }, (error) => {\n rej(error);\n });\n });\n};\n/**\n * Binds a texture according to its underlying target.\n * @param texture texture to bind\n * @param engine the engine to bind the texture in\n */\nconst BindTexture = (texture, engine) => {\n let target = engine._gl?.TEXTURE_2D;\n if (texture.isCube) {\n target = engine._gl?.TEXTURE_CUBE_MAP;\n }\n engine._bindTextureDirectly(target, texture, true);\n};\n/**\n * Loads a texture from the transcode result\n * @param texture texture load to\n * @param transcodeResult the result of transcoding the basis file to load from\n */\nexport const LoadTextureFromTranscodeResult = (texture, transcodeResult) => {\n const engine = texture.getEngine();\n for (let i = 0; i < transcodeResult.fileInfo.images.length; i++) {\n const rootImage = transcodeResult.fileInfo.images[i].levels[0];\n texture._invertVScale = texture.invertY;\n if (transcodeResult.format === -1 || transcodeResult.format === BASIS_FORMATS.cTFRGB565) {\n // No compatable compressed format found, fallback to RGB\n texture.type = 10;\n texture.format = 4;\n if (engine._features.basisNeedsPOT && (Math.log2(rootImage.width) % 1 !== 0 || Math.log2(rootImage.height) % 1 !== 0)) {\n // Create non power of two texture\n const source = new InternalTexture(engine, 2 /* InternalTextureSource.Temp */);\n texture._invertVScale = texture.invertY;\n source.type = 10;\n source.format = 4;\n // Fallback requires aligned width/height\n source.width = (rootImage.width + 3) & ~3;\n source.height = (rootImage.height + 3) & ~3;\n BindTexture(source, engine);\n engine._uploadDataToTextureDirectly(source, new Uint16Array(rootImage.transcodedPixels.buffer), i, 0, 4, true);\n // Resize to power of two\n engine._rescaleTexture(source, texture, engine.scenes[0], engine._getInternalFormat(4), () => {\n engine._releaseTexture(source);\n BindTexture(texture, engine);\n });\n }\n else {\n // Fallback is already inverted\n texture._invertVScale = !texture.invertY;\n // Upload directly\n texture.width = (rootImage.width + 3) & ~3;\n texture.height = (rootImage.height + 3) & ~3;\n texture.samplingMode = 2;\n BindTexture(texture, engine);\n engine._uploadDataToTextureDirectly(texture, new Uint16Array(rootImage.transcodedPixels.buffer), i, 0, 4, true);\n }\n }\n else {\n texture.width = rootImage.width;\n texture.height = rootImage.height;\n texture.generateMipMaps = transcodeResult.fileInfo.images[i].levels.length > 1;\n const format = BasisTools.GetInternalFormatFromBasisFormat(transcodeResult.format, engine);\n texture.format = format;\n BindTexture(texture, engine);\n // Upload all mip levels in the file\n transcodeResult.fileInfo.images[i].levels.forEach((level, index) => {\n engine._uploadCompressedDataToTextureDirectly(texture, format, level.width, level.height, level.transcodedPixels, i, index);\n });\n if (engine._features.basisNeedsPOT && (Math.log2(texture.width) % 1 !== 0 || Math.log2(texture.height) % 1 !== 0)) {\n Tools.Warn(\"Loaded .basis texture width and height are not a power of two. Texture wrapping will be set to Texture.CLAMP_ADDRESSMODE as other modes are not supported with non power of two dimensions in webGL 1.\");\n texture._cachedWrapU = Texture.CLAMP_ADDRESSMODE;\n texture._cachedWrapV = Texture.CLAMP_ADDRESSMODE;\n }\n }\n }\n};\n/**\n * Used to load .Basis files\n * See https://github.com/BinomialLLC/basis_universal/tree/master/webgl\n */\nexport const BasisTools = {\n /**\n * URL to use when loading the basis transcoder\n */\n JSModuleURL: BasisToolsOptions.JSModuleURL,\n /**\n * URL to use when loading the wasm module for the transcoder\n */\n WasmModuleURL: BasisToolsOptions.WasmModuleURL,\n /**\n * Get the internal format to be passed to texImage2D corresponding to the .basis format value\n * @param basisFormat format chosen from GetSupportedTranscodeFormat\n * @returns internal format corresponding to the Basis format\n */\n GetInternalFormatFromBasisFormat,\n /**\n * Transcodes a loaded image file to compressed pixel data\n * @param data image data to transcode\n * @param config configuration options for the transcoding\n * @returns a promise resulting in the transcoded image\n */\n TranscodeAsync,\n /**\n * Loads a texture from the transcode result\n * @param texture texture load to\n * @param transcodeResult the result of transcoding the basis file to load from\n */\n LoadTextureFromTranscodeResult,\n};\nObject.defineProperty(BasisTools, \"JSModuleURL\", {\n get: function () {\n return BasisToolsOptions.JSModuleURL;\n },\n set: function (value) {\n BasisToolsOptions.JSModuleURL = value;\n },\n});\nObject.defineProperty(BasisTools, \"WasmModuleURL\", {\n get: function () {\n return BasisToolsOptions.WasmModuleURL;\n },\n set: function (value) {\n BasisToolsOptions.WasmModuleURL = value;\n },\n});\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}