56567486a75f3559ee0cb1b04dd0bcaade025e3e42f6ea3889f9ab7b649beaef.json 30 KB

1
  1. {"ast":null,"code":"import { Tools } from \"./tools.js\";\n/**\n * The worker function that gets converted to a blob url to pass into a worker.\n * To be used if a developer wants to create their own worker instance and inject it instead of using the default worker.\n */\nexport function workerFunction() {\n const _BASIS_FORMAT = {\n cTFETC1: 0,\n cTFETC2: 1,\n cTFBC1: 2,\n cTFBC3: 3,\n cTFBC4: 4,\n cTFBC5: 5,\n cTFBC7: 6,\n cTFPVRTC1_4_RGB: 8,\n cTFPVRTC1_4_RGBA: 9,\n cTFASTC_4x4: 10,\n cTFATC_RGB: 11,\n cTFATC_RGBA_INTERPOLATED_ALPHA: 12,\n cTFRGBA32: 13,\n cTFRGB565: 14,\n cTFBGR565: 15,\n cTFRGBA4444: 16,\n cTFFXT1_RGB: 17,\n cTFPVRTC2_4_RGB: 18,\n cTFPVRTC2_4_RGBA: 19,\n cTFETC2_EAC_R11: 20,\n cTFETC2_EAC_RG11: 21\n };\n let transcoderModulePromise = null;\n onmessage = event => {\n if (event.data.action === \"init\") {\n // Load the transcoder if it hasn't been yet\n if (event.data.url) {\n // make sure we loaded the script correctly\n try {\n importScripts(event.data.url);\n } catch (e) {\n postMessage({\n action: \"error\",\n error: e\n });\n }\n }\n if (!transcoderModulePromise) {\n transcoderModulePromise = BASIS({\n // Override wasm binary\n wasmBinary: event.data.wasmBinary\n });\n }\n if (transcoderModulePromise !== null) {\n transcoderModulePromise.then(m => {\n BASIS = m;\n m.initializeBasis();\n postMessage({\n action: \"init\"\n });\n });\n }\n } else if (event.data.action === \"transcode\") {\n // Transcode the basis image and return the resulting pixels\n const config = event.data.config;\n const imgData = event.data.imageData;\n const loadedFile = new BASIS.BasisFile(imgData);\n const fileInfo = GetFileInfo(loadedFile);\n let format = event.data.ignoreSupportedFormats ? null : GetSupportedTranscodeFormat(event.data.config, fileInfo);\n let needsConversion = false;\n if (format === null) {\n needsConversion = true;\n format = fileInfo.hasAlpha ? _BASIS_FORMAT.cTFBC3 : _BASIS_FORMAT.cTFBC1;\n }\n // Begin transcode\n let success = true;\n if (!loadedFile.startTranscoding()) {\n success = false;\n }\n const buffers = [];\n for (let imageIndex = 0; imageIndex < fileInfo.images.length; imageIndex++) {\n if (!success) {\n break;\n }\n const image = fileInfo.images[imageIndex];\n if (config.loadSingleImage === undefined || config.loadSingleImage === imageIndex) {\n let mipCount = image.levels.length;\n if (config.loadMipmapLevels === false) {\n mipCount = 1;\n }\n for (let levelIndex = 0; levelIndex < mipCount; levelIndex++) {\n const levelInfo = image.levels[levelIndex];\n const pixels = TranscodeLevel(loadedFile, imageIndex, levelIndex, format, needsConversion);\n if (!pixels) {\n success = false;\n break;\n }\n levelInfo.transcodedPixels = pixels;\n buffers.push(levelInfo.transcodedPixels.buffer);\n }\n }\n }\n // Close file\n loadedFile.close();\n loadedFile.delete();\n if (needsConversion) {\n format = -1;\n }\n if (!success) {\n postMessage({\n action: \"transcode\",\n success: success,\n id: event.data.id\n });\n } else {\n postMessage({\n action: \"transcode\",\n success: success,\n id: event.data.id,\n fileInfo: fileInfo,\n format: format\n }, buffers);\n }\n }\n };\n /**\n * Detects the supported transcode format for the file\n * @param config transcode config\n * @param fileInfo info about the file\n * @returns the chosed format or null if none are supported\n */\n function GetSupportedTranscodeFormat(config, fileInfo) {\n let format = null;\n if (config.supportedCompressionFormats) {\n if (config.supportedCompressionFormats.astc) {\n format = _BASIS_FORMAT.cTFASTC_4x4;\n } else if (config.supportedCompressionFormats.bc7) {\n format = _BASIS_FORMAT.cTFBC7;\n } else if (config.supportedCompressionFormats.s3tc) {\n format = fileInfo.hasAlpha ? _BASIS_FORMAT.cTFBC3 : _BASIS_FORMAT.cTFBC1;\n } else if (config.supportedCompressionFormats.pvrtc) {\n format = fileInfo.hasAlpha ? _BASIS_FORMAT.cTFPVRTC1_4_RGBA : _BASIS_FORMAT.cTFPVRTC1_4_RGB;\n } else if (config.supportedCompressionFormats.etc2) {\n format = _BASIS_FORMAT.cTFETC2;\n } else if (config.supportedCompressionFormats.etc1) {\n format = _BASIS_FORMAT.cTFETC1;\n } else {\n format = _BASIS_FORMAT.cTFRGB565;\n }\n }\n return format;\n }\n /**\n * Retrieves information about the basis file eg. dimensions\n * @param basisFile the basis file to get the info from\n * @returns information about the basis file\n */\n function GetFileInfo(basisFile) {\n const hasAlpha = basisFile.getHasAlpha();\n const imageCount = basisFile.getNumImages();\n const images = [];\n for (let i = 0; i < imageCount; i++) {\n const imageInfo = {\n levels: []\n };\n const levelCount = basisFile.getNumLevels(i);\n for (let level = 0; level < levelCount; level++) {\n const levelInfo = {\n width: basisFile.getImageWidth(i, level),\n height: basisFile.getImageHeight(i, level)\n };\n imageInfo.levels.push(levelInfo);\n }\n images.push(imageInfo);\n }\n const info = {\n hasAlpha,\n images\n };\n return info;\n }\n function TranscodeLevel(loadedFile, imageIndex, levelIndex, format, convertToRgb565) {\n const dstSize = loadedFile.getImageTranscodedSizeInBytes(imageIndex, levelIndex, format);\n let dst = new Uint8Array(dstSize);\n if (!loadedFile.transcodeImage(dst, imageIndex, levelIndex, format, 1, 0)) {\n return null;\n }\n // If no supported format is found, load as dxt and convert to rgb565\n if (convertToRgb565) {\n const alignedWidth = loadedFile.getImageWidth(imageIndex, levelIndex) + 3 & ~3;\n const alignedHeight = loadedFile.getImageHeight(imageIndex, levelIndex) + 3 & ~3;\n dst = ConvertDxtToRgb565(dst, 0, alignedWidth, alignedHeight);\n }\n return dst;\n }\n /**\n * From https://github.com/BinomialLLC/basis_universal/blob/master/webgl/texture/dxt-to-rgb565.js\n * An unoptimized version of dxtToRgb565. Also, the floating\n * point math used to compute the colors actually results in\n * slightly different colors compared to hardware DXT decoders.\n * @param src dxt src pixels\n * @param srcByteOffset offset for the start of src\n * @param width aligned width of the image\n * @param height aligned height of the image\n * @returns the converted pixels\n */\n function ConvertDxtToRgb565(src, srcByteOffset, width, height) {\n const c = new Uint16Array(4);\n const dst = new Uint16Array(width * height);\n const blockWidth = width / 4;\n const blockHeight = height / 4;\n for (let blockY = 0; blockY < blockHeight; blockY++) {\n for (let blockX = 0; blockX < blockWidth; blockX++) {\n const i = srcByteOffset + 8 * (blockY * blockWidth + blockX);\n c[0] = src[i] | src[i + 1] << 8;\n c[1] = src[i + 2] | src[i + 3] << 8;\n c[2] = (2 * (c[0] & 0x1f) + 1 * (c[1] & 0x1f)) / 3 | (2 * (c[0] & 0x7e0) + 1 * (c[1] & 0x7e0)) / 3 & 0x7e0 | (2 * (c[0] & 0xf800) + 1 * (c[1] & 0xf800)) / 3 & 0xf800;\n c[3] = (2 * (c[1] & 0x1f) + 1 * (c[0] & 0x1f)) / 3 | (2 * (c[1] & 0x7e0) + 1 * (c[0] & 0x7e0)) / 3 & 0x7e0 | (2 * (c[1] & 0xf800) + 1 * (c[0] & 0xf800)) / 3 & 0xf800;\n for (let row = 0; row < 4; row++) {\n const m = src[i + 4 + row];\n let dstI = (blockY * 4 + row) * width + blockX * 4;\n dst[dstI++] = c[m & 0x3];\n dst[dstI++] = c[m >> 2 & 0x3];\n dst[dstI++] = c[m >> 4 & 0x3];\n dst[dstI++] = c[m >> 6 & 0x3];\n }\n }\n }\n return dst;\n }\n}\n/**\n * Initialize a web worker with the basis transcoder\n * @param worker the worker to initialize\n * @param wasmBinary the wasm binary to load into the worker\n * @param moduleUrl the url to the basis transcoder module\n * @returns a promise that resolves when the worker is initialized\n */\nexport function initializeWebWorker(worker, wasmBinary, moduleUrl) {\n return new Promise((res, reject) => {\n const initHandler = msg => {\n if (msg.data.action === \"init\") {\n worker.removeEventListener(\"message\", initHandler);\n res(worker);\n } else if (msg.data.action === \"error\") {\n reject(msg.data.error || \"error initializing worker\");\n }\n };\n worker.addEventListener(\"message\", initHandler);\n // we can use transferable objects here because the worker will own the ArrayBuffer\n worker.postMessage({\n action: \"init\",\n url: moduleUrl ? Tools.GetBabylonScriptURL(moduleUrl) : undefined,\n wasmBinary\n }, [wasmBinary]);\n });\n}","map":{"version":3,"names":["Tools","workerFunction","_BASIS_FORMAT","cTFETC1","cTFETC2","cTFBC1","cTFBC3","cTFBC4","cTFBC5","cTFBC7","cTFPVRTC1_4_RGB","cTFPVRTC1_4_RGBA","cTFASTC_4x4","cTFATC_RGB","cTFATC_RGBA_INTERPOLATED_ALPHA","cTFRGBA32","cTFRGB565","cTFBGR565","cTFRGBA4444","cTFFXT1_RGB","cTFPVRTC2_4_RGB","cTFPVRTC2_4_RGBA","cTFETC2_EAC_R11","cTFETC2_EAC_RG11","transcoderModulePromise","onmessage","event","data","action","url","importScripts","e","postMessage","error","BASIS","wasmBinary","then","m","initializeBasis","config","imgData","imageData","loadedFile","BasisFile","fileInfo","GetFileInfo","format","ignoreSupportedFormats","GetSupportedTranscodeFormat","needsConversion","hasAlpha","success","startTranscoding","buffers","imageIndex","images","length","image","loadSingleImage","undefined","mipCount","levels","loadMipmapLevels","levelIndex","levelInfo","pixels","TranscodeLevel","transcodedPixels","push","buffer","close","delete","id","supportedCompressionFormats","astc","bc7","s3tc","pvrtc","etc2","etc1","basisFile","getHasAlpha","imageCount","getNumImages","i","imageInfo","levelCount","getNumLevels","level","width","getImageWidth","height","getImageHeight","info","convertToRgb565","dstSize","getImageTranscodedSizeInBytes","dst","Uint8Array","transcodeImage","alignedWidth","alignedHeight","ConvertDxtToRgb565","src","srcByteOffset","c","Uint16Array","blockWidth","blockHeight","blockY","blockX","row","dstI","initializeWebWorker","worker","moduleUrl","Promise","res","reject","initHandler","msg","removeEventListener","addEventListener","GetBabylonScriptURL"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Misc/basisWorker.js"],"sourcesContent":["import { Tools } from \"./tools.js\";\n/**\n * The worker function that gets converted to a blob url to pass into a worker.\n * To be used if a developer wants to create their own worker instance and inject it instead of using the default worker.\n */\nexport function workerFunction() {\n const _BASIS_FORMAT = {\n cTFETC1: 0,\n cTFETC2: 1,\n cTFBC1: 2,\n cTFBC3: 3,\n cTFBC4: 4,\n cTFBC5: 5,\n cTFBC7: 6,\n cTFPVRTC1_4_RGB: 8,\n cTFPVRTC1_4_RGBA: 9,\n cTFASTC_4x4: 10,\n cTFATC_RGB: 11,\n cTFATC_RGBA_INTERPOLATED_ALPHA: 12,\n cTFRGBA32: 13,\n cTFRGB565: 14,\n cTFBGR565: 15,\n cTFRGBA4444: 16,\n cTFFXT1_RGB: 17,\n cTFPVRTC2_4_RGB: 18,\n cTFPVRTC2_4_RGBA: 19,\n cTFETC2_EAC_R11: 20,\n cTFETC2_EAC_RG11: 21,\n };\n let transcoderModulePromise = null;\n onmessage = (event) => {\n if (event.data.action === \"init\") {\n // Load the transcoder if it hasn't been yet\n if (event.data.url) {\n // make sure we loaded the script correctly\n try {\n importScripts(event.data.url);\n }\n catch (e) {\n postMessage({ action: \"error\", error: e });\n }\n }\n if (!transcoderModulePromise) {\n transcoderModulePromise = BASIS({\n // Override wasm binary\n wasmBinary: event.data.wasmBinary,\n });\n }\n if (transcoderModulePromise !== null) {\n transcoderModulePromise.then((m) => {\n BASIS = m;\n m.initializeBasis();\n postMessage({ action: \"init\" });\n });\n }\n }\n else if (event.data.action === \"transcode\") {\n // Transcode the basis image and return the resulting pixels\n const config = event.data.config;\n const imgData = event.data.imageData;\n const loadedFile = new BASIS.BasisFile(imgData);\n const fileInfo = GetFileInfo(loadedFile);\n let format = event.data.ignoreSupportedFormats ? null : GetSupportedTranscodeFormat(event.data.config, fileInfo);\n let needsConversion = false;\n if (format === null) {\n needsConversion = true;\n format = fileInfo.hasAlpha ? _BASIS_FORMAT.cTFBC3 : _BASIS_FORMAT.cTFBC1;\n }\n // Begin transcode\n let success = true;\n if (!loadedFile.startTranscoding()) {\n success = false;\n }\n const buffers = [];\n for (let imageIndex = 0; imageIndex < fileInfo.images.length; imageIndex++) {\n if (!success) {\n break;\n }\n const image = fileInfo.images[imageIndex];\n if (config.loadSingleImage === undefined || config.loadSingleImage === imageIndex) {\n let mipCount = image.levels.length;\n if (config.loadMipmapLevels === false) {\n mipCount = 1;\n }\n for (let levelIndex = 0; levelIndex < mipCount; levelIndex++) {\n const levelInfo = image.levels[levelIndex];\n const pixels = TranscodeLevel(loadedFile, imageIndex, levelIndex, format, needsConversion);\n if (!pixels) {\n success = false;\n break;\n }\n levelInfo.transcodedPixels = pixels;\n buffers.push(levelInfo.transcodedPixels.buffer);\n }\n }\n }\n // Close file\n loadedFile.close();\n loadedFile.delete();\n if (needsConversion) {\n format = -1;\n }\n if (!success) {\n postMessage({ action: \"transcode\", success: success, id: event.data.id });\n }\n else {\n postMessage({ action: \"transcode\", success: success, id: event.data.id, fileInfo: fileInfo, format: format }, buffers);\n }\n }\n };\n /**\n * Detects the supported transcode format for the file\n * @param config transcode config\n * @param fileInfo info about the file\n * @returns the chosed format or null if none are supported\n */\n function GetSupportedTranscodeFormat(config, fileInfo) {\n let format = null;\n if (config.supportedCompressionFormats) {\n if (config.supportedCompressionFormats.astc) {\n format = _BASIS_FORMAT.cTFASTC_4x4;\n }\n else if (config.supportedCompressionFormats.bc7) {\n format = _BASIS_FORMAT.cTFBC7;\n }\n else if (config.supportedCompressionFormats.s3tc) {\n format = fileInfo.hasAlpha ? _BASIS_FORMAT.cTFBC3 : _BASIS_FORMAT.cTFBC1;\n }\n else if (config.supportedCompressionFormats.pvrtc) {\n format = fileInfo.hasAlpha ? _BASIS_FORMAT.cTFPVRTC1_4_RGBA : _BASIS_FORMAT.cTFPVRTC1_4_RGB;\n }\n else if (config.supportedCompressionFormats.etc2) {\n format = _BASIS_FORMAT.cTFETC2;\n }\n else if (config.supportedCompressionFormats.etc1) {\n format = _BASIS_FORMAT.cTFETC1;\n }\n else {\n format = _BASIS_FORMAT.cTFRGB565;\n }\n }\n return format;\n }\n /**\n * Retrieves information about the basis file eg. dimensions\n * @param basisFile the basis file to get the info from\n * @returns information about the basis file\n */\n function GetFileInfo(basisFile) {\n const hasAlpha = basisFile.getHasAlpha();\n const imageCount = basisFile.getNumImages();\n const images = [];\n for (let i = 0; i < imageCount; i++) {\n const imageInfo = {\n levels: [],\n };\n const levelCount = basisFile.getNumLevels(i);\n for (let level = 0; level < levelCount; level++) {\n const levelInfo = {\n width: basisFile.getImageWidth(i, level),\n height: basisFile.getImageHeight(i, level),\n };\n imageInfo.levels.push(levelInfo);\n }\n images.push(imageInfo);\n }\n const info = { hasAlpha, images };\n return info;\n }\n function TranscodeLevel(loadedFile, imageIndex, levelIndex, format, convertToRgb565) {\n const dstSize = loadedFile.getImageTranscodedSizeInBytes(imageIndex, levelIndex, format);\n let dst = new Uint8Array(dstSize);\n if (!loadedFile.transcodeImage(dst, imageIndex, levelIndex, format, 1, 0)) {\n return null;\n }\n // If no supported format is found, load as dxt and convert to rgb565\n if (convertToRgb565) {\n const alignedWidth = (loadedFile.getImageWidth(imageIndex, levelIndex) + 3) & ~3;\n const alignedHeight = (loadedFile.getImageHeight(imageIndex, levelIndex) + 3) & ~3;\n dst = ConvertDxtToRgb565(dst, 0, alignedWidth, alignedHeight);\n }\n return dst;\n }\n /**\n * From https://github.com/BinomialLLC/basis_universal/blob/master/webgl/texture/dxt-to-rgb565.js\n * An unoptimized version of dxtToRgb565. Also, the floating\n * point math used to compute the colors actually results in\n * slightly different colors compared to hardware DXT decoders.\n * @param src dxt src pixels\n * @param srcByteOffset offset for the start of src\n * @param width aligned width of the image\n * @param height aligned height of the image\n * @returns the converted pixels\n */\n function ConvertDxtToRgb565(src, srcByteOffset, width, height) {\n const c = new Uint16Array(4);\n const dst = new Uint16Array(width * height);\n const blockWidth = width / 4;\n const blockHeight = height / 4;\n for (let blockY = 0; blockY < blockHeight; blockY++) {\n for (let blockX = 0; blockX < blockWidth; blockX++) {\n const i = srcByteOffset + 8 * (blockY * blockWidth + blockX);\n c[0] = src[i] | (src[i + 1] << 8);\n c[1] = src[i + 2] | (src[i + 3] << 8);\n c[2] =\n ((2 * (c[0] & 0x1f) + 1 * (c[1] & 0x1f)) / 3) |\n (((2 * (c[0] & 0x7e0) + 1 * (c[1] & 0x7e0)) / 3) & 0x7e0) |\n (((2 * (c[0] & 0xf800) + 1 * (c[1] & 0xf800)) / 3) & 0xf800);\n c[3] =\n ((2 * (c[1] & 0x1f) + 1 * (c[0] & 0x1f)) / 3) |\n (((2 * (c[1] & 0x7e0) + 1 * (c[0] & 0x7e0)) / 3) & 0x7e0) |\n (((2 * (c[1] & 0xf800) + 1 * (c[0] & 0xf800)) / 3) & 0xf800);\n for (let row = 0; row < 4; row++) {\n const m = src[i + 4 + row];\n let dstI = (blockY * 4 + row) * width + blockX * 4;\n dst[dstI++] = c[m & 0x3];\n dst[dstI++] = c[(m >> 2) & 0x3];\n dst[dstI++] = c[(m >> 4) & 0x3];\n dst[dstI++] = c[(m >> 6) & 0x3];\n }\n }\n }\n return dst;\n }\n}\n/**\n * Initialize a web worker with the basis transcoder\n * @param worker the worker to initialize\n * @param wasmBinary the wasm binary to load into the worker\n * @param moduleUrl the url to the basis transcoder module\n * @returns a promise that resolves when the worker is initialized\n */\nexport function initializeWebWorker(worker, wasmBinary, moduleUrl) {\n return new Promise((res, reject) => {\n const initHandler = (msg) => {\n if (msg.data.action === \"init\") {\n worker.removeEventListener(\"message\", initHandler);\n res(worker);\n }\n else if (msg.data.action === \"error\") {\n reject(msg.data.error || \"error initializing worker\");\n }\n };\n worker.addEventListener(\"message\", initHandler);\n // we can use transferable objects here because the worker will own the ArrayBuffer\n worker.postMessage({ action: \"init\", url: moduleUrl ? Tools.GetBabylonScriptURL(moduleUrl) : undefined, wasmBinary }, [wasmBinary]);\n });\n}\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}