@galacean/effects-plugin-ktx2 2.8.0-alpha.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/dist/index.mjs ADDED
@@ -0,0 +1,1458 @@
1
+ /*!
2
+ * Name: @galacean/effects-plugin-ktx2
3
+ * Description: Galacean Effects player Khronos Texture 2.0 plugin
4
+ * Author: Ant Group CO., Ltd.
5
+ * Contributors: 澄弈
6
+ * Version: v2.8.0-alpha.0
7
+ */
8
+
9
+ import * as EFFECTS from '@galacean/effects';
10
+ import { glContext, TextureSourceType, textureLoaderRegistry, loadBinary } from '@galacean/effects';
11
+
12
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
13
+ try {
14
+ var info = gen[key](arg);
15
+ var value = info.value;
16
+ } catch (error) {
17
+ reject(error);
18
+ return;
19
+ }
20
+ if (info.done) resolve(value);
21
+ else Promise.resolve(value).then(_next, _throw);
22
+ }
23
+ function _async_to_generator(fn) {
24
+ return function() {
25
+ var self = this, args = arguments;
26
+ return new Promise(function(resolve, reject) {
27
+ var gen = fn.apply(self, args);
28
+ function _next(value) {
29
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
30
+ }
31
+ function _throw(err) {
32
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
33
+ }
34
+ _next(undefined);
35
+ });
36
+ };
37
+ }
38
+
39
+ function __generator(thisArg, body) {
40
+ var _ = {
41
+ label: 0,
42
+ sent: function sent() {
43
+ if (t[0] & 1) throw t[1];
44
+ return t[1];
45
+ },
46
+ trys: [],
47
+ ops: []
48
+ }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
49
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() {
50
+ return this;
51
+ }), g;
52
+ function verb(n) {
53
+ return function(v) {
54
+ return step([
55
+ n,
56
+ v
57
+ ]);
58
+ };
59
+ }
60
+ function step(op) {
61
+ if (f) throw new TypeError("Generator is already executing.");
62
+ while(g && (g = 0, op[0] && (_ = 0)), _)try {
63
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
64
+ if (y = 0, t) op = [
65
+ op[0] & 2,
66
+ t.value
67
+ ];
68
+ switch(op[0]){
69
+ case 0:
70
+ case 1:
71
+ t = op;
72
+ break;
73
+ case 4:
74
+ _.label++;
75
+ return {
76
+ value: op[1],
77
+ done: false
78
+ };
79
+ case 5:
80
+ _.label++;
81
+ y = op[1];
82
+ op = [
83
+ 0
84
+ ];
85
+ continue;
86
+ case 7:
87
+ op = _.ops.pop();
88
+ _.trys.pop();
89
+ continue;
90
+ default:
91
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
92
+ _ = 0;
93
+ continue;
94
+ }
95
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
96
+ _.label = op[1];
97
+ break;
98
+ }
99
+ if (op[0] === 6 && _.label < t[1]) {
100
+ _.label = t[1];
101
+ t = op;
102
+ break;
103
+ }
104
+ if (t && _.label < t[2]) {
105
+ _.label = t[2];
106
+ _.ops.push(op);
107
+ break;
108
+ }
109
+ if (t[2]) _.ops.pop();
110
+ _.trys.pop();
111
+ continue;
112
+ }
113
+ op = body.call(thisArg, _);
114
+ } catch (e) {
115
+ op = [
116
+ 6,
117
+ e
118
+ ];
119
+ y = 0;
120
+ } finally{
121
+ f = t = 0;
122
+ }
123
+ if (op[0] & 5) throw op[1];
124
+ return {
125
+ value: op[0] ? op[1] : void 0,
126
+ done: true
127
+ };
128
+ }
129
+ }
130
+ typeof SuppressedError === "function" ? SuppressedError : function _SuppressedError(error, suppressed, message) {
131
+ var e = new Error(message);
132
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
133
+ };
134
+
135
+ /**
136
+ * KTX2 transcode target format.
137
+ * if you modify this file, please also modify KTX2TargetFormat in binomial-workercode.ts
138
+ */ var KTX2TargetFormat;
139
+ (function(KTX2TargetFormat) {
140
+ /** RGB(A) compressed format, 128 bits per 4x4 pixel block. */ KTX2TargetFormat[KTX2TargetFormat["ASTC"] = 0] = "ASTC";
141
+ })(KTX2TargetFormat || (KTX2TargetFormat = {}));
142
+ var TextureFormat;
143
+ (function(TextureFormat) {
144
+ /** RGB format, 8 bits per channel. */ TextureFormat[TextureFormat["R8G8B8"] = 0] = "R8G8B8";
145
+ /** RGBA format, 8 bits per channel. */ TextureFormat[TextureFormat["R8G8B8A8"] = 1] = "R8G8B8A8";
146
+ /** RGB(A) compressed format, 128 bits per 4x4 pixel block. */ TextureFormat[TextureFormat["ASTC_4x4"] = 2] = "ASTC_4x4";
147
+ })(TextureFormat || (TextureFormat = {}));
148
+
149
+ function _defineProperties(target, props) {
150
+ for(var i = 0; i < props.length; i++){
151
+ var descriptor = props[i];
152
+ descriptor.enumerable = descriptor.enumerable || false;
153
+ descriptor.configurable = true;
154
+ if ("value" in descriptor) descriptor.writable = true;
155
+ Object.defineProperty(target, descriptor.key, descriptor);
156
+ }
157
+ }
158
+ function _create_class(Constructor, protoProps, staticProps) {
159
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps);
160
+ if (staticProps) _defineProperties(Constructor, staticProps);
161
+ return Constructor;
162
+ }
163
+
164
+ /**
165
+ * @internal
166
+ * WorkerPool, T 为发送消息的类型,U 为返回值的类型。
167
+ */ var WorkerPool = /*#__PURE__*/ function() {
168
+ function WorkerPool(limitedCount, workerCreator) {
169
+ if (limitedCount === void 0) limitedCount = 2;
170
+ this.limitedCount = limitedCount;
171
+ this.workerCreator = workerCreator;
172
+ this.taskQueue = [];
173
+ this.workerStatus = 0;
174
+ this.initPromises = new Map();
175
+ this.destroyed = false;
176
+ if (limitedCount > 8 || limitedCount < 1) {
177
+ throw new Error("limitedCount must be between 1 and 8");
178
+ }
179
+ this.workerItems = new Array(limitedCount);
180
+ }
181
+ var _proto = WorkerPool.prototype;
182
+ _proto.prepareWorker = function prepareWorker() {
183
+ var count = this.limitedCount;
184
+ var promises = new Array(count);
185
+ for(var i = 0; i < count; i++){
186
+ promises.push(this.ensureWorker(i));
187
+ }
188
+ return Promise.all(promises);
189
+ };
190
+ _proto.ensureWorker = function ensureWorker(workerId) {
191
+ if (!this.initPromises.has(workerId)) {
192
+ this.initPromises.set(workerId, this.initWorker(workerId));
193
+ }
194
+ return this.initPromises.get(workerId);
195
+ };
196
+ /**
197
+ * 向 worker 发送消息。
198
+ * @param message - 要发送给 worker 的消息
199
+ * @returns 返回一个消息处理结果的 Promise
200
+ */ _proto.postMessage = function postMessage(message) {
201
+ var _this = this;
202
+ if (this.destroyed) {
203
+ return Promise.reject(new Error("Worker Pool destroyed"));
204
+ }
205
+ return new Promise(function(resolve, reject) {
206
+ var workerId = _this.getIdleWorkerId();
207
+ if (workerId !== -1) {
208
+ _this.ensureWorker(workerId).then(function() {
209
+ if (_this.destroyed) {
210
+ throw new Error("Worker Pool destroyed");
211
+ }
212
+ var workerItem = _this.workerItems[workerId];
213
+ workerItem.resolve = resolve;
214
+ workerItem.reject = reject;
215
+ workerItem.worker.postMessage(message);
216
+ }).catch(function(error) {
217
+ _this.workerStatus &= ~(1 << workerId);
218
+ _this.initPromises.delete(workerId);
219
+ reject(error);
220
+ });
221
+ } else {
222
+ _this.taskQueue.push({
223
+ resolve: resolve,
224
+ reject: reject,
225
+ message: message
226
+ });
227
+ }
228
+ });
229
+ };
230
+ _proto.initWorker = function initWorker(workerId) {
231
+ var _this = this;
232
+ return Promise.resolve(this.workerCreator()).then(function(worker) {
233
+ if (_this.destroyed) {
234
+ worker.terminate();
235
+ throw new Error("Worker Pool destroyed");
236
+ }
237
+ var onMessage = _this.onMessage.bind(_this, workerId);
238
+ var onError = function(event) {
239
+ var workerItem = _this.workerItems[workerId];
240
+ if (workerItem) {
241
+ workerItem.reject(event.error || new Error(event.message || "Worker error"));
242
+ _this.nextTask(workerId);
243
+ }
244
+ };
245
+ worker.addEventListener("message", onMessage);
246
+ worker.addEventListener("error", onError);
247
+ _this.workerItems[workerId] = {
248
+ worker: worker,
249
+ resolve: function() {},
250
+ reject: function() {},
251
+ onMessage: onMessage,
252
+ onError: onError
253
+ };
254
+ return worker;
255
+ });
256
+ };
257
+ /**
258
+ * 获取空闲的 worker ID,并原子性地标记为忙碌
259
+ * @returns worker ID,如果没有空闲 worker 返回 -1
260
+ */ _proto.getIdleWorkerId = function getIdleWorkerId() {
261
+ for(var i = 0, count = this.limitedCount; i < count; i++){
262
+ if (!(this.workerStatus & 1 << i)) {
263
+ this.workerStatus |= 1 << i; // ✅ 原子性标记
264
+ return i;
265
+ }
266
+ }
267
+ return -1;
268
+ };
269
+ _proto.onMessage = function onMessage(workerId, msg) {
270
+ var workerItem = this.workerItems[workerId];
271
+ if (!workerItem) {
272
+ return;
273
+ }
274
+ var error = msg.data.error;
275
+ if (error) {
276
+ workerItem.reject(error);
277
+ } else {
278
+ workerItem.resolve(msg.data);
279
+ }
280
+ this.nextTask(workerId);
281
+ };
282
+ _proto.nextTask = function nextTask(workerId) {
283
+ if (this.taskQueue.length) {
284
+ var taskItem = this.taskQueue.shift();
285
+ var workerItem = this.workerItems[workerId];
286
+ if (!workerItem) {
287
+ taskItem.reject(new Error("Worker not initialized"));
288
+ this.workerStatus &= ~(1 << workerId);
289
+ return;
290
+ }
291
+ workerItem.resolve = taskItem.resolve;
292
+ workerItem.reject = taskItem.reject;
293
+ workerItem.worker.postMessage(taskItem.message);
294
+ } else {
295
+ this.workerStatus &= ~(1 << workerId);
296
+ }
297
+ };
298
+ _proto.destroy = function destroy() {
299
+ if (this.destroyed) {
300
+ return;
301
+ }
302
+ this.destroyed = true;
303
+ var workerItems = this.workerItems;
304
+ var error = new Error("Worker Pool destroyed");
305
+ for(var i = 0, n = workerItems.length; i < n; i++){
306
+ var workerItem = workerItems[i];
307
+ if (!workerItem) {
308
+ continue;
309
+ }
310
+ if (workerItem.onMessage) {
311
+ workerItem.worker.removeEventListener("message", workerItem.onMessage);
312
+ }
313
+ if (workerItem.onError) {
314
+ workerItem.worker.removeEventListener("error", workerItem.onError);
315
+ }
316
+ workerItem.worker.terminate();
317
+ workerItem.reject == null ? void 0 : workerItem.reject.call(workerItem, error);
318
+ }
319
+ while(this.taskQueue.length){
320
+ var _this_taskQueue_shift;
321
+ (_this_taskQueue_shift = this.taskQueue.shift()) == null ? void 0 : _this_taskQueue_shift.reject(error);
322
+ }
323
+ workerItems.length = 0;
324
+ this.taskQueue.length = 0;
325
+ this.workerStatus = 0;
326
+ this.initPromises.clear();
327
+ };
328
+ return WorkerPool;
329
+ }();
330
+
331
+ var TextureTranscoder = /*#__PURE__*/ function() {
332
+ function TextureTranscoder(workerLimitCount) {
333
+ this.workerLimitCount = workerLimitCount;
334
+ }
335
+ var _proto = TextureTranscoder.prototype;
336
+ _proto.init = function init() {
337
+ if (!this.initPromise) {
338
+ this.initPromise = this.initTranscodeWorkerPool();
339
+ }
340
+ return this.initPromise;
341
+ };
342
+ _proto.destroy = function destroy() {
343
+ var _this_transcodeWorkerPool;
344
+ (_this_transcodeWorkerPool = this.transcodeWorkerPool) == null ? void 0 : _this_transcodeWorkerPool.destroy();
345
+ };
346
+ _proto.createTranscodePool = function createTranscodePool(workerURL, transcoderWasm) {
347
+ this.transcodeWorkerPool = new WorkerPool(this.workerLimitCount, function() {
348
+ return new Promise(function(resolve, reject) {
349
+ var onError = function onError(e) {
350
+ cleanup();
351
+ worker.terminate();
352
+ var _e_error;
353
+ reject((_e_error = e.error) != null ? _e_error : new Error(e.message || "Worker init error"));
354
+ };
355
+ var worker = new Worker(workerURL);
356
+ var msg = {
357
+ type: "init",
358
+ transcoderWasm: transcoderWasm
359
+ };
360
+ var cleanup = function() {
361
+ worker.removeEventListener("message", onMessage);
362
+ worker.removeEventListener("error", onError);
363
+ };
364
+ function onMessage(e) {
365
+ if (e.data.error) {
366
+ reject(e.data.error);
367
+ } else {
368
+ worker.removeEventListener("message", onMessage);
369
+ resolve(worker);
370
+ }
371
+ }
372
+ worker.addEventListener("message", onMessage);
373
+ worker.addEventListener("error", onError);
374
+ worker.postMessage(msg);
375
+ });
376
+ });
377
+ return this.transcodeWorkerPool.prepareWorker();
378
+ };
379
+ return TextureTranscoder;
380
+ }();
381
+ function decodeText(array) {
382
+ if (typeof TextDecoder !== "undefined") {
383
+ return new TextDecoder("utf-8").decode(array);
384
+ }
385
+ // TextDecoder polyfill
386
+ var s = "";
387
+ for(var i = 0, il = array.length; i < il; i++){
388
+ s += String.fromCharCode(array[i]);
389
+ }
390
+ return decodeURIComponent(encodeURIComponent(s));
391
+ }
392
+
393
+ var BufferReader = /*#__PURE__*/ function() {
394
+ function BufferReader(data, byteOffset, byteLength, littleEndian) {
395
+ if (byteOffset === void 0) byteOffset = 0;
396
+ if (littleEndian === void 0) littleEndian = true;
397
+ this.data = data;
398
+ this.dataView = new DataView(data.buffer, data.byteOffset + byteOffset, byteLength != null ? byteLength : data.byteLength - byteOffset);
399
+ this.littleEndian = littleEndian;
400
+ this.pos = 0;
401
+ this.baseOffset = byteOffset;
402
+ }
403
+ var _proto = BufferReader.prototype;
404
+ _proto.nextUint8 = function nextUint8() {
405
+ var value = this.dataView.getUint8(this.pos);
406
+ this.pos += 1;
407
+ return value;
408
+ };
409
+ _proto.nextUint16 = function nextUint16() {
410
+ var value = this.dataView.getUint16(this.pos, this.littleEndian);
411
+ this.pos += 2;
412
+ return value;
413
+ };
414
+ _proto.nextUint32 = function nextUint32() {
415
+ var value = this.dataView.getUint32(this.pos, this.littleEndian);
416
+ this.pos += 4;
417
+ return value;
418
+ };
419
+ _proto.nextInt32 = function nextInt32() {
420
+ var value = this.dataView.getInt32(this.pos, this.littleEndian);
421
+ this.pos += 4;
422
+ return value;
423
+ };
424
+ _proto.nextInt32Array = function nextInt32Array(len) {
425
+ var value = new Int32Array(this.data.buffer, this.pos + this.dataView.byteOffset, len);
426
+ this.pos += 4 * len;
427
+ return value;
428
+ };
429
+ _proto.nextFloat32 = function nextFloat32() {
430
+ var value = this.dataView.getFloat32(this.pos, this.littleEndian);
431
+ this.pos += 4;
432
+ return value;
433
+ };
434
+ _proto.nextFloat32Array = function nextFloat32Array(len) {
435
+ var value = new Float32Array(this.data.buffer, this.pos + this.dataView.byteOffset, len);
436
+ this.pos += 4 * len;
437
+ return value;
438
+ };
439
+ _proto.nextUint32Array = function nextUint32Array(len) {
440
+ var value = new Uint32Array(this.data.buffer, this.pos + this.dataView.byteOffset, len);
441
+ this.pos += 4 * len;
442
+ return value;
443
+ };
444
+ _proto.nextUint8Array = function nextUint8Array(len) {
445
+ var value = new Uint8Array(this.data.buffer, this.pos + this.dataView.byteOffset, len);
446
+ this.pos += len;
447
+ return value;
448
+ };
449
+ _proto.nextUint64 = function nextUint64() {
450
+ if (!this.littleEndian) {
451
+ throw new Error("nextUint64 only supports little-endian");
452
+ }
453
+ var left = this.dataView.getUint32(this.pos, this.littleEndian);
454
+ var right = this.dataView.getUint32(this.pos + 4, this.littleEndian);
455
+ var value = left + Math.pow(2, 32) * right;
456
+ this.pos += 8;
457
+ return value;
458
+ };
459
+ _proto.nextStr = function nextStr() {
460
+ var strByteLength = this.nextUint16();
461
+ var uint8Array = new Uint8Array(this.data.buffer, this.pos + this.dataView.byteOffset, strByteLength);
462
+ this.pos += strByteLength;
463
+ return decodeText(uint8Array);
464
+ };
465
+ _proto.skip = function skip(bytes) {
466
+ this.pos += bytes;
467
+ return this;
468
+ };
469
+ _proto.scan = function scan(maxByteLength, term) {
470
+ if (term === void 0) term = 0x00;
471
+ var byteOffset = this.pos;
472
+ var byteLength = 0;
473
+ while(this.dataView.getUint8(this.pos) !== term && byteLength < maxByteLength){
474
+ byteLength++;
475
+ this.pos++;
476
+ }
477
+ if (byteLength < maxByteLength) {
478
+ this.pos++;
479
+ }
480
+ return new Uint8Array(this.dataView.buffer, this.dataView.byteOffset + byteOffset, byteLength);
481
+ };
482
+ _create_class(BufferReader, [
483
+ {
484
+ key: "position",
485
+ get: function get() {
486
+ return this.pos;
487
+ }
488
+ },
489
+ {
490
+ key: "offset",
491
+ get: function get() {
492
+ return this.pos + this.baseOffset;
493
+ }
494
+ }
495
+ ]);
496
+ return BufferReader;
497
+ }();
498
+
499
+ var DFDTransferFunction;
500
+ (function(DFDTransferFunction) {
501
+ DFDTransferFunction[DFDTransferFunction["linear"] = 1] = "linear";
502
+ DFDTransferFunction[DFDTransferFunction["sRGB"] = 2] = "sRGB";
503
+ })(DFDTransferFunction || (DFDTransferFunction = {}));
504
+ var ColorModel;
505
+ (function(ColorModel) {
506
+ ColorModel[ColorModel["ETC1S"] = 163] = "ETC1S";
507
+ ColorModel[ColorModel["UASTC"] = 166] = "UASTC";
508
+ })(ColorModel || (ColorModel = {}));
509
+ var SupercompressionScheme;
510
+ (function(SupercompressionScheme) {
511
+ SupercompressionScheme[SupercompressionScheme["None"] = 0] = "None";
512
+ SupercompressionScheme[SupercompressionScheme["BasisLZ"] = 1] = "BasisLZ";
513
+ SupercompressionScheme[SupercompressionScheme["Zstd"] = 2] = "Zstd";
514
+ SupercompressionScheme[SupercompressionScheme["ZLib"] = 3] = "ZLib";
515
+ })(SupercompressionScheme || (SupercompressionScheme = {}));
516
+ var KTX2Container = /*#__PURE__*/ function() {
517
+ function KTX2Container(buffer) {
518
+ this.vkFormat = 0;
519
+ this.typeSize = 1;
520
+ this.pixelWidth = 0;
521
+ this.pixelHeight = 0;
522
+ this.pixelDepth = 0;
523
+ this.layerCount = 0;
524
+ this.faceCount = 1;
525
+ this.supercompressionScheme = 0;
526
+ this.levels = [];
527
+ this.keyValue = {};
528
+ this.globalData = null;
529
+ this.parse(buffer);
530
+ }
531
+ var _proto = KTX2Container.prototype;
532
+ _proto.parse = function parse(data) {
533
+ var KTX2_IDENTIFIER = new Uint8Array([
534
+ 0xAB,
535
+ 0x4B,
536
+ 0x54,
537
+ 0x58,
538
+ 0x20,
539
+ 0x32,
540
+ 0x30,
541
+ 0xBB,
542
+ 0x0D,
543
+ 0x0A,
544
+ 0x1A,
545
+ 0x0A
546
+ ]);
547
+ if (data.length < KTX2_IDENTIFIER.length || !KTX2_IDENTIFIER.every(function(v, i) {
548
+ return data[i] === v;
549
+ })) {
550
+ throw new Error("Texture missing KTX2 identifier.");
551
+ }
552
+ var buffer = data.buffer;
553
+ var byteOffset = data.byteOffset;
554
+ var headerBufferReader = new BufferReader(data, 12);
555
+ this.vkFormat = headerBufferReader.nextUint32();
556
+ this.typeSize = headerBufferReader.nextUint32();
557
+ this.pixelWidth = headerBufferReader.nextUint32();
558
+ this.pixelHeight = headerBufferReader.nextUint32();
559
+ this.pixelDepth = headerBufferReader.nextUint32();
560
+ this.layerCount = headerBufferReader.nextUint32();
561
+ this.faceCount = headerBufferReader.nextUint32();
562
+ var levelCount = Math.max(1, headerBufferReader.nextUint32());
563
+ this.supercompressionScheme = headerBufferReader.nextUint32();
564
+ var dfdByteOffset = headerBufferReader.nextUint32();
565
+ var dfdByteLength = headerBufferReader.nextUint32();
566
+ var kvdByteOffset = headerBufferReader.nextUint32();
567
+ var kvdByteLength = headerBufferReader.nextUint32();
568
+ var sgdByteOffset = headerBufferReader.nextUint64();
569
+ var sgdByteLength = headerBufferReader.nextUint64();
570
+ // level index
571
+ var ktxLevels = new Array(levelCount);
572
+ var levelByteLength = levelCount * 3 * 8;
573
+ var levelReader = new BufferReader(data, headerBufferReader.offset, levelByteLength);
574
+ this.levels = ktxLevels;
575
+ for(var i = 0; i < levelCount; i++){
576
+ ktxLevels[i] = {
577
+ levelData: new Uint8Array(buffer, byteOffset + levelReader.nextUint64(), levelReader.nextUint64()),
578
+ uncompressedByteLength: levelReader.nextUint64()
579
+ };
580
+ }
581
+ // Data Format Descriptor (DFD).
582
+ var dfdReader = new BufferReader(data, dfdByteOffset, dfdByteLength);
583
+ var dfd = {
584
+ vendorId: dfdReader.skip(4 /* totalSize */ ).nextUint16(),
585
+ descriptorType: dfdReader.nextUint16(),
586
+ versionNumber: dfdReader.nextUint16(),
587
+ descriptorBlockSize: dfdReader.nextUint16(),
588
+ colorModel: dfdReader.nextUint8(),
589
+ colorPrimaries: dfdReader.nextUint8(),
590
+ transferFunction: dfdReader.nextUint8(),
591
+ flags: dfdReader.nextUint8(),
592
+ texelBlockDimension: [
593
+ dfdReader.nextUint8(),
594
+ dfdReader.nextUint8(),
595
+ dfdReader.nextUint8(),
596
+ dfdReader.nextUint8()
597
+ ],
598
+ bytesPlane: [
599
+ dfdReader.nextUint8(),
600
+ dfdReader.nextUint8(),
601
+ dfdReader.nextUint8(),
602
+ dfdReader.nextUint8(),
603
+ dfdReader.nextUint8(),
604
+ dfdReader.nextUint8(),
605
+ dfdReader.nextUint8(),
606
+ dfdReader.nextUint8()
607
+ ],
608
+ samples: []
609
+ };
610
+ this.dataFormatDescriptor = dfd;
611
+ var sampleStart = 6;
612
+ var sampleWords = 4;
613
+ var numSamples = (dfd.descriptorBlockSize / 4 - sampleStart) / sampleWords;
614
+ for(var i1 = 0; i1 < numSamples; i1++){
615
+ var sample = {
616
+ bitOffset: dfdReader.nextUint16(),
617
+ bitLength: dfdReader.nextUint8(),
618
+ channelType: dfdReader.nextUint8(),
619
+ samplePosition: [
620
+ dfdReader.nextUint8(),
621
+ dfdReader.nextUint8(),
622
+ dfdReader.nextUint8(),
623
+ dfdReader.nextUint8()
624
+ ],
625
+ sampleLower: -Infinity,
626
+ sampleUpper: Infinity
627
+ };
628
+ if (sample.channelType & 0x40) {
629
+ sample.sampleLower = dfdReader.nextInt32();
630
+ sample.sampleUpper = dfdReader.nextInt32();
631
+ } else {
632
+ sample.sampleLower = dfdReader.nextUint32();
633
+ sample.sampleUpper = dfdReader.nextUint32();
634
+ }
635
+ dfd.samples[i1] = sample;
636
+ }
637
+ var kvdReader = new BufferReader(data, kvdByteOffset, kvdByteLength, true);
638
+ while(kvdReader.position < kvdByteLength){
639
+ var keyValueByteLength = kvdReader.nextUint32();
640
+ var keyData = kvdReader.scan(keyValueByteLength);
641
+ var key = decodeText(keyData);
642
+ // 4-byte alignment.
643
+ var valueData = kvdReader.nextUint8Array(keyValueByteLength - keyData.byteLength - 1);
644
+ if (/^ktx/i.test(key)) {
645
+ var decodedValue = decodeText(valueData);
646
+ var trimmedValue = decodedValue;
647
+ while(trimmedValue.length > 0 && trimmedValue.charCodeAt(trimmedValue.length - 1) === 0){
648
+ trimmedValue = trimmedValue.slice(0, -1);
649
+ }
650
+ this.keyValue[key] = trimmedValue;
651
+ } else {
652
+ this.keyValue[key] = valueData;
653
+ }
654
+ var kvPadding = keyValueByteLength % 4 ? 4 - keyValueByteLength % 4 : 0; // align(4)
655
+ // 4-byte alignment.
656
+ kvdReader.skip(kvPadding);
657
+ }
658
+ if (sgdByteLength <= 0) {
659
+ return this;
660
+ }
661
+ var sgdReader = new BufferReader(data, sgdByteOffset, sgdByteLength, true);
662
+ var endpointCount = sgdReader.nextUint16();
663
+ var selectorCount = sgdReader.nextUint16();
664
+ var endpointsByteLength = sgdReader.nextUint32();
665
+ var selectorsByteLength = sgdReader.nextUint32();
666
+ var tablesByteLength = sgdReader.nextUint32();
667
+ var extendedByteLength = sgdReader.nextUint32();
668
+ var imageDescs = new Array(levelCount);
669
+ for(var i2 = 0; i2 < levelCount; i2++){
670
+ imageDescs[i2] = {
671
+ imageFlags: sgdReader.nextUint32(),
672
+ rgbSliceByteOffset: sgdReader.nextUint32(),
673
+ rgbSliceByteLength: sgdReader.nextUint32(),
674
+ alphaSliceByteOffset: sgdReader.nextUint32(),
675
+ alphaSliceByteLength: sgdReader.nextUint32()
676
+ };
677
+ }
678
+ var endpointsByteOffset = sgdByteOffset + sgdReader.position;
679
+ var selectorsByteOffset = endpointsByteOffset + endpointsByteLength;
680
+ var tablesByteOffset = selectorsByteOffset + selectorsByteLength;
681
+ var extendedByteOffset = tablesByteOffset + tablesByteLength;
682
+ var endpointsData = new Uint8Array(buffer, byteOffset + endpointsByteOffset, endpointsByteLength);
683
+ var selectorsData = new Uint8Array(buffer, byteOffset + selectorsByteOffset, selectorsByteLength);
684
+ var tablesData = new Uint8Array(buffer, byteOffset + tablesByteOffset, tablesByteLength);
685
+ var extendedData = new Uint8Array(buffer, byteOffset + extendedByteOffset, extendedByteLength);
686
+ this.globalData = {
687
+ endpointCount: endpointCount,
688
+ selectorCount: selectorCount,
689
+ imageDescs: imageDescs,
690
+ endpointsData: endpointsData,
691
+ selectorsData: selectorsData,
692
+ tablesData: tablesData,
693
+ extendedData: extendedData
694
+ };
695
+ };
696
+ _create_class(KTX2Container, [
697
+ {
698
+ key: "isSRGB",
699
+ get: function get() {
700
+ return this.dataFormatDescriptor.transferFunction === 2;
701
+ }
702
+ },
703
+ {
704
+ key: "isUASTC",
705
+ get: function get() {
706
+ return this.dataFormatDescriptor.colorModel === 166;
707
+ }
708
+ },
709
+ {
710
+ key: "isNotBasis",
711
+ get: function get() {
712
+ return this.vkFormat != 0;
713
+ }
714
+ }
715
+ ]);
716
+ return KTX2Container;
717
+ }();
718
+
719
+ function _set_prototype_of(o, p) {
720
+ _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {
721
+ o.__proto__ = p;
722
+ return o;
723
+ };
724
+ return _set_prototype_of(o, p);
725
+ }
726
+
727
+ function _inherits(subClass, superClass) {
728
+ if (typeof superClass !== "function" && superClass !== null) {
729
+ throw new TypeError("Super expression must either be null or a function");
730
+ }
731
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
732
+ constructor: {
733
+ value: subClass,
734
+ writable: true,
735
+ configurable: true
736
+ }
737
+ });
738
+ if (superClass) _set_prototype_of(subClass, superClass);
739
+ }
740
+
741
+ /* eslint-disable compat/compat */ /* eslint-disable promise/no-nesting */ /**
742
+ * 转码核心代码
743
+ * 主线程调用时会返回 API 对象
744
+ * Worker 中使用时需要拼接消息处理代码
745
+ */ function TranscodeWorkerCode() {
746
+ var wasmPromise;
747
+ /**
748
+ * ZSTD (Zstandard) decoder.
749
+ */ var ZSTDDecoder = /*#__PURE__*/ function() {
750
+ function ZSTDDecoder() {}
751
+ var _proto = ZSTDDecoder.prototype;
752
+ _proto.init = function init(zstddecWasmModule) {
753
+ if (!this.initPromise) {
754
+ this.initPromise = WebAssembly.instantiate(zstddecWasmModule, ZSTDDecoder.IMPORT_OBJECT).then(this.initInstance);
755
+ }
756
+ return this.initPromise;
757
+ };
758
+ _proto.initInstance = function initInstance(result) {
759
+ ZSTDDecoder.instance = result;
760
+ ZSTDDecoder.IMPORT_OBJECT.env.emscripten_notify_memory_growth();
761
+ };
762
+ _proto.decode = function decode(array, uncompressedSize) {
763
+ if (uncompressedSize === void 0) uncompressedSize = 0;
764
+ if (!ZSTDDecoder.instance) {
765
+ throw new Error("ZSTDDecoder: Await .init() before decoding.");
766
+ }
767
+ var exports = ZSTDDecoder.instance.exports;
768
+ var compressedSize = array.byteLength;
769
+ var compressedPtr = exports.malloc(compressedSize);
770
+ ZSTDDecoder.heap.set(array, compressedPtr);
771
+ uncompressedSize = uncompressedSize || Number(exports.ZSTD_findDecompressedSize(compressedPtr, compressedSize));
772
+ var uncompressedPtr = exports.malloc(uncompressedSize);
773
+ var actualSize = exports.ZSTD_decompress(uncompressedPtr, uncompressedSize, compressedPtr, compressedSize);
774
+ if (actualSize < 0) {
775
+ exports.free(compressedPtr);
776
+ exports.free(uncompressedPtr);
777
+ throw new Error("ZSTDDecoder: decompression failed.");
778
+ }
779
+ // Read decompressed data and free WASM memory
780
+ var dec = ZSTDDecoder.heap.slice(uncompressedPtr, uncompressedPtr + actualSize);
781
+ exports.free(compressedPtr);
782
+ exports.free(uncompressedPtr);
783
+ return dec;
784
+ };
785
+ return ZSTDDecoder;
786
+ }();
787
+ ZSTDDecoder.IMPORT_OBJECT = {
788
+ env: {
789
+ emscripten_notify_memory_growth: function emscripten_notify_memory_growth() {
790
+ ZSTDDecoder.heap = new Uint8Array(ZSTDDecoder.instance.exports.memory.buffer);
791
+ }
792
+ }
793
+ };
794
+ function transcodeASTC(wasmTranscoder, compressedData, width, height) {
795
+ var nBlocks = (width + 3 >> 2) * (height + 3 >> 2);
796
+ var texMemoryPages = nBlocks * 16 + 65535 >> 16;
797
+ var memory = wasmTranscoder.memory;
798
+ var delta = texMemoryPages + 1 - (memory.buffer.byteLength >> 16);
799
+ if (delta > 0) {
800
+ memory.grow(delta);
801
+ }
802
+ var textureView = new Uint8Array(memory.buffer, 65536, nBlocks * 16);
803
+ textureView.set(compressedData);
804
+ return wasmTranscoder.transcode(nBlocks) === 0 ? textureView : null;
805
+ }
806
+ function initTranscoder(transcoderWasmModule) {
807
+ wasmPromise = WebAssembly.instantiate(transcoderWasmModule, {
808
+ env: {
809
+ memory: new WebAssembly.Memory({
810
+ initial: 16
811
+ })
812
+ }
813
+ }).then(function(moduleWrapper) {
814
+ return moduleWrapper.exports;
815
+ });
816
+ return wasmPromise;
817
+ }
818
+ var zstdDecoder = new ZSTDDecoder();
819
+ function transcode(data, needZstd, transcoderWasmModule, zstddecWasmModule) {
820
+ var faceCount = data.length;
821
+ var result = new Array(faceCount);
822
+ var decodedLevelCache = needZstd ? new Map() : undefined;
823
+ var promise = Promise.resolve();
824
+ if (needZstd && zstddecWasmModule) {
825
+ void zstdDecoder.init(zstddecWasmModule);
826
+ promise = zstdDecoder.initPromise;
827
+ }
828
+ return promise.then(function() {
829
+ for(var faceIndex = 0; faceIndex < faceCount; faceIndex++){
830
+ var mipmapCount = data[faceIndex].length;
831
+ var decodedData = new Array(mipmapCount);
832
+ for(var i = 0; i < mipmapCount; i++){
833
+ var _data_faceIndex_i = data[faceIndex][i], buffer = _data_faceIndex_i.buffer, levelHeight = _data_faceIndex_i.levelHeight, levelWidth = _data_faceIndex_i.levelWidth, uncompressedByteLength = _data_faceIndex_i.uncompressedByteLength;
834
+ var levelBuffer = buffer;
835
+ if (needZstd) {
836
+ var decoded = decodedLevelCache == null ? void 0 : decodedLevelCache.get(i);
837
+ if (!decoded) {
838
+ decoded = zstdDecoder.decode(buffer.slice(), uncompressedByteLength);
839
+ decodedLevelCache == null ? void 0 : decodedLevelCache.set(i, decoded);
840
+ }
841
+ levelBuffer = decoded;
842
+ }
843
+ var faceByteLength = levelBuffer.byteLength / faceCount;
844
+ var originByteOffset = levelBuffer.byteOffset;
845
+ var decodedBuffer = transcodeASTC(transcoderWasmModule, new Uint8Array(levelBuffer.buffer, originByteOffset + faceIndex * faceByteLength, faceByteLength), levelWidth, levelHeight);
846
+ if (decodedBuffer) {
847
+ decodedData[i] = {
848
+ // use wasm memory as buffer, should slice to avoid duplicate
849
+ data: decodedBuffer.slice(),
850
+ width: levelWidth,
851
+ height: levelHeight
852
+ };
853
+ } else {
854
+ throw new Error("buffer decoded error");
855
+ }
856
+ }
857
+ result[faceIndex] = decodedData;
858
+ }
859
+ return result;
860
+ });
861
+ }
862
+ self.onmessage = function onmessage(event) {
863
+ var message = event.data;
864
+ switch(message.type){
865
+ case "init":
866
+ initTranscoder(message.transcoderWasm).then(function() {
867
+ self.postMessage("init-completed");
868
+ }).catch(function(error) {
869
+ self.postMessage({
870
+ error: error
871
+ });
872
+ });
873
+ break;
874
+ case "transcode":
875
+ wasmPromise.then(function(transcoderWasmModule) {
876
+ transcode(message.data, message.needZstd, transcoderWasmModule, message.zstddecWasmModule).then(function(decodedData) {
877
+ self.postMessage(decodedData);
878
+ }).catch(function(error) {
879
+ return self.postMessage({
880
+ error: error
881
+ });
882
+ });
883
+ }).catch(function(error) {
884
+ self.postMessage({
885
+ error: error
886
+ });
887
+ });
888
+ break;
889
+ }
890
+ };
891
+ // 主线程使用
892
+ return {
893
+ ZSTDDecoder: ZSTDDecoder,
894
+ transcodeASTC: transcodeASTC,
895
+ initTranscoder: initTranscoder,
896
+ zstdDecoder: zstdDecoder,
897
+ transcode: transcode,
898
+ getWasmPromise: function() {
899
+ return wasmPromise;
900
+ }
901
+ };
902
+ }
903
+
904
+ function _loadWasmModule (sync, filepath, src, imports) {
905
+ function _instantiateOrCompile(source, imports, stream) {
906
+ var instantiateFunc = stream ? WebAssembly.instantiateStreaming : WebAssembly.instantiate;
907
+ var compileFunc = stream ? WebAssembly.compileStreaming : WebAssembly.compile;
908
+
909
+ if (imports) {
910
+ return instantiateFunc(source, imports)
911
+ } else {
912
+ return compileFunc(source)
913
+ }
914
+ }
915
+
916
+
917
+ var buf = null;
918
+ var isNode = typeof process !== 'undefined' && process.versions != null && process.versions.node != null;
919
+ if (isNode) {
920
+
921
+ buf = Buffer.from(src, 'base64');
922
+
923
+ } else {
924
+
925
+ var raw = globalThis.atob(src);
926
+ var rawLength = raw.length;
927
+ buf = new Uint8Array(new ArrayBuffer(rawLength));
928
+ for(var i = 0; i < rawLength; i++) {
929
+ buf[i] = raw.charCodeAt(i);
930
+ }
931
+
932
+ }
933
+
934
+
935
+ if(sync) {
936
+ var mod = new WebAssembly.Module(buf);
937
+ return imports ? new WebAssembly.Instance(mod, imports) : mod
938
+ } else {
939
+ return _instantiateOrCompile(buf, imports, false)
940
+ }
941
+ }
942
+
943
+ function uastcAstcWasm(imports){return _loadWasmModule(0, null, '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', imports)}
944
+
945
+ function zstddecWasm(imports){return _loadWasmModule(0, null, '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IAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigC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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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', imports)}
946
+
947
+ /**
948
+ * 主线程 ASTC/UASTC 转码器
949
+ */ var KhronosMainThreadTranscoder = /*#__PURE__*/ function() {
950
+ function KhronosMainThreadTranscoder() {
951
+ this.context = null;
952
+ }
953
+ var _proto = KhronosMainThreadTranscoder.prototype;
954
+ _proto.init = function init() {
955
+ var _this = this;
956
+ return _async_to_generator(function() {
957
+ var transcoderWasmModule;
958
+ return __generator(this, function(_state) {
959
+ switch(_state.label){
960
+ case 0:
961
+ if (!!_this.context) return [
962
+ 3,
963
+ 3
964
+ ];
965
+ _this.context = TranscodeWorkerCode();
966
+ return [
967
+ 4,
968
+ uastcAstcWasm()
969
+ ];
970
+ case 1:
971
+ transcoderWasmModule = _state.sent();
972
+ return [
973
+ 4,
974
+ _this.context.initTranscoder(transcoderWasmModule)
975
+ ];
976
+ case 2:
977
+ _state.sent();
978
+ _state.label = 3;
979
+ case 3:
980
+ return [
981
+ 2
982
+ ];
983
+ }
984
+ });
985
+ })();
986
+ };
987
+ _proto.transcode = function transcode(data, needZstd, zstddecWasmModule) {
988
+ var _this = this;
989
+ return _async_to_generator(function() {
990
+ var _this_context, wasmModule;
991
+ return __generator(this, function(_state) {
992
+ switch(_state.label){
993
+ case 0:
994
+ return [
995
+ 4,
996
+ _this.init()
997
+ ];
998
+ case 1:
999
+ _state.sent();
1000
+ return [
1001
+ 4,
1002
+ (_this_context = _this.context) == null ? void 0 : _this_context.getWasmPromise()
1003
+ ];
1004
+ case 2:
1005
+ wasmModule = _state.sent();
1006
+ return [
1007
+ 2,
1008
+ _this.context.transcode(data, needZstd, wasmModule, zstddecWasmModule)
1009
+ ];
1010
+ }
1011
+ });
1012
+ })();
1013
+ };
1014
+ _proto.destroy = function destroy() {
1015
+ this.context = null;
1016
+ };
1017
+ return KhronosMainThreadTranscoder;
1018
+ }();
1019
+ /**
1020
+ * KTX2 Khronos ASTC/UASTC 转码器
1021
+ * 支持主线程和 Worker 两种执行模式
1022
+ */ var KhronosTranscoder = /*#__PURE__*/ function(TextureTranscoder) {
1023
+ _inherits(KhronosTranscoder, TextureTranscoder);
1024
+ function KhronosTranscoder(workerLimitCount, type) {
1025
+ var _this;
1026
+ _this = TextureTranscoder.call(this, workerLimitCount) || this;
1027
+ _this.type = type;
1028
+ _this.mainThreadTranscoder = null;
1029
+ return _this;
1030
+ }
1031
+ var _proto = KhronosTranscoder.prototype;
1032
+ _proto.initTranscodeWorkerPool = function initTranscodeWorkerPool() {
1033
+ var _this = this;
1034
+ return _async_to_generator(function() {
1035
+ var transcoderWasm, funcCode, funcBody, returnIndex, workerCode, workerURL;
1036
+ return __generator(this, function(_state) {
1037
+ switch(_state.label){
1038
+ case 0:
1039
+ if (!(_this.workerLimitCount <= 0)) return [
1040
+ 3,
1041
+ 2
1042
+ ];
1043
+ _this.mainThreadTranscoder = new KhronosMainThreadTranscoder();
1044
+ return [
1045
+ 4,
1046
+ _this.mainThreadTranscoder.init()
1047
+ ];
1048
+ case 1:
1049
+ _state.sent();
1050
+ return [
1051
+ 2,
1052
+ []
1053
+ ];
1054
+ case 2:
1055
+ return [
1056
+ 4,
1057
+ uastcAstcWasm()
1058
+ ];
1059
+ case 3:
1060
+ transcoderWasm = _state.sent();
1061
+ funcCode = TranscodeWorkerCode.toString();
1062
+ funcBody = funcCode.substring(funcCode.indexOf("{") + 1, funcCode.lastIndexOf("}"));
1063
+ // 移除主线程的 return 语句,添加 Worker 消息处理
1064
+ returnIndex = funcBody.lastIndexOf("return {");
1065
+ workerCode = funcBody.substring(0, returnIndex);
1066
+ workerURL = URL.createObjectURL(new Blob([
1067
+ workerCode
1068
+ ], {
1069
+ type: "application/javascript"
1070
+ }));
1071
+ _this.workerURL = workerURL;
1072
+ return [
1073
+ 2,
1074
+ _this.createTranscodePool(workerURL, transcoderWasm)
1075
+ ];
1076
+ }
1077
+ });
1078
+ })();
1079
+ };
1080
+ _proto.transcode = function transcode(ktx2Container) {
1081
+ var _this = this;
1082
+ return _async_to_generator(function() {
1083
+ var needZstd, levelCount, faceCount, encodedData, faceIndex, mipmapData, mipmapIndex, level, levelWidth, levelHeight, originBuffer, originOffset, originByteLength, zstddecWasmModule, _tmp, faces, postMessageData;
1084
+ return __generator(this, function(_state) {
1085
+ switch(_state.label){
1086
+ case 0:
1087
+ needZstd = ktx2Container.supercompressionScheme === SupercompressionScheme.Zstd;
1088
+ levelCount = ktx2Container.levels.length;
1089
+ faceCount = ktx2Container.faceCount;
1090
+ // 准备编码数据
1091
+ encodedData = new Array(faceCount);
1092
+ for(faceIndex = 0; faceIndex < faceCount; faceIndex++){
1093
+ mipmapData = new Array(levelCount);
1094
+ for(mipmapIndex = 0; mipmapIndex < levelCount; mipmapIndex++){
1095
+ level = ktx2Container.levels[mipmapIndex];
1096
+ levelWidth = Math.floor(ktx2Container.pixelWidth / (1 << mipmapIndex)) || 1;
1097
+ levelHeight = Math.floor(ktx2Container.pixelHeight / (1 << mipmapIndex)) || 1;
1098
+ originBuffer = level.levelData.buffer;
1099
+ originOffset = level.levelData.byteOffset;
1100
+ originByteLength = level.levelData.byteLength;
1101
+ mipmapData[mipmapIndex] = {
1102
+ buffer: new Uint8Array(originBuffer, originOffset, originByteLength),
1103
+ levelWidth: levelWidth,
1104
+ levelHeight: levelHeight,
1105
+ uncompressedByteLength: level.uncompressedByteLength
1106
+ };
1107
+ }
1108
+ encodedData[faceIndex] = mipmapData;
1109
+ }
1110
+ if (!needZstd) return [
1111
+ 3,
1112
+ 2
1113
+ ];
1114
+ return [
1115
+ 4,
1116
+ zstddecWasm()
1117
+ ];
1118
+ case 1:
1119
+ _tmp = _state.sent();
1120
+ return [
1121
+ 3,
1122
+ 3
1123
+ ];
1124
+ case 2:
1125
+ _tmp = undefined;
1126
+ _state.label = 3;
1127
+ case 3:
1128
+ zstddecWasmModule = _tmp;
1129
+ if (!(_this.workerLimitCount <= 0 && _this.mainThreadTranscoder)) return [
1130
+ 3,
1131
+ 5
1132
+ ];
1133
+ return [
1134
+ 4,
1135
+ _this.mainThreadTranscoder.transcode(encodedData, needZstd, zstddecWasmModule)
1136
+ ];
1137
+ case 4:
1138
+ faces = _state.sent();
1139
+ return [
1140
+ 3,
1141
+ 7
1142
+ ];
1143
+ case 5:
1144
+ // WebWorker 模式
1145
+ postMessageData = {
1146
+ type: "transcode",
1147
+ format: 0,
1148
+ needZstd: needZstd,
1149
+ data: encodedData,
1150
+ zstddecWasmModule: zstddecWasmModule
1151
+ };
1152
+ return [
1153
+ 4,
1154
+ _this.transcodeWorkerPool.postMessage(postMessageData)
1155
+ ];
1156
+ case 6:
1157
+ faces = _state.sent();
1158
+ _state.label = 7;
1159
+ case 7:
1160
+ return [
1161
+ 2,
1162
+ {
1163
+ width: ktx2Container.pixelWidth,
1164
+ height: ktx2Container.pixelHeight,
1165
+ hasAlpha: true,
1166
+ format: 0,
1167
+ faces: faces,
1168
+ faceCount: faceCount
1169
+ }
1170
+ ];
1171
+ }
1172
+ });
1173
+ })();
1174
+ };
1175
+ _proto.destroy = function destroy() {
1176
+ TextureTranscoder.prototype.destroy.call(this);
1177
+ if (this.mainThreadTranscoder) {
1178
+ this.mainThreadTranscoder.destroy();
1179
+ this.mainThreadTranscoder = null;
1180
+ }
1181
+ if (this.workerURL) {
1182
+ URL.revokeObjectURL(this.workerURL);
1183
+ this.workerURL = undefined;
1184
+ }
1185
+ };
1186
+ return KhronosTranscoder;
1187
+ }(TextureTranscoder);
1188
+
1189
+ /**
1190
+ * KTX2 加载器 - 专用于 UASTC 转 ASTC
1191
+ */ var KTX2Loader = /*#__PURE__*/ function() {
1192
+ function KTX2Loader(workerCount) {
1193
+ if (workerCount === void 0) workerCount = 0;
1194
+ this.workerCount = workerCount;
1195
+ this.khronosTranscoder = null;
1196
+ }
1197
+ var _proto = KTX2Loader.prototype;
1198
+ /**
1199
+ * 初始化 Khronos Transcoder
1200
+ */ _proto.initKhronosTranscoder = function initKhronosTranscoder() {
1201
+ var _this = this;
1202
+ return _async_to_generator(function() {
1203
+ var transcoder, error;
1204
+ return __generator(this, function(_state) {
1205
+ switch(_state.label){
1206
+ case 0:
1207
+ if (_this.khronosTranscoder) {
1208
+ return [
1209
+ 2
1210
+ ];
1211
+ }
1212
+ _state.label = 1;
1213
+ case 1:
1214
+ _state.trys.push([
1215
+ 1,
1216
+ 3,
1217
+ ,
1218
+ 4
1219
+ ]);
1220
+ transcoder = new KhronosTranscoder(_this.workerCount, KTX2TargetFormat.ASTC);
1221
+ return [
1222
+ 4,
1223
+ transcoder.init()
1224
+ ];
1225
+ case 2:
1226
+ _state.sent();
1227
+ _this.khronosTranscoder = transcoder;
1228
+ return [
1229
+ 3,
1230
+ 4
1231
+ ];
1232
+ case 3:
1233
+ error = _state.sent();
1234
+ console.error("Failed to initialize KhronosTranscoder:", error);
1235
+ _this.khronosTranscoder = null;
1236
+ _this.khronosInitPromise = undefined;
1237
+ throw error;
1238
+ case 4:
1239
+ return [
1240
+ 2
1241
+ ];
1242
+ }
1243
+ });
1244
+ })();
1245
+ };
1246
+ /**
1247
+ * 确保 Khronos Transcoder 已初始化
1248
+ */ _proto.ensureKhronosTranscoder = function ensureKhronosTranscoder() {
1249
+ var _this = this;
1250
+ return _async_to_generator(function() {
1251
+ return __generator(this, function(_state) {
1252
+ switch(_state.label){
1253
+ case 0:
1254
+ if (_this.khronosTranscoder) {
1255
+ return [
1256
+ 2,
1257
+ _this.khronosTranscoder
1258
+ ];
1259
+ }
1260
+ if (!_this.khronosInitPromise) {
1261
+ _this.khronosInitPromise = _this.initKhronosTranscoder();
1262
+ }
1263
+ return [
1264
+ 4,
1265
+ _this.khronosInitPromise
1266
+ ];
1267
+ case 1:
1268
+ _state.sent();
1269
+ if (!_this.khronosTranscoder) {
1270
+ throw new Error("KhronosTranscoder initialization failed");
1271
+ }
1272
+ return [
1273
+ 2,
1274
+ _this.khronosTranscoder
1275
+ ];
1276
+ }
1277
+ });
1278
+ })();
1279
+ };
1280
+ /**
1281
+ * 从 ArrayBuffer 加载 KTX2 纹理并返回压缩纹理源选项
1282
+ */ _proto.loadFromBuffer = function loadFromBuffer(arrBuffer) {
1283
+ var _this = this;
1284
+ return _async_to_generator(function() {
1285
+ var buffer, _ref, ktx2Container, result;
1286
+ return __generator(this, function(_state) {
1287
+ switch(_state.label){
1288
+ case 0:
1289
+ buffer = new Uint8Array(arrBuffer);
1290
+ return [
1291
+ 4,
1292
+ _this.parseBuffer(buffer)
1293
+ ];
1294
+ case 1:
1295
+ _ref = _state.sent(), ktx2Container = _ref.ktx2Container, result = _ref.result;
1296
+ return [
1297
+ 2,
1298
+ _this.createTextureByBuffer(ktx2Container, result)
1299
+ ];
1300
+ }
1301
+ });
1302
+ })();
1303
+ };
1304
+ /**
1305
+ * 从 URL 加载 KTX2 纹理并返回压缩纹理源选项
1306
+ */ _proto.loadFromURL = function loadFromURL(url) {
1307
+ var _this = this;
1308
+ return _async_to_generator(function() {
1309
+ var buffer, _, _ref, ktx2Container, result;
1310
+ return __generator(this, function(_state) {
1311
+ switch(_state.label){
1312
+ case 0:
1313
+ _ = Uint8Array.bind;
1314
+ return [
1315
+ 4,
1316
+ loadBinary(url)
1317
+ ];
1318
+ case 1:
1319
+ buffer = new (_.apply(Uint8Array, [
1320
+ void 0,
1321
+ _state.sent()
1322
+ ]));
1323
+ return [
1324
+ 4,
1325
+ _this.parseBuffer(buffer)
1326
+ ];
1327
+ case 2:
1328
+ _ref = _state.sent(), ktx2Container = _ref.ktx2Container, result = _ref.result;
1329
+ return [
1330
+ 2,
1331
+ _this.createTextureByBuffer(ktx2Container, result)
1332
+ ];
1333
+ }
1334
+ });
1335
+ })();
1336
+ };
1337
+ /**
1338
+ * @internal
1339
+ * 解析并转码 KTX2 文件
1340
+ */ _proto.parseBuffer = function parseBuffer(buffer) {
1341
+ var _this = this;
1342
+ return _async_to_generator(function() {
1343
+ var ktx2Container, transcoder, result;
1344
+ return __generator(this, function(_state) {
1345
+ switch(_state.label){
1346
+ case 0:
1347
+ ktx2Container = new KTX2Container(buffer);
1348
+ // 验证格式支持
1349
+ if (!ktx2Container.isUASTC) {
1350
+ throw new Error("Unsupported KTX2: only UASTC format is supported");
1351
+ }
1352
+ return [
1353
+ 4,
1354
+ _this.ensureKhronosTranscoder()
1355
+ ];
1356
+ case 1:
1357
+ transcoder = _state.sent();
1358
+ return [
1359
+ 4,
1360
+ transcoder.transcode(ktx2Container)
1361
+ ];
1362
+ case 2:
1363
+ result = _state.sent();
1364
+ return [
1365
+ 2,
1366
+ {
1367
+ ktx2Container: ktx2Container,
1368
+ result: result
1369
+ }
1370
+ ];
1371
+ }
1372
+ });
1373
+ })();
1374
+ };
1375
+ /**
1376
+ * @internal
1377
+ * 根据转码结果创建引擎所需的压缩纹理源选项
1378
+ */ _proto.createTextureByBuffer = function createTextureByBuffer(ktx2Container, transcodeResult) {
1379
+ var _faces_;
1380
+ var pixelWidth = ktx2Container.pixelWidth, pixelHeight = ktx2Container.pixelHeight, faceCount = ktx2Container.faceCount;
1381
+ var _this_getASTC4x4TextureDetail = this.getASTC4x4TextureDetail(), internalFormat = _this_getASTC4x4TextureDetail.internalFormat, format = _this_getASTC4x4TextureDetail.format, type = _this_getASTC4x4TextureDetail.type;
1382
+ var target = faceCount === 6 ? glContext.TEXTURE_CUBE_MAP : glContext.TEXTURE_2D;
1383
+ var faces = transcodeResult.faces;
1384
+ var _faces__length;
1385
+ var transLevels = (_faces__length = (_faces_ = faces[0]) == null ? void 0 : _faces_.length) != null ? _faces__length : 0;
1386
+ var maxDimension = Math.max(pixelWidth, pixelHeight);
1387
+ if (maxDimension === 0) {
1388
+ throw new Error("Invalid KTX2 texture: both width and height are zero");
1389
+ }
1390
+ var fullChainCount = Math.floor(Math.log2(maxDimension)) + 1;
1391
+ var useMipmaps = transLevels > 1 && transLevels >= fullChainCount;
1392
+ var levelCount = useMipmaps ? transLevels : 1;
1393
+ var mipmaps = [];
1394
+ for(var level = 0; level < levelCount; level++){
1395
+ for(var face = 0; face < faceCount; face++){
1396
+ var src = faces[face][level];
1397
+ mipmaps.push({
1398
+ data: src.data,
1399
+ width: src.width,
1400
+ height: src.height
1401
+ });
1402
+ }
1403
+ }
1404
+ return {
1405
+ sourceType: TextureSourceType.compressed,
1406
+ target: target,
1407
+ internalFormat: internalFormat,
1408
+ format: format,
1409
+ type: type,
1410
+ mipmaps: mipmaps
1411
+ };
1412
+ };
1413
+ /**
1414
+ * @internal
1415
+ * 获取 ASTC 4x4 的 WebGL 格式信息
1416
+ */ _proto.getASTC4x4TextureDetail = function getASTC4x4TextureDetail() {
1417
+ var COMPRESSED_RGBA_ASTC_4x4_KHR = 0x93b0;
1418
+ return {
1419
+ internalFormat: COMPRESSED_RGBA_ASTC_4x4_KHR,
1420
+ format: 0,
1421
+ type: 0
1422
+ };
1423
+ };
1424
+ /**
1425
+ * 销毁加载器,释放资源
1426
+ */ _proto.dispose = function dispose() {
1427
+ var _this_khronosTranscoder;
1428
+ (_this_khronosTranscoder = this.khronosTranscoder) == null ? void 0 : _this_khronosTranscoder.destroy();
1429
+ this.khronosTranscoder = null;
1430
+ this.khronosInitPromise = undefined;
1431
+ };
1432
+ return KTX2Loader;
1433
+ }();
1434
+ /**
1435
+ * 注册 KTX2 加载器到全局注册表
1436
+ * @param workerCount - 大于 0 时使用 WebWorker,默认使用主线程
1437
+ */ function registerKTX2Loader(workerCount) {
1438
+ if (workerCount === void 0) workerCount = 0;
1439
+ textureLoaderRegistry.register("ktx2", function() {
1440
+ return new KTX2Loader(workerCount);
1441
+ });
1442
+ }
1443
+ /**
1444
+ * 注销 KTX2 加载器
1445
+ */ function unregisterKTX2Loader() {
1446
+ textureLoaderRegistry.unregister("ktx2");
1447
+ }
1448
+
1449
+ /**
1450
+ * 插件版本号
1451
+ */ var version = "2.8.0-alpha.0";
1452
+ registerKTX2Loader();
1453
+ if (version !== EFFECTS.version) {
1454
+ console.error("注意:请统一 KTX2 插件与 Player 版本,不统一的版本混用会有不可预知的后果!", "\nAttention: Please ensure the KTX2 plugin is synchronized with the Player version. Mixing and matching incompatible versions may result in unpredictable consequences!");
1455
+ }
1456
+
1457
+ export { KTX2Loader, registerKTX2Loader, unregisterKTX2Loader, version };
1458
+ //# sourceMappingURL=index.mjs.map