@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.
- package/Misc/dataReader.d.ts +65 -0
- package/Misc/dataReader.js +116 -0
- package/Misc/dataReader.js.map +1 -0
- package/Misc/index.d.ts +1 -0
- package/Misc/index.js +2 -0
- package/Misc/index.js.map +1 -0
- package/Transcoders/index.d.ts +8 -0
- package/Transcoders/index.js +9 -0
- package/Transcoders/index.js.map +1 -0
- package/Transcoders/liteTranscoder.d.ts +25 -0
- package/Transcoders/liteTranscoder.js +63 -0
- package/Transcoders/liteTranscoder.js.map +1 -0
- package/Transcoders/liteTranscoder_UASTC_ASTC.d.ts +19 -0
- package/Transcoders/liteTranscoder_UASTC_ASTC.js +29 -0
- package/Transcoders/liteTranscoder_UASTC_ASTC.js.map +1 -0
- package/Transcoders/liteTranscoder_UASTC_BC7.d.ts +19 -0
- package/Transcoders/liteTranscoder_UASTC_BC7.js +29 -0
- package/Transcoders/liteTranscoder_UASTC_BC7.js.map +1 -0
- package/Transcoders/liteTranscoder_UASTC_R8_UNORM.d.ts +21 -0
- package/Transcoders/liteTranscoder_UASTC_R8_UNORM.js +36 -0
- package/Transcoders/liteTranscoder_UASTC_R8_UNORM.js.map +1 -0
- package/Transcoders/liteTranscoder_UASTC_RG8_UNORM.d.ts +21 -0
- package/Transcoders/liteTranscoder_UASTC_RG8_UNORM.js +36 -0
- package/Transcoders/liteTranscoder_UASTC_RG8_UNORM.js.map +1 -0
- package/Transcoders/liteTranscoder_UASTC_RGBA_SRGB.d.ts +21 -0
- package/Transcoders/liteTranscoder_UASTC_RGBA_SRGB.js +36 -0
- package/Transcoders/liteTranscoder_UASTC_RGBA_SRGB.js.map +1 -0
- package/Transcoders/liteTranscoder_UASTC_RGBA_UNORM.d.ts +21 -0
- package/Transcoders/liteTranscoder_UASTC_RGBA_UNORM.js +36 -0
- package/Transcoders/liteTranscoder_UASTC_RGBA_UNORM.js.map +1 -0
- package/Transcoders/mscTranscoder.d.ts +32 -0
- package/Transcoders/mscTranscoder.js +128 -0
- package/Transcoders/mscTranscoder.js.map +1 -0
- package/index.d.ts +8 -0
- package/index.js +10 -0
- package/index.js.map +1 -0
- package/ktx2Decoder.d.ts +22 -0
- package/ktx2Decoder.js +144 -0
- package/ktx2Decoder.js.map +1 -0
- package/ktx2FileReader.d.ts +109 -0
- package/ktx2FileReader.js +219 -0
- package/ktx2FileReader.js.map +1 -0
- package/legacy/legacy.d.ts +1 -0
- package/legacy/legacy.js +8 -0
- package/legacy/legacy.js.map +1 -0
- package/license.md +71 -0
- package/package.json +49 -0
- package/readme.md +1 -0
- package/transcodeDecisionTree.d.ts +18 -0
- package/transcodeDecisionTree.js +240 -0
- package/transcodeDecisionTree.js.map +1 -0
- package/transcoder.d.ts +17 -0
- package/transcoder.js +28 -0
- package/transcoder.js.map +1 -0
- package/transcoderManager.d.ts +13 -0
- package/transcoderManager.js +50 -0
- package/transcoderManager.js.map +1 -0
- package/wasm/license.md +361 -0
- package/wasm/msc_basis_transcoder.js +21 -0
- package/wasm/msc_basis_transcoder.wasm +0 -0
- package/wasm/uastc_astc.wasm +0 -0
- package/wasm/uastc_bc7.wasm +0 -0
- package/wasm/uastc_r8_unorm.wasm +0 -0
- package/wasm/uastc_rg8_unorm.wasm +0 -0
- package/wasm/uastc_rgba8_srgb_v2.wasm +0 -0
- package/wasm/uastc_rgba8_unorm_v2.wasm +0 -0
- package/wasmMemoryManager.d.ts +17 -0
- package/wasmMemoryManager.js +63 -0
- package/wasmMemoryManager.js.map +1 -0
- package/zstddec.d.ts +41 -0
- package/zstddec.js +95 -0
- 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":"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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
ADDED
@@ -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"]}
|