@babylonjs/ktx2decoder 6.45.1

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.
Files changed (72) hide show
  1. package/Misc/dataReader.d.ts +65 -0
  2. package/Misc/dataReader.js +116 -0
  3. package/Misc/dataReader.js.map +1 -0
  4. package/Misc/index.d.ts +1 -0
  5. package/Misc/index.js +2 -0
  6. package/Misc/index.js.map +1 -0
  7. package/Transcoders/index.d.ts +8 -0
  8. package/Transcoders/index.js +9 -0
  9. package/Transcoders/index.js.map +1 -0
  10. package/Transcoders/liteTranscoder.d.ts +25 -0
  11. package/Transcoders/liteTranscoder.js +63 -0
  12. package/Transcoders/liteTranscoder.js.map +1 -0
  13. package/Transcoders/liteTranscoder_UASTC_ASTC.d.ts +19 -0
  14. package/Transcoders/liteTranscoder_UASTC_ASTC.js +29 -0
  15. package/Transcoders/liteTranscoder_UASTC_ASTC.js.map +1 -0
  16. package/Transcoders/liteTranscoder_UASTC_BC7.d.ts +19 -0
  17. package/Transcoders/liteTranscoder_UASTC_BC7.js +29 -0
  18. package/Transcoders/liteTranscoder_UASTC_BC7.js.map +1 -0
  19. package/Transcoders/liteTranscoder_UASTC_R8_UNORM.d.ts +21 -0
  20. package/Transcoders/liteTranscoder_UASTC_R8_UNORM.js +36 -0
  21. package/Transcoders/liteTranscoder_UASTC_R8_UNORM.js.map +1 -0
  22. package/Transcoders/liteTranscoder_UASTC_RG8_UNORM.d.ts +21 -0
  23. package/Transcoders/liteTranscoder_UASTC_RG8_UNORM.js +36 -0
  24. package/Transcoders/liteTranscoder_UASTC_RG8_UNORM.js.map +1 -0
  25. package/Transcoders/liteTranscoder_UASTC_RGBA_SRGB.d.ts +21 -0
  26. package/Transcoders/liteTranscoder_UASTC_RGBA_SRGB.js +36 -0
  27. package/Transcoders/liteTranscoder_UASTC_RGBA_SRGB.js.map +1 -0
  28. package/Transcoders/liteTranscoder_UASTC_RGBA_UNORM.d.ts +21 -0
  29. package/Transcoders/liteTranscoder_UASTC_RGBA_UNORM.js +36 -0
  30. package/Transcoders/liteTranscoder_UASTC_RGBA_UNORM.js.map +1 -0
  31. package/Transcoders/mscTranscoder.d.ts +32 -0
  32. package/Transcoders/mscTranscoder.js +128 -0
  33. package/Transcoders/mscTranscoder.js.map +1 -0
  34. package/index.d.ts +8 -0
  35. package/index.js +10 -0
  36. package/index.js.map +1 -0
  37. package/ktx2Decoder.d.ts +22 -0
  38. package/ktx2Decoder.js +144 -0
  39. package/ktx2Decoder.js.map +1 -0
  40. package/ktx2FileReader.d.ts +109 -0
  41. package/ktx2FileReader.js +219 -0
  42. package/ktx2FileReader.js.map +1 -0
  43. package/legacy/legacy.d.ts +1 -0
  44. package/legacy/legacy.js +8 -0
  45. package/legacy/legacy.js.map +1 -0
  46. package/license.md +71 -0
  47. package/package.json +49 -0
  48. package/readme.md +1 -0
  49. package/transcodeDecisionTree.d.ts +18 -0
  50. package/transcodeDecisionTree.js +240 -0
  51. package/transcodeDecisionTree.js.map +1 -0
  52. package/transcoder.d.ts +17 -0
  53. package/transcoder.js +28 -0
  54. package/transcoder.js.map +1 -0
  55. package/transcoderManager.d.ts +13 -0
  56. package/transcoderManager.js +50 -0
  57. package/transcoderManager.js.map +1 -0
  58. package/wasm/license.md +361 -0
  59. package/wasm/msc_basis_transcoder.js +21 -0
  60. package/wasm/msc_basis_transcoder.wasm +0 -0
  61. package/wasm/uastc_astc.wasm +0 -0
  62. package/wasm/uastc_bc7.wasm +0 -0
  63. package/wasm/uastc_r8_unorm.wasm +0 -0
  64. package/wasm/uastc_rg8_unorm.wasm +0 -0
  65. package/wasm/uastc_rgba8_srgb_v2.wasm +0 -0
  66. package/wasm/uastc_rgba8_unorm_v2.wasm +0 -0
  67. package/wasmMemoryManager.d.ts +17 -0
  68. package/wasmMemoryManager.js +63 -0
  69. package/wasmMemoryManager.js.map +1 -0
  70. package/zstddec.d.ts +41 -0
  71. package/zstddec.js +95 -0
  72. package/zstddec.js.map +1 -0
@@ -0,0 +1,240 @@
1
+ /* eslint-disable @typescript-eslint/naming-convention */
2
+ import * as KTX2 from "@babylonjs/core/Materials/Textures/ktx2decoderTypes.js";
3
+ const DecisionTree = {
4
+ ETC1S: {
5
+ option: "forceRGBA",
6
+ yes: {
7
+ transcodeFormat: KTX2.TranscodeTarget.RGBA32,
8
+ engineFormat: KTX2.EngineFormat.RGBA8Format,
9
+ roundToMultiple4: false,
10
+ },
11
+ no: {
12
+ cap: "etc2",
13
+ yes: {
14
+ alpha: true,
15
+ yes: {
16
+ transcodeFormat: KTX2.TranscodeTarget.ETC2_RGBA,
17
+ engineFormat: KTX2.EngineFormat.COMPRESSED_RGBA8_ETC2_EAC,
18
+ },
19
+ no: {
20
+ transcodeFormat: KTX2.TranscodeTarget.ETC1_RGB,
21
+ engineFormat: KTX2.EngineFormat.COMPRESSED_RGB8_ETC2,
22
+ },
23
+ },
24
+ no: {
25
+ cap: "etc1",
26
+ alpha: false,
27
+ yes: {
28
+ transcodeFormat: KTX2.TranscodeTarget.ETC1_RGB,
29
+ engineFormat: KTX2.EngineFormat.COMPRESSED_RGB_ETC1_WEBGL,
30
+ },
31
+ no: {
32
+ cap: "bptc",
33
+ yes: {
34
+ transcodeFormat: KTX2.TranscodeTarget.BC7_RGBA,
35
+ engineFormat: KTX2.EngineFormat.COMPRESSED_RGBA_BPTC_UNORM_EXT,
36
+ },
37
+ no: {
38
+ cap: "s3tc",
39
+ yes: {
40
+ alpha: true,
41
+ yes: {
42
+ transcodeFormat: KTX2.TranscodeTarget.BC3_RGBA,
43
+ engineFormat: KTX2.EngineFormat.COMPRESSED_RGBA_S3TC_DXT5_EXT,
44
+ },
45
+ no: {
46
+ transcodeFormat: KTX2.TranscodeTarget.BC1_RGB,
47
+ engineFormat: KTX2.EngineFormat.COMPRESSED_RGB_S3TC_DXT1_EXT,
48
+ },
49
+ },
50
+ no: {
51
+ cap: "pvrtc",
52
+ needsPowerOfTwo: true,
53
+ yes: {
54
+ alpha: true,
55
+ yes: {
56
+ transcodeFormat: KTX2.TranscodeTarget.PVRTC1_4_RGBA,
57
+ engineFormat: KTX2.EngineFormat.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,
58
+ },
59
+ no: {
60
+ transcodeFormat: KTX2.TranscodeTarget.PVRTC1_4_RGB,
61
+ engineFormat: KTX2.EngineFormat.COMPRESSED_RGB_PVRTC_4BPPV1_IMG,
62
+ },
63
+ },
64
+ no: {
65
+ transcodeFormat: KTX2.TranscodeTarget.RGBA32,
66
+ engineFormat: KTX2.EngineFormat.RGBA8Format,
67
+ roundToMultiple4: false,
68
+ },
69
+ },
70
+ },
71
+ },
72
+ },
73
+ },
74
+ },
75
+ UASTC: {
76
+ option: "forceRGBA",
77
+ yes: {
78
+ transcodeFormat: KTX2.TranscodeTarget.RGBA32,
79
+ engineFormat: KTX2.EngineFormat.RGBA8Format,
80
+ roundToMultiple4: false,
81
+ },
82
+ no: {
83
+ option: "forceR8",
84
+ yes: {
85
+ transcodeFormat: KTX2.TranscodeTarget.R8,
86
+ engineFormat: KTX2.EngineFormat.R8Format,
87
+ roundToMultiple4: false,
88
+ },
89
+ no: {
90
+ option: "forceRG8",
91
+ yes: {
92
+ transcodeFormat: KTX2.TranscodeTarget.RG8,
93
+ engineFormat: KTX2.EngineFormat.RG8Format,
94
+ roundToMultiple4: false,
95
+ },
96
+ no: {
97
+ cap: "astc",
98
+ yes: {
99
+ transcodeFormat: KTX2.TranscodeTarget.ASTC_4X4_RGBA,
100
+ engineFormat: KTX2.EngineFormat.COMPRESSED_RGBA_ASTC_4X4_KHR,
101
+ },
102
+ no: {
103
+ cap: "bptc",
104
+ yes: {
105
+ transcodeFormat: KTX2.TranscodeTarget.BC7_RGBA,
106
+ engineFormat: KTX2.EngineFormat.COMPRESSED_RGBA_BPTC_UNORM_EXT,
107
+ },
108
+ no: {
109
+ option: "useRGBAIfASTCBC7NotAvailableWhenUASTC",
110
+ yes: {
111
+ transcodeFormat: KTX2.TranscodeTarget.RGBA32,
112
+ engineFormat: KTX2.EngineFormat.RGBA8Format,
113
+ roundToMultiple4: false,
114
+ },
115
+ no: {
116
+ cap: "etc2",
117
+ yes: {
118
+ alpha: true,
119
+ yes: {
120
+ transcodeFormat: KTX2.TranscodeTarget.ETC2_RGBA,
121
+ engineFormat: KTX2.EngineFormat.COMPRESSED_RGBA8_ETC2_EAC,
122
+ },
123
+ no: {
124
+ transcodeFormat: KTX2.TranscodeTarget.ETC1_RGB,
125
+ engineFormat: KTX2.EngineFormat.COMPRESSED_RGB8_ETC2,
126
+ },
127
+ },
128
+ no: {
129
+ cap: "etc1",
130
+ yes: {
131
+ transcodeFormat: KTX2.TranscodeTarget.ETC1_RGB,
132
+ engineFormat: KTX2.EngineFormat.COMPRESSED_RGB_ETC1_WEBGL,
133
+ },
134
+ no: {
135
+ cap: "s3tc",
136
+ yes: {
137
+ alpha: true,
138
+ yes: {
139
+ transcodeFormat: KTX2.TranscodeTarget.BC3_RGBA,
140
+ engineFormat: KTX2.EngineFormat.COMPRESSED_RGBA_S3TC_DXT5_EXT,
141
+ },
142
+ no: {
143
+ transcodeFormat: KTX2.TranscodeTarget.BC1_RGB,
144
+ engineFormat: KTX2.EngineFormat.COMPRESSED_RGB_S3TC_DXT1_EXT,
145
+ },
146
+ },
147
+ no: {
148
+ cap: "pvrtc",
149
+ needsPowerOfTwo: true,
150
+ yes: {
151
+ alpha: true,
152
+ yes: {
153
+ transcodeFormat: KTX2.TranscodeTarget.PVRTC1_4_RGBA,
154
+ engineFormat: KTX2.EngineFormat.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,
155
+ },
156
+ no: {
157
+ transcodeFormat: KTX2.TranscodeTarget.PVRTC1_4_RGB,
158
+ engineFormat: KTX2.EngineFormat.COMPRESSED_RGB_PVRTC_4BPPV1_IMG,
159
+ },
160
+ },
161
+ no: {
162
+ transcodeFormat: KTX2.TranscodeTarget.RGBA32,
163
+ engineFormat: KTX2.EngineFormat.RGBA8Format,
164
+ roundToMultiple4: false,
165
+ },
166
+ },
167
+ },
168
+ },
169
+ },
170
+ },
171
+ },
172
+ },
173
+ },
174
+ },
175
+ },
176
+ };
177
+ export class TranscodeDecisionTree {
178
+ static _IsLeafNode(node) {
179
+ return node.engineFormat !== undefined;
180
+ }
181
+ get transcodeFormat() {
182
+ return this._transcodeFormat;
183
+ }
184
+ get engineFormat() {
185
+ return this._engineFormat;
186
+ }
187
+ get roundToMultiple4() {
188
+ return this._roundToMultiple4;
189
+ }
190
+ constructor(textureFormat, hasAlpha, isPowerOfTwo, caps, options) {
191
+ this._textureFormat = textureFormat;
192
+ this._hasAlpha = hasAlpha;
193
+ this._isPowerOfTwo = isPowerOfTwo;
194
+ this._caps = caps;
195
+ this._options = options ?? {};
196
+ this.parseTree(DecisionTree);
197
+ }
198
+ parseTree(tree) {
199
+ const node = this._textureFormat === KTX2.SourceTextureFormat.UASTC4x4 ? tree.UASTC : tree.ETC1S;
200
+ if (node) {
201
+ this._parseNode(node);
202
+ }
203
+ return node !== undefined;
204
+ }
205
+ _parseNode(node) {
206
+ if (!node) {
207
+ return;
208
+ }
209
+ if (TranscodeDecisionTree._IsLeafNode(node)) {
210
+ this._transcodeFormat = node.transcodeFormat;
211
+ this._engineFormat = node.engineFormat;
212
+ this._roundToMultiple4 = node.roundToMultiple4 ?? true;
213
+ }
214
+ else {
215
+ let condition = true;
216
+ if (node.cap !== undefined) {
217
+ condition = condition && !!this._caps[node.cap];
218
+ }
219
+ if (node.option !== undefined) {
220
+ condition = condition && !!this._options[node.option];
221
+ }
222
+ if (node.alpha !== undefined) {
223
+ condition = condition && this._hasAlpha === node.alpha;
224
+ }
225
+ if (node.needsPowerOfTwo !== undefined) {
226
+ condition = condition && this._isPowerOfTwo === node.needsPowerOfTwo;
227
+ }
228
+ if (node.transcodeFormat !== undefined) {
229
+ if (Array.isArray(node.transcodeFormat)) {
230
+ condition = condition && node.transcodeFormat.indexOf(this._transcodeFormat) !== -1;
231
+ }
232
+ else {
233
+ condition = condition && node.transcodeFormat === this._transcodeFormat;
234
+ }
235
+ }
236
+ this._parseNode(condition ? node.yes : node.no);
237
+ }
238
+ }
239
+ }
240
+ //# sourceMappingURL=transcodeDecisionTree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcodeDecisionTree.js","sourceRoot":"","sources":["../../../tools/ktx2Decoder/src/transcodeDecisionTree.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,OAAO,KAAK,IAAI,+DAAiD;AAEjE,MAAM,YAAY,GAAuB;IACrC,KAAK,EAAE;QACH,MAAM,EAAE,WAAW;QACnB,GAAG,EAAE;YACD,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM;YAC5C,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,WAAW;YAC3C,gBAAgB,EAAE,KAAK;SAC1B;QACD,EAAE,EAAE;YACA,GAAG,EAAE,MAAM;YACX,GAAG,EAAE;gBACD,KAAK,EAAE,IAAI;gBACX,GAAG,EAAE;oBACD,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,SAAS;oBAC/C,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,yBAAyB;iBAC5D;gBACD,EAAE,EAAE;oBACA,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ;oBAC9C,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,oBAAoB;iBACvD;aACJ;YACD,EAAE,EAAE;gBACA,GAAG,EAAE,MAAM;gBACX,KAAK,EAAE,KAAK;gBACZ,GAAG,EAAE;oBACD,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ;oBAC9C,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,yBAAyB;iBAC5D;gBACD,EAAE,EAAE;oBACA,GAAG,EAAE,MAAM;oBACX,GAAG,EAAE;wBACD,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ;wBAC9C,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,8BAA8B;qBACjE;oBACD,EAAE,EAAE;wBACA,GAAG,EAAE,MAAM;wBACX,GAAG,EAAE;4BACD,KAAK,EAAE,IAAI;4BACX,GAAG,EAAE;gCACD,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ;gCAC9C,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,6BAA6B;6BAChE;4BACD,EAAE,EAAE;gCACA,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO;gCAC7C,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,4BAA4B;6BAC/D;yBACJ;wBACD,EAAE,EAAE;4BACA,GAAG,EAAE,OAAO;4BACZ,eAAe,EAAE,IAAI;4BACrB,GAAG,EAAE;gCACD,KAAK,EAAE,IAAI;gCACX,GAAG,EAAE;oCACD,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,aAAa;oCACnD,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,gCAAgC;iCACnE;gCACD,EAAE,EAAE;oCACA,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,YAAY;oCAClD,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,+BAA+B;iCAClE;6BACJ;4BACD,EAAE,EAAE;gCACA,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM;gCAC5C,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,WAAW;gCAC3C,gBAAgB,EAAE,KAAK;6BAC1B;yBACJ;qBACJ;iBACJ;aACJ;SACJ;KACJ;IAED,KAAK,EAAE;QACH,MAAM,EAAE,WAAW;QACnB,GAAG,EAAE;YACD,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM;YAC5C,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,WAAW;YAC3C,gBAAgB,EAAE,KAAK;SAC1B;QACD,EAAE,EAAE;YACA,MAAM,EAAE,SAAS;YACjB,GAAG,EAAE;gBACD,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE;gBACxC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ;gBACxC,gBAAgB,EAAE,KAAK;aAC1B;YACD,EAAE,EAAE;gBACA,MAAM,EAAE,UAAU;gBAClB,GAAG,EAAE;oBACD,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,GAAG;oBACzC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,SAAS;oBACzC,gBAAgB,EAAE,KAAK;iBAC1B;gBACD,EAAE,EAAE;oBACA,GAAG,EAAE,MAAM;oBACX,GAAG,EAAE;wBACD,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,aAAa;wBACnD,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,4BAA4B;qBAC/D;oBACD,EAAE,EAAE;wBACA,GAAG,EAAE,MAAM;wBACX,GAAG,EAAE;4BACD,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ;4BAC9C,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,8BAA8B;yBACjE;wBACD,EAAE,EAAE;4BACA,MAAM,EAAE,uCAAuC;4BAC/C,GAAG,EAAE;gCACD,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM;gCAC5C,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,WAAW;gCAC3C,gBAAgB,EAAE,KAAK;6BAC1B;4BACD,EAAE,EAAE;gCACA,GAAG,EAAE,MAAM;gCACX,GAAG,EAAE;oCACD,KAAK,EAAE,IAAI;oCACX,GAAG,EAAE;wCACD,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,SAAS;wCAC/C,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,yBAAyB;qCAC5D;oCACD,EAAE,EAAE;wCACA,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ;wCAC9C,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,oBAAoB;qCACvD;iCACJ;gCACD,EAAE,EAAE;oCACA,GAAG,EAAE,MAAM;oCACX,GAAG,EAAE;wCACD,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ;wCAC9C,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,yBAAyB;qCAC5D;oCACD,EAAE,EAAE;wCACA,GAAG,EAAE,MAAM;wCACX,GAAG,EAAE;4CACD,KAAK,EAAE,IAAI;4CACX,GAAG,EAAE;gDACD,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ;gDAC9C,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,6BAA6B;6CAChE;4CACD,EAAE,EAAE;gDACA,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO;gDAC7C,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,4BAA4B;6CAC/D;yCACJ;wCACD,EAAE,EAAE;4CACA,GAAG,EAAE,OAAO;4CACZ,eAAe,EAAE,IAAI;4CACrB,GAAG,EAAE;gDACD,KAAK,EAAE,IAAI;gDACX,GAAG,EAAE;oDACD,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,aAAa;oDACnD,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,gCAAgC;iDACnE;gDACD,EAAE,EAAE;oDACA,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,YAAY;oDAClD,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,+BAA+B;iDAClE;6CACJ;4CACD,EAAE,EAAE;gDACA,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM;gDAC5C,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,WAAW;gDAC3C,gBAAgB,EAAE,KAAK;6CAC1B;yCACJ;qCACJ;iCACJ;6BACJ;yBACJ;qBACJ;iBACJ;aACJ;SACJ;KACJ;CACJ,CAAC;AAEF,MAAM,OAAO,qBAAqB;IACtB,MAAM,CAAC,WAAW,CAAC,IAA6B;QACpD,OAAQ,IAAmB,CAAC,YAAY,KAAK,SAAS,CAAC;IAC3D,CAAC;IAWD,IAAW,eAAe;QACtB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IACjC,CAAC;IAED,IAAW,YAAY;QACnB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;IAED,IAAW,gBAAgB;QACvB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAClC,CAAC;IAED,YAAY,aAAuC,EAAE,QAAiB,EAAE,YAAqB,EAAE,IAAwC,EAAE,OAAkC;QACvK,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,QAAQ,GAAG,OAAO,IAAI,EAAE,CAAC;QAE9B,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IACjC,CAAC;IAEM,SAAS,CAAC,IAAwB;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QACjG,IAAI,IAAI,EAAE;YACN,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;SACzB;QACD,OAAO,IAAI,KAAK,SAAS,CAAC;IAC9B,CAAC;IAEO,UAAU,CAAC,IAAyC;QACxD,IAAI,CAAC,IAAI,EAAE;YACP,OAAO;SACV;QAED,IAAI,qBAAqB,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;YACzC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC;YAC7C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC;YACvC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC;SAC1D;aAAM;YACH,IAAI,SAAS,GAAG,IAAI,CAAC;YAErB,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE;gBACxB,SAAS,GAAG,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAA8B,CAAC,CAAC;aAC9E;YACD,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE;gBAC3B,SAAS,GAAG,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAoC,CAAC,CAAC;aACvF;YACD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;gBAC1B,SAAS,GAAG,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,KAAK,CAAC;aAC1D;YACD,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,EAAE;gBACpC,SAAS,GAAG,SAAS,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,eAAe,CAAC;aACxE;YACD,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,EAAE;gBACpC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;oBACrC,SAAS,GAAG,SAAS,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;iBACvF;qBAAM;oBACH,SAAS,GAAG,SAAS,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,gBAAgB,CAAC;iBAC3E;aACJ;YAED,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAG,CAAC,CAAC;SACrD;IACL,CAAC;CACJ","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"]}
@@ -0,0 +1,17 @@
1
+ import type * as KTX2 from "@babylonjs/core/Materials/Textures/ktx2decoderTypes.js";
2
+ import type { WASMMemoryManager } from "./wasmMemoryManager";
3
+ import type { KTX2FileReader, IKTX2_ImageDesc } from "./ktx2FileReader";
4
+ /**
5
+ * @internal
6
+ */
7
+ export declare class Transcoder {
8
+ static CanTranscode(src: KTX2.SourceTextureFormat, dst: KTX2.TranscodeTarget, isInGammaSpace: boolean): boolean;
9
+ static Name: string;
10
+ static WasmBaseUrl: string;
11
+ static GetWasmUrl(wasmUrl: string): string;
12
+ getName(): string;
13
+ initialize(): void;
14
+ needMemoryManager(): boolean;
15
+ setMemoryManager(memoryMgr: WASMMemoryManager): void;
16
+ transcode(src: KTX2.SourceTextureFormat, dst: KTX2.TranscodeTarget, level: number, width: number, height: number, uncompressedByteLength: number, ktx2Reader: KTX2FileReader, imageDesc: IKTX2_ImageDesc | null, encodedData: Uint8Array): Promise<Uint8Array | null>;
17
+ }
package/transcoder.js ADDED
@@ -0,0 +1,28 @@
1
+ /**
2
+ * @internal
3
+ */
4
+ export class Transcoder {
5
+ static CanTranscode(src, dst, isInGammaSpace) {
6
+ return false;
7
+ }
8
+ static GetWasmUrl(wasmUrl) {
9
+ if (Transcoder.WasmBaseUrl && wasmUrl.startsWith("https://cdn.babylonjs.com/")) {
10
+ wasmUrl = wasmUrl.replace("https://cdn.babylonjs.com/", Transcoder.WasmBaseUrl);
11
+ }
12
+ return wasmUrl;
13
+ }
14
+ getName() {
15
+ return Transcoder.Name;
16
+ }
17
+ initialize() { }
18
+ needMemoryManager() {
19
+ return false;
20
+ }
21
+ setMemoryManager(memoryMgr) { }
22
+ transcode(src, dst, level, width, height, uncompressedByteLength, ktx2Reader, imageDesc, encodedData) {
23
+ return Promise.resolve(null);
24
+ }
25
+ }
26
+ Transcoder.Name = "Transcoder";
27
+ Transcoder.WasmBaseUrl = "";
28
+ //# sourceMappingURL=transcoder.js.map
@@ -0,0 +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;IAMM,MAAM,CAAC,UAAU,CAAC,OAAe;QACpC,IAAI,UAAU,CAAC,WAAW,IAAI,OAAO,CAAC,UAAU,CAAC,4BAA4B,CAAC,EAAE;YAC5E,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,4BAA4B,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;SACnF;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,SAAS,CACZ,GAA6B,EAC7B,GAAyB,EACzB,KAAa,EACb,KAAa,EACb,MAAc,EACd,sBAA8B,EAC9B,UAA0B,EAC1B,SAAiC,EACjC,WAAuB;QAEvB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;;AAnCa,eAAI,GAAG,YAAY,CAAC;AAEpB,sBAAW,GAAG,EAAE,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, 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 public static GetWasmUrl(wasmUrl: string) {\r\n if (Transcoder.WasmBaseUrl && wasmUrl.startsWith(\"https://cdn.babylonjs.com/\")) {\r\n wasmUrl = wasmUrl.replace(\"https://cdn.babylonjs.com/\", Transcoder.WasmBaseUrl);\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 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 Promise.resolve(null);\r\n }\r\n}\r\n"]}
@@ -0,0 +1,13 @@
1
+ import * as KTX2 from "@babylonjs/core/Materials/Textures/ktx2decoderTypes.js";
2
+ import type { Transcoder } from "./transcoder";
3
+ /**
4
+ * @internal
5
+ */
6
+ export declare class TranscoderManager {
7
+ static _Transcoders: Array<typeof Transcoder>;
8
+ static RegisterTranscoder(transcoder: typeof Transcoder): void;
9
+ private static _TranscoderInstances;
10
+ private _wasmMemoryManager;
11
+ findTranscoder(src: KTX2.SourceTextureFormat, dst: KTX2.TranscodeTarget, isInGammaSpace: boolean, bypass?: string[]): Transcoder | null;
12
+ private _getExistingTranscoder;
13
+ }
@@ -0,0 +1,50 @@
1
+ import * as KTX2 from "@babylonjs/core/Materials/Textures/ktx2decoderTypes.js";
2
+ import { WASMMemoryManager } from "./wasmMemoryManager.js";
3
+ /**
4
+ * @internal
5
+ */
6
+ export class TranscoderManager {
7
+ static RegisterTranscoder(transcoder) {
8
+ TranscoderManager._Transcoders.push(transcoder);
9
+ }
10
+ findTranscoder(src, dst, isInGammaSpace, bypass) {
11
+ let transcoder = null;
12
+ const key = KTX2.SourceTextureFormat[src] + "_" + KTX2.TranscodeTarget[dst];
13
+ for (let i = 0; i < TranscoderManager._Transcoders.length; ++i) {
14
+ if (TranscoderManager._Transcoders[i].CanTranscode(src, dst, isInGammaSpace) && (!bypass || bypass.indexOf(TranscoderManager._Transcoders[i].Name) < 0)) {
15
+ transcoder = this._getExistingTranscoder(key, TranscoderManager._Transcoders[i].Name);
16
+ if (!transcoder) {
17
+ transcoder = new TranscoderManager._Transcoders[i]();
18
+ transcoder.initialize();
19
+ if (transcoder.needMemoryManager()) {
20
+ if (!this._wasmMemoryManager) {
21
+ this._wasmMemoryManager = new WASMMemoryManager();
22
+ }
23
+ transcoder.setMemoryManager(this._wasmMemoryManager);
24
+ }
25
+ if (!TranscoderManager._TranscoderInstances[key]) {
26
+ TranscoderManager._TranscoderInstances[key] = [];
27
+ }
28
+ TranscoderManager._TranscoderInstances[key].push(transcoder);
29
+ }
30
+ break;
31
+ }
32
+ }
33
+ return transcoder;
34
+ }
35
+ _getExistingTranscoder(key, transcoderName) {
36
+ const transcoders = TranscoderManager._TranscoderInstances[key];
37
+ if (transcoders) {
38
+ for (let t = 0; t < transcoders.length; ++t) {
39
+ const transcoder = transcoders[t];
40
+ if (transcoderName === transcoder.getName()) {
41
+ return transcoder;
42
+ }
43
+ }
44
+ }
45
+ return null;
46
+ }
47
+ }
48
+ TranscoderManager._Transcoders = [];
49
+ TranscoderManager._TranscoderInstances = {};
50
+ //# sourceMappingURL=transcoderManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcoderManager.js","sourceRoot":"","sources":["../../../tools/ktx2Decoder/src/transcoderManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,+DAAiD;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;YAC5D,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;gBACrJ,UAAU,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACtF,IAAI,CAAC,UAAU,EAAE;oBACb,UAAU,GAAG,IAAI,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrD,UAAW,CAAC,UAAU,EAAE,CAAC;oBACzB,IAAI,UAAW,CAAC,iBAAiB,EAAE,EAAE;wBACjC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;4BAC1B,IAAI,CAAC,kBAAkB,GAAG,IAAI,iBAAiB,EAAE,CAAC;yBACrD;wBACD,UAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;qBACzD;oBACD,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE;wBAC9C,iBAAiB,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;qBACpD;oBACD,iBAAiB,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;iBAChE;gBACD,MAAM;aACT;SACJ;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;YACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;gBACzC,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;gBAClC,IAAI,cAAc,KAAK,UAAU,CAAC,OAAO,EAAE,EAAE;oBACzC,OAAO,UAAU,CAAC;iBACrB;aACJ;SACJ;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;;AApDa,8BAAY,GAA6B,EAAE,CAAC;AAM3C,sCAAoB,GAAyC,EAAE,CAAC","sourcesContent":["import * 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"]}