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