@babylonjs/ktx2decoder 9.0.0 → 9.1.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.
- package/Transcoders/liteTranscoder.d.ts +1 -1
- package/Transcoders/liteTranscoder.js.map +1 -1
- package/Transcoders/liteTranscoder_UASTC_ASTC.js.map +1 -1
- package/Transcoders/liteTranscoder_UASTC_BC7.js.map +1 -1
- package/Transcoders/liteTranscoder_UASTC_R8_UNORM.d.ts +1 -1
- package/Transcoders/liteTranscoder_UASTC_R8_UNORM.js.map +1 -1
- package/Transcoders/liteTranscoder_UASTC_RG8_UNORM.d.ts +1 -1
- package/Transcoders/liteTranscoder_UASTC_RG8_UNORM.js.map +1 -1
- package/Transcoders/liteTranscoder_UASTC_RGBA_SRGB.d.ts +1 -1
- package/Transcoders/liteTranscoder_UASTC_RGBA_SRGB.js.map +1 -1
- package/Transcoders/liteTranscoder_UASTC_RGBA_UNORM.d.ts +1 -1
- package/Transcoders/liteTranscoder_UASTC_RGBA_UNORM.js.map +1 -1
- package/Transcoders/mscTranscoder.d.ts +1 -1
- package/Transcoders/mscTranscoder.js.map +1 -1
- package/ktx2Decoder.js.map +1 -1
- package/ktx2FileReader.js.map +1 -1
- package/package.json +3 -3
- package/readme.md +12 -0
- package/transcodeDecisionTree.js.map +1 -1
- package/transcoder.d.ts +2 -2
- package/transcoder.js +1 -1
- package/transcoder.js.map +1 -1
- package/transcoderManager.d.ts +1 -1
- package/transcoderManager.js.map +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type * as KTX2 from "@babylonjs/core/Materials/Textures/ktx2decoderTypes.js";
|
|
2
2
|
import { Transcoder } from "../transcoder.js";
|
|
3
3
|
import { WASMMemoryManager } from "../wasmMemoryManager.js";
|
|
4
|
-
import type
|
|
4
|
+
import { type KTX2FileReader, type IKTX2_ImageDesc } from "../ktx2FileReader.js";
|
|
5
5
|
/**
|
|
6
6
|
* @internal
|
|
7
7
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"liteTranscoder.js","sourceRoot":"","sources":["../../../../tools/ktx2Decoder/src/Transcoders/liteTranscoder.ts"],"names":[],"mappings":"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","sourcesContent":["// eslint-disable-next-line @typescript-eslint/naming-convention\r\nimport type * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\r\n\r\nimport { Transcoder } from \"../transcoder\";\r\nimport { WASMMemoryManager } from \"../wasmMemoryManager\";\r\nimport type
|
|
1
|
+
{"version":3,"file":"liteTranscoder.js","sourceRoot":"","sources":["../../../../tools/ktx2Decoder/src/Transcoders/liteTranscoder.ts"],"names":[],"mappings":"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","sourcesContent":["// eslint-disable-next-line @typescript-eslint/naming-convention\r\nimport type * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\r\n\r\nimport { Transcoder } from \"../transcoder\";\r\nimport { WASMMemoryManager } from \"../wasmMemoryManager\";\r\nimport { type KTX2FileReader, type IKTX2_ImageDesc } from \"../ktx2FileReader\";\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class LiteTranscoder extends Transcoder {\r\n private _modulePath: string;\r\n private _wasmBinary: ArrayBuffer | null = null;\r\n private _modulePromise: Promise<{ module: any }>;\r\n private _memoryManager: WASMMemoryManager;\r\n protected _transcodeInPlace: boolean;\r\n\r\n private async _instantiateWebAssemblyAsync(wasmBinary: ArrayBuffer): Promise<{ module: any }> {\r\n // eslint-disable-next-line github/no-then\r\n return await WebAssembly.instantiate(wasmBinary, { env: { memory: this._memoryManager.wasmMemory } }).then((moduleWrapper) => {\r\n return { module: moduleWrapper.instance.exports };\r\n });\r\n }\r\n\r\n protected async _loadModuleAsync(wasmBinary: ArrayBuffer | null = this._wasmBinary): Promise<{ module: any }> {\r\n this._modulePromise =\r\n this._modulePromise ||\r\n // eslint-disable-next-line github/no-then\r\n (wasmBinary ? Promise.resolve(wasmBinary) : WASMMemoryManager.LoadWASM(this._modulePath)).then(async (wasmBinary) => {\r\n return await this._instantiateWebAssemblyAsync(wasmBinary);\r\n });\r\n return await this._modulePromise;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n protected get memoryManager(): WASMMemoryManager {\r\n return this._memoryManager;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n protected setModulePath(modulePath: string, wasmBinary: ArrayBuffer | null): void {\r\n this._modulePath = Transcoder.GetWasmUrl(modulePath);\r\n this._wasmBinary = wasmBinary;\r\n }\r\n\r\n public override initialize(): void {\r\n this._transcodeInPlace = true;\r\n }\r\n\r\n public override needMemoryManager(): boolean {\r\n return true;\r\n }\r\n\r\n public override setMemoryManager(memoryMgr: WASMMemoryManager): void {\r\n this._memoryManager = memoryMgr;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public override async transcode(\r\n src: KTX2.SourceTextureFormat,\r\n dst: KTX2.TranscodeTarget,\r\n level: number,\r\n width: number,\r\n height: number,\r\n uncompressedByteLength: number,\r\n ktx2Reader: KTX2FileReader,\r\n imageDesc: IKTX2_ImageDesc | null,\r\n encodedData: Uint8Array\r\n ): Promise<Uint8Array | null> {\r\n // eslint-disable-next-line github/no-then\r\n return await this._loadModuleAsync().then((moduleWrapper: any) => {\r\n const transcoder: any = moduleWrapper.module;\r\n const [textureView, uncompressedTextureView, nBlocks] = this._prepareTranscoding(width, height, uncompressedByteLength, encodedData);\r\n\r\n return transcoder.transcode(nBlocks) === 0 ? (this._transcodeInPlace ? textureView.slice() : uncompressedTextureView!.slice()) : null;\r\n });\r\n }\r\n\r\n protected _prepareTranscoding(\r\n width: number,\r\n height: number,\r\n uncompressedByteLength: number,\r\n encodedData: Uint8Array,\r\n uncompressedNumComponents?: number\r\n ): [Uint8Array, Uint8Array | null, number] {\r\n const nBlocks = ((width + 3) >> 2) * ((height + 3) >> 2);\r\n\r\n if (uncompressedNumComponents !== undefined) {\r\n uncompressedByteLength = width * ((height + 3) >> 2) * 4 * uncompressedNumComponents;\r\n }\r\n\r\n const texMemoryPages = ((nBlocks * 16 + 65535 + (this._transcodeInPlace ? 0 : uncompressedByteLength)) >> 16) + 1;\r\n\r\n const textureView = this.memoryManager.getMemoryView(texMemoryPages, 65536, nBlocks * 16);\r\n\r\n const uncompressedTextureView = this._transcodeInPlace\r\n ? null\r\n : new Uint8Array(\r\n this._memoryManager.wasmMemory.buffer,\r\n 65536 + nBlocks * 16,\r\n uncompressedNumComponents !== undefined ? width * height * uncompressedNumComponents : uncompressedByteLength\r\n );\r\n\r\n textureView.set(encodedData);\r\n\r\n return [textureView, uncompressedTextureView, nBlocks];\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"liteTranscoder_UASTC_ASTC.js","sourceRoot":"","sources":["../../../../tools/ktx2Decoder/src/Transcoders/liteTranscoder_UASTC_ASTC.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,OAAO,KAAK,IAAI
|
|
1
|
+
{"version":3,"file":"liteTranscoder_UASTC_ASTC.js","sourceRoot":"","sources":["../../../../tools/ktx2Decoder/src/Transcoders/liteTranscoder_UASTC_ASTC.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,OAAO,KAAK,IAAI,MAAM,0CAA0C,CAAC;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;GAEG;AACH,gEAAgE;AAChE,MAAM,OAAO,yBAA0B,SAAQ,cAAc;IAWzD,6DAA6D;IACtD,MAAM,CAAU,YAAY,CAAC,GAA6B,EAAE,GAAyB,EAAE,cAAuB;QACjH,OAAO,GAAG,KAAK,IAAI,CAAC,mBAAmB,CAAC,QAAQ,IAAI,GAAG,KAAK,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC;IACnG,CAAC;IAIe,OAAO;QACnB,OAAO,yBAAyB,CAAC,IAAI,CAAC;IAC1C,CAAC;IAEe,UAAU;QACtB,KAAK,CAAC,UAAU,EAAE,CAAC;QACnB,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC,aAAa,EAAE,yBAAyB,CAAC,UAAU,CAAC,CAAC;IACtG,CAAC;;AAxBD;;GAEG;AACW,uCAAa,GAAG,6DAA6D,CAAC;AAE5F;;GAEG;AACW,oCAAU,GAAuB,IAAI,CAAC;AAO7B,8BAAI,GAAG,gCAAgC,CAAC","sourcesContent":["// eslint-disable-next-line @typescript-eslint/naming-convention\r\nimport * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\r\n\r\nimport { LiteTranscoder } from \"./liteTranscoder\";\r\n\r\n/**\r\n * @internal\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class LiteTranscoder_UASTC_ASTC extends LiteTranscoder {\r\n /**\r\n * URL to use when loading the wasm module for the transcoder\r\n */\r\n public static WasmModuleURL = \"https://cdn.babylonjs.com/ktx2Transcoders/1/uastc_astc.wasm\";\r\n\r\n /**\r\n * Binary data of the wasm module\r\n */\r\n public static WasmBinary: ArrayBuffer | null = null;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public static override CanTranscode(src: KTX2.SourceTextureFormat, dst: KTX2.TranscodeTarget, isInGammaSpace: boolean): boolean {\r\n return src === KTX2.SourceTextureFormat.UASTC4x4 && dst === KTX2.TranscodeTarget.ASTC_4X4_RGBA;\r\n }\r\n\r\n public static override Name = \"UniversalTranscoder_UASTC_ASTC\";\r\n\r\n public override getName(): string {\r\n return LiteTranscoder_UASTC_ASTC.Name;\r\n }\r\n\r\n public override initialize(): void {\r\n super.initialize();\r\n this.setModulePath(LiteTranscoder_UASTC_ASTC.WasmModuleURL, LiteTranscoder_UASTC_ASTC.WasmBinary);\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"liteTranscoder_UASTC_BC7.js","sourceRoot":"","sources":["../../../../tools/ktx2Decoder/src/Transcoders/liteTranscoder_UASTC_BC7.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,OAAO,KAAK,IAAI
|
|
1
|
+
{"version":3,"file":"liteTranscoder_UASTC_BC7.js","sourceRoot":"","sources":["../../../../tools/ktx2Decoder/src/Transcoders/liteTranscoder_UASTC_BC7.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,OAAO,KAAK,IAAI,MAAM,0CAA0C,CAAC;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;GAEG;AACH,gEAAgE;AAChE,MAAM,OAAO,wBAAyB,SAAQ,cAAc;IAWxD,6DAA6D;IACtD,MAAM,CAAU,YAAY,CAAC,GAA6B,EAAE,GAAyB,EAAE,cAAuB;QACjH,OAAO,GAAG,KAAK,IAAI,CAAC,mBAAmB,CAAC,QAAQ,IAAI,GAAG,KAAK,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;IAC9F,CAAC;IAIe,OAAO;QACnB,OAAO,wBAAwB,CAAC,IAAI,CAAC;IACzC,CAAC;IAEe,UAAU;QACtB,KAAK,CAAC,UAAU,EAAE,CAAC;QACnB,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,aAAa,EAAE,wBAAwB,CAAC,UAAU,CAAC,CAAC;IACpG,CAAC;;AAxBD;;GAEG;AACW,sCAAa,GAAG,4DAA4D,CAAC;AAE3F;;GAEG;AACW,mCAAU,GAAuB,IAAI,CAAC;AAO7B,6BAAI,GAAG,+BAA+B,CAAC","sourcesContent":["// eslint-disable-next-line @typescript-eslint/naming-convention\r\nimport * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\r\n\r\nimport { LiteTranscoder } from \"./liteTranscoder\";\r\n\r\n/**\r\n * @internal\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class LiteTranscoder_UASTC_BC7 extends LiteTranscoder {\r\n /**\r\n * URL to use when loading the wasm module for the transcoder\r\n */\r\n public static WasmModuleURL = \"https://cdn.babylonjs.com/ktx2Transcoders/1/uastc_bc7.wasm\";\r\n\r\n /**\r\n * Binary data of the wasm module\r\n */\r\n public static WasmBinary: ArrayBuffer | null = null;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public static override CanTranscode(src: KTX2.SourceTextureFormat, dst: KTX2.TranscodeTarget, isInGammaSpace: boolean): boolean {\r\n return src === KTX2.SourceTextureFormat.UASTC4x4 && dst === KTX2.TranscodeTarget.BC7_RGBA;\r\n }\r\n\r\n public static override Name = \"UniversalTranscoder_UASTC_BC7\";\r\n\r\n public override getName(): string {\r\n return LiteTranscoder_UASTC_BC7.Name;\r\n }\r\n\r\n public override initialize(): void {\r\n super.initialize();\r\n this.setModulePath(LiteTranscoder_UASTC_BC7.WasmModuleURL, LiteTranscoder_UASTC_BC7.WasmBinary);\r\n }\r\n}\r\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as KTX2 from "@babylonjs/core/Materials/Textures/ktx2decoderTypes.js";
|
|
2
2
|
import { LiteTranscoder } from "./liteTranscoder.js";
|
|
3
|
-
import type
|
|
3
|
+
import { type KTX2FileReader, type IKTX2_ImageDesc } from "../ktx2FileReader.js";
|
|
4
4
|
/**
|
|
5
5
|
* @internal
|
|
6
6
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"liteTranscoder_UASTC_R8_UNORM.js","sourceRoot":"","sources":["../../../../tools/ktx2Decoder/src/Transcoders/liteTranscoder_UASTC_R8_UNORM.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,OAAO,KAAK,IAAI
|
|
1
|
+
{"version":3,"file":"liteTranscoder_UASTC_R8_UNORM.js","sourceRoot":"","sources":["../../../../tools/ktx2Decoder/src/Transcoders/liteTranscoder_UASTC_R8_UNORM.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,OAAO,KAAK,IAAI,MAAM,0CAA0C,CAAC;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD;;GAEG;AACH,gEAAgE;AAChE,MAAM,OAAO,6BAA8B,SAAQ,cAAc;IAWtD,MAAM,CAAU,YAAY,CAAC,GAA6B,EAAE,GAAyB,EAAE,cAAuB;QACjH,OAAO,GAAG,KAAK,IAAI,CAAC,mBAAmB,CAAC,QAAQ,IAAI,GAAG,KAAK,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;IACxF,CAAC;IAIe,OAAO;QACnB,OAAO,6BAA6B,CAAC,IAAI,CAAC;IAC9C,CAAC;IAEe,UAAU;QACtB,KAAK,CAAC,UAAU,EAAE,CAAC;QACnB,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,aAAa,CAAC,6BAA6B,CAAC,aAAa,EAAE,6BAA6B,CAAC,UAAU,CAAC,CAAC;IAC9G,CAAC;IAED,gEAAgE;IAChD,KAAK,CAAC,SAAS,CAC3B,GAA6B,EAC7B,GAAyB,EACzB,KAAa,EACb,KAAa,EACb,MAAc,EACd,sBAA8B,EAC9B,UAA0B,EAC1B,SAAiC,EACjC,WAAuB;QAEvB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACpD,MAAM,UAAU,GAAQ,aAAa,CAAC,MAAM,CAAC;QAC7C,MAAM,CAAC,EAAE,uBAAuB,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,sBAAsB,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;QAEpH,OAAO,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,uBAAwB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5F,CAAC;;AA3CD;;GAEG;AACW,2CAAa,GAAG,iEAAiE,CAAC;AAEhG;;GAEG;AACW,wCAAU,GAAuB,IAAI,CAAC;AAM7B,kCAAI,GAAG,oCAAoC,CAAC","sourcesContent":["// eslint-disable-next-line @typescript-eslint/naming-convention\r\nimport * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\r\n\r\nimport { LiteTranscoder } from \"./liteTranscoder\";\r\nimport { type KTX2FileReader, type IKTX2_ImageDesc } from \"../ktx2FileReader\";\r\n\r\n/**\r\n * @internal\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class LiteTranscoder_UASTC_R8_UNORM extends LiteTranscoder {\r\n /**\r\n * URL to use when loading the wasm module for the transcoder (unorm)\r\n */\r\n public static WasmModuleURL = \"https://cdn.babylonjs.com/ktx2Transcoders/1/uastc_r8_unorm.wasm\";\r\n\r\n /**\r\n * Binary data of the wasm module\r\n */\r\n public static WasmBinary: ArrayBuffer | null = null;\r\n\r\n public static override CanTranscode(src: KTX2.SourceTextureFormat, dst: KTX2.TranscodeTarget, isInGammaSpace: boolean): boolean {\r\n return src === KTX2.SourceTextureFormat.UASTC4x4 && dst === KTX2.TranscodeTarget.R8;\r\n }\r\n\r\n public static override Name = \"UniversalTranscoder_UASTC_R8_UNORM\";\r\n\r\n public override getName(): string {\r\n return LiteTranscoder_UASTC_R8_UNORM.Name;\r\n }\r\n\r\n public override initialize(): void {\r\n super.initialize();\r\n this._transcodeInPlace = false;\r\n this.setModulePath(LiteTranscoder_UASTC_R8_UNORM.WasmModuleURL, LiteTranscoder_UASTC_R8_UNORM.WasmBinary);\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public override async transcode(\r\n src: KTX2.SourceTextureFormat,\r\n dst: KTX2.TranscodeTarget,\r\n level: number,\r\n width: number,\r\n height: number,\r\n uncompressedByteLength: number,\r\n ktx2Reader: KTX2FileReader,\r\n imageDesc: IKTX2_ImageDesc | null,\r\n encodedData: Uint8Array\r\n ): Promise<Uint8Array | null> {\r\n const moduleWrapper = await this._loadModuleAsync();\r\n const transcoder: any = moduleWrapper.module;\r\n const [, uncompressedTextureView] = this._prepareTranscoding(width, height, uncompressedByteLength, encodedData, 1);\r\n\r\n return transcoder.decode(width, height) === 0 ? uncompressedTextureView!.slice() : null;\r\n }\r\n}\r\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as KTX2 from "@babylonjs/core/Materials/Textures/ktx2decoderTypes.js";
|
|
2
2
|
import { LiteTranscoder } from "./liteTranscoder.js";
|
|
3
|
-
import type
|
|
3
|
+
import { type KTX2FileReader, type IKTX2_ImageDesc } from "../ktx2FileReader.js";
|
|
4
4
|
/**
|
|
5
5
|
* @internal
|
|
6
6
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"liteTranscoder_UASTC_RG8_UNORM.js","sourceRoot":"","sources":["../../../../tools/ktx2Decoder/src/Transcoders/liteTranscoder_UASTC_RG8_UNORM.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,OAAO,KAAK,IAAI
|
|
1
|
+
{"version":3,"file":"liteTranscoder_UASTC_RG8_UNORM.js","sourceRoot":"","sources":["../../../../tools/ktx2Decoder/src/Transcoders/liteTranscoder_UASTC_RG8_UNORM.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,OAAO,KAAK,IAAI,MAAM,0CAA0C,CAAC;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD;;GAEG;AACH,gEAAgE;AAChE,MAAM,OAAO,8BAA+B,SAAQ,cAAc;IAWvD,MAAM,CAAU,YAAY,CAAC,GAA6B,EAAE,GAAyB,EAAE,cAAuB;QACjH,OAAO,GAAG,KAAK,IAAI,CAAC,mBAAmB,CAAC,QAAQ,IAAI,GAAG,KAAK,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;IACzF,CAAC;IAIe,OAAO;QACnB,OAAO,8BAA8B,CAAC,IAAI,CAAC;IAC/C,CAAC;IAEe,UAAU;QACtB,KAAK,CAAC,UAAU,EAAE,CAAC;QACnB,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,aAAa,CAAC,8BAA8B,CAAC,aAAa,EAAE,8BAA8B,CAAC,UAAU,CAAC,CAAC;IAChH,CAAC;IAED,gEAAgE;IAChD,KAAK,CAAC,SAAS,CAC3B,GAA6B,EAC7B,GAAyB,EACzB,KAAa,EACb,KAAa,EACb,MAAc,EACd,sBAA8B,EAC9B,UAA0B,EAC1B,SAAiC,EACjC,WAAuB;QAEvB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACpD,MAAM,UAAU,GAAQ,aAAa,CAAC,MAAM,CAAC;QAC7C,MAAM,CAAC,EAAE,uBAAuB,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,sBAAsB,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;QAEpH,OAAO,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,uBAAwB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5F,CAAC;;AA3CD;;GAEG;AACW,4CAAa,GAAG,kEAAkE,CAAC;AAEjG;;GAEG;AACW,yCAAU,GAAuB,IAAI,CAAC;AAM7B,mCAAI,GAAG,qCAAqC,CAAC","sourcesContent":["// eslint-disable-next-line @typescript-eslint/naming-convention\r\nimport * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\r\n\r\nimport { LiteTranscoder } from \"./liteTranscoder\";\r\nimport { type KTX2FileReader, type IKTX2_ImageDesc } from \"../ktx2FileReader\";\r\n\r\n/**\r\n * @internal\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class LiteTranscoder_UASTC_RG8_UNORM extends LiteTranscoder {\r\n /**\r\n * URL to use when loading the wasm module for the transcoder (unorm)\r\n */\r\n public static WasmModuleURL = \"https://cdn.babylonjs.com/ktx2Transcoders/1/uastc_rg8_unorm.wasm\";\r\n\r\n /**\r\n * Binary data of the wasm module\r\n */\r\n public static WasmBinary: ArrayBuffer | null = null;\r\n\r\n public static override CanTranscode(src: KTX2.SourceTextureFormat, dst: KTX2.TranscodeTarget, isInGammaSpace: boolean): boolean {\r\n return src === KTX2.SourceTextureFormat.UASTC4x4 && dst === KTX2.TranscodeTarget.RG8;\r\n }\r\n\r\n public static override Name = \"UniversalTranscoder_UASTC_RG8_UNORM\";\r\n\r\n public override getName(): string {\r\n return LiteTranscoder_UASTC_RG8_UNORM.Name;\r\n }\r\n\r\n public override initialize(): void {\r\n super.initialize();\r\n this._transcodeInPlace = false;\r\n this.setModulePath(LiteTranscoder_UASTC_RG8_UNORM.WasmModuleURL, LiteTranscoder_UASTC_RG8_UNORM.WasmBinary);\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public override async transcode(\r\n src: KTX2.SourceTextureFormat,\r\n dst: KTX2.TranscodeTarget,\r\n level: number,\r\n width: number,\r\n height: number,\r\n uncompressedByteLength: number,\r\n ktx2Reader: KTX2FileReader,\r\n imageDesc: IKTX2_ImageDesc | null,\r\n encodedData: Uint8Array\r\n ): Promise<Uint8Array | null> {\r\n const moduleWrapper = await this._loadModuleAsync();\r\n const transcoder: any = moduleWrapper.module;\r\n const [, uncompressedTextureView] = this._prepareTranscoding(width, height, uncompressedByteLength, encodedData, 2);\r\n\r\n return transcoder.decode(width, height) === 0 ? uncompressedTextureView!.slice() : null;\r\n }\r\n}\r\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as KTX2 from "@babylonjs/core/Materials/Textures/ktx2decoderTypes.js";
|
|
2
2
|
import { LiteTranscoder } from "./liteTranscoder.js";
|
|
3
|
-
import type
|
|
3
|
+
import { type KTX2FileReader, type IKTX2_ImageDesc } from "../ktx2FileReader.js";
|
|
4
4
|
/**
|
|
5
5
|
* @internal
|
|
6
6
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"liteTranscoder_UASTC_RGBA_SRGB.js","sourceRoot":"","sources":["../../../../tools/ktx2Decoder/src/Transcoders/liteTranscoder_UASTC_RGBA_SRGB.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,OAAO,KAAK,IAAI
|
|
1
|
+
{"version":3,"file":"liteTranscoder_UASTC_RGBA_SRGB.js","sourceRoot":"","sources":["../../../../tools/ktx2Decoder/src/Transcoders/liteTranscoder_UASTC_RGBA_SRGB.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,OAAO,KAAK,IAAI,MAAM,0CAA0C,CAAC;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD;;GAEG;AACH,gEAAgE;AAChE,MAAM,OAAO,8BAA+B,SAAQ,cAAc;IAWvD,MAAM,CAAU,YAAY,CAAC,GAA6B,EAAE,GAAyB,EAAE,cAAuB;QACjH,OAAO,GAAG,KAAK,IAAI,CAAC,mBAAmB,CAAC,QAAQ,IAAI,GAAG,KAAK,IAAI,CAAC,eAAe,CAAC,MAAM,IAAI,cAAc,CAAC;IAC9G,CAAC;IAIe,OAAO;QACnB,OAAO,8BAA8B,CAAC,IAAI,CAAC;IAC/C,CAAC;IAEe,UAAU;QACtB,KAAK,CAAC,UAAU,EAAE,CAAC;QACnB,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,aAAa,CAAC,8BAA8B,CAAC,aAAa,EAAE,8BAA8B,CAAC,UAAU,CAAC,CAAC;IAChH,CAAC;IAED,gEAAgE;IAChD,KAAK,CAAC,SAAS,CAC3B,GAA6B,EAC7B,GAAyB,EACzB,KAAa,EACb,KAAa,EACb,MAAc,EACd,sBAA8B,EAC9B,UAA0B,EAC1B,SAAiC,EACjC,WAAuB;QAEvB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACpD,MAAM,UAAU,GAAQ,aAAa,CAAC,MAAM,CAAC;QAC7C,MAAM,CAAC,EAAE,uBAAuB,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,sBAAsB,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;QAEpH,OAAO,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,uBAAwB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5F,CAAC;;AA3CD;;GAEG;AACW,4CAAa,GAAG,sEAAsE,CAAC;AAErG;;GAEG;AACW,yCAAU,GAAuB,IAAI,CAAC;AAM7B,mCAAI,GAAG,qCAAqC,CAAC","sourcesContent":["// eslint-disable-next-line @typescript-eslint/naming-convention\r\nimport * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\r\n\r\nimport { LiteTranscoder } from \"./liteTranscoder\";\r\nimport { type KTX2FileReader, type IKTX2_ImageDesc } from \"../ktx2FileReader\";\r\n\r\n/**\r\n * @internal\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class LiteTranscoder_UASTC_RGBA_SRGB extends LiteTranscoder {\r\n /**\r\n * URL to use when loading the wasm module for the transcoder (srgb)\r\n */\r\n public static WasmModuleURL = \"https://cdn.babylonjs.com/ktx2Transcoders/1/uastc_rgba8_srgb_v2.wasm\";\r\n\r\n /**\r\n * Binary data of the wasm module\r\n */\r\n public static WasmBinary: ArrayBuffer | null = null;\r\n\r\n public static override CanTranscode(src: KTX2.SourceTextureFormat, dst: KTX2.TranscodeTarget, isInGammaSpace: boolean): boolean {\r\n return src === KTX2.SourceTextureFormat.UASTC4x4 && dst === KTX2.TranscodeTarget.RGBA32 && isInGammaSpace;\r\n }\r\n\r\n public static override Name = \"UniversalTranscoder_UASTC_RGBA_SRGB\";\r\n\r\n public override getName(): string {\r\n return LiteTranscoder_UASTC_RGBA_SRGB.Name;\r\n }\r\n\r\n public override initialize(): void {\r\n super.initialize();\r\n this._transcodeInPlace = false;\r\n this.setModulePath(LiteTranscoder_UASTC_RGBA_SRGB.WasmModuleURL, LiteTranscoder_UASTC_RGBA_SRGB.WasmBinary);\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public override async transcode(\r\n src: KTX2.SourceTextureFormat,\r\n dst: KTX2.TranscodeTarget,\r\n level: number,\r\n width: number,\r\n height: number,\r\n uncompressedByteLength: number,\r\n ktx2Reader: KTX2FileReader,\r\n imageDesc: IKTX2_ImageDesc | null,\r\n encodedData: Uint8Array\r\n ): Promise<Uint8Array | null> {\r\n const moduleWrapper = await this._loadModuleAsync();\r\n const transcoder: any = moduleWrapper.module;\r\n const [, uncompressedTextureView] = this._prepareTranscoding(width, height, uncompressedByteLength, encodedData, 4);\r\n\r\n return transcoder.decode(width, height) === 0 ? uncompressedTextureView!.slice() : null;\r\n }\r\n}\r\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as KTX2 from "@babylonjs/core/Materials/Textures/ktx2decoderTypes.js";
|
|
2
2
|
import { LiteTranscoder } from "./liteTranscoder.js";
|
|
3
|
-
import type
|
|
3
|
+
import { type KTX2FileReader, type IKTX2_ImageDesc } from "../ktx2FileReader.js";
|
|
4
4
|
/**
|
|
5
5
|
* @internal
|
|
6
6
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"liteTranscoder_UASTC_RGBA_UNORM.js","sourceRoot":"","sources":["../../../../tools/ktx2Decoder/src/Transcoders/liteTranscoder_UASTC_RGBA_UNORM.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,OAAO,KAAK,IAAI
|
|
1
|
+
{"version":3,"file":"liteTranscoder_UASTC_RGBA_UNORM.js","sourceRoot":"","sources":["../../../../tools/ktx2Decoder/src/Transcoders/liteTranscoder_UASTC_RGBA_UNORM.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,OAAO,KAAK,IAAI,MAAM,0CAA0C,CAAC;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD;;GAEG;AACH,gEAAgE;AAChE,MAAM,OAAO,+BAAgC,SAAQ,cAAc;IAWxD,MAAM,CAAU,YAAY,CAAC,GAA6B,EAAE,GAAyB,EAAE,cAAuB;QACjH,OAAO,GAAG,KAAK,IAAI,CAAC,mBAAmB,CAAC,QAAQ,IAAI,GAAG,KAAK,IAAI,CAAC,eAAe,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC;IAC/G,CAAC;IAIe,OAAO;QACnB,OAAO,+BAA+B,CAAC,IAAI,CAAC;IAChD,CAAC;IAEe,UAAU;QACtB,KAAK,CAAC,UAAU,EAAE,CAAC;QACnB,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,aAAa,CAAC,+BAA+B,CAAC,aAAa,EAAE,+BAA+B,CAAC,UAAU,CAAC,CAAC;IAClH,CAAC;IAED,gEAAgE;IAChD,KAAK,CAAC,SAAS,CAC3B,GAA6B,EAC7B,GAAyB,EACzB,KAAa,EACb,KAAa,EACb,MAAc,EACd,sBAA8B,EAC9B,UAA0B,EAC1B,SAAiC,EACjC,WAAuB;QAEvB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACpD,MAAM,UAAU,GAAQ,aAAa,CAAC,MAAM,CAAC;QAC7C,MAAM,CAAC,EAAE,uBAAuB,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,sBAAsB,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;QAEpH,OAAO,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,uBAAwB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5F,CAAC;;AA3CD;;GAEG;AACW,6CAAa,GAAG,uEAAuE,CAAC;AAEtG;;GAEG;AACW,0CAAU,GAAuB,IAAI,CAAC;AAM7B,oCAAI,GAAG,sCAAsC,CAAC","sourcesContent":["// eslint-disable-next-line @typescript-eslint/naming-convention\r\nimport * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\r\n\r\nimport { LiteTranscoder } from \"./liteTranscoder\";\r\nimport { type KTX2FileReader, type IKTX2_ImageDesc } from \"../ktx2FileReader\";\r\n\r\n/**\r\n * @internal\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class LiteTranscoder_UASTC_RGBA_UNORM extends LiteTranscoder {\r\n /**\r\n * URL to use when loading the wasm module for the transcoder (unorm)\r\n */\r\n public static WasmModuleURL = \"https://cdn.babylonjs.com/ktx2Transcoders/1/uastc_rgba8_unorm_v2.wasm\";\r\n\r\n /**\r\n * Binary data of the wasm module\r\n */\r\n public static WasmBinary: ArrayBuffer | null = null;\r\n\r\n public static override CanTranscode(src: KTX2.SourceTextureFormat, dst: KTX2.TranscodeTarget, isInGammaSpace: boolean): boolean {\r\n return src === KTX2.SourceTextureFormat.UASTC4x4 && dst === KTX2.TranscodeTarget.RGBA32 && !isInGammaSpace;\r\n }\r\n\r\n public static override Name = \"UniversalTranscoder_UASTC_RGBA_UNORM\";\r\n\r\n public override getName(): string {\r\n return LiteTranscoder_UASTC_RGBA_UNORM.Name;\r\n }\r\n\r\n public override initialize(): void {\r\n super.initialize();\r\n this._transcodeInPlace = false;\r\n this.setModulePath(LiteTranscoder_UASTC_RGBA_UNORM.WasmModuleURL, LiteTranscoder_UASTC_RGBA_UNORM.WasmBinary);\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public override async transcode(\r\n src: KTX2.SourceTextureFormat,\r\n dst: KTX2.TranscodeTarget,\r\n level: number,\r\n width: number,\r\n height: number,\r\n uncompressedByteLength: number,\r\n ktx2Reader: KTX2FileReader,\r\n imageDesc: IKTX2_ImageDesc | null,\r\n encodedData: Uint8Array\r\n ): Promise<Uint8Array | null> {\r\n const moduleWrapper = await this._loadModuleAsync();\r\n const transcoder: any = moduleWrapper.module;\r\n const [, uncompressedTextureView] = this._prepareTranscoding(width, height, uncompressedByteLength, encodedData, 4);\r\n\r\n return transcoder.decode(width, height) === 0 ? uncompressedTextureView!.slice() : null;\r\n }\r\n}\r\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as KTX2 from "@babylonjs/core/Materials/Textures/ktx2decoderTypes.js";
|
|
2
2
|
import { Transcoder } from "../transcoder.js";
|
|
3
|
-
import type
|
|
3
|
+
import { type KTX2FileReader, type IKTX2_ImageDesc } from "../ktx2FileReader.js";
|
|
4
4
|
/**
|
|
5
5
|
* @internal
|
|
6
6
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mscTranscoder.js","sourceRoot":"","sources":["../../../../tools/ktx2Decoder/src/Transcoders/mscTranscoder.ts"],"names":[],"mappings":"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","sourcesContent":["// eslint-disable-next-line @typescript-eslint/naming-convention\r\nimport * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\r\n\r\nimport { Transcoder } from \"../transcoder\";\r\nimport type { KTX2FileReader, IKTX2_ImageDesc } from \"../ktx2FileReader\";\r\nimport { WASMMemoryManager } from \"../wasmMemoryManager\";\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\ndeclare let MSC_TRANSCODER: any;\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\ndeclare function importScripts(...urls: string[]): void;\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class MSCTranscoder extends Transcoder {\r\n /**\r\n * URL to use when loading the MSC transcoder\r\n */\r\n public static JSModuleURL = \"https://cdn.babylonjs.com/ktx2Transcoders/1/msc_basis_transcoder.js\";\r\n /**\r\n * URL to use when loading the wasm module for the transcoder\r\n */\r\n public static WasmModuleURL = \"https://cdn.babylonjs.com/ktx2Transcoders/1/msc_basis_transcoder.wasm\";\r\n\r\n /**\r\n * Binary data of the wasm module\r\n */\r\n public static WasmBinary: ArrayBuffer | null = null;\r\n\r\n /**\r\n * MSC transcoder module, if provided externally\r\n */\r\n public static JSModule: any = null;\r\n\r\n public static UseFromWorkerThread = true;\r\n\r\n public static override Name = \"MSCTranscoder\";\r\n\r\n public override getName(): string {\r\n return MSCTranscoder.Name;\r\n }\r\n\r\n private _mscBasisTranscoderPromise: Promise<void>;\r\n private _mscBasisModule: any;\r\n\r\n private async _getMSCBasisTranscoder(): Promise<void> {\r\n if (this._mscBasisTranscoderPromise) {\r\n return await this._mscBasisTranscoderPromise;\r\n }\r\n\r\n this._mscBasisTranscoderPromise = (\r\n MSCTranscoder.WasmBinary ? Promise.resolve(MSCTranscoder.WasmBinary) : WASMMemoryManager.LoadWASM(Transcoder.GetWasmUrl(MSCTranscoder.WasmModuleURL))\r\n )\r\n // eslint-disable-next-line github/no-then\r\n .then(async (wasmBinary) => {\r\n if (MSCTranscoder.JSModule) {\r\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.\r\n (globalThis as any).MSC_TRANSCODER = MSCTranscoder.JSModule;\r\n } else {\r\n if (MSCTranscoder.UseFromWorkerThread) {\r\n importScripts(Transcoder.GetWasmUrl(MSCTranscoder.JSModuleURL));\r\n }\r\n // Worker Number = 0 and MSC_TRANSCODER has not been loaded yet.\r\n else if (typeof MSC_TRANSCODER === \"undefined\") {\r\n return await new Promise((resolve, reject) => {\r\n const head = document.getElementsByTagName(\"head\")[0];\r\n const script = document.createElement(\"script\");\r\n script.setAttribute(\"type\", \"text/javascript\");\r\n script.setAttribute(\"src\", Transcoder.GetWasmUrl(MSCTranscoder.JSModuleURL));\r\n\r\n script.onload = () => {\r\n // defensive\r\n if (typeof MSC_TRANSCODER === \"undefined\") {\r\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\r\n reject(\"MSC_TRANSCODER script loaded but MSC_TRANSCODER is not defined.\");\r\n return;\r\n }\r\n\r\n // eslint-disable-next-line github/no-then\r\n (MSC_TRANSCODER as any)({ wasmBinary }).then((basisModule: any) => {\r\n basisModule.initTranscoders();\r\n this._mscBasisModule = basisModule;\r\n resolve();\r\n });\r\n };\r\n\r\n script.onerror = () => {\r\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\r\n reject(\"Can not load MSC_TRANSCODER script.\");\r\n };\r\n\r\n head.appendChild(script);\r\n });\r\n }\r\n }\r\n\r\n return await new Promise((resolve) => {\r\n // eslint-disable-next-line github/no-then\r\n MSC_TRANSCODER({ wasmBinary }).then((basisModule: any) => {\r\n basisModule.initTranscoders();\r\n this._mscBasisModule = basisModule;\r\n resolve();\r\n });\r\n });\r\n });\r\n\r\n return await this._mscBasisTranscoderPromise;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public static override CanTranscode(src: KTX2.SourceTextureFormat, dst: KTX2.TranscodeTarget, isInGammaSpace: boolean): boolean {\r\n return true;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public override async transcode(\r\n src: KTX2.SourceTextureFormat,\r\n dst: KTX2.TranscodeTarget,\r\n level: number,\r\n width: number,\r\n height: number,\r\n uncompressedByteLength: number,\r\n ktx2Reader: KTX2FileReader,\r\n imageDesc: IKTX2_ImageDesc | null,\r\n encodedData: Uint8Array\r\n ): Promise<Uint8Array | null> {\r\n const isVideo = false;\r\n\r\n // eslint-disable-next-line github/no-then\r\n return await this._getMSCBasisTranscoder().then(() => {\r\n const basisModule = this._mscBasisModule;\r\n\r\n let transcoder: any;\r\n let imageInfo: any;\r\n let result: any;\r\n let textureData: any = null;\r\n\r\n try {\r\n transcoder = src === KTX2.SourceTextureFormat.UASTC4x4 ? new basisModule.UastcImageTranscoder() : new basisModule.BasisLzEtc1sImageTranscoder();\r\n const texFormat = src === KTX2.SourceTextureFormat.UASTC4x4 ? basisModule.TextureFormat.UASTC4x4 : basisModule.TextureFormat.ETC1S;\r\n\r\n imageInfo = new basisModule.ImageInfo(texFormat, width, height, level);\r\n\r\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!\r\n\r\n if (!basisModule.isFormatSupported(targetFormat, texFormat)) {\r\n throw new Error(\r\n `MSCTranscoder: Transcoding from \"${KTX2.SourceTextureFormat[src]}\" to \"${KTX2.TranscodeTarget[dst]}\" not supported by current transcoder build.`\r\n );\r\n }\r\n\r\n if (src === KTX2.SourceTextureFormat.ETC1S) {\r\n const sgd = ktx2Reader.supercompressionGlobalData;\r\n\r\n transcoder.decodePalettes(sgd.endpointCount, sgd.endpointsData, sgd.selectorCount, sgd.selectorsData);\r\n transcoder.decodeTables(sgd.tablesData);\r\n\r\n imageInfo.flags = imageDesc!.imageFlags;\r\n imageInfo.rgbByteOffset = 0;\r\n imageInfo.rgbByteLength = imageDesc!.rgbSliceByteLength;\r\n imageInfo.alphaByteOffset = imageDesc!.alphaSliceByteOffset > 0 ? imageDesc!.rgbSliceByteLength : 0;\r\n imageInfo.alphaByteLength = imageDesc!.alphaSliceByteLength;\r\n\r\n result = transcoder.transcodeImage(targetFormat, encodedData, imageInfo, 0, isVideo);\r\n } else {\r\n imageInfo.flags = 0;\r\n imageInfo.rgbByteOffset = 0;\r\n imageInfo.rgbByteLength = uncompressedByteLength;\r\n imageInfo.alphaByteOffset = 0;\r\n imageInfo.alphaByteLength = 0;\r\n\r\n result = transcoder.transcodeImage(targetFormat, encodedData, imageInfo, 0, ktx2Reader.hasAlpha, isVideo);\r\n }\r\n } finally {\r\n if (transcoder) {\r\n transcoder.delete();\r\n }\r\n\r\n if (imageInfo) {\r\n imageInfo.delete();\r\n }\r\n\r\n if (result && result.transcodedImage) {\r\n textureData = result.transcodedImage.get_typed_memory_view().slice();\r\n result.transcodedImage.delete();\r\n }\r\n }\r\n\r\n return textureData;\r\n });\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"mscTranscoder.js","sourceRoot":"","sources":["../../../../tools/ktx2Decoder/src/Transcoders/mscTranscoder.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,OAAO,KAAK,IAAI,MAAM,0CAA0C,CAAC;AAEjE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAQzD;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,UAAU;IAwBzB,OAAO;QACnB,OAAO,aAAa,CAAC,IAAI,CAAC;IAC9B,CAAC;IAKO,KAAK,CAAC,sBAAsB;QAChC,IAAI,IAAI,CAAC,0BAA0B,EAAE,CAAC;YAClC,OAAO,MAAM,IAAI,CAAC,0BAA0B,CAAC;QACjD,CAAC;QAED,IAAI,CAAC,0BAA0B,GAAG,CAC9B,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CACxJ;YACG,0CAA0C;aACzC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;YACvB,IAAI,aAAa,CAAC,QAAQ,EAAE,CAAC;gBACzB,iJAAiJ;gBAChJ,UAAkB,CAAC,cAAc,GAAG,aAAa,CAAC,QAAQ,CAAC;YAChE,CAAC;iBAAM,CAAC;gBACJ,IAAI,aAAa,CAAC,mBAAmB,EAAE,CAAC;oBACpC,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC;gBACpE,CAAC;gBACD,gEAAgE;qBAC3D,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE,CAAC;oBAC7C,OAAO,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;wBACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;wBACtD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;wBAChD,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;wBAC/C,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC;wBAE7E,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE;4BACjB,YAAY;4BACZ,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE,CAAC;gCACxC,2EAA2E;gCAC3E,MAAM,CAAC,iEAAiE,CAAC,CAAC;gCAC1E,OAAO;4BACX,CAAC;4BAED,0CAA0C;4BACzC,cAAsB,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAgB,EAAE,EAAE;gCAC9D,WAAW,CAAC,eAAe,EAAE,CAAC;gCAC9B,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC;gCACnC,OAAO,EAAE,CAAC;4BACd,CAAC,CAAC,CAAC;wBACP,CAAC,CAAC;wBAEF,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE;4BAClB,2EAA2E;4BAC3E,MAAM,CAAC,qCAAqC,CAAC,CAAC;wBAClD,CAAC,CAAC;wBAEF,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;oBAC7B,CAAC,CAAC,CAAC;gBACP,CAAC;YACL,CAAC;YAED,OAAO,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBACjC,0CAA0C;gBAC1C,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAgB,EAAE,EAAE;oBACrD,WAAW,CAAC,eAAe,EAAE,CAAC;oBAC9B,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC;oBACnC,OAAO,EAAE,CAAC;gBACd,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEP,OAAO,MAAM,IAAI,CAAC,0BAA0B,CAAC;IACjD,CAAC;IAED,6DAA6D;IACtD,MAAM,CAAU,YAAY,CAAC,GAA6B,EAAE,GAAyB,EAAE,cAAuB;QACjH,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,gEAAgE;IAChD,KAAK,CAAC,SAAS,CAC3B,GAA6B,EAC7B,GAAyB,EACzB,KAAa,EACb,KAAa,EACb,MAAc,EACd,sBAA8B,EAC9B,UAA0B,EAC1B,SAAiC,EACjC,WAAuB;QAEvB,MAAM,OAAO,GAAG,KAAK,CAAC;QAEtB,0CAA0C;QAC1C,OAAO,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YACjD,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC;YAEzC,IAAI,UAAe,CAAC;YACpB,IAAI,SAAc,CAAC;YACnB,IAAI,MAAW,CAAC;YAChB,IAAI,WAAW,GAAQ,IAAI,CAAC;YAE5B,IAAI,CAAC;gBACD,UAAU,GAAG,GAAG,KAAK,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,2BAA2B,EAAE,CAAC;gBAChJ,MAAM,SAAS,GAAG,GAAG,KAAK,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC;gBAEnI,SAAS,GAAG,IAAI,WAAW,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;gBAEvE,MAAM,YAAY,GAAG,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,uHAAuH;gBAEpM,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,YAAY,EAAE,SAAS,CAAC,EAAE,CAAC;oBAC1D,MAAM,IAAI,KAAK,CACX,oCAAoC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,8CAA8C,CACpJ,CAAC;gBACN,CAAC;gBAED,IAAI,GAAG,KAAK,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;oBACzC,MAAM,GAAG,GAAG,UAAU,CAAC,0BAA0B,CAAC;oBAElD,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC;oBACtG,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;oBAExC,SAAS,CAAC,KAAK,GAAG,SAAU,CAAC,UAAU,CAAC;oBACxC,SAAS,CAAC,aAAa,GAAG,CAAC,CAAC;oBAC5B,SAAS,CAAC,aAAa,GAAG,SAAU,CAAC,kBAAkB,CAAC;oBACxD,SAAS,CAAC,eAAe,GAAG,SAAU,CAAC,oBAAoB,GAAG,CAAC,CAAC,CAAC,CAAC,SAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;oBACpG,SAAS,CAAC,eAAe,GAAG,SAAU,CAAC,oBAAoB,CAAC;oBAE5D,MAAM,GAAG,UAAU,CAAC,cAAc,CAAC,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;gBACzF,CAAC;qBAAM,CAAC;oBACJ,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC;oBACpB,SAAS,CAAC,aAAa,GAAG,CAAC,CAAC;oBAC5B,SAAS,CAAC,aAAa,GAAG,sBAAsB,CAAC;oBACjD,SAAS,CAAC,eAAe,GAAG,CAAC,CAAC;oBAC9B,SAAS,CAAC,eAAe,GAAG,CAAC,CAAC;oBAE9B,MAAM,GAAG,UAAU,CAAC,cAAc,CAAC,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAC9G,CAAC;YACL,CAAC;oBAAS,CAAC;gBACP,IAAI,UAAU,EAAE,CAAC;oBACb,UAAU,CAAC,MAAM,EAAE,CAAC;gBACxB,CAAC;gBAED,IAAI,SAAS,EAAE,CAAC;oBACZ,SAAS,CAAC,MAAM,EAAE,CAAC;gBACvB,CAAC;gBAED,IAAI,MAAM,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;oBACnC,WAAW,GAAG,MAAM,CAAC,eAAe,CAAC,qBAAqB,EAAE,CAAC,KAAK,EAAE,CAAC;oBACrE,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;gBACpC,CAAC;YACL,CAAC;YAED,OAAO,WAAW,CAAC;QACvB,CAAC,CAAC,CAAC;IACP,CAAC;;AA/KD;;GAEG;AACW,yBAAW,GAAG,qEAAqE,CAAC;AAClG;;GAEG;AACW,2BAAa,GAAG,uEAAuE,CAAC;AAEtG;;GAEG;AACW,wBAAU,GAAuB,IAAI,CAAC;AAEpD;;GAEG;AACW,sBAAQ,GAAQ,IAAI,CAAC;AAErB,iCAAmB,GAAG,IAAI,CAAC;AAElB,kBAAI,GAAG,eAAe,CAAC","sourcesContent":["// eslint-disable-next-line @typescript-eslint/naming-convention\r\nimport * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\r\n\r\nimport { Transcoder } from \"../transcoder\";\r\nimport { type KTX2FileReader, type IKTX2_ImageDesc } from \"../ktx2FileReader\";\r\nimport { WASMMemoryManager } from \"../wasmMemoryManager\";\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\ndeclare let MSC_TRANSCODER: any;\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\ndeclare function importScripts(...urls: string[]): void;\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class MSCTranscoder extends Transcoder {\r\n /**\r\n * URL to use when loading the MSC transcoder\r\n */\r\n public static JSModuleURL = \"https://cdn.babylonjs.com/ktx2Transcoders/1/msc_basis_transcoder.js\";\r\n /**\r\n * URL to use when loading the wasm module for the transcoder\r\n */\r\n public static WasmModuleURL = \"https://cdn.babylonjs.com/ktx2Transcoders/1/msc_basis_transcoder.wasm\";\r\n\r\n /**\r\n * Binary data of the wasm module\r\n */\r\n public static WasmBinary: ArrayBuffer | null = null;\r\n\r\n /**\r\n * MSC transcoder module, if provided externally\r\n */\r\n public static JSModule: any = null;\r\n\r\n public static UseFromWorkerThread = true;\r\n\r\n public static override Name = \"MSCTranscoder\";\r\n\r\n public override getName(): string {\r\n return MSCTranscoder.Name;\r\n }\r\n\r\n private _mscBasisTranscoderPromise: Promise<void>;\r\n private _mscBasisModule: any;\r\n\r\n private async _getMSCBasisTranscoder(): Promise<void> {\r\n if (this._mscBasisTranscoderPromise) {\r\n return await this._mscBasisTranscoderPromise;\r\n }\r\n\r\n this._mscBasisTranscoderPromise = (\r\n MSCTranscoder.WasmBinary ? Promise.resolve(MSCTranscoder.WasmBinary) : WASMMemoryManager.LoadWASM(Transcoder.GetWasmUrl(MSCTranscoder.WasmModuleURL))\r\n )\r\n // eslint-disable-next-line github/no-then\r\n .then(async (wasmBinary) => {\r\n if (MSCTranscoder.JSModule) {\r\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.\r\n (globalThis as any).MSC_TRANSCODER = MSCTranscoder.JSModule;\r\n } else {\r\n if (MSCTranscoder.UseFromWorkerThread) {\r\n importScripts(Transcoder.GetWasmUrl(MSCTranscoder.JSModuleURL));\r\n }\r\n // Worker Number = 0 and MSC_TRANSCODER has not been loaded yet.\r\n else if (typeof MSC_TRANSCODER === \"undefined\") {\r\n return await new Promise((resolve, reject) => {\r\n const head = document.getElementsByTagName(\"head\")[0];\r\n const script = document.createElement(\"script\");\r\n script.setAttribute(\"type\", \"text/javascript\");\r\n script.setAttribute(\"src\", Transcoder.GetWasmUrl(MSCTranscoder.JSModuleURL));\r\n\r\n script.onload = () => {\r\n // defensive\r\n if (typeof MSC_TRANSCODER === \"undefined\") {\r\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\r\n reject(\"MSC_TRANSCODER script loaded but MSC_TRANSCODER is not defined.\");\r\n return;\r\n }\r\n\r\n // eslint-disable-next-line github/no-then\r\n (MSC_TRANSCODER as any)({ wasmBinary }).then((basisModule: any) => {\r\n basisModule.initTranscoders();\r\n this._mscBasisModule = basisModule;\r\n resolve();\r\n });\r\n };\r\n\r\n script.onerror = () => {\r\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\r\n reject(\"Can not load MSC_TRANSCODER script.\");\r\n };\r\n\r\n head.appendChild(script);\r\n });\r\n }\r\n }\r\n\r\n return await new Promise((resolve) => {\r\n // eslint-disable-next-line github/no-then\r\n MSC_TRANSCODER({ wasmBinary }).then((basisModule: any) => {\r\n basisModule.initTranscoders();\r\n this._mscBasisModule = basisModule;\r\n resolve();\r\n });\r\n });\r\n });\r\n\r\n return await this._mscBasisTranscoderPromise;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public static override CanTranscode(src: KTX2.SourceTextureFormat, dst: KTX2.TranscodeTarget, isInGammaSpace: boolean): boolean {\r\n return true;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public override async transcode(\r\n src: KTX2.SourceTextureFormat,\r\n dst: KTX2.TranscodeTarget,\r\n level: number,\r\n width: number,\r\n height: number,\r\n uncompressedByteLength: number,\r\n ktx2Reader: KTX2FileReader,\r\n imageDesc: IKTX2_ImageDesc | null,\r\n encodedData: Uint8Array\r\n ): Promise<Uint8Array | null> {\r\n const isVideo = false;\r\n\r\n // eslint-disable-next-line github/no-then\r\n return await this._getMSCBasisTranscoder().then(() => {\r\n const basisModule = this._mscBasisModule;\r\n\r\n let transcoder: any;\r\n let imageInfo: any;\r\n let result: any;\r\n let textureData: any = null;\r\n\r\n try {\r\n transcoder = src === KTX2.SourceTextureFormat.UASTC4x4 ? new basisModule.UastcImageTranscoder() : new basisModule.BasisLzEtc1sImageTranscoder();\r\n const texFormat = src === KTX2.SourceTextureFormat.UASTC4x4 ? basisModule.TextureFormat.UASTC4x4 : basisModule.TextureFormat.ETC1S;\r\n\r\n imageInfo = new basisModule.ImageInfo(texFormat, width, height, level);\r\n\r\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!\r\n\r\n if (!basisModule.isFormatSupported(targetFormat, texFormat)) {\r\n throw new Error(\r\n `MSCTranscoder: Transcoding from \"${KTX2.SourceTextureFormat[src]}\" to \"${KTX2.TranscodeTarget[dst]}\" not supported by current transcoder build.`\r\n );\r\n }\r\n\r\n if (src === KTX2.SourceTextureFormat.ETC1S) {\r\n const sgd = ktx2Reader.supercompressionGlobalData;\r\n\r\n transcoder.decodePalettes(sgd.endpointCount, sgd.endpointsData, sgd.selectorCount, sgd.selectorsData);\r\n transcoder.decodeTables(sgd.tablesData);\r\n\r\n imageInfo.flags = imageDesc!.imageFlags;\r\n imageInfo.rgbByteOffset = 0;\r\n imageInfo.rgbByteLength = imageDesc!.rgbSliceByteLength;\r\n imageInfo.alphaByteOffset = imageDesc!.alphaSliceByteOffset > 0 ? imageDesc!.rgbSliceByteLength : 0;\r\n imageInfo.alphaByteLength = imageDesc!.alphaSliceByteLength;\r\n\r\n result = transcoder.transcodeImage(targetFormat, encodedData, imageInfo, 0, isVideo);\r\n } else {\r\n imageInfo.flags = 0;\r\n imageInfo.rgbByteOffset = 0;\r\n imageInfo.rgbByteLength = uncompressedByteLength;\r\n imageInfo.alphaByteOffset = 0;\r\n imageInfo.alphaByteLength = 0;\r\n\r\n result = transcoder.transcodeImage(targetFormat, encodedData, imageInfo, 0, ktx2Reader.hasAlpha, isVideo);\r\n }\r\n } finally {\r\n if (transcoder) {\r\n transcoder.delete();\r\n }\r\n\r\n if (imageInfo) {\r\n imageInfo.delete();\r\n }\r\n\r\n if (result && result.transcodedImage) {\r\n textureData = result.transcodedImage.get_typed_memory_view().slice();\r\n result.transcodedImage.delete();\r\n }\r\n }\r\n\r\n return textureData;\r\n });\r\n }\r\n}\r\n"]}
|
package/ktx2Decoder.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ktx2Decoder.js","sourceRoot":"","sources":["../../../tools/ktx2Decoder/src/ktx2Decoder.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Resources used for the implementation:\r\n * - 3js KTX2 loader: https://github.com/mrdoob/three.js/blob/dfb5c23ce126ec845e4aa240599915fef5375797/examples/jsm/loaders/KTX2Loader.js\r\n * - Universal Texture Transcoders: https://github.com/KhronosGroup/Universal-Texture-Transcoders\r\n * - KTX2 specification: http://github.khronos.org/KTX-Specification/\r\n * - KTX2 binaries to convert files: https://github.com/KhronosGroup/KTX-Software/releases\r\n * - KTX specification: https://www.khronos.org/registry/DataFormat/specs/1.3/dataformat.1.3.html\r\n * - KTX-Software: https://github.com/KhronosGroup/KTX-Software\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nimport * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\r\n\r\nimport type { IKTX2_ImageDesc } from \"./ktx2FileReader\";\r\nimport { KTX2FileReader, SupercompressionScheme } from \"./ktx2FileReader\";\r\nimport { TranscoderManager } from \"./transcoderManager\";\r\nimport { LiteTranscoder_UASTC_ASTC } from \"./Transcoders/liteTranscoder_UASTC_ASTC\";\r\nimport { LiteTranscoder_UASTC_BC7 } from \"./Transcoders/liteTranscoder_UASTC_BC7\";\r\nimport { LiteTranscoder_UASTC_RGBA_UNORM } from \"./Transcoders/liteTranscoder_UASTC_RGBA_UNORM\";\r\nimport { LiteTranscoder_UASTC_RGBA_SRGB } from \"./Transcoders/liteTranscoder_UASTC_RGBA_SRGB\";\r\nimport { LiteTranscoder_UASTC_R8_UNORM } from \"./Transcoders/liteTranscoder_UASTC_R8_UNORM\";\r\nimport { LiteTranscoder_UASTC_RG8_UNORM } from \"./Transcoders/liteTranscoder_UASTC_RG8_UNORM\";\r\nimport { MSCTranscoder } from \"./Transcoders/mscTranscoder\";\r\nimport { ZSTDDecoder } from \"./zstddec\";\r\nimport { TranscodeDecisionTree } from \"./transcodeDecisionTree\";\r\n\r\nconst IsPowerOfTwo = (value: number) => {\r\n return (value & (value - 1)) === 0 && value !== 0;\r\n};\r\n\r\n/**\r\n * Class for decoding KTX2 files\r\n *\r\n */\r\nexport class KTX2Decoder {\r\n private _transcoderMgr: TranscoderManager;\r\n private _zstdDecoder: ZSTDDecoder;\r\n\r\n public static DefaultDecoderOptions: KTX2.IKTX2DecoderOptions = {};\r\n\r\n constructor() {\r\n this._transcoderMgr = new TranscoderManager();\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public async decode(data: Uint8Array, caps: KTX2.ICompressedFormatCapabilities, options?: KTX2.IKTX2DecoderOptions): Promise<KTX2.IDecodedData> {\r\n const finalOptions = { ...options, ...KTX2Decoder.DefaultDecoderOptions };\r\n\r\n const kfr = new KTX2FileReader(data);\r\n\r\n if (!kfr.isValid()) {\r\n throw new Error(\"Invalid KT2 file: wrong signature\");\r\n }\r\n\r\n kfr.parse();\r\n\r\n if (kfr.needZSTDDecoder) {\r\n if (!this._zstdDecoder) {\r\n this._zstdDecoder = new ZSTDDecoder();\r\n }\r\n\r\n await this._zstdDecoder.init();\r\n return await this._decodeDataAsync(kfr, caps, finalOptions);\r\n }\r\n\r\n return await this._decodeDataAsync(kfr, caps, finalOptions);\r\n }\r\n\r\n private async _decodeDataAsync(kfr: KTX2FileReader, caps: KTX2.ICompressedFormatCapabilities, options?: KTX2.IKTX2DecoderOptions): Promise<KTX2.IDecodedData> {\r\n const width = kfr.header.pixelWidth;\r\n const height = kfr.header.pixelHeight;\r\n const srcTexFormat = kfr.textureFormat;\r\n\r\n const decisionTree = new TranscodeDecisionTree(srcTexFormat, kfr.hasAlpha, IsPowerOfTwo(width) && IsPowerOfTwo(height), caps, options);\r\n\r\n if (options?.transcodeFormatDecisionTree) {\r\n decisionTree.parseTree(options?.transcodeFormatDecisionTree);\r\n }\r\n\r\n const transcodeFormat = decisionTree.transcodeFormat;\r\n const engineFormat = decisionTree.engineFormat;\r\n const roundToMultiple4 = decisionTree.roundToMultiple4;\r\n\r\n const transcoder = this._transcoderMgr.findTranscoder(srcTexFormat, transcodeFormat, kfr.isInGammaSpace, options?.bypassTranscoders);\r\n\r\n if (transcoder === null) {\r\n throw new Error(\r\n `no transcoder found to transcode source texture format \"${KTX2.SourceTextureFormat[srcTexFormat]}\" to format \"${KTX2.TranscodeTarget[transcodeFormat]}\"`\r\n );\r\n }\r\n\r\n const mipmaps: Array<KTX2.IMipmap> = [];\r\n const dataPromises: Array<Promise<Uint8Array | null>> = [];\r\n const decodedData: KTX2.IDecodedData = {\r\n width: 0,\r\n height: 0,\r\n transcodedFormat: engineFormat,\r\n mipmaps,\r\n isInGammaSpace: kfr.isInGammaSpace,\r\n hasAlpha: kfr.hasAlpha,\r\n transcoderName: transcoder.getName(),\r\n };\r\n\r\n let firstImageDescIndex = 0;\r\n\r\n for (let level = 0; level < kfr.header.levelCount; level++) {\r\n if (level > 0) {\r\n firstImageDescIndex += Math.max(kfr.header.layerCount, 1) * kfr.header.faceCount * Math.max(kfr.header.pixelDepth >> (level - 1), 1);\r\n }\r\n\r\n const levelWidth = Math.floor(width / (1 << level)) || 1;\r\n const levelHeight = Math.floor(height / (1 << level)) || 1;\r\n\r\n const numImagesInLevel = kfr.header.faceCount; // note that cubemap are not supported yet (see KTX2FileReader), so faceCount == 1\r\n const levelImageByteLength = ((levelWidth + 3) >> 2) * ((levelHeight + 3) >> 2) * kfr.dfdBlock.bytesPlane[0];\r\n\r\n const levelUncompressedByteLength = kfr.levels[level].uncompressedByteLength;\r\n\r\n let levelDataBuffer: ArrayBufferLike | ArrayBufferView = kfr.data.buffer;\r\n\r\n let levelDataOffset = kfr.levels[level].byteOffset + kfr.data.byteOffset;\r\n let imageOffsetInLevel = 0;\r\n\r\n if (kfr.header.supercompressionScheme === SupercompressionScheme.ZStandard) {\r\n levelDataBuffer = this._zstdDecoder.decode(new Uint8Array(levelDataBuffer, levelDataOffset, kfr.levels[level].byteLength), levelUncompressedByteLength);\r\n levelDataOffset = 0;\r\n }\r\n\r\n if (level === 0) {\r\n decodedData.width = roundToMultiple4 ? (levelWidth + 3) & ~3 : levelWidth;\r\n decodedData.height = roundToMultiple4 ? (levelHeight + 3) & ~3 : levelHeight;\r\n }\r\n\r\n for (let imageIndex = 0; imageIndex < numImagesInLevel; imageIndex++) {\r\n let encodedData: Uint8Array;\r\n let imageDesc: IKTX2_ImageDesc | null = null;\r\n\r\n if (kfr.header.supercompressionScheme === SupercompressionScheme.BasisLZ) {\r\n imageDesc = kfr.supercompressionGlobalData.imageDescs![firstImageDescIndex + imageIndex];\r\n\r\n encodedData = new Uint8Array(\r\n levelDataBuffer as ArrayBuffer,\r\n levelDataOffset + imageDesc.rgbSliceByteOffset,\r\n imageDesc.rgbSliceByteLength + imageDesc.alphaSliceByteLength\r\n );\r\n } else {\r\n encodedData = new Uint8Array(levelDataBuffer as ArrayBuffer, levelDataOffset + imageOffsetInLevel, levelImageByteLength);\r\n\r\n imageOffsetInLevel += levelImageByteLength;\r\n }\r\n\r\n const mipmap: KTX2.IMipmap = {\r\n data: null,\r\n width: levelWidth,\r\n height: levelHeight,\r\n };\r\n\r\n const transcodedData = transcoder\r\n .transcode(srcTexFormat, transcodeFormat, level, levelWidth, levelHeight, levelUncompressedByteLength, kfr, imageDesc, encodedData)\r\n // eslint-disable-next-line github/no-then\r\n .then((data) => {\r\n mipmap.data = data;\r\n return data;\r\n })\r\n // eslint-disable-next-line github/no-then\r\n .catch((reason) => {\r\n decodedData.errors = decodedData.errors ?? \"\";\r\n decodedData.errors += reason + \"\\n\" + reason.stack + \"\\n\";\r\n return null;\r\n });\r\n\r\n dataPromises.push(transcodedData);\r\n\r\n mipmaps.push(mipmap);\r\n }\r\n }\r\n\r\n await Promise.all(dataPromises);\r\n return decodedData;\r\n }\r\n}\r\n\r\n// Put in the order you want the transcoders to be used in priority\r\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_ASTC);\r\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_BC7);\r\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_RGBA_UNORM);\r\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_RGBA_SRGB);\r\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_R8_UNORM);\r\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_RG8_UNORM);\r\nTranscoderManager.RegisterTranscoder(MSCTranscoder); // catch all transcoder - will throw an error if the format can't be transcoded\r\n"]}
|
|
1
|
+
{"version":3,"file":"ktx2Decoder.js","sourceRoot":"","sources":["../../../tools/ktx2Decoder/src/ktx2Decoder.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Resources used for the implementation:\r\n * - 3js KTX2 loader: https://github.com/mrdoob/three.js/blob/dfb5c23ce126ec845e4aa240599915fef5375797/examples/jsm/loaders/KTX2Loader.js\r\n * - Universal Texture Transcoders: https://github.com/KhronosGroup/Universal-Texture-Transcoders\r\n * - KTX2 specification: http://github.khronos.org/KTX-Specification/\r\n * - KTX2 binaries to convert files: https://github.com/KhronosGroup/KTX-Software/releases\r\n * - KTX specification: https://www.khronos.org/registry/DataFormat/specs/1.3/dataformat.1.3.html\r\n * - KTX-Software: https://github.com/KhronosGroup/KTX-Software\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nimport * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\r\n\r\nimport { type IKTX2_ImageDesc, KTX2FileReader, SupercompressionScheme } from \"./ktx2FileReader\";\r\nimport { TranscoderManager } from \"./transcoderManager\";\r\nimport { LiteTranscoder_UASTC_ASTC } from \"./Transcoders/liteTranscoder_UASTC_ASTC\";\r\nimport { LiteTranscoder_UASTC_BC7 } from \"./Transcoders/liteTranscoder_UASTC_BC7\";\r\nimport { LiteTranscoder_UASTC_RGBA_UNORM } from \"./Transcoders/liteTranscoder_UASTC_RGBA_UNORM\";\r\nimport { LiteTranscoder_UASTC_RGBA_SRGB } from \"./Transcoders/liteTranscoder_UASTC_RGBA_SRGB\";\r\nimport { LiteTranscoder_UASTC_R8_UNORM } from \"./Transcoders/liteTranscoder_UASTC_R8_UNORM\";\r\nimport { LiteTranscoder_UASTC_RG8_UNORM } from \"./Transcoders/liteTranscoder_UASTC_RG8_UNORM\";\r\nimport { MSCTranscoder } from \"./Transcoders/mscTranscoder\";\r\nimport { ZSTDDecoder } from \"./zstddec\";\r\nimport { TranscodeDecisionTree } from \"./transcodeDecisionTree\";\r\n\r\nconst IsPowerOfTwo = (value: number) => {\r\n return (value & (value - 1)) === 0 && value !== 0;\r\n};\r\n\r\n/**\r\n * Class for decoding KTX2 files\r\n *\r\n */\r\nexport class KTX2Decoder {\r\n private _transcoderMgr: TranscoderManager;\r\n private _zstdDecoder: ZSTDDecoder;\r\n\r\n public static DefaultDecoderOptions: KTX2.IKTX2DecoderOptions = {};\r\n\r\n constructor() {\r\n this._transcoderMgr = new TranscoderManager();\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public async decode(data: Uint8Array, caps: KTX2.ICompressedFormatCapabilities, options?: KTX2.IKTX2DecoderOptions): Promise<KTX2.IDecodedData> {\r\n const finalOptions = { ...options, ...KTX2Decoder.DefaultDecoderOptions };\r\n\r\n const kfr = new KTX2FileReader(data);\r\n\r\n if (!kfr.isValid()) {\r\n throw new Error(\"Invalid KT2 file: wrong signature\");\r\n }\r\n\r\n kfr.parse();\r\n\r\n if (kfr.needZSTDDecoder) {\r\n if (!this._zstdDecoder) {\r\n this._zstdDecoder = new ZSTDDecoder();\r\n }\r\n\r\n await this._zstdDecoder.init();\r\n return await this._decodeDataAsync(kfr, caps, finalOptions);\r\n }\r\n\r\n return await this._decodeDataAsync(kfr, caps, finalOptions);\r\n }\r\n\r\n private async _decodeDataAsync(kfr: KTX2FileReader, caps: KTX2.ICompressedFormatCapabilities, options?: KTX2.IKTX2DecoderOptions): Promise<KTX2.IDecodedData> {\r\n const width = kfr.header.pixelWidth;\r\n const height = kfr.header.pixelHeight;\r\n const srcTexFormat = kfr.textureFormat;\r\n\r\n const decisionTree = new TranscodeDecisionTree(srcTexFormat, kfr.hasAlpha, IsPowerOfTwo(width) && IsPowerOfTwo(height), caps, options);\r\n\r\n if (options?.transcodeFormatDecisionTree) {\r\n decisionTree.parseTree(options?.transcodeFormatDecisionTree);\r\n }\r\n\r\n const transcodeFormat = decisionTree.transcodeFormat;\r\n const engineFormat = decisionTree.engineFormat;\r\n const roundToMultiple4 = decisionTree.roundToMultiple4;\r\n\r\n const transcoder = this._transcoderMgr.findTranscoder(srcTexFormat, transcodeFormat, kfr.isInGammaSpace, options?.bypassTranscoders);\r\n\r\n if (transcoder === null) {\r\n throw new Error(\r\n `no transcoder found to transcode source texture format \"${KTX2.SourceTextureFormat[srcTexFormat]}\" to format \"${KTX2.TranscodeTarget[transcodeFormat]}\"`\r\n );\r\n }\r\n\r\n const mipmaps: Array<KTX2.IMipmap> = [];\r\n const dataPromises: Array<Promise<Uint8Array | null>> = [];\r\n const decodedData: KTX2.IDecodedData = {\r\n width: 0,\r\n height: 0,\r\n transcodedFormat: engineFormat,\r\n mipmaps,\r\n isInGammaSpace: kfr.isInGammaSpace,\r\n hasAlpha: kfr.hasAlpha,\r\n transcoderName: transcoder.getName(),\r\n };\r\n\r\n let firstImageDescIndex = 0;\r\n\r\n for (let level = 0; level < kfr.header.levelCount; level++) {\r\n if (level > 0) {\r\n firstImageDescIndex += Math.max(kfr.header.layerCount, 1) * kfr.header.faceCount * Math.max(kfr.header.pixelDepth >> (level - 1), 1);\r\n }\r\n\r\n const levelWidth = Math.floor(width / (1 << level)) || 1;\r\n const levelHeight = Math.floor(height / (1 << level)) || 1;\r\n\r\n const numImagesInLevel = kfr.header.faceCount; // note that cubemap are not supported yet (see KTX2FileReader), so faceCount == 1\r\n const levelImageByteLength = ((levelWidth + 3) >> 2) * ((levelHeight + 3) >> 2) * kfr.dfdBlock.bytesPlane[0];\r\n\r\n const levelUncompressedByteLength = kfr.levels[level].uncompressedByteLength;\r\n\r\n let levelDataBuffer: ArrayBufferLike | ArrayBufferView = kfr.data.buffer;\r\n\r\n let levelDataOffset = kfr.levels[level].byteOffset + kfr.data.byteOffset;\r\n let imageOffsetInLevel = 0;\r\n\r\n if (kfr.header.supercompressionScheme === SupercompressionScheme.ZStandard) {\r\n levelDataBuffer = this._zstdDecoder.decode(new Uint8Array(levelDataBuffer, levelDataOffset, kfr.levels[level].byteLength), levelUncompressedByteLength);\r\n levelDataOffset = 0;\r\n }\r\n\r\n if (level === 0) {\r\n decodedData.width = roundToMultiple4 ? (levelWidth + 3) & ~3 : levelWidth;\r\n decodedData.height = roundToMultiple4 ? (levelHeight + 3) & ~3 : levelHeight;\r\n }\r\n\r\n for (let imageIndex = 0; imageIndex < numImagesInLevel; imageIndex++) {\r\n let encodedData: Uint8Array;\r\n let imageDesc: IKTX2_ImageDesc | null = null;\r\n\r\n if (kfr.header.supercompressionScheme === SupercompressionScheme.BasisLZ) {\r\n imageDesc = kfr.supercompressionGlobalData.imageDescs![firstImageDescIndex + imageIndex];\r\n\r\n encodedData = new Uint8Array(\r\n levelDataBuffer as ArrayBuffer,\r\n levelDataOffset + imageDesc.rgbSliceByteOffset,\r\n imageDesc.rgbSliceByteLength + imageDesc.alphaSliceByteLength\r\n );\r\n } else {\r\n encodedData = new Uint8Array(levelDataBuffer as ArrayBuffer, levelDataOffset + imageOffsetInLevel, levelImageByteLength);\r\n\r\n imageOffsetInLevel += levelImageByteLength;\r\n }\r\n\r\n const mipmap: KTX2.IMipmap = {\r\n data: null,\r\n width: levelWidth,\r\n height: levelHeight,\r\n };\r\n\r\n const transcodedData = transcoder\r\n .transcode(srcTexFormat, transcodeFormat, level, levelWidth, levelHeight, levelUncompressedByteLength, kfr, imageDesc, encodedData)\r\n // eslint-disable-next-line github/no-then\r\n .then((data) => {\r\n mipmap.data = data;\r\n return data;\r\n })\r\n // eslint-disable-next-line github/no-then\r\n .catch((reason) => {\r\n decodedData.errors = decodedData.errors ?? \"\";\r\n decodedData.errors += reason + \"\\n\" + reason.stack + \"\\n\";\r\n return null;\r\n });\r\n\r\n dataPromises.push(transcodedData);\r\n\r\n mipmaps.push(mipmap);\r\n }\r\n }\r\n\r\n await Promise.all(dataPromises);\r\n return decodedData;\r\n }\r\n}\r\n\r\n// Put in the order you want the transcoders to be used in priority\r\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_ASTC);\r\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_BC7);\r\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_RGBA_UNORM);\r\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_RGBA_SRGB);\r\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_R8_UNORM);\r\nTranscoderManager.RegisterTranscoder(LiteTranscoder_UASTC_RG8_UNORM);\r\nTranscoderManager.RegisterTranscoder(MSCTranscoder); // catch all transcoder - will throw an error if the format can't be transcoded\r\n"]}
|
package/ktx2FileReader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ktx2FileReader.js","sourceRoot":"","sources":["../../../tools/ktx2Decoder/src/ktx2FileReader.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\r\n\r\nimport { DataReader } from \"./Misc/dataReader\";\r\n\r\n/** @internal */\r\nexport enum SupercompressionScheme {\r\n None = 0,\r\n BasisLZ = 1,\r\n ZStandard = 2,\r\n ZLib = 3,\r\n}\r\n\r\nconst enum DFDModel {\r\n ETC1S = 163,\r\n UASTC = 166,\r\n}\r\n\r\nconst enum DFDChannel_ETC1S {\r\n RGB = 0,\r\n RRR = 3,\r\n GGG = 4,\r\n AAA = 15,\r\n}\r\n\r\nconst enum DFDChannel_UASTC {\r\n RGB = 0,\r\n RGBA = 3,\r\n RRR = 4,\r\n RRRG = 5,\r\n}\r\n\r\nconst enum DFDTransferFunction {\r\n linear = 1,\r\n sRGB = 2,\r\n}\r\n\r\n/** @internal */\r\nexport interface IKTX2_Header {\r\n vkFormat: number;\r\n typeSize: number;\r\n pixelWidth: number;\r\n pixelHeight: number;\r\n pixelDepth: number;\r\n layerCount: number;\r\n faceCount: number;\r\n levelCount: number;\r\n supercompressionScheme: number;\r\n dfdByteOffset: number;\r\n dfdByteLength: number;\r\n kvdByteOffset: number;\r\n kvdByteLength: number;\r\n sgdByteOffset: number;\r\n sgdByteLength: number;\r\n}\r\n\r\n/** @internal */\r\nexport interface IKTX2_Level {\r\n byteOffset: number;\r\n byteLength: number;\r\n uncompressedByteLength: number;\r\n}\r\n\r\ninterface IKTX2_Sample {\r\n bitOffset: number;\r\n bitLength: number;\r\n channelType: number;\r\n channelFlags: number;\r\n samplePosition: number[];\r\n sampleLower: number;\r\n sampleUpper: number;\r\n}\r\n\r\n/** @internal */\r\nexport interface IKTX2_DFD {\r\n vendorId: number;\r\n descriptorType: number;\r\n versionNumber: number;\r\n descriptorBlockSize: number;\r\n colorModel: number;\r\n colorPrimaries: number;\r\n transferFunction: number;\r\n flags: number;\r\n texelBlockDimension: {\r\n x: number;\r\n y: number;\r\n z: number;\r\n w: number;\r\n };\r\n bytesPlane: Array<number>;\r\n numSamples: number;\r\n samples: Array<IKTX2_Sample>;\r\n}\r\n\r\n/** @internal */\r\nexport interface IKTX2_ImageDesc {\r\n imageFlags: number;\r\n rgbSliceByteOffset: number;\r\n rgbSliceByteLength: number;\r\n alphaSliceByteOffset: number;\r\n alphaSliceByteLength: number;\r\n}\r\n\r\n/** @internal */\r\nexport interface IKTX2_SupercompressionGlobalData {\r\n endpointCount?: number;\r\n selectorCount?: number;\r\n endpointsByteLength?: number;\r\n selectorsByteLength?: number;\r\n tablesByteLength?: number;\r\n extendedByteLength?: number;\r\n imageDescs?: Array<IKTX2_ImageDesc>;\r\n endpointsData?: Uint8Array;\r\n selectorsData?: Uint8Array;\r\n tablesData?: Uint8Array;\r\n extendedData?: Uint8Array;\r\n}\r\n\r\nexport class KTX2FileReader {\r\n private _data: Uint8Array;\r\n private _header: IKTX2_Header;\r\n private _levels: Array<IKTX2_Level>;\r\n private _dfdBlock: IKTX2_DFD;\r\n private _supercompressionGlobalData: IKTX2_SupercompressionGlobalData;\r\n\r\n /**\r\n * Will throw an exception if the file can't be parsed\r\n * @param data\r\n */\r\n constructor(data: Uint8Array) {\r\n this._data = data;\r\n }\r\n\r\n public get data(): Uint8Array {\r\n return this._data;\r\n }\r\n\r\n public get header(): IKTX2_Header {\r\n return this._header;\r\n }\r\n\r\n public get levels(): Array<IKTX2_Level> {\r\n return this._levels;\r\n }\r\n\r\n public get dfdBlock(): IKTX2_DFD {\r\n return this._dfdBlock;\r\n }\r\n\r\n public get supercompressionGlobalData(): IKTX2_SupercompressionGlobalData {\r\n return this._supercompressionGlobalData;\r\n }\r\n\r\n public isValid() {\r\n return KTX2FileReader.IsValid(this._data);\r\n }\r\n\r\n public parse() {\r\n let offsetInFile = 12; // skip the header\r\n\r\n /**\r\n * Get the header\r\n */\r\n const hdrReader = new DataReader(this._data, offsetInFile, 17 * 4);\r\n\r\n const header = (this._header = {\r\n vkFormat: hdrReader.readUint32(),\r\n typeSize: hdrReader.readUint32(),\r\n pixelWidth: hdrReader.readUint32(),\r\n pixelHeight: hdrReader.readUint32(),\r\n pixelDepth: hdrReader.readUint32(),\r\n layerCount: hdrReader.readUint32(),\r\n faceCount: hdrReader.readUint32(),\r\n levelCount: hdrReader.readUint32(),\r\n supercompressionScheme: hdrReader.readUint32(),\r\n\r\n dfdByteOffset: hdrReader.readUint32(),\r\n dfdByteLength: hdrReader.readUint32(),\r\n kvdByteOffset: hdrReader.readUint32(),\r\n kvdByteLength: hdrReader.readUint32(),\r\n sgdByteOffset: hdrReader.readUint64(),\r\n sgdByteLength: hdrReader.readUint64(),\r\n });\r\n\r\n if (header.pixelDepth > 0) {\r\n throw new Error(`Failed to parse KTX2 file - Only 2D textures are currently supported.`);\r\n }\r\n\r\n if (header.layerCount > 1) {\r\n throw new Error(`Failed to parse KTX2 file - Array textures are not currently supported.`);\r\n }\r\n\r\n if (header.faceCount > 1) {\r\n throw new Error(`Failed to parse KTX2 file - Cube textures are not currently supported.`);\r\n }\r\n\r\n offsetInFile += hdrReader.byteOffset;\r\n\r\n /**\r\n * Get the levels\r\n */\r\n let levelCount = Math.max(1, header.levelCount);\r\n\r\n const levelReader = new DataReader(this._data, offsetInFile, levelCount * 3 * (2 * 4));\r\n\r\n const levels: Array<IKTX2_Level> = (this._levels = []);\r\n\r\n while (levelCount--) {\r\n levels.push({\r\n byteOffset: levelReader.readUint64(),\r\n byteLength: levelReader.readUint64(),\r\n uncompressedByteLength: levelReader.readUint64(),\r\n });\r\n }\r\n\r\n /**\r\n * Get the data format descriptor (DFD) blocks\r\n */\r\n const dfdReader = new DataReader(this._data, header.dfdByteOffset, header.dfdByteLength);\r\n\r\n const dfdBlock = (this._dfdBlock = {\r\n vendorId: dfdReader.skipBytes(4 /* skip totalSize */).readUint16(),\r\n descriptorType: dfdReader.readUint16(),\r\n versionNumber: dfdReader.readUint16(),\r\n descriptorBlockSize: dfdReader.readUint16(),\r\n colorModel: dfdReader.readUint8(),\r\n colorPrimaries: dfdReader.readUint8(),\r\n transferFunction: dfdReader.readUint8(),\r\n flags: dfdReader.readUint8(),\r\n texelBlockDimension: {\r\n x: dfdReader.readUint8() + 1,\r\n y: dfdReader.readUint8() + 1,\r\n z: dfdReader.readUint8() + 1,\r\n w: dfdReader.readUint8() + 1,\r\n },\r\n bytesPlane: [\r\n dfdReader.readUint8() /* bytesPlane0 */,\r\n dfdReader.readUint8() /* bytesPlane1 */,\r\n dfdReader.readUint8() /* bytesPlane2 */,\r\n dfdReader.readUint8() /* bytesPlane3 */,\r\n dfdReader.readUint8() /* bytesPlane4 */,\r\n dfdReader.readUint8() /* bytesPlane5 */,\r\n dfdReader.readUint8() /* bytesPlane6 */,\r\n dfdReader.readUint8() /* bytesPlane7 */,\r\n ],\r\n numSamples: 0,\r\n samples: new Array<IKTX2_Sample>(),\r\n });\r\n\r\n dfdBlock.numSamples = (dfdBlock.descriptorBlockSize - 24) / 16;\r\n\r\n for (let i = 0; i < dfdBlock.numSamples; i++) {\r\n const sample = {\r\n bitOffset: dfdReader.readUint16(),\r\n bitLength: dfdReader.readUint8() + 1,\r\n channelType: dfdReader.readUint8(),\r\n channelFlags: 0,\r\n samplePosition: [\r\n dfdReader.readUint8() /* samplePosition0 */,\r\n dfdReader.readUint8() /* samplePosition1 */,\r\n dfdReader.readUint8() /* samplePosition2 */,\r\n dfdReader.readUint8() /* samplePosition3 */,\r\n ],\r\n sampleLower: dfdReader.readUint32(),\r\n sampleUpper: dfdReader.readUint32(),\r\n };\r\n\r\n sample.channelFlags = (sample.channelType & 0xf0) >> 4;\r\n sample.channelType = sample.channelType & 0x0f;\r\n\r\n dfdBlock.samples.push(sample);\r\n }\r\n\r\n /**\r\n * Get the Supercompression Global Data (sgd)\r\n */\r\n const sgd: IKTX2_SupercompressionGlobalData = (this._supercompressionGlobalData = {});\r\n\r\n if (header.sgdByteLength > 0) {\r\n const sgdReader = new DataReader(this._data, header.sgdByteOffset, header.sgdByteLength);\r\n\r\n sgd.endpointCount = sgdReader.readUint16();\r\n sgd.selectorCount = sgdReader.readUint16();\r\n sgd.endpointsByteLength = sgdReader.readUint32();\r\n sgd.selectorsByteLength = sgdReader.readUint32();\r\n sgd.tablesByteLength = sgdReader.readUint32();\r\n sgd.extendedByteLength = sgdReader.readUint32();\r\n sgd.imageDescs = [];\r\n\r\n const imageCount = this._getImageCount();\r\n\r\n for (let i = 0; i < imageCount; i++) {\r\n sgd.imageDescs.push({\r\n imageFlags: sgdReader.readUint32(),\r\n rgbSliceByteOffset: sgdReader.readUint32(),\r\n rgbSliceByteLength: sgdReader.readUint32(),\r\n alphaSliceByteOffset: sgdReader.readUint32(),\r\n alphaSliceByteLength: sgdReader.readUint32(),\r\n });\r\n }\r\n\r\n const endpointsByteOffset = header.sgdByteOffset + sgdReader.byteOffset;\r\n const selectorsByteOffset = endpointsByteOffset + sgd.endpointsByteLength;\r\n const tablesByteOffset = selectorsByteOffset + sgd.selectorsByteLength;\r\n const extendedByteOffset = tablesByteOffset + sgd.tablesByteLength;\r\n\r\n sgd.endpointsData = new Uint8Array(this._data.buffer, this._data.byteOffset + endpointsByteOffset, sgd.endpointsByteLength);\r\n sgd.selectorsData = new Uint8Array(this._data.buffer, this._data.byteOffset + selectorsByteOffset, sgd.selectorsByteLength);\r\n sgd.tablesData = new Uint8Array(this._data.buffer, this._data.byteOffset + tablesByteOffset, sgd.tablesByteLength);\r\n sgd.extendedData = new Uint8Array(this._data.buffer, this._data.byteOffset + extendedByteOffset, sgd.extendedByteLength);\r\n }\r\n }\r\n\r\n private _getImageCount(): number {\r\n let layerPixelDepth = Math.max(this._header.pixelDepth, 1);\r\n for (let i = 1; i < this._header.levelCount; i++) {\r\n layerPixelDepth += Math.max(this._header.pixelDepth >> i, 1);\r\n }\r\n\r\n return Math.max(this._header.layerCount, 1) * this._header.faceCount * layerPixelDepth;\r\n }\r\n\r\n public get textureFormat(): KTX2.SourceTextureFormat {\r\n return this._dfdBlock.colorModel === DFDModel.UASTC ? KTX2.SourceTextureFormat.UASTC4x4 : KTX2.SourceTextureFormat.ETC1S;\r\n }\r\n\r\n public get hasAlpha(): boolean {\r\n const tformat = this.textureFormat;\r\n\r\n switch (tformat) {\r\n case KTX2.SourceTextureFormat.ETC1S:\r\n return (\r\n this._dfdBlock.numSamples === 2 &&\r\n (this._dfdBlock.samples[0].channelType === DFDChannel_ETC1S.AAA || this._dfdBlock.samples[1].channelType === DFDChannel_ETC1S.AAA)\r\n );\r\n\r\n case KTX2.SourceTextureFormat.UASTC4x4:\r\n return this._dfdBlock.samples[0].channelType === DFDChannel_UASTC.RGBA;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public get needZSTDDecoder(): boolean {\r\n return this._header.supercompressionScheme === SupercompressionScheme.ZStandard;\r\n }\r\n\r\n public get isInGammaSpace(): boolean {\r\n return this._dfdBlock.transferFunction === DFDTransferFunction.sRGB;\r\n }\r\n\r\n public static IsValid(data: ArrayBufferView): boolean {\r\n if (data.byteLength >= 12) {\r\n // '«', 'K', 'T', 'X', ' ', '2', '0', '»', '\\r', '\\n', '\\x1A', '\\n'\r\n const identifier = new Uint8Array(data.buffer, data.byteOffset, 12);\r\n if (\r\n identifier[0] === 0xab &&\r\n identifier[1] === 0x4b &&\r\n identifier[2] === 0x54 &&\r\n identifier[3] === 0x58 &&\r\n identifier[4] === 0x20 &&\r\n identifier[5] === 0x32 &&\r\n identifier[6] === 0x30 &&\r\n identifier[7] === 0xbb &&\r\n identifier[8] === 0x0d &&\r\n identifier[9] === 0x0a &&\r\n identifier[10] === 0x1a &&\r\n identifier[11] === 0x0a\r\n ) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"ktx2FileReader.js","sourceRoot":"","sources":["../../../tools/ktx2Decoder/src/ktx2FileReader.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\r\n\r\nimport { DataReader } from \"./Misc/dataReader\";\r\n\r\n/** @internal */\r\nexport enum SupercompressionScheme {\r\n None = 0,\r\n BasisLZ = 1,\r\n ZStandard = 2,\r\n ZLib = 3,\r\n}\r\n\r\nconst enum DFDModel {\r\n ETC1S = 163,\r\n UASTC = 166,\r\n}\r\n\r\nconst enum DFDChannel_ETC1S {\r\n RGB = 0,\r\n RRR = 3,\r\n GGG = 4,\r\n AAA = 15,\r\n}\r\n\r\nconst enum DFDChannel_UASTC {\r\n RGB = 0,\r\n RGBA = 3,\r\n RRR = 4,\r\n RRRG = 5,\r\n}\r\n\r\nconst enum DFDTransferFunction {\r\n linear = 1,\r\n sRGB = 2,\r\n}\r\n\r\n/** @internal */\r\nexport interface IKTX2_Header {\r\n vkFormat: number;\r\n typeSize: number;\r\n pixelWidth: number;\r\n pixelHeight: number;\r\n pixelDepth: number;\r\n layerCount: number;\r\n faceCount: number;\r\n levelCount: number;\r\n supercompressionScheme: number;\r\n dfdByteOffset: number;\r\n dfdByteLength: number;\r\n kvdByteOffset: number;\r\n kvdByteLength: number;\r\n sgdByteOffset: number;\r\n sgdByteLength: number;\r\n}\r\n\r\n/** @internal */\r\nexport interface IKTX2_Level {\r\n byteOffset: number;\r\n byteLength: number;\r\n uncompressedByteLength: number;\r\n}\r\n\r\ninterface IKTX2_Sample {\r\n bitOffset: number;\r\n bitLength: number;\r\n channelType: number;\r\n channelFlags: number;\r\n samplePosition: number[];\r\n sampleLower: number;\r\n sampleUpper: number;\r\n}\r\n\r\n/** @internal */\r\nexport interface IKTX2_DFD {\r\n vendorId: number;\r\n descriptorType: number;\r\n versionNumber: number;\r\n descriptorBlockSize: number;\r\n colorModel: number;\r\n colorPrimaries: number;\r\n transferFunction: number;\r\n flags: number;\r\n texelBlockDimension: {\r\n x: number;\r\n y: number;\r\n z: number;\r\n w: number;\r\n };\r\n bytesPlane: Array<number>;\r\n numSamples: number;\r\n samples: Array<IKTX2_Sample>;\r\n}\r\n\r\n/** @internal */\r\nexport interface IKTX2_ImageDesc {\r\n imageFlags: number;\r\n rgbSliceByteOffset: number;\r\n rgbSliceByteLength: number;\r\n alphaSliceByteOffset: number;\r\n alphaSliceByteLength: number;\r\n}\r\n\r\n/** @internal */\r\nexport interface IKTX2_SupercompressionGlobalData {\r\n endpointCount?: number;\r\n selectorCount?: number;\r\n endpointsByteLength?: number;\r\n selectorsByteLength?: number;\r\n tablesByteLength?: number;\r\n extendedByteLength?: number;\r\n imageDescs?: Array<IKTX2_ImageDesc>;\r\n endpointsData?: Uint8Array;\r\n selectorsData?: Uint8Array;\r\n tablesData?: Uint8Array;\r\n extendedData?: Uint8Array;\r\n}\r\n\r\nexport class KTX2FileReader {\r\n private _data: Uint8Array;\r\n private _header: IKTX2_Header;\r\n private _levels: Array<IKTX2_Level>;\r\n private _dfdBlock: IKTX2_DFD;\r\n private _supercompressionGlobalData: IKTX2_SupercompressionGlobalData;\r\n\r\n /**\r\n * Will throw an exception if the file can't be parsed\r\n * @param data\r\n */\r\n constructor(data: Uint8Array) {\r\n this._data = data;\r\n }\r\n\r\n public get data(): Uint8Array {\r\n return this._data;\r\n }\r\n\r\n public get header(): IKTX2_Header {\r\n return this._header;\r\n }\r\n\r\n public get levels(): Array<IKTX2_Level> {\r\n return this._levels;\r\n }\r\n\r\n public get dfdBlock(): IKTX2_DFD {\r\n return this._dfdBlock;\r\n }\r\n\r\n public get supercompressionGlobalData(): IKTX2_SupercompressionGlobalData {\r\n return this._supercompressionGlobalData;\r\n }\r\n\r\n public isValid() {\r\n return KTX2FileReader.IsValid(this._data);\r\n }\r\n\r\n public parse() {\r\n let offsetInFile = 12; // skip the header\r\n\r\n /**\r\n * Get the header\r\n */\r\n const hdrReader = new DataReader(this._data, offsetInFile, 17 * 4);\r\n\r\n const header = (this._header = {\r\n vkFormat: hdrReader.readUint32(),\r\n typeSize: hdrReader.readUint32(),\r\n pixelWidth: hdrReader.readUint32(),\r\n pixelHeight: hdrReader.readUint32(),\r\n pixelDepth: hdrReader.readUint32(),\r\n layerCount: hdrReader.readUint32(),\r\n faceCount: hdrReader.readUint32(),\r\n levelCount: hdrReader.readUint32(),\r\n supercompressionScheme: hdrReader.readUint32(),\r\n\r\n dfdByteOffset: hdrReader.readUint32(),\r\n dfdByteLength: hdrReader.readUint32(),\r\n kvdByteOffset: hdrReader.readUint32(),\r\n kvdByteLength: hdrReader.readUint32(),\r\n sgdByteOffset: hdrReader.readUint64(),\r\n sgdByteLength: hdrReader.readUint64(),\r\n });\r\n\r\n if (header.pixelDepth > 0) {\r\n throw new Error(`Failed to parse KTX2 file - Only 2D textures are currently supported.`);\r\n }\r\n\r\n if (header.layerCount > 1) {\r\n throw new Error(`Failed to parse KTX2 file - Array textures are not currently supported.`);\r\n }\r\n\r\n if (header.faceCount > 1) {\r\n throw new Error(`Failed to parse KTX2 file - Cube textures are not currently supported.`);\r\n }\r\n\r\n offsetInFile += hdrReader.byteOffset;\r\n\r\n /**\r\n * Get the levels\r\n */\r\n let levelCount = Math.max(1, header.levelCount);\r\n\r\n const levelReader = new DataReader(this._data, offsetInFile, levelCount * 3 * (2 * 4));\r\n\r\n const levels: Array<IKTX2_Level> = (this._levels = []);\r\n\r\n while (levelCount--) {\r\n levels.push({\r\n byteOffset: levelReader.readUint64(),\r\n byteLength: levelReader.readUint64(),\r\n uncompressedByteLength: levelReader.readUint64(),\r\n });\r\n }\r\n\r\n /**\r\n * Get the data format descriptor (DFD) blocks\r\n */\r\n const dfdReader = new DataReader(this._data, header.dfdByteOffset, header.dfdByteLength);\r\n\r\n const dfdBlock = (this._dfdBlock = {\r\n vendorId: dfdReader.skipBytes(4 /* skip totalSize */).readUint16(),\r\n descriptorType: dfdReader.readUint16(),\r\n versionNumber: dfdReader.readUint16(),\r\n descriptorBlockSize: dfdReader.readUint16(),\r\n colorModel: dfdReader.readUint8(),\r\n colorPrimaries: dfdReader.readUint8(),\r\n transferFunction: dfdReader.readUint8(),\r\n flags: dfdReader.readUint8(),\r\n texelBlockDimension: {\r\n x: dfdReader.readUint8() + 1,\r\n y: dfdReader.readUint8() + 1,\r\n z: dfdReader.readUint8() + 1,\r\n w: dfdReader.readUint8() + 1,\r\n },\r\n bytesPlane: [\r\n dfdReader.readUint8() /* bytesPlane0 */,\r\n dfdReader.readUint8() /* bytesPlane1 */,\r\n dfdReader.readUint8() /* bytesPlane2 */,\r\n dfdReader.readUint8() /* bytesPlane3 */,\r\n dfdReader.readUint8() /* bytesPlane4 */,\r\n dfdReader.readUint8() /* bytesPlane5 */,\r\n dfdReader.readUint8() /* bytesPlane6 */,\r\n dfdReader.readUint8() /* bytesPlane7 */,\r\n ],\r\n numSamples: 0,\r\n samples: new Array<IKTX2_Sample>(),\r\n });\r\n\r\n dfdBlock.numSamples = (dfdBlock.descriptorBlockSize - 24) / 16;\r\n\r\n for (let i = 0; i < dfdBlock.numSamples; i++) {\r\n const sample = {\r\n bitOffset: dfdReader.readUint16(),\r\n bitLength: dfdReader.readUint8() + 1,\r\n channelType: dfdReader.readUint8(),\r\n channelFlags: 0,\r\n samplePosition: [\r\n dfdReader.readUint8() /* samplePosition0 */,\r\n dfdReader.readUint8() /* samplePosition1 */,\r\n dfdReader.readUint8() /* samplePosition2 */,\r\n dfdReader.readUint8() /* samplePosition3 */,\r\n ],\r\n sampleLower: dfdReader.readUint32(),\r\n sampleUpper: dfdReader.readUint32(),\r\n };\r\n\r\n sample.channelFlags = (sample.channelType & 0xf0) >> 4;\r\n sample.channelType = sample.channelType & 0x0f;\r\n\r\n dfdBlock.samples.push(sample);\r\n }\r\n\r\n /**\r\n * Get the Supercompression Global Data (sgd)\r\n */\r\n const sgd: IKTX2_SupercompressionGlobalData = (this._supercompressionGlobalData = {});\r\n\r\n if (header.sgdByteLength > 0) {\r\n const sgdReader = new DataReader(this._data, header.sgdByteOffset, header.sgdByteLength);\r\n\r\n sgd.endpointCount = sgdReader.readUint16();\r\n sgd.selectorCount = sgdReader.readUint16();\r\n sgd.endpointsByteLength = sgdReader.readUint32();\r\n sgd.selectorsByteLength = sgdReader.readUint32();\r\n sgd.tablesByteLength = sgdReader.readUint32();\r\n sgd.extendedByteLength = sgdReader.readUint32();\r\n sgd.imageDescs = [];\r\n\r\n const imageCount = this._getImageCount();\r\n\r\n for (let i = 0; i < imageCount; i++) {\r\n sgd.imageDescs.push({\r\n imageFlags: sgdReader.readUint32(),\r\n rgbSliceByteOffset: sgdReader.readUint32(),\r\n rgbSliceByteLength: sgdReader.readUint32(),\r\n alphaSliceByteOffset: sgdReader.readUint32(),\r\n alphaSliceByteLength: sgdReader.readUint32(),\r\n });\r\n }\r\n\r\n const endpointsByteOffset = header.sgdByteOffset + sgdReader.byteOffset;\r\n const selectorsByteOffset = endpointsByteOffset + sgd.endpointsByteLength;\r\n const tablesByteOffset = selectorsByteOffset + sgd.selectorsByteLength;\r\n const extendedByteOffset = tablesByteOffset + sgd.tablesByteLength;\r\n\r\n sgd.endpointsData = new Uint8Array(this._data.buffer, this._data.byteOffset + endpointsByteOffset, sgd.endpointsByteLength);\r\n sgd.selectorsData = new Uint8Array(this._data.buffer, this._data.byteOffset + selectorsByteOffset, sgd.selectorsByteLength);\r\n sgd.tablesData = new Uint8Array(this._data.buffer, this._data.byteOffset + tablesByteOffset, sgd.tablesByteLength);\r\n sgd.extendedData = new Uint8Array(this._data.buffer, this._data.byteOffset + extendedByteOffset, sgd.extendedByteLength);\r\n }\r\n }\r\n\r\n private _getImageCount(): number {\r\n let layerPixelDepth = Math.max(this._header.pixelDepth, 1);\r\n for (let i = 1; i < this._header.levelCount; i++) {\r\n layerPixelDepth += Math.max(this._header.pixelDepth >> i, 1);\r\n }\r\n\r\n return Math.max(this._header.layerCount, 1) * this._header.faceCount * layerPixelDepth;\r\n }\r\n\r\n public get textureFormat(): KTX2.SourceTextureFormat {\r\n return this._dfdBlock.colorModel === DFDModel.UASTC ? KTX2.SourceTextureFormat.UASTC4x4 : KTX2.SourceTextureFormat.ETC1S;\r\n }\r\n\r\n public get hasAlpha(): boolean {\r\n const tformat = this.textureFormat;\r\n\r\n switch (tformat) {\r\n case KTX2.SourceTextureFormat.ETC1S:\r\n return (\r\n this._dfdBlock.numSamples === 2 &&\r\n (this._dfdBlock.samples[0].channelType === DFDChannel_ETC1S.AAA || this._dfdBlock.samples[1].channelType === DFDChannel_ETC1S.AAA)\r\n );\r\n\r\n case KTX2.SourceTextureFormat.UASTC4x4:\r\n return this._dfdBlock.samples[0].channelType === DFDChannel_UASTC.RGBA;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public get needZSTDDecoder(): boolean {\r\n return this._header.supercompressionScheme === SupercompressionScheme.ZStandard;\r\n }\r\n\r\n public get isInGammaSpace(): boolean {\r\n return this._dfdBlock.transferFunction === DFDTransferFunction.sRGB;\r\n }\r\n\r\n public static IsValid(data: ArrayBufferView): boolean {\r\n if (data.byteLength >= 12) {\r\n // '«', 'K', 'T', 'X', ' ', '2', '0', '»', '\\r', '\\n', '\\x1A', '\\n'\r\n const identifier = new Uint8Array(data.buffer, data.byteOffset, 12);\r\n if (\r\n identifier[0] === 0xab &&\r\n identifier[1] === 0x4b &&\r\n identifier[2] === 0x54 &&\r\n identifier[3] === 0x58 &&\r\n identifier[4] === 0x20 &&\r\n identifier[5] === 0x32 &&\r\n identifier[6] === 0x30 &&\r\n identifier[7] === 0xbb &&\r\n identifier[8] === 0x0d &&\r\n identifier[9] === 0x0a &&\r\n identifier[10] === 0x1a &&\r\n identifier[11] === 0x0a\r\n ) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@babylonjs/ktx2decoder",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.1.0",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"module": "index.js",
|
|
6
6
|
"types": "index.d.ts",
|
|
@@ -16,11 +16,11 @@
|
|
|
16
16
|
"scripts": {
|
|
17
17
|
"build": "npm run clean && npm run compile",
|
|
18
18
|
"clean": "rimraf dist && rimraf *.tsbuildinfo -g && rimraf \"./**/*.!(md|json|build.json|lts.json)\" -g",
|
|
19
|
-
"compile": "tsc -b tsconfig.build.json",
|
|
19
|
+
"compile": "tsc -b tsconfig.build.json && build-tools -c tp --outDir . --buildType es6 --basePackage @babylonjs/ktx2decoder --appendJS",
|
|
20
20
|
"postcompile": "build-tools -c add-js-to-es6 && build-tools -c cp -f \"../../../tools/babylonServer/public/ktx2Transcoders/1\" -t ./wasm && build-tools -c cp -f \"../../../tools/babylonServer/public/zstddec.wasm\" -t ./wasm"
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
|
23
|
-
"@babylonjs/core": "9.
|
|
23
|
+
"@babylonjs/core": "9.1.0",
|
|
24
24
|
"@dev/build-tools": "^1.0.0",
|
|
25
25
|
"@tools/ktx2decoder": "^1.0.0"
|
|
26
26
|
},
|
package/readme.md
CHANGED
|
@@ -1 +1,13 @@
|
|
|
1
1
|
# Babylon.js KTX2 Decoder Module
|
|
2
|
+
|
|
3
|
+
This package provides KTX2 texture decoding support for Babylon.js. It includes all the decoders and their corresponding WASM files.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
To install using npm:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install @babylonjs/ktx2decoder
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
For detailed setup and usage, including worker configuration, see the [ES6 support documentation](https://doc.babylonjs.com/setup/frameworkPackages/es6Support/).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transcodeDecisionTree.js","sourceRoot":"","sources":["../../../tools/ktx2Decoder/src/transcodeDecisionTree.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\r\n\r\nconst DecisionTree: KTX2.IDecisionTree = {\r\n ETC1S: {\r\n option: \"forceRGBA\",\r\n yes: {\r\n transcodeFormat: KTX2.TranscodeTarget.RGBA32,\r\n engineFormat: KTX2.EngineFormat.RGBA8Format,\r\n roundToMultiple4: false,\r\n },\r\n no: {\r\n cap: \"etc2\",\r\n yes: {\r\n alpha: true,\r\n yes: {\r\n transcodeFormat: KTX2.TranscodeTarget.ETC2_RGBA,\r\n engineFormat: KTX2.EngineFormat.COMPRESSED_RGBA8_ETC2_EAC,\r\n },\r\n no: {\r\n transcodeFormat: KTX2.TranscodeTarget.ETC1_RGB,\r\n engineFormat: KTX2.EngineFormat.COMPRESSED_RGB8_ETC2,\r\n },\r\n },\r\n no: {\r\n cap: \"etc1\",\r\n alpha: false,\r\n yes: {\r\n transcodeFormat: KTX2.TranscodeTarget.ETC1_RGB,\r\n engineFormat: KTX2.EngineFormat.COMPRESSED_RGB_ETC1_WEBGL,\r\n },\r\n no: {\r\n cap: \"bptc\",\r\n yes: {\r\n transcodeFormat: KTX2.TranscodeTarget.BC7_RGBA,\r\n engineFormat: KTX2.EngineFormat.COMPRESSED_RGBA_BPTC_UNORM_EXT,\r\n },\r\n no: {\r\n cap: \"s3tc\",\r\n yes: {\r\n alpha: true,\r\n yes: {\r\n transcodeFormat: KTX2.TranscodeTarget.BC3_RGBA,\r\n engineFormat: KTX2.EngineFormat.COMPRESSED_RGBA_S3TC_DXT5_EXT,\r\n },\r\n no: {\r\n transcodeFormat: KTX2.TranscodeTarget.BC1_RGB,\r\n engineFormat: KTX2.EngineFormat.COMPRESSED_RGB_S3TC_DXT1_EXT,\r\n },\r\n },\r\n no: {\r\n cap: \"pvrtc\",\r\n needsPowerOfTwo: true,\r\n yes: {\r\n alpha: true,\r\n yes: {\r\n transcodeFormat: KTX2.TranscodeTarget.PVRTC1_4_RGBA,\r\n engineFormat: KTX2.EngineFormat.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,\r\n },\r\n no: {\r\n transcodeFormat: KTX2.TranscodeTarget.PVRTC1_4_RGB,\r\n engineFormat: KTX2.EngineFormat.COMPRESSED_RGB_PVRTC_4BPPV1_IMG,\r\n },\r\n },\r\n no: {\r\n transcodeFormat: KTX2.TranscodeTarget.RGBA32,\r\n engineFormat: KTX2.EngineFormat.RGBA8Format,\r\n roundToMultiple4: false,\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n\r\n UASTC: {\r\n option: \"forceRGBA\",\r\n yes: {\r\n transcodeFormat: KTX2.TranscodeTarget.RGBA32,\r\n engineFormat: KTX2.EngineFormat.RGBA8Format,\r\n roundToMultiple4: false,\r\n },\r\n no: {\r\n option: \"forceR8\",\r\n yes: {\r\n transcodeFormat: KTX2.TranscodeTarget.R8,\r\n engineFormat: KTX2.EngineFormat.R8Format,\r\n roundToMultiple4: false,\r\n },\r\n no: {\r\n option: \"forceRG8\",\r\n yes: {\r\n transcodeFormat: KTX2.TranscodeTarget.RG8,\r\n engineFormat: KTX2.EngineFormat.RG8Format,\r\n roundToMultiple4: false,\r\n },\r\n no: {\r\n cap: \"astc\",\r\n yes: {\r\n transcodeFormat: KTX2.TranscodeTarget.ASTC_4X4_RGBA,\r\n engineFormat: KTX2.EngineFormat.COMPRESSED_RGBA_ASTC_4X4_KHR,\r\n },\r\n no: {\r\n cap: \"bptc\",\r\n yes: {\r\n transcodeFormat: KTX2.TranscodeTarget.BC7_RGBA,\r\n engineFormat: KTX2.EngineFormat.COMPRESSED_RGBA_BPTC_UNORM_EXT,\r\n },\r\n no: {\r\n option: \"useRGBAIfASTCBC7NotAvailableWhenUASTC\",\r\n yes: {\r\n transcodeFormat: KTX2.TranscodeTarget.RGBA32,\r\n engineFormat: KTX2.EngineFormat.RGBA8Format,\r\n roundToMultiple4: false,\r\n },\r\n no: {\r\n cap: \"etc2\",\r\n yes: {\r\n alpha: true,\r\n yes: {\r\n transcodeFormat: KTX2.TranscodeTarget.ETC2_RGBA,\r\n engineFormat: KTX2.EngineFormat.COMPRESSED_RGBA8_ETC2_EAC,\r\n },\r\n no: {\r\n transcodeFormat: KTX2.TranscodeTarget.ETC1_RGB,\r\n engineFormat: KTX2.EngineFormat.COMPRESSED_RGB8_ETC2,\r\n },\r\n },\r\n no: {\r\n cap: \"etc1\",\r\n yes: {\r\n transcodeFormat: KTX2.TranscodeTarget.ETC1_RGB,\r\n engineFormat: KTX2.EngineFormat.COMPRESSED_RGB_ETC1_WEBGL,\r\n },\r\n no: {\r\n cap: \"s3tc\",\r\n yes: {\r\n alpha: true,\r\n yes: {\r\n transcodeFormat: KTX2.TranscodeTarget.BC3_RGBA,\r\n engineFormat: KTX2.EngineFormat.COMPRESSED_RGBA_S3TC_DXT5_EXT,\r\n },\r\n no: {\r\n transcodeFormat: KTX2.TranscodeTarget.BC1_RGB,\r\n engineFormat: KTX2.EngineFormat.COMPRESSED_RGB_S3TC_DXT1_EXT,\r\n },\r\n },\r\n no: {\r\n cap: \"pvrtc\",\r\n needsPowerOfTwo: true,\r\n yes: {\r\n alpha: true,\r\n yes: {\r\n transcodeFormat: KTX2.TranscodeTarget.PVRTC1_4_RGBA,\r\n engineFormat: KTX2.EngineFormat.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,\r\n },\r\n no: {\r\n transcodeFormat: KTX2.TranscodeTarget.PVRTC1_4_RGB,\r\n engineFormat: KTX2.EngineFormat.COMPRESSED_RGB_PVRTC_4BPPV1_IMG,\r\n },\r\n },\r\n no: {\r\n transcodeFormat: KTX2.TranscodeTarget.RGBA32,\r\n engineFormat: KTX2.EngineFormat.RGBA8Format,\r\n roundToMultiple4: false,\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n};\r\n\r\nexport class TranscodeDecisionTree {\r\n private static _IsLeafNode(node: KTX2.INode | KTX2.ILeaf): node is KTX2.ILeaf {\r\n return (node as KTX2.ILeaf).engineFormat !== undefined;\r\n }\r\n\r\n private _textureFormat: KTX2.SourceTextureFormat;\r\n private _hasAlpha: boolean;\r\n private _isPowerOfTwo: boolean;\r\n private _caps: KTX2.ICompressedFormatCapabilities;\r\n private _options: KTX2.IKTX2DecoderOptions;\r\n private _transcodeFormat: number;\r\n private _engineFormat: number;\r\n private _roundToMultiple4: boolean;\r\n\r\n public get transcodeFormat() {\r\n return this._transcodeFormat;\r\n }\r\n\r\n public get engineFormat() {\r\n return this._engineFormat;\r\n }\r\n\r\n public get roundToMultiple4() {\r\n return this._roundToMultiple4;\r\n }\r\n\r\n constructor(textureFormat: KTX2.SourceTextureFormat, hasAlpha: boolean, isPowerOfTwo: boolean, caps: KTX2.ICompressedFormatCapabilities, options?: KTX2.IKTX2DecoderOptions) {\r\n this._textureFormat = textureFormat;\r\n this._hasAlpha = hasAlpha;\r\n this._isPowerOfTwo = isPowerOfTwo;\r\n this._caps = caps;\r\n this._options = options ?? {};\r\n\r\n this.parseTree(DecisionTree);\r\n }\r\n\r\n public parseTree(tree: KTX2.IDecisionTree): boolean {\r\n const node = this._textureFormat === KTX2.SourceTextureFormat.UASTC4x4 ? tree.UASTC : tree.ETC1S;\r\n if (node) {\r\n this._parseNode(node);\r\n }\r\n return node !== undefined;\r\n }\r\n\r\n private _parseNode(node: KTX2.INode | KTX2.ILeaf | undefined): void {\r\n if (!node) {\r\n return;\r\n }\r\n\r\n if (TranscodeDecisionTree._IsLeafNode(node)) {\r\n this._transcodeFormat = node.transcodeFormat;\r\n this._engineFormat = node.engineFormat;\r\n this._roundToMultiple4 = node.roundToMultiple4 ?? true;\r\n } else {\r\n let condition = true;\r\n\r\n if (node.cap !== undefined) {\r\n condition = condition && !!this._caps[node.cap as keyof typeof this._caps];\r\n }\r\n if (node.option !== undefined) {\r\n condition = condition && !!this._options[node.option as keyof typeof this._options];\r\n }\r\n if (node.alpha !== undefined) {\r\n condition = condition && this._hasAlpha === node.alpha;\r\n }\r\n if (node.needsPowerOfTwo !== undefined) {\r\n condition = condition && this._isPowerOfTwo === node.needsPowerOfTwo;\r\n }\r\n if (node.transcodeFormat !== undefined) {\r\n if (Array.isArray(node.transcodeFormat)) {\r\n condition = condition && node.transcodeFormat.indexOf(this._transcodeFormat) !== -1;\r\n } else {\r\n condition = condition && node.transcodeFormat === this._transcodeFormat;\r\n }\r\n }\r\n\r\n this._parseNode(condition ? node.yes! : node.no!);\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"transcodeDecisionTree.js","sourceRoot":"","sources":["../../../tools/ktx2Decoder/src/transcodeDecisionTree.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\r\n\r\nconst DecisionTree: KTX2.IDecisionTree = {\r\n ETC1S: {\r\n option: \"forceRGBA\",\r\n yes: {\r\n transcodeFormat: KTX2.TranscodeTarget.RGBA32,\r\n engineFormat: KTX2.EngineFormat.RGBA8Format,\r\n roundToMultiple4: false,\r\n },\r\n no: {\r\n cap: \"etc2\",\r\n yes: {\r\n alpha: true,\r\n yes: {\r\n transcodeFormat: KTX2.TranscodeTarget.ETC2_RGBA,\r\n engineFormat: KTX2.EngineFormat.COMPRESSED_RGBA8_ETC2_EAC,\r\n },\r\n no: {\r\n transcodeFormat: KTX2.TranscodeTarget.ETC1_RGB,\r\n engineFormat: KTX2.EngineFormat.COMPRESSED_RGB8_ETC2,\r\n },\r\n },\r\n no: {\r\n cap: \"etc1\",\r\n alpha: false,\r\n yes: {\r\n transcodeFormat: KTX2.TranscodeTarget.ETC1_RGB,\r\n engineFormat: KTX2.EngineFormat.COMPRESSED_RGB_ETC1_WEBGL,\r\n },\r\n no: {\r\n cap: \"bptc\",\r\n yes: {\r\n transcodeFormat: KTX2.TranscodeTarget.BC7_RGBA,\r\n engineFormat: KTX2.EngineFormat.COMPRESSED_RGBA_BPTC_UNORM_EXT,\r\n },\r\n no: {\r\n cap: \"s3tc\",\r\n yes: {\r\n alpha: true,\r\n yes: {\r\n transcodeFormat: KTX2.TranscodeTarget.BC3_RGBA,\r\n engineFormat: KTX2.EngineFormat.COMPRESSED_RGBA_S3TC_DXT5_EXT,\r\n },\r\n no: {\r\n transcodeFormat: KTX2.TranscodeTarget.BC1_RGB,\r\n engineFormat: KTX2.EngineFormat.COMPRESSED_RGB_S3TC_DXT1_EXT,\r\n },\r\n },\r\n no: {\r\n cap: \"pvrtc\",\r\n needsPowerOfTwo: true,\r\n yes: {\r\n alpha: true,\r\n yes: {\r\n transcodeFormat: KTX2.TranscodeTarget.PVRTC1_4_RGBA,\r\n engineFormat: KTX2.EngineFormat.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,\r\n },\r\n no: {\r\n transcodeFormat: KTX2.TranscodeTarget.PVRTC1_4_RGB,\r\n engineFormat: KTX2.EngineFormat.COMPRESSED_RGB_PVRTC_4BPPV1_IMG,\r\n },\r\n },\r\n no: {\r\n transcodeFormat: KTX2.TranscodeTarget.RGBA32,\r\n engineFormat: KTX2.EngineFormat.RGBA8Format,\r\n roundToMultiple4: false,\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n\r\n UASTC: {\r\n option: \"forceRGBA\",\r\n yes: {\r\n transcodeFormat: KTX2.TranscodeTarget.RGBA32,\r\n engineFormat: KTX2.EngineFormat.RGBA8Format,\r\n roundToMultiple4: false,\r\n },\r\n no: {\r\n option: \"forceR8\",\r\n yes: {\r\n transcodeFormat: KTX2.TranscodeTarget.R8,\r\n engineFormat: KTX2.EngineFormat.R8Format,\r\n roundToMultiple4: false,\r\n },\r\n no: {\r\n option: \"forceRG8\",\r\n yes: {\r\n transcodeFormat: KTX2.TranscodeTarget.RG8,\r\n engineFormat: KTX2.EngineFormat.RG8Format,\r\n roundToMultiple4: false,\r\n },\r\n no: {\r\n cap: \"astc\",\r\n yes: {\r\n transcodeFormat: KTX2.TranscodeTarget.ASTC_4X4_RGBA,\r\n engineFormat: KTX2.EngineFormat.COMPRESSED_RGBA_ASTC_4X4_KHR,\r\n },\r\n no: {\r\n cap: \"bptc\",\r\n yes: {\r\n transcodeFormat: KTX2.TranscodeTarget.BC7_RGBA,\r\n engineFormat: KTX2.EngineFormat.COMPRESSED_RGBA_BPTC_UNORM_EXT,\r\n },\r\n no: {\r\n option: \"useRGBAIfASTCBC7NotAvailableWhenUASTC\",\r\n yes: {\r\n transcodeFormat: KTX2.TranscodeTarget.RGBA32,\r\n engineFormat: KTX2.EngineFormat.RGBA8Format,\r\n roundToMultiple4: false,\r\n },\r\n no: {\r\n cap: \"etc2\",\r\n yes: {\r\n alpha: true,\r\n yes: {\r\n transcodeFormat: KTX2.TranscodeTarget.ETC2_RGBA,\r\n engineFormat: KTX2.EngineFormat.COMPRESSED_RGBA8_ETC2_EAC,\r\n },\r\n no: {\r\n transcodeFormat: KTX2.TranscodeTarget.ETC1_RGB,\r\n engineFormat: KTX2.EngineFormat.COMPRESSED_RGB8_ETC2,\r\n },\r\n },\r\n no: {\r\n cap: \"etc1\",\r\n yes: {\r\n transcodeFormat: KTX2.TranscodeTarget.ETC1_RGB,\r\n engineFormat: KTX2.EngineFormat.COMPRESSED_RGB_ETC1_WEBGL,\r\n },\r\n no: {\r\n cap: \"s3tc\",\r\n yes: {\r\n alpha: true,\r\n yes: {\r\n transcodeFormat: KTX2.TranscodeTarget.BC3_RGBA,\r\n engineFormat: KTX2.EngineFormat.COMPRESSED_RGBA_S3TC_DXT5_EXT,\r\n },\r\n no: {\r\n transcodeFormat: KTX2.TranscodeTarget.BC1_RGB,\r\n engineFormat: KTX2.EngineFormat.COMPRESSED_RGB_S3TC_DXT1_EXT,\r\n },\r\n },\r\n no: {\r\n cap: \"pvrtc\",\r\n needsPowerOfTwo: true,\r\n yes: {\r\n alpha: true,\r\n yes: {\r\n transcodeFormat: KTX2.TranscodeTarget.PVRTC1_4_RGBA,\r\n engineFormat: KTX2.EngineFormat.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,\r\n },\r\n no: {\r\n transcodeFormat: KTX2.TranscodeTarget.PVRTC1_4_RGB,\r\n engineFormat: KTX2.EngineFormat.COMPRESSED_RGB_PVRTC_4BPPV1_IMG,\r\n },\r\n },\r\n no: {\r\n transcodeFormat: KTX2.TranscodeTarget.RGBA32,\r\n engineFormat: KTX2.EngineFormat.RGBA8Format,\r\n roundToMultiple4: false,\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n },\r\n};\r\n\r\nexport class TranscodeDecisionTree {\r\n private static _IsLeafNode(node: KTX2.INode | KTX2.ILeaf): node is KTX2.ILeaf {\r\n return (node as KTX2.ILeaf).engineFormat !== undefined;\r\n }\r\n\r\n private _textureFormat: KTX2.SourceTextureFormat;\r\n private _hasAlpha: boolean;\r\n private _isPowerOfTwo: boolean;\r\n private _caps: KTX2.ICompressedFormatCapabilities;\r\n private _options: KTX2.IKTX2DecoderOptions;\r\n private _transcodeFormat: number;\r\n private _engineFormat: number;\r\n private _roundToMultiple4: boolean;\r\n\r\n public get transcodeFormat() {\r\n return this._transcodeFormat;\r\n }\r\n\r\n public get engineFormat() {\r\n return this._engineFormat;\r\n }\r\n\r\n public get roundToMultiple4() {\r\n return this._roundToMultiple4;\r\n }\r\n\r\n constructor(textureFormat: KTX2.SourceTextureFormat, hasAlpha: boolean, isPowerOfTwo: boolean, caps: KTX2.ICompressedFormatCapabilities, options?: KTX2.IKTX2DecoderOptions) {\r\n this._textureFormat = textureFormat;\r\n this._hasAlpha = hasAlpha;\r\n this._isPowerOfTwo = isPowerOfTwo;\r\n this._caps = caps;\r\n this._options = options ?? {};\r\n\r\n this.parseTree(DecisionTree);\r\n }\r\n\r\n public parseTree(tree: KTX2.IDecisionTree): boolean {\r\n const node = this._textureFormat === KTX2.SourceTextureFormat.UASTC4x4 ? tree.UASTC : tree.ETC1S;\r\n if (node) {\r\n this._parseNode(node);\r\n }\r\n return node !== undefined;\r\n }\r\n\r\n private _parseNode(node: KTX2.INode | KTX2.ILeaf | undefined): void {\r\n if (!node) {\r\n return;\r\n }\r\n\r\n if (TranscodeDecisionTree._IsLeafNode(node)) {\r\n this._transcodeFormat = node.transcodeFormat;\r\n this._engineFormat = node.engineFormat;\r\n this._roundToMultiple4 = node.roundToMultiple4 ?? true;\r\n } else {\r\n let condition = true;\r\n\r\n if (node.cap !== undefined) {\r\n condition = condition && !!this._caps[node.cap as keyof typeof this._caps];\r\n }\r\n if (node.option !== undefined) {\r\n condition = condition && !!this._options[node.option as keyof typeof this._options];\r\n }\r\n if (node.alpha !== undefined) {\r\n condition = condition && this._hasAlpha === node.alpha;\r\n }\r\n if (node.needsPowerOfTwo !== undefined) {\r\n condition = condition && this._isPowerOfTwo === node.needsPowerOfTwo;\r\n }\r\n if (node.transcodeFormat !== undefined) {\r\n if (Array.isArray(node.transcodeFormat)) {\r\n condition = condition && node.transcodeFormat.indexOf(this._transcodeFormat) !== -1;\r\n } else {\r\n condition = condition && node.transcodeFormat === this._transcodeFormat;\r\n }\r\n }\r\n\r\n this._parseNode(condition ? node.yes! : node.no!);\r\n }\r\n }\r\n}\r\n"]}
|
package/transcoder.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type * as KTX2 from "@babylonjs/core/Materials/Textures/ktx2decoderTypes.js";
|
|
2
|
-
import type
|
|
3
|
-
import type
|
|
2
|
+
import { type WASMMemoryManager } from "./wasmMemoryManager.js";
|
|
3
|
+
import { type KTX2FileReader, type IKTX2_ImageDesc } from "./ktx2FileReader.js";
|
|
4
4
|
/**
|
|
5
5
|
* @internal
|
|
6
6
|
*/
|
package/transcoder.js
CHANGED
|
@@ -43,6 +43,6 @@ Transcoder.WasmBaseUrl = "";
|
|
|
43
43
|
* When set, unversioned CDN URLs will be rewritten to include this version prefix.
|
|
44
44
|
* @internal
|
|
45
45
|
*/
|
|
46
|
-
Transcoder.CdnVersion = "9.
|
|
46
|
+
Transcoder.CdnVersion = "9.1.0";
|
|
47
47
|
Transcoder._DefaultCdnUrl = "https://cdn.babylonjs.com";
|
|
48
48
|
//# sourceMappingURL=transcoder.js.map
|
package/transcoder.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transcoder.js","sourceRoot":"","sources":["../../../tools/ktx2Decoder/src/transcoder.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,MAAM,OAAO,UAAU;IACZ,MAAM,CAAC,YAAY,CAAC,GAA6B,EAAE,GAAyB,EAAE,cAAuB;QACxG,OAAO,KAAK,CAAC;IACjB,CAAC;IAgBM,MAAM,CAAC,UAAU,CAAC,OAAe;QACpC,IAAI,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAChD,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;gBACzB,yBAAyB;gBACzB,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC;gBACpH,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;YAClE,CAAC;iBAAM,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;gBAC/B,MAAM,aAAa,GAAG,GAAG,UAAU,CAAC,cAAc,KAAK,UAAU,CAAC,UAAU,EAAE,CAAC;gBAC/E,iFAAiF;gBACjF,kEAAkE;gBAClE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;oBACrC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;gBACxE,CAAC;YACL,CAAC;QACL,CAAC;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IAEM,OAAO;QACV,OAAO,UAAU,CAAC,IAAI,CAAC;IAC3B,CAAC;IAEM,UAAU,KAAU,CAAC;IAErB,iBAAiB;QACpB,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,gBAAgB,CAAC,SAA4B,IAAS,CAAC;IAEvD,KAAK,CAAC,SAAS,CAClB,GAA6B,EAC7B,GAAyB,EACzB,KAAa,EACb,KAAa,EACb,MAAc,EACd,sBAA8B,EAC9B,UAA0B,EAC1B,SAAiC,EACjC,WAAuB;QAEvB,OAAO,IAAI,CAAC;IAChB,CAAC;;AAxDa,eAAI,GAAG,YAAY,CAAC;AAEpB,sBAAW,GAAG,EAAE,CAAC;AAE/B;;;;;GAKG;AACW,qBAAU,GAAG,OAAO,CAAC;AAEX,yBAAc,GAAG,2BAA2B,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\r\n\r\nimport type
|
|
1
|
+
{"version":3,"file":"transcoder.js","sourceRoot":"","sources":["../../../tools/ktx2Decoder/src/transcoder.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,MAAM,OAAO,UAAU;IACZ,MAAM,CAAC,YAAY,CAAC,GAA6B,EAAE,GAAyB,EAAE,cAAuB;QACxG,OAAO,KAAK,CAAC;IACjB,CAAC;IAgBM,MAAM,CAAC,UAAU,CAAC,OAAe;QACpC,IAAI,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAChD,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;gBACzB,yBAAyB;gBACzB,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC;gBACpH,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;YAClE,CAAC;iBAAM,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;gBAC/B,MAAM,aAAa,GAAG,GAAG,UAAU,CAAC,cAAc,KAAK,UAAU,CAAC,UAAU,EAAE,CAAC;gBAC/E,iFAAiF;gBACjF,kEAAkE;gBAClE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;oBACrC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;gBACxE,CAAC;YACL,CAAC;QACL,CAAC;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IAEM,OAAO;QACV,OAAO,UAAU,CAAC,IAAI,CAAC;IAC3B,CAAC;IAEM,UAAU,KAAU,CAAC;IAErB,iBAAiB;QACpB,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,gBAAgB,CAAC,SAA4B,IAAS,CAAC;IAEvD,KAAK,CAAC,SAAS,CAClB,GAA6B,EAC7B,GAAyB,EACzB,KAAa,EACb,KAAa,EACb,MAAc,EACd,sBAA8B,EAC9B,UAA0B,EAC1B,SAAiC,EACjC,WAAuB;QAEvB,OAAO,IAAI,CAAC;IAChB,CAAC;;AAxDa,eAAI,GAAG,YAAY,CAAC;AAEpB,sBAAW,GAAG,EAAE,CAAC;AAE/B;;;;;GAKG;AACW,qBAAU,GAAG,OAAO,CAAC;AAEX,yBAAc,GAAG,2BAA2B,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\r\n/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\r\n\r\nimport { type WASMMemoryManager } from \"./wasmMemoryManager\";\r\nimport { type KTX2FileReader, type IKTX2_ImageDesc } from \"./ktx2FileReader\";\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class Transcoder {\r\n public static CanTranscode(src: KTX2.SourceTextureFormat, dst: KTX2.TranscodeTarget, isInGammaSpace: boolean): boolean {\r\n return false;\r\n }\r\n\r\n public static Name = \"Transcoder\";\r\n\r\n public static WasmBaseUrl = \"\";\r\n\r\n /**\r\n * The CDN version to use when constructing versioned CDN URLs.\r\n * Injected at build time by the version update script.\r\n * When set, unversioned CDN URLs will be rewritten to include this version prefix.\r\n * @internal\r\n */\r\n public static CdnVersion = \"9.1.0\";\r\n\r\n private static readonly _DefaultCdnUrl = \"https://cdn.babylonjs.com\";\r\n\r\n public static GetWasmUrl(wasmUrl: string) {\r\n if (wasmUrl.startsWith(Transcoder._DefaultCdnUrl)) {\r\n if (Transcoder.WasmBaseUrl) {\r\n // Normalize the base url\r\n const baseUrl = Transcoder.WasmBaseUrl.endsWith(\"/\") ? Transcoder.WasmBaseUrl.slice(0, -1) : Transcoder.WasmBaseUrl;\r\n wasmUrl = wasmUrl.replace(Transcoder._DefaultCdnUrl, baseUrl);\r\n } else if (Transcoder.CdnVersion) {\r\n const versionedBase = `${Transcoder._DefaultCdnUrl}/v${Transcoder.CdnVersion}`;\r\n // Guard against double-versioning if the URL already contains the version prefix\r\n // (e.g. when GetWasmUrl is called multiple times on the same URL)\r\n if (!wasmUrl.startsWith(versionedBase)) {\r\n wasmUrl = wasmUrl.replace(Transcoder._DefaultCdnUrl, versionedBase);\r\n }\r\n }\r\n }\r\n return wasmUrl;\r\n }\r\n\r\n public getName(): string {\r\n return Transcoder.Name;\r\n }\r\n\r\n public initialize(): void {}\r\n\r\n public needMemoryManager(): boolean {\r\n return false;\r\n }\r\n\r\n public setMemoryManager(memoryMgr: WASMMemoryManager): void {}\r\n\r\n public async transcode(\r\n src: KTX2.SourceTextureFormat,\r\n dst: KTX2.TranscodeTarget,\r\n level: number,\r\n width: number,\r\n height: number,\r\n uncompressedByteLength: number,\r\n ktx2Reader: KTX2FileReader,\r\n imageDesc: IKTX2_ImageDesc | null,\r\n encodedData: Uint8Array\r\n ): Promise<Uint8Array | null> {\r\n return null;\r\n }\r\n}\r\n"]}
|
package/transcoderManager.d.ts
CHANGED
package/transcoderManager.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transcoderManager.js","sourceRoot":"","sources":["../../../tools/ktx2Decoder/src/transcoderManager.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,OAAO,KAAK,IAAI
|
|
1
|
+
{"version":3,"file":"transcoderManager.js","sourceRoot":"","sources":["../../../tools/ktx2Decoder/src/transcoderManager.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,OAAO,KAAK,IAAI,MAAM,0CAA0C,CAAC;AAGjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD;;GAEG;AACH,MAAM,OAAO,iBAAiB;IAGnB,MAAM,CAAC,kBAAkB,CAAC,UAA6B;QAC1D,iBAAiB,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACpD,CAAC;IAMM,cAAc,CAAC,GAA6B,EAAE,GAAyB,EAAE,cAAuB,EAAE,MAAiB;QACtH,IAAI,UAAU,GAAsB,IAAI,CAAC;QAEzC,MAAM,GAAG,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAE5E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;YAC7D,IAAI,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBACtJ,UAAU,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACtF,IAAI,CAAC,UAAU,EAAE,CAAC;oBACd,UAAU,GAAG,IAAI,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrD,UAAU,CAAC,UAAU,EAAE,CAAC;oBACxB,IAAI,UAAU,CAAC,iBAAiB,EAAE,EAAE,CAAC;wBACjC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;4BAC3B,IAAI,CAAC,kBAAkB,GAAG,IAAI,iBAAiB,EAAE,CAAC;wBACtD,CAAC;wBACD,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;oBACzD,CAAC;oBACD,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC/C,iBAAiB,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;oBACrD,CAAC;oBACD,iBAAiB,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACjE,CAAC;gBACD,MAAM;YACV,CAAC;QACL,CAAC;QAED,OAAO,UAAU,CAAC;IACtB,CAAC;IAEO,sBAAsB,CAAC,GAAW,EAAE,cAAsB;QAC9D,MAAM,WAAW,GAAG,iBAAiB,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAEhE,IAAI,WAAW,EAAE,CAAC;YACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;gBAC1C,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;gBAClC,IAAI,cAAc,KAAK,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;oBAC1C,OAAO,UAAU,CAAC;gBACtB,CAAC;YACL,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;;AApDa,8BAAY,GAA6B,EAAE,CAAC;AAM3C,sCAAoB,GAAyC,EAAE,CAAC","sourcesContent":["// eslint-disable-next-line @typescript-eslint/naming-convention\r\nimport * as KTX2 from \"core/Materials/Textures/ktx2decoderTypes\";\r\n\r\nimport { type Transcoder } from \"./transcoder\";\r\nimport { WASMMemoryManager } from \"./wasmMemoryManager\";\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class TranscoderManager {\r\n public static _Transcoders: Array<typeof Transcoder> = [];\r\n\r\n public static RegisterTranscoder(transcoder: typeof Transcoder) {\r\n TranscoderManager._Transcoders.push(transcoder);\r\n }\r\n\r\n private static _TranscoderInstances: { [key: string]: Array<Transcoder> } = {};\r\n\r\n private _wasmMemoryManager: WASMMemoryManager;\r\n\r\n public findTranscoder(src: KTX2.SourceTextureFormat, dst: KTX2.TranscodeTarget, isInGammaSpace: boolean, bypass?: string[]): Transcoder | null {\r\n let transcoder: Transcoder | null = null;\r\n\r\n const key = KTX2.SourceTextureFormat[src] + \"_\" + KTX2.TranscodeTarget[dst];\r\n\r\n for (let i = 0; i < TranscoderManager._Transcoders.length; ++i) {\r\n if (TranscoderManager._Transcoders[i].CanTranscode(src, dst, isInGammaSpace) && (!bypass || bypass.indexOf(TranscoderManager._Transcoders[i].Name) < 0)) {\r\n transcoder = this._getExistingTranscoder(key, TranscoderManager._Transcoders[i].Name);\r\n if (!transcoder) {\r\n transcoder = new TranscoderManager._Transcoders[i]();\r\n transcoder.initialize();\r\n if (transcoder.needMemoryManager()) {\r\n if (!this._wasmMemoryManager) {\r\n this._wasmMemoryManager = new WASMMemoryManager();\r\n }\r\n transcoder.setMemoryManager(this._wasmMemoryManager);\r\n }\r\n if (!TranscoderManager._TranscoderInstances[key]) {\r\n TranscoderManager._TranscoderInstances[key] = [];\r\n }\r\n TranscoderManager._TranscoderInstances[key].push(transcoder);\r\n }\r\n break;\r\n }\r\n }\r\n\r\n return transcoder;\r\n }\r\n\r\n private _getExistingTranscoder(key: string, transcoderName: string): Transcoder | null {\r\n const transcoders = TranscoderManager._TranscoderInstances[key];\r\n\r\n if (transcoders) {\r\n for (let t = 0; t < transcoders.length; ++t) {\r\n const transcoder = transcoders[t];\r\n if (transcoderName === transcoder.getName()) {\r\n return transcoder;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n"]}
|