1 line
8.9 KiB
Plaintext
1 line
8.9 KiB
Plaintext
|
|
{"version":3,"file":"TranscoderWorkerWrapper.mjs","sources":["../src/TranscoderWorkerWrapper.ts"],"sourcesContent":["import type { BASIS, BASIS_FORMATS, BasisBinding } from './Basis';\n\n/**\n * Initialization message sent by the main thread.\n * @ignore\n */\nexport interface IInitializeTranscoderMessage\n{\n wasmSource: ArrayBuffer;\n type: 'init';\n}\n\n/**\n * Request parameters for transcoding basis files. It only supports transcoding all of the basis file at once.\n * @ignore\n */\nexport interface ITranscodeMessage\n{\n requestID?: number;\n rgbFormat: number;\n rgbaFormat?: number;\n basisData?: Uint8Array;\n type: 'transcode';\n}\n\n/** @ignore */\nexport interface ITranscodedImage\n{\n imageID: number;\n levelArray: Array<{\n levelID: number,\n levelWidth: number,\n levelHeight: number,\n levelBuffer: Uint8Array\n }>;\n width: number;\n height: number;\n}\n\n/**\n * Response format for {@link PIXI.TranscoderWorker}.\n * @ignore\n */\nexport interface ITranscodeResponse\n{\n type: 'init' | 'transcode';\n requestID?: number;\n success: boolean;\n basisFormat?: BASIS_FORMATS;\n imageArray?: Array<{\n imageID: number,\n levelArray: Array<{\n levelID: number,\n levelWidth: number,\n levelHeight: number,\n levelBuffer: Uint8Array\n }>,\n width: number,\n height: number\n }>;\n}\n\ndeclare global\n{\n interface Window\n {\n BASIS: BASIS;\n }\n}\n\n/**\n * This wraps the transcoder web-worker functionality; it can be converted into a string to get the source code. It expects\n * you to prepend the transcoder JavaScript code so that the `BASIS` namespace is available.\n *\n * The transcoder worker responds to two types of messages: \"init\" and \"transcode\". You must always send the first \"init\"\n * {@link IInitializeTranscoderMessage} message with the WebAssembly binary; if the transcoder is successfully initialized,\n * the web-worker will respond by sending another {@link ITranscodeResponse} message with `success: true`.\n * @ignore\n */\nexport function TranscoderWorkerWrapper(): void\n{\n let basisBinding: BasisBinding;\n\n const messageHandlers = {\n init: (message: IInitializeTranscoderMessage): ITranscodeResponse =>\n {\n if (!self.BASIS)\n {\n console.warn('jsSource was not prepended?');\n\n return {\n type: 'init',\n success: false\n };\n }\n\n self.BASIS({ wasmBinary: message.wasmSource }).then((basisLibrary) =>\n {\n basisLibrary.initializeBasis();\n basisBinding = basisLibrary;\n\n (self as any).postMessage({\n type: 'init',\n success: true\n });\n });\n\n return null;\n },\n transcode(message: ITranscodeMessage): ITranscodeResponse\n {\n const basisData = message.basisData;\n const BASIS = basisBinding;\n\n const data = basisData;\n const basisFile = new BASIS.BasisFile(data);\n const imageCount = basisFile.getNumImages();\n const hasAlpha = basisFile.getHasAlpha();\n\n const basisFormat = hasAlpha\n ? message.rgbaFormat\n : message.rgbFormat;\n const basisFallbackFormat = 14;// BASIS_FORMATS.cTFRGB565 (cannot import values into web-worker!)\n const imageArray = new Array(imageCount);\n\n let fallbackMode = false;\n\n if (!basisFile.startTranscoding())\n {\n basisFile.close();\n basisFile.delete();\n\n return {\n type: 'transcode',\n requestID: message.requestID,\n success: false,\n imageArray: null\n };\n }\n\n for (let
|