three-stdlib 2.28.9 → 2.28.11

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.
@@ -10,8 +10,16 @@ const THREE = require("three");
10
10
  const WorkerPool = require("../utils/WorkerPool.cjs");
11
11
  const ktxParse = require("../libs/ktx-parse.cjs");
12
12
  const zstddec = require("../libs/zstddec.cjs");
13
+ const CompressedCubeTexture = require("../_polyfill/CompressedCubeTexture.cjs");
13
14
  const CompressedArrayTexture = require("../_polyfill/CompressedArrayTexture.cjs");
14
15
  const Data3DTexture = require("../_polyfill/Data3DTexture.cjs");
16
+ const LinearEncoding = 3e3;
17
+ const sRGBEncoding = 3001;
18
+ const NoColorSpace = "";
19
+ const DisplayP3ColorSpace = "display-p3";
20
+ const LinearDisplayP3ColorSpace = "display-p3-linear";
21
+ const LinearSRGBColorSpace = "srgb-linear";
22
+ const SRGBColorSpace = "srgb";
15
23
  const _taskCache = /* @__PURE__ */ new WeakMap();
16
24
  let _activeLoaders = 0;
17
25
  let _zstd;
@@ -114,18 +122,25 @@ const _KTX2Loader = class extends THREE.Loader {
114
122
  );
115
123
  }
116
124
  _createTextureFrom(transcodeResult, container) {
117
- const { mipmaps, width, height, format, type, error, dfdTransferFn, dfdFlags } = transcodeResult;
125
+ const { faces, width, height, format, type, error, dfdFlags } = transcodeResult;
118
126
  if (type === "error")
119
127
  return Promise.reject(error);
120
- const texture = container.layerCount > 1 ? new CompressedArrayTexture.CompressedArrayTexture(mipmaps, width, height, container.layerCount, format, THREE.UnsignedByteType) : new THREE.CompressedTexture(mipmaps, width, height, format, THREE.UnsignedByteType);
121
- texture.minFilter = mipmaps.length === 1 ? THREE.LinearFilter : THREE.LinearMipmapLinearFilter;
128
+ let texture;
129
+ if (container.faceCount === 6) {
130
+ texture = new CompressedCubeTexture.CompressedCubeTexture(faces, format, THREE.UnsignedByteType);
131
+ } else {
132
+ const mipmaps = faces[0].mipmaps;
133
+ texture = container.layerCount > 1 ? new CompressedArrayTexture.CompressedArrayTexture(mipmaps, width, height, container.layerCount, format, THREE.UnsignedByteType) : new THREE.CompressedTexture(mipmaps, width, height, format, THREE.UnsignedByteType);
134
+ }
135
+ texture.minFilter = faces[0].mipmaps.length === 1 ? THREE.LinearFilter : THREE.LinearMipmapLinearFilter;
122
136
  texture.magFilter = THREE.LinearFilter;
123
137
  texture.generateMipmaps = false;
124
138
  texture.needsUpdate = true;
139
+ const colorSpace = parseColorSpace(container);
125
140
  if ("colorSpace" in texture)
126
- texture.colorSpace = dfdTransferFn === ktxParse.KHR_DF_TRANSFER_SRGB ? "srgb" : "srgb-linear";
141
+ texture.colorSpace = colorSpace;
127
142
  else
128
- texture.encoding = dfdTransferFn === ktxParse.KHR_DF_TRANSFER_SRGB ? 3001 : 3e3;
143
+ texture.encoding = colorSpace === SRGBColorSpace ? sRGBEncoding : LinearEncoding;
129
144
  texture.premultiplyAlpha = !!(dfdFlags & ktxParse.KHR_DF_FLAG_ALPHA_PREMULTIPLIED);
130
145
  return texture;
131
146
  }
@@ -137,7 +152,7 @@ const _KTX2Loader = class extends THREE.Loader {
137
152
  async _createTexture(buffer, config = {}) {
138
153
  const container = ktxParse.read(new Uint8Array(buffer));
139
154
  if (container.vkFormat !== ktxParse.VK_FORMAT_UNDEFINED) {
140
- return createDataTexture(container);
155
+ return createRawTexture(container);
141
156
  }
142
157
  const taskConfig = config;
143
158
  const texturePending = this.init().then(() => {
@@ -196,9 +211,9 @@ __publicField(KTX2Loader, "BasisWorker", function() {
196
211
  let config;
197
212
  let transcoderPending;
198
213
  let BasisModule;
199
- const EngineFormat = _EngineFormat;
200
- const TranscoderFormat = _TranscoderFormat;
201
- const BasisFormat = _BasisFormat;
214
+ const EngineFormat = _KTX2Loader.EngineFormat;
215
+ const TranscoderFormat = _KTX2Loader.TranscoderFormat;
216
+ const BasisFormat = _KTX2Loader.BasisFormat;
202
217
  self.addEventListener("message", function(e) {
203
218
  const message = e.data;
204
219
  switch (message.type) {
@@ -209,23 +224,9 @@ __publicField(KTX2Loader, "BasisWorker", function() {
209
224
  case "transcode":
210
225
  transcoderPending.then(() => {
211
226
  try {
212
- const { width, height, hasAlpha, mipmaps, format, dfdTransferFn, dfdFlags } = transcode(message.buffer);
213
- const buffers = [];
214
- for (let i = 0; i < mipmaps.length; ++i) {
215
- buffers.push(mipmaps[i].data.buffer);
216
- }
227
+ const { faces, buffers, width, height, hasAlpha, format, dfdFlags } = transcode(message.buffer);
217
228
  self.postMessage(
218
- {
219
- type: "transcode",
220
- id: message.id,
221
- width,
222
- height,
223
- hasAlpha,
224
- mipmaps,
225
- format,
226
- dfdTransferFn,
227
- dfdFlags
228
- },
229
+ { type: "transcode", id: message.id, faces, width, height, hasAlpha, format, dfdFlags },
229
230
  buffers
230
231
  );
231
232
  } catch (error) {
@@ -260,13 +261,13 @@ __publicField(KTX2Loader, "BasisWorker", function() {
260
261
  const basisFormat = ktx2File.isUASTC() ? BasisFormat.UASTC_4x4 : BasisFormat.ETC1S;
261
262
  const width = ktx2File.getWidth();
262
263
  const height = ktx2File.getHeight();
263
- const layers = ktx2File.getLayers() || 1;
264
- const levels = ktx2File.getLevels();
264
+ const layerCount = ktx2File.getLayers() || 1;
265
+ const levelCount = ktx2File.getLevels();
266
+ const faceCount = ktx2File.getFaces();
265
267
  const hasAlpha = ktx2File.getHasAlpha();
266
- const dfdTransferFn = ktx2File.getDFDTransferFunc();
267
268
  const dfdFlags = ktx2File.getDFDFlags();
268
269
  const { transcoderFormat, engineFormat } = getTranscoderFormat(basisFormat, width, height, hasAlpha);
269
- if (!width || !height || !levels) {
270
+ if (!width || !height || !levelCount) {
270
271
  cleanup();
271
272
  throw new Error("THREE.KTX2Loader: Invalid texture");
272
273
  }
@@ -274,26 +275,41 @@ __publicField(KTX2Loader, "BasisWorker", function() {
274
275
  cleanup();
275
276
  throw new Error("THREE.KTX2Loader: .startTranscoding failed");
276
277
  }
277
- const mipmaps = [];
278
- for (let mip = 0; mip < levels; mip++) {
279
- const layerMips = [];
280
- let mipWidth, mipHeight;
281
- for (let layer = 0; layer < layers; layer++) {
282
- const levelInfo = ktx2File.getImageLevelInfo(mip, layer, 0);
283
- mipWidth = levelInfo.origWidth < 4 ? levelInfo.origWidth : levelInfo.width;
284
- mipHeight = levelInfo.origHeight < 4 ? levelInfo.origHeight : levelInfo.height;
285
- const dst = new Uint8Array(ktx2File.getImageTranscodedSizeInBytes(mip, layer, 0, transcoderFormat));
286
- const status = ktx2File.transcodeImage(dst, mip, layer, 0, transcoderFormat, 0, -1, -1);
287
- if (!status) {
288
- cleanup();
289
- throw new Error("THREE.KTX2Loader: .transcodeImage failed.");
278
+ const faces = [];
279
+ const buffers = [];
280
+ for (let face = 0; face < faceCount; face++) {
281
+ const mipmaps = [];
282
+ for (let mip = 0; mip < levelCount; mip++) {
283
+ const layerMips = [];
284
+ let mipWidth, mipHeight;
285
+ for (let layer = 0; layer < layerCount; layer++) {
286
+ const levelInfo = ktx2File.getImageLevelInfo(mip, layer, face);
287
+ if (face === 0 && mip === 0 && layer === 0 && (levelInfo.origWidth % 4 !== 0 || levelInfo.origHeight % 4 !== 0)) {
288
+ console.warn("THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions.");
289
+ }
290
+ if (levelCount > 1) {
291
+ mipWidth = levelInfo.origWidth;
292
+ mipHeight = levelInfo.origHeight;
293
+ } else {
294
+ mipWidth = levelInfo.width;
295
+ mipHeight = levelInfo.height;
296
+ }
297
+ const dst = new Uint8Array(ktx2File.getImageTranscodedSizeInBytes(mip, layer, 0, transcoderFormat));
298
+ const status = ktx2File.transcodeImage(dst, mip, layer, face, transcoderFormat, 0, -1, -1);
299
+ if (!status) {
300
+ cleanup();
301
+ throw new Error("THREE.KTX2Loader: .transcodeImage failed.");
302
+ }
303
+ layerMips.push(dst);
290
304
  }
291
- layerMips.push(dst);
305
+ const mipData = concat(layerMips);
306
+ mipmaps.push({ data: mipData, width: mipWidth, height: mipHeight });
307
+ buffers.push(mipData.buffer);
292
308
  }
293
- mipmaps.push({ data: concat(layerMips), width: mipWidth, height: mipHeight });
309
+ faces.push({ mipmaps, width, height, format: engineFormat });
294
310
  }
295
311
  cleanup();
296
- return { width, height, hasAlpha, mipmaps, format: engineFormat, dfdTransferFn, dfdFlags };
312
+ return { faces, buffers, width, height, hasAlpha, format: engineFormat, dfdFlags };
297
313
  }
298
314
  const FORMAT_OPTIONS = [
299
315
  {
@@ -386,6 +402,8 @@ __publicField(KTX2Loader, "BasisWorker", function() {
386
402
  return (value & value - 1) === 0 && value !== 0;
387
403
  }
388
404
  function concat(arrays) {
405
+ if (arrays.length === 1)
406
+ return arrays[0];
389
407
  let totalByteLength = 0;
390
408
  for (let i = 0; i < arrays.length; i++) {
391
409
  const array = arrays[i];
@@ -401,6 +419,7 @@ __publicField(KTX2Loader, "BasisWorker", function() {
401
419
  return result;
402
420
  }
403
421
  });
422
+ const UNCOMPRESSED_FORMATS = /* @__PURE__ */ new Set([THREE.RGBAFormat, THREE.RGFormat, THREE.RedFormat]);
404
423
  const FORMAT_MAP = {
405
424
  [ktxParse.VK_FORMAT_R32G32B32A32_SFLOAT]: THREE.RGBAFormat,
406
425
  [ktxParse.VK_FORMAT_R16G16B16A16_SFLOAT]: THREE.RGBAFormat,
@@ -413,7 +432,9 @@ const FORMAT_MAP = {
413
432
  [ktxParse.VK_FORMAT_R32_SFLOAT]: THREE.RedFormat,
414
433
  [ktxParse.VK_FORMAT_R16_SFLOAT]: THREE.RedFormat,
415
434
  [ktxParse.VK_FORMAT_R8_SRGB]: THREE.RedFormat,
416
- [ktxParse.VK_FORMAT_R8_UNORM]: THREE.RedFormat
435
+ [ktxParse.VK_FORMAT_R8_UNORM]: THREE.RedFormat,
436
+ [ktxParse.VK_FORMAT_ASTC_6x6_SRGB_BLOCK]: THREE.RGBA_ASTC_6x6_Format,
437
+ [ktxParse.VK_FORMAT_ASTC_6x6_UNORM_BLOCK]: THREE.RGBA_ASTC_6x6_Format
417
438
  };
418
439
  const TYPE_MAP = {
419
440
  [ktxParse.VK_FORMAT_R32G32B32A32_SFLOAT]: THREE.FloatType,
@@ -427,55 +448,94 @@ const TYPE_MAP = {
427
448
  [ktxParse.VK_FORMAT_R32_SFLOAT]: THREE.FloatType,
428
449
  [ktxParse.VK_FORMAT_R16_SFLOAT]: THREE.HalfFloatType,
429
450
  [ktxParse.VK_FORMAT_R8_SRGB]: THREE.UnsignedByteType,
430
- [ktxParse.VK_FORMAT_R8_UNORM]: THREE.UnsignedByteType
451
+ [ktxParse.VK_FORMAT_R8_UNORM]: THREE.UnsignedByteType,
452
+ [ktxParse.VK_FORMAT_ASTC_6x6_SRGB_BLOCK]: THREE.UnsignedByteType,
453
+ [ktxParse.VK_FORMAT_ASTC_6x6_UNORM_BLOCK]: THREE.UnsignedByteType
431
454
  };
432
- const ENCODING_MAP = {
433
- [ktxParse.VK_FORMAT_R8G8B8A8_SRGB]: 3001,
434
- // sRGBEncoding
435
- [ktxParse.VK_FORMAT_R8G8_SRGB]: 3001,
436
- // sRGBEncoding
437
- [ktxParse.VK_FORMAT_R8_SRGB]: 3001
438
- // sRGBEncoding
439
- };
440
- async function createDataTexture(container) {
441
- const { vkFormat, pixelWidth, pixelHeight, pixelDepth } = container;
455
+ async function createRawTexture(container) {
456
+ const { vkFormat } = container;
442
457
  if (FORMAT_MAP[vkFormat] === void 0) {
443
458
  throw new Error("THREE.KTX2Loader: Unsupported vkFormat.");
444
459
  }
445
- const level = container.levels[0];
446
- let levelData;
447
- let view;
448
- if (container.supercompressionScheme === ktxParse.KHR_SUPERCOMPRESSION_NONE) {
449
- levelData = level.levelData;
450
- } else if (container.supercompressionScheme === ktxParse.KHR_SUPERCOMPRESSION_ZSTD) {
460
+ let zstd;
461
+ if (container.supercompressionScheme === ktxParse.KHR_SUPERCOMPRESSION_ZSTD) {
451
462
  if (!_zstd) {
452
463
  _zstd = new Promise(async (resolve) => {
453
- const zstd = new zstddec.ZSTDDecoder();
454
- await zstd.init();
455
- resolve(zstd);
464
+ const zstd2 = new zstddec.ZSTDDecoder();
465
+ await zstd2.init();
466
+ resolve(zstd2);
456
467
  });
457
468
  }
458
- levelData = (await _zstd).decode(level.levelData, level.uncompressedByteLength);
459
- } else {
460
- throw new Error("THREE.KTX2Loader: Unsupported supercompressionScheme.");
469
+ zstd = await _zstd;
461
470
  }
462
- if (TYPE_MAP[vkFormat] === THREE.FloatType) {
463
- view = new Float32Array(
464
- levelData.buffer,
465
- levelData.byteOffset,
466
- levelData.byteLength / Float32Array.BYTES_PER_ELEMENT
467
- );
468
- } else if (TYPE_MAP[vkFormat] === THREE.HalfFloatType) {
469
- view = new Uint16Array(levelData.buffer, levelData.byteOffset, levelData.byteLength / Uint16Array.BYTES_PER_ELEMENT);
471
+ const mipmaps = [];
472
+ for (let levelIndex = 0; levelIndex < container.levels.length; levelIndex++) {
473
+ const levelWidth = Math.max(1, container.pixelWidth >> levelIndex);
474
+ const levelHeight = Math.max(1, container.pixelHeight >> levelIndex);
475
+ const levelDepth = container.pixelDepth ? Math.max(1, container.pixelDepth >> levelIndex) : 0;
476
+ const level = container.levels[levelIndex];
477
+ let levelData;
478
+ if (container.supercompressionScheme === ktxParse.KHR_SUPERCOMPRESSION_NONE) {
479
+ levelData = level.levelData;
480
+ } else if (container.supercompressionScheme === ktxParse.KHR_SUPERCOMPRESSION_ZSTD) {
481
+ levelData = zstd.decode(level.levelData, level.uncompressedByteLength);
482
+ } else {
483
+ throw new Error("THREE.KTX2Loader: Unsupported supercompressionScheme.");
484
+ }
485
+ let data;
486
+ if (TYPE_MAP[vkFormat] === THREE.FloatType) {
487
+ data = new Float32Array(
488
+ levelData.buffer,
489
+ levelData.byteOffset,
490
+ levelData.byteLength / Float32Array.BYTES_PER_ELEMENT
491
+ );
492
+ } else if (TYPE_MAP[vkFormat] === THREE.HalfFloatType) {
493
+ data = new Uint16Array(
494
+ levelData.buffer,
495
+ levelData.byteOffset,
496
+ levelData.byteLength / Uint16Array.BYTES_PER_ELEMENT
497
+ );
498
+ } else {
499
+ data = levelData;
500
+ }
501
+ mipmaps.push({
502
+ data,
503
+ width: levelWidth,
504
+ height: levelHeight,
505
+ depth: levelDepth
506
+ });
507
+ }
508
+ let texture;
509
+ if (UNCOMPRESSED_FORMATS.has(FORMAT_MAP[vkFormat])) {
510
+ texture = container.pixelDepth === 0 ? new THREE.DataTexture(mipmaps[0].data, container.pixelWidth, container.pixelHeight) : new Data3DTexture.Data3DTexture(mipmaps[0].data, container.pixelWidth, container.pixelHeight, container.pixelDepth);
470
511
  } else {
471
- view = levelData;
512
+ if (container.pixelDepth > 0)
513
+ throw new Error("THREE.KTX2Loader: Unsupported pixelDepth.");
514
+ texture = new THREE.CompressedTexture(mipmaps, container.pixelWidth, container.pixelHeight);
472
515
  }
473
- const texture = pixelDepth === 0 ? new THREE.DataTexture(view, pixelWidth, pixelHeight) : new Data3DTexture.Data3DTexture(view, pixelWidth, pixelHeight, pixelDepth);
516
+ texture.mipmaps = mipmaps;
474
517
  texture.type = TYPE_MAP[vkFormat];
475
518
  texture.format = FORMAT_MAP[vkFormat];
476
- texture.encoding = ENCODING_MAP[vkFormat] || 3e3;
477
519
  texture.needsUpdate = true;
520
+ const colorSpace = parseColorSpace(container);
521
+ if ("colorSpace" in texture)
522
+ texture.colorSpace = colorSpace;
523
+ else
524
+ texture.encoding = colorSpace === SRGBColorSpace ? sRGBEncoding : LinearEncoding;
478
525
  return Promise.resolve(texture);
479
526
  }
527
+ function parseColorSpace(container) {
528
+ const dfd = container.dataFormatDescriptor[0];
529
+ if (dfd.colorPrimaries === ktxParse.KHR_DF_PRIMARIES_BT709) {
530
+ return dfd.transferFunction === ktxParse.KHR_DF_TRANSFER_SRGB ? SRGBColorSpace : LinearSRGBColorSpace;
531
+ } else if (dfd.colorPrimaries === ktxParse.KHR_DF_PRIMARIES_DISPLAYP3) {
532
+ return dfd.transferFunction === ktxParse.KHR_DF_TRANSFER_SRGB ? DisplayP3ColorSpace : LinearDisplayP3ColorSpace;
533
+ } else if (dfd.colorPrimaries === ktxParse.KHR_DF_PRIMARIES_UNSPECIFIED) {
534
+ return NoColorSpace;
535
+ } else {
536
+ console.warn(`THREE.KTX2Loader: Unsupported color primaries, "${dfd.colorPrimaries}"`);
537
+ return NoColorSpace;
538
+ }
539
+ }
480
540
  exports.KTX2Loader = KTX2Loader;
481
541
  //# sourceMappingURL=KTX2Loader.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"KTX2Loader.cjs","sources":["../../src/loaders/KTX2Loader.js"],"sourcesContent":["/**\n * Loader for KTX 2.0 GPU Texture containers.\n *\n * KTX 2.0 is a container format for various GPU texture formats. The loader\n * supports Basis Universal GPU textures, which can be quickly transcoded to\n * a wide variety of GPU texture compression formats, as well as some\n * uncompressed DataTexture and Data3DTexture formats.\n *\n * References:\n * - KTX: http://github.khronos.org/KTX-Specification/\n * - DFD: https://www.khronos.org/registry/DataFormat/specs/1.3/dataformat.1.3.html#basicdescriptor\n */\n\nimport {\n CompressedTexture,\n DataTexture,\n FileLoader,\n FloatType,\n HalfFloatType,\n LinearFilter,\n LinearMipmapLinearFilter,\n Loader,\n RedFormat,\n RGB_ETC1_Format,\n RGB_ETC2_Format,\n RGB_PVRTC_4BPPV1_Format,\n RGB_S3TC_DXT1_Format,\n RGBA_ASTC_4x4_Format,\n RGBA_BPTC_Format,\n RGBA_ETC2_EAC_Format,\n RGBA_PVRTC_4BPPV1_Format,\n RGBA_S3TC_DXT5_Format,\n RGBAFormat,\n RGFormat,\n UnsignedByteType,\n} from 'three'\nimport { WorkerPool } from '../utils/WorkerPool'\nimport {\n read,\n KHR_DF_FLAG_ALPHA_PREMULTIPLIED,\n KHR_DF_TRANSFER_SRGB,\n KHR_SUPERCOMPRESSION_NONE,\n KHR_SUPERCOMPRESSION_ZSTD,\n VK_FORMAT_UNDEFINED,\n VK_FORMAT_R16_SFLOAT,\n VK_FORMAT_R16G16_SFLOAT,\n VK_FORMAT_R16G16B16A16_SFLOAT,\n VK_FORMAT_R32_SFLOAT,\n VK_FORMAT_R32G32_SFLOAT,\n VK_FORMAT_R32G32B32A32_SFLOAT,\n VK_FORMAT_R8_SRGB,\n VK_FORMAT_R8_UNORM,\n VK_FORMAT_R8G8_SRGB,\n VK_FORMAT_R8G8_UNORM,\n VK_FORMAT_R8G8B8A8_SRGB,\n VK_FORMAT_R8G8B8A8_UNORM,\n} from '../libs/ktx-parse'\nimport { ZSTDDecoder } from '../libs/zstddec'\nimport { CompressedArrayTexture } from '../_polyfill/CompressedArrayTexture'\nimport { Data3DTexture } from '../_polyfill/Data3DTexture'\n\nconst _taskCache = new WeakMap()\n\nlet _activeLoaders = 0\n\nlet _zstd\n\nclass KTX2Loader extends Loader {\n /* CONSTANTS */\n\n static BasisFormat = {\n ETC1S: 0,\n UASTC_4x4: 1,\n }\n\n static TranscoderFormat = {\n ETC1: 0,\n ETC2: 1,\n BC1: 2,\n BC3: 3,\n BC4: 4,\n BC5: 5,\n BC7_M6_OPAQUE_ONLY: 6,\n BC7_M5: 7,\n PVRTC1_4_RGB: 8,\n PVRTC1_4_RGBA: 9,\n ASTC_4x4: 10,\n ATC_RGB: 11,\n ATC_RGBA_INTERPOLATED_ALPHA: 12,\n RGBA32: 13,\n RGB565: 14,\n BGR565: 15,\n RGBA4444: 16,\n }\n\n static EngineFormat = {\n RGBAFormat: RGBAFormat,\n RGBA_ASTC_4x4_Format: RGBA_ASTC_4x4_Format,\n RGBA_BPTC_Format: RGBA_BPTC_Format,\n RGBA_ETC2_EAC_Format: RGBA_ETC2_EAC_Format,\n RGBA_PVRTC_4BPPV1_Format: RGBA_PVRTC_4BPPV1_Format,\n RGBA_S3TC_DXT5_Format: RGBA_S3TC_DXT5_Format,\n RGB_ETC1_Format: RGB_ETC1_Format,\n RGB_ETC2_Format: RGB_ETC2_Format,\n RGB_PVRTC_4BPPV1_Format: RGB_PVRTC_4BPPV1_Format,\n RGB_S3TC_DXT1_Format: RGB_S3TC_DXT1_Format,\n }\n\n /* WEB WORKER */\n\n static BasisWorker = function () {\n let config\n let transcoderPending\n let BasisModule\n\n const EngineFormat = _EngineFormat\n const TranscoderFormat = _TranscoderFormat\n const BasisFormat = _BasisFormat\n\n self.addEventListener('message', function (e) {\n const message = e.data\n\n switch (message.type) {\n case 'init':\n config = message.config\n init(message.transcoderBinary)\n break\n\n case 'transcode':\n transcoderPending.then(() => {\n try {\n const { width, height, hasAlpha, mipmaps, format, dfdTransferFn, dfdFlags } = transcode(message.buffer)\n\n const buffers = []\n\n for (let i = 0; i < mipmaps.length; ++i) {\n buffers.push(mipmaps[i].data.buffer)\n }\n\n self.postMessage(\n {\n type: 'transcode',\n id: message.id,\n width,\n height,\n hasAlpha,\n mipmaps,\n format,\n dfdTransferFn,\n dfdFlags,\n },\n buffers,\n )\n } catch (error) {\n console.error(error)\n\n self.postMessage({ type: 'error', id: message.id, error: error.message })\n }\n })\n break\n }\n })\n\n function init(wasmBinary) {\n transcoderPending = new Promise((resolve) => {\n BasisModule = { wasmBinary, onRuntimeInitialized: resolve }\n BASIS(BasisModule)\n }).then(() => {\n BasisModule.initializeBasis()\n\n if (BasisModule.KTX2File === undefined) {\n console.warn('THREE.KTX2Loader: Please update Basis Universal transcoder.')\n }\n })\n }\n\n function transcode(buffer) {\n const ktx2File = new BasisModule.KTX2File(new Uint8Array(buffer))\n\n function cleanup() {\n ktx2File.close()\n ktx2File.delete()\n }\n\n if (!ktx2File.isValid()) {\n cleanup()\n throw new Error('THREE.KTX2Loader:\tInvalid or unsupported .ktx2 file')\n }\n\n const basisFormat = ktx2File.isUASTC() ? BasisFormat.UASTC_4x4 : BasisFormat.ETC1S\n const width = ktx2File.getWidth()\n const height = ktx2File.getHeight()\n const layers = ktx2File.getLayers() || 1\n const levels = ktx2File.getLevels()\n const hasAlpha = ktx2File.getHasAlpha()\n const dfdTransferFn = ktx2File.getDFDTransferFunc()\n const dfdFlags = ktx2File.getDFDFlags()\n\n const { transcoderFormat, engineFormat } = getTranscoderFormat(basisFormat, width, height, hasAlpha)\n\n if (!width || !height || !levels) {\n cleanup()\n throw new Error('THREE.KTX2Loader:\tInvalid texture')\n }\n\n if (!ktx2File.startTranscoding()) {\n cleanup()\n throw new Error('THREE.KTX2Loader: .startTranscoding failed')\n }\n\n const mipmaps = []\n\n for (let mip = 0; mip < levels; mip++) {\n const layerMips = []\n\n let mipWidth, mipHeight\n\n for (let layer = 0; layer < layers; layer++) {\n const levelInfo = ktx2File.getImageLevelInfo(mip, layer, 0)\n mipWidth = levelInfo.origWidth < 4 ? levelInfo.origWidth : levelInfo.width\n mipHeight = levelInfo.origHeight < 4 ? levelInfo.origHeight : levelInfo.height\n const dst = new Uint8Array(ktx2File.getImageTranscodedSizeInBytes(mip, layer, 0, transcoderFormat))\n const status = ktx2File.transcodeImage(dst, mip, layer, 0, transcoderFormat, 0, -1, -1)\n\n if (!status) {\n cleanup()\n throw new Error('THREE.KTX2Loader: .transcodeImage failed.')\n }\n\n layerMips.push(dst)\n }\n\n mipmaps.push({ data: concat(layerMips), width: mipWidth, height: mipHeight })\n }\n\n cleanup()\n\n return { width, height, hasAlpha, mipmaps, format: engineFormat, dfdTransferFn, dfdFlags }\n }\n\n //\n\n // Optimal choice of a transcoder target format depends on the Basis format (ETC1S or UASTC),\n // device capabilities, and texture dimensions. The list below ranks the formats separately\n // for ETC1S and UASTC.\n //\n // In some cases, transcoding UASTC to RGBA32 might be preferred for higher quality (at\n // significant memory cost) compared to ETC1/2, BC1/3, and PVRTC. The transcoder currently\n // chooses RGBA32 only as a last resort and does not expose that option to the caller.\n const FORMAT_OPTIONS = [\n {\n if: 'astcSupported',\n basisFormat: [BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.ASTC_4x4, TranscoderFormat.ASTC_4x4],\n engineFormat: [EngineFormat.RGBA_ASTC_4x4_Format, EngineFormat.RGBA_ASTC_4x4_Format],\n priorityETC1S: Infinity,\n priorityUASTC: 1,\n needsPowerOfTwo: false,\n },\n {\n if: 'bptcSupported',\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.BC7_M5, TranscoderFormat.BC7_M5],\n engineFormat: [EngineFormat.RGBA_BPTC_Format, EngineFormat.RGBA_BPTC_Format],\n priorityETC1S: 3,\n priorityUASTC: 2,\n needsPowerOfTwo: false,\n },\n {\n if: 'dxtSupported',\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.BC1, TranscoderFormat.BC3],\n engineFormat: [EngineFormat.RGB_S3TC_DXT1_Format, EngineFormat.RGBA_S3TC_DXT5_Format],\n priorityETC1S: 4,\n priorityUASTC: 5,\n needsPowerOfTwo: false,\n },\n {\n if: 'etc2Supported',\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.ETC1, TranscoderFormat.ETC2],\n engineFormat: [EngineFormat.RGB_ETC2_Format, EngineFormat.RGBA_ETC2_EAC_Format],\n priorityETC1S: 1,\n priorityUASTC: 3,\n needsPowerOfTwo: false,\n },\n {\n if: 'etc1Supported',\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.ETC1],\n engineFormat: [EngineFormat.RGB_ETC1_Format],\n priorityETC1S: 2,\n priorityUASTC: 4,\n needsPowerOfTwo: false,\n },\n {\n if: 'pvrtcSupported',\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.PVRTC1_4_RGB, TranscoderFormat.PVRTC1_4_RGBA],\n engineFormat: [EngineFormat.RGB_PVRTC_4BPPV1_Format, EngineFormat.RGBA_PVRTC_4BPPV1_Format],\n priorityETC1S: 5,\n priorityUASTC: 6,\n needsPowerOfTwo: true,\n },\n ]\n\n const ETC1S_OPTIONS = FORMAT_OPTIONS.sort(function (a, b) {\n return a.priorityETC1S - b.priorityETC1S\n })\n const UASTC_OPTIONS = FORMAT_OPTIONS.sort(function (a, b) {\n return a.priorityUASTC - b.priorityUASTC\n })\n\n function getTranscoderFormat(basisFormat, width, height, hasAlpha) {\n let transcoderFormat\n let engineFormat\n\n const options = basisFormat === BasisFormat.ETC1S ? ETC1S_OPTIONS : UASTC_OPTIONS\n\n for (let i = 0; i < options.length; i++) {\n const opt = options[i]\n\n if (!config[opt.if]) continue\n if (!opt.basisFormat.includes(basisFormat)) continue\n if (hasAlpha && opt.transcoderFormat.length < 2) continue\n if (opt.needsPowerOfTwo && !(isPowerOfTwo(width) && isPowerOfTwo(height))) continue\n\n transcoderFormat = opt.transcoderFormat[hasAlpha ? 1 : 0]\n engineFormat = opt.engineFormat[hasAlpha ? 1 : 0]\n\n return { transcoderFormat, engineFormat }\n }\n\n console.warn('THREE.KTX2Loader: No suitable compressed texture format found. Decoding to RGBA32.')\n\n transcoderFormat = TranscoderFormat.RGBA32\n engineFormat = EngineFormat.RGBAFormat\n\n return { transcoderFormat, engineFormat }\n }\n\n function isPowerOfTwo(value) {\n if (value <= 2) return true\n\n return (value & (value - 1)) === 0 && value !== 0\n }\n\n /** Concatenates N byte arrays. */\n function concat(arrays) {\n let totalByteLength = 0\n\n for (let i = 0; i < arrays.length; i++) {\n const array = arrays[i]\n totalByteLength += array.byteLength\n }\n\n const result = new Uint8Array(totalByteLength)\n\n let byteOffset = 0\n\n for (let i = 0; i < arrays.length; i++) {\n const array = arrays[i]\n result.set(array, byteOffset)\n\n byteOffset += array.byteLength\n }\n\n return result\n }\n }\n\n constructor(manager) {\n super(manager)\n\n this.transcoderPath = ''\n this.transcoderBinary = null\n this.transcoderPending = null\n\n this.workerPool = new WorkerPool()\n this.workerSourceURL = ''\n this.workerConfig = null\n\n if (typeof MSC_TRANSCODER !== 'undefined') {\n console.warn(\n 'THREE.KTX2Loader: Please update to latest \"basis_transcoder\".' +\n ' \"msc_basis_transcoder\" is no longer supported in three.js r125+.',\n )\n }\n }\n\n setTranscoderPath(path) {\n this.transcoderPath = path\n\n return this\n }\n\n setWorkerLimit(num) {\n this.workerPool.setWorkerLimit(num)\n\n return this\n }\n\n detectSupport(renderer) {\n this.workerConfig = {\n astcSupported: renderer.extensions.has('WEBGL_compressed_texture_astc'),\n etc1Supported: renderer.extensions.has('WEBGL_compressed_texture_etc1'),\n etc2Supported: renderer.extensions.has('WEBGL_compressed_texture_etc'),\n dxtSupported: renderer.extensions.has('WEBGL_compressed_texture_s3tc'),\n bptcSupported: renderer.extensions.has('EXT_texture_compression_bptc'),\n pvrtcSupported:\n renderer.extensions.has('WEBGL_compressed_texture_pvrtc') ||\n renderer.extensions.has('WEBKIT_WEBGL_compressed_texture_pvrtc'),\n }\n\n if (renderer.capabilities.isWebGL2) {\n // https://github.com/mrdoob/three.js/pull/22928\n this.workerConfig.etc1Supported = false\n }\n\n return this\n }\n\n init() {\n if (!this.transcoderPending) {\n // Load transcoder wrapper.\n const jsLoader = new FileLoader(this.manager)\n jsLoader.setPath(this.transcoderPath)\n jsLoader.setWithCredentials(this.withCredentials)\n const jsContent = jsLoader.loadAsync('basis_transcoder.js')\n\n // Load transcoder WASM binary.\n const binaryLoader = new FileLoader(this.manager)\n binaryLoader.setPath(this.transcoderPath)\n binaryLoader.setResponseType('arraybuffer')\n binaryLoader.setWithCredentials(this.withCredentials)\n const binaryContent = binaryLoader.loadAsync('basis_transcoder.wasm')\n\n this.transcoderPending = Promise.all([jsContent, binaryContent]).then(([jsContent, binaryContent]) => {\n const fn = KTX2Loader.BasisWorker.toString()\n\n const body = [\n '/* constants */',\n 'let _EngineFormat = ' + JSON.stringify(KTX2Loader.EngineFormat),\n 'let _TranscoderFormat = ' + JSON.stringify(KTX2Loader.TranscoderFormat),\n 'let _BasisFormat = ' + JSON.stringify(KTX2Loader.BasisFormat),\n '/* basis_transcoder.js */',\n jsContent,\n '/* worker */',\n fn.substring(fn.indexOf('{') + 1, fn.lastIndexOf('}')),\n ].join('\\n')\n\n this.workerSourceURL = URL.createObjectURL(new Blob([body]))\n this.transcoderBinary = binaryContent\n\n this.workerPool.setWorkerCreator(() => {\n const worker = new Worker(this.workerSourceURL)\n const transcoderBinary = this.transcoderBinary.slice(0)\n\n worker.postMessage({ type: 'init', config: this.workerConfig, transcoderBinary }, [transcoderBinary])\n\n return worker\n })\n })\n\n if (_activeLoaders > 0) {\n // Each instance loads a transcoder and allocates workers, increasing network and memory cost.\n\n console.warn(\n 'THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues.' +\n ' Use a single KTX2Loader instance, or call .dispose() on old instances.',\n )\n }\n\n _activeLoaders++\n }\n\n return this.transcoderPending\n }\n\n load(url, onLoad, onProgress, onError) {\n if (this.workerConfig === null) {\n throw new Error('THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.')\n }\n\n const loader = new FileLoader(this.manager)\n\n loader.setResponseType('arraybuffer')\n loader.setWithCredentials(this.withCredentials)\n\n loader.load(\n url,\n (buffer) => {\n // Check for an existing task using this buffer. A transferred buffer cannot be transferred\n // again from this thread.\n if (_taskCache.has(buffer)) {\n const cachedTask = _taskCache.get(buffer)\n\n return cachedTask.promise.then(onLoad).catch(onError)\n }\n\n this._createTexture(buffer)\n .then((texture) => (onLoad ? onLoad(texture) : null))\n .catch(onError)\n },\n onProgress,\n onError,\n )\n }\n\n _createTextureFrom(transcodeResult, container) {\n const { mipmaps, width, height, format, type, error, dfdTransferFn, dfdFlags } = transcodeResult\n\n if (type === 'error') return Promise.reject(error)\n\n const texture =\n container.layerCount > 1\n ? new CompressedArrayTexture(mipmaps, width, height, container.layerCount, format, UnsignedByteType)\n : new CompressedTexture(mipmaps, width, height, format, UnsignedByteType)\n\n texture.minFilter = mipmaps.length === 1 ? LinearFilter : LinearMipmapLinearFilter\n texture.magFilter = LinearFilter\n texture.generateMipmaps = false\n texture.needsUpdate = true\n if ('colorSpace' in texture) texture.colorSpace = dfdTransferFn === KHR_DF_TRANSFER_SRGB ? 'srgb' : 'srgb-linear'\n else texture.encoding = dfdTransferFn === KHR_DF_TRANSFER_SRGB ? 3001 : 3000\n texture.premultiplyAlpha = !!(dfdFlags & KHR_DF_FLAG_ALPHA_PREMULTIPLIED)\n\n return texture\n }\n\n /**\n * @param {ArrayBuffer} buffer\n * @param {object?} config\n * @return {Promise<CompressedTexture|CompressedArrayTexture|DataTexture|Data3DTexture>}\n */\n async _createTexture(buffer, config = {}) {\n const container = read(new Uint8Array(buffer))\n\n if (container.vkFormat !== VK_FORMAT_UNDEFINED) {\n return createDataTexture(container)\n }\n\n //\n\n const taskConfig = config\n const texturePending = this.init()\n .then(() => {\n return this.workerPool.postMessage({ type: 'transcode', buffer, taskConfig: taskConfig }, [buffer])\n })\n .then((e) => this._createTextureFrom(e.data, container))\n\n // Cache the task result.\n _taskCache.set(buffer, { promise: texturePending })\n\n return texturePending\n }\n\n dispose() {\n this.workerPool.dispose()\n if (this.workerSourceURL) URL.revokeObjectURL(this.workerSourceURL)\n\n _activeLoaders--\n\n return this\n }\n}\n\n//\n// DataTexture and Data3DTexture parsing.\n\nconst FORMAT_MAP = {\n [VK_FORMAT_R32G32B32A32_SFLOAT]: RGBAFormat,\n [VK_FORMAT_R16G16B16A16_SFLOAT]: RGBAFormat,\n [VK_FORMAT_R8G8B8A8_UNORM]: RGBAFormat,\n [VK_FORMAT_R8G8B8A8_SRGB]: RGBAFormat,\n\n [VK_FORMAT_R32G32_SFLOAT]: RGFormat,\n [VK_FORMAT_R16G16_SFLOAT]: RGFormat,\n [VK_FORMAT_R8G8_UNORM]: RGFormat,\n [VK_FORMAT_R8G8_SRGB]: RGFormat,\n\n [VK_FORMAT_R32_SFLOAT]: RedFormat,\n [VK_FORMAT_R16_SFLOAT]: RedFormat,\n [VK_FORMAT_R8_SRGB]: RedFormat,\n [VK_FORMAT_R8_UNORM]: RedFormat,\n}\n\nconst TYPE_MAP = {\n [VK_FORMAT_R32G32B32A32_SFLOAT]: FloatType,\n [VK_FORMAT_R16G16B16A16_SFLOAT]: HalfFloatType,\n [VK_FORMAT_R8G8B8A8_UNORM]: UnsignedByteType,\n [VK_FORMAT_R8G8B8A8_SRGB]: UnsignedByteType,\n\n [VK_FORMAT_R32G32_SFLOAT]: FloatType,\n [VK_FORMAT_R16G16_SFLOAT]: HalfFloatType,\n [VK_FORMAT_R8G8_UNORM]: UnsignedByteType,\n [VK_FORMAT_R8G8_SRGB]: UnsignedByteType,\n\n [VK_FORMAT_R32_SFLOAT]: FloatType,\n [VK_FORMAT_R16_SFLOAT]: HalfFloatType,\n [VK_FORMAT_R8_SRGB]: UnsignedByteType,\n [VK_FORMAT_R8_UNORM]: UnsignedByteType,\n}\n\nconst ENCODING_MAP = {\n [VK_FORMAT_R8G8B8A8_SRGB]: 3001, // sRGBEncoding\n [VK_FORMAT_R8G8_SRGB]: 3001, // sRGBEncoding\n [VK_FORMAT_R8_SRGB]: 3001, // sRGBEncoding\n}\n\nasync function createDataTexture(container) {\n const { vkFormat, pixelWidth, pixelHeight, pixelDepth } = container\n\n if (FORMAT_MAP[vkFormat] === undefined) {\n throw new Error('THREE.KTX2Loader: Unsupported vkFormat.')\n }\n\n //\n\n const level = container.levels[0]\n\n let levelData\n let view\n\n if (container.supercompressionScheme === KHR_SUPERCOMPRESSION_NONE) {\n levelData = level.levelData\n } else if (container.supercompressionScheme === KHR_SUPERCOMPRESSION_ZSTD) {\n if (!_zstd) {\n _zstd = new Promise(async (resolve) => {\n const zstd = new ZSTDDecoder()\n await zstd.init()\n resolve(zstd)\n })\n }\n\n levelData = (await _zstd).decode(level.levelData, level.uncompressedByteLength)\n } else {\n throw new Error('THREE.KTX2Loader: Unsupported supercompressionScheme.')\n }\n\n if (TYPE_MAP[vkFormat] === FloatType) {\n view = new Float32Array(\n levelData.buffer,\n levelData.byteOffset,\n levelData.byteLength / Float32Array.BYTES_PER_ELEMENT,\n )\n } else if (TYPE_MAP[vkFormat] === HalfFloatType) {\n view = new Uint16Array(levelData.buffer, levelData.byteOffset, levelData.byteLength / Uint16Array.BYTES_PER_ELEMENT)\n } else {\n view = levelData\n }\n\n //\n\n const texture =\n pixelDepth === 0\n ? new DataTexture(view, pixelWidth, pixelHeight)\n : new Data3DTexture(view, pixelWidth, pixelHeight, pixelDepth)\n\n texture.type = TYPE_MAP[vkFormat]\n texture.format = FORMAT_MAP[vkFormat]\n texture.encoding = ENCODING_MAP[vkFormat] || 3000 // LinearEncoding\n\n texture.needsUpdate = true\n\n //\n\n return Promise.resolve(texture)\n}\n\nexport { KTX2Loader }\n"],"names":["Loader","WorkerPool","FileLoader","jsContent","binaryContent","CompressedArrayTexture","UnsignedByteType","CompressedTexture","LinearFilter","LinearMipmapLinearFilter","KHR_DF_TRANSFER_SRGB","KHR_DF_FLAG_ALPHA_PREMULTIPLIED","read","VK_FORMAT_UNDEFINED","RGBAFormat","RGBA_ASTC_4x4_Format","RGBA_BPTC_Format","RGBA_ETC2_EAC_Format","RGBA_PVRTC_4BPPV1_Format","RGBA_S3TC_DXT5_Format","RGB_ETC1_Format","RGB_ETC2_Format","RGB_PVRTC_4BPPV1_Format","RGB_S3TC_DXT1_Format","VK_FORMAT_R32G32B32A32_SFLOAT","VK_FORMAT_R16G16B16A16_SFLOAT","VK_FORMAT_R8G8B8A8_UNORM","VK_FORMAT_R8G8B8A8_SRGB","VK_FORMAT_R32G32_SFLOAT","RGFormat","VK_FORMAT_R16G16_SFLOAT","VK_FORMAT_R8G8_UNORM","VK_FORMAT_R8G8_SRGB","VK_FORMAT_R32_SFLOAT","RedFormat","VK_FORMAT_R16_SFLOAT","VK_FORMAT_R8_SRGB","VK_FORMAT_R8_UNORM","FloatType","HalfFloatType","KHR_SUPERCOMPRESSION_NONE","KHR_SUPERCOMPRESSION_ZSTD","ZSTDDecoder","DataTexture","Data3DTexture"],"mappings":"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"}
1
+ {"version":3,"file":"KTX2Loader.cjs","sources":["../../src/loaders/KTX2Loader.js"],"sourcesContent":["/**\n * Loader for KTX 2.0 GPU Texture containers.\n *\n * KTX 2.0 is a container format for various GPU texture formats. The loader\n * supports Basis Universal GPU textures, which can be quickly transcoded to\n * a wide variety of GPU texture compression formats, as well as some\n * uncompressed DataTexture and Data3DTexture formats.\n *\n * References:\n * - KTX: http://github.khronos.org/KTX-Specification/\n * - DFD: https://www.khronos.org/registry/DataFormat/specs/1.3/dataformat.1.3.html#basicdescriptor\n */\n\nimport {\n CompressedTexture,\n DataTexture,\n FileLoader,\n FloatType,\n HalfFloatType,\n LinearFilter,\n LinearMipmapLinearFilter,\n Loader,\n RedFormat,\n RGB_ETC1_Format,\n RGB_ETC2_Format,\n RGB_PVRTC_4BPPV1_Format,\n RGB_S3TC_DXT1_Format,\n RGBA_ASTC_4x4_Format,\n RGBA_ASTC_6x6_Format,\n RGBA_BPTC_Format,\n RGBA_ETC2_EAC_Format,\n RGBA_PVRTC_4BPPV1_Format,\n RGBA_S3TC_DXT5_Format,\n RGBAFormat,\n RGFormat,\n UnsignedByteType,\n} from 'three'\nimport { WorkerPool } from '../utils/WorkerPool'\nimport {\n read,\n KHR_DF_FLAG_ALPHA_PREMULTIPLIED,\n KHR_DF_TRANSFER_SRGB,\n KHR_SUPERCOMPRESSION_NONE,\n KHR_SUPERCOMPRESSION_ZSTD,\n VK_FORMAT_UNDEFINED,\n VK_FORMAT_R16_SFLOAT,\n VK_FORMAT_R16G16_SFLOAT,\n VK_FORMAT_R16G16B16A16_SFLOAT,\n VK_FORMAT_R32_SFLOAT,\n VK_FORMAT_R32G32_SFLOAT,\n VK_FORMAT_R32G32B32A32_SFLOAT,\n VK_FORMAT_R8_SRGB,\n VK_FORMAT_R8_UNORM,\n VK_FORMAT_R8G8_SRGB,\n VK_FORMAT_R8G8_UNORM,\n VK_FORMAT_R8G8B8A8_SRGB,\n VK_FORMAT_R8G8B8A8_UNORM,\n VK_FORMAT_ASTC_6x6_SRGB_BLOCK,\n VK_FORMAT_ASTC_6x6_UNORM_BLOCK,\n KHR_DF_PRIMARIES_UNSPECIFIED,\n KHR_DF_PRIMARIES_BT709,\n KHR_DF_PRIMARIES_DISPLAYP3,\n} from '../libs/ktx-parse'\nimport { ZSTDDecoder } from '../libs/zstddec'\nimport { CompressedCubeTexture } from '../_polyfill/CompressedCubeTexture'\nimport { CompressedArrayTexture } from '../_polyfill/CompressedArrayTexture'\nimport { Data3DTexture } from '../_polyfill/Data3DTexture'\n\nconst LinearEncoding = 3000\nconst sRGBEncoding = 3001\n\nconst NoColorSpace = ''\nconst DisplayP3ColorSpace = 'display-p3'\nconst LinearDisplayP3ColorSpace = 'display-p3-linear'\nconst LinearSRGBColorSpace = 'srgb-linear'\nconst SRGBColorSpace = 'srgb'\n\nconst _taskCache = new WeakMap()\n\nlet _activeLoaders = 0\n\nlet _zstd\n\nclass KTX2Loader extends Loader {\n /* CONSTANTS */\n\n static BasisFormat = {\n ETC1S: 0,\n UASTC_4x4: 1,\n }\n\n static TranscoderFormat = {\n ETC1: 0,\n ETC2: 1,\n BC1: 2,\n BC3: 3,\n BC4: 4,\n BC5: 5,\n BC7_M6_OPAQUE_ONLY: 6,\n BC7_M5: 7,\n PVRTC1_4_RGB: 8,\n PVRTC1_4_RGBA: 9,\n ASTC_4x4: 10,\n ATC_RGB: 11,\n ATC_RGBA_INTERPOLATED_ALPHA: 12,\n RGBA32: 13,\n RGB565: 14,\n BGR565: 15,\n RGBA4444: 16,\n }\n\n static EngineFormat = {\n RGBAFormat: RGBAFormat,\n RGBA_ASTC_4x4_Format: RGBA_ASTC_4x4_Format,\n RGBA_BPTC_Format: RGBA_BPTC_Format,\n RGBA_ETC2_EAC_Format: RGBA_ETC2_EAC_Format,\n RGBA_PVRTC_4BPPV1_Format: RGBA_PVRTC_4BPPV1_Format,\n RGBA_S3TC_DXT5_Format: RGBA_S3TC_DXT5_Format,\n RGB_ETC1_Format: RGB_ETC1_Format,\n RGB_ETC2_Format: RGB_ETC2_Format,\n RGB_PVRTC_4BPPV1_Format: RGB_PVRTC_4BPPV1_Format,\n RGB_S3TC_DXT1_Format: RGB_S3TC_DXT1_Format,\n }\n\n /* WEB WORKER */\n\n static BasisWorker = function () {\n let config\n let transcoderPending\n let BasisModule\n\n const EngineFormat = KTX2Loader.EngineFormat\n const TranscoderFormat = KTX2Loader.TranscoderFormat\n const BasisFormat = KTX2Loader.BasisFormat\n\n self.addEventListener('message', function (e) {\n const message = e.data\n\n switch (message.type) {\n case 'init':\n config = message.config\n init(message.transcoderBinary)\n break\n\n case 'transcode':\n transcoderPending.then(() => {\n try {\n const { faces, buffers, width, height, hasAlpha, format, dfdFlags } = transcode(message.buffer)\n\n self.postMessage(\n { type: 'transcode', id: message.id, faces, width, height, hasAlpha, format, dfdFlags },\n buffers,\n )\n } catch (error) {\n console.error(error)\n\n self.postMessage({ type: 'error', id: message.id, error: error.message })\n }\n })\n break\n }\n })\n\n function init(wasmBinary) {\n transcoderPending = new Promise((resolve) => {\n BasisModule = { wasmBinary, onRuntimeInitialized: resolve }\n BASIS(BasisModule)\n }).then(() => {\n BasisModule.initializeBasis()\n\n if (BasisModule.KTX2File === undefined) {\n console.warn('THREE.KTX2Loader: Please update Basis Universal transcoder.')\n }\n })\n }\n\n function transcode(buffer) {\n const ktx2File = new BasisModule.KTX2File(new Uint8Array(buffer))\n\n function cleanup() {\n ktx2File.close()\n ktx2File.delete()\n }\n\n if (!ktx2File.isValid()) {\n cleanup()\n throw new Error('THREE.KTX2Loader:\tInvalid or unsupported .ktx2 file')\n }\n\n const basisFormat = ktx2File.isUASTC() ? BasisFormat.UASTC_4x4 : BasisFormat.ETC1S\n const width = ktx2File.getWidth()\n const height = ktx2File.getHeight()\n const layerCount = ktx2File.getLayers() || 1\n const levelCount = ktx2File.getLevels()\n const faceCount = ktx2File.getFaces()\n const hasAlpha = ktx2File.getHasAlpha()\n const dfdFlags = ktx2File.getDFDFlags()\n\n const { transcoderFormat, engineFormat } = getTranscoderFormat(basisFormat, width, height, hasAlpha)\n\n if (!width || !height || !levelCount) {\n cleanup()\n throw new Error('THREE.KTX2Loader:\tInvalid texture')\n }\n\n if (!ktx2File.startTranscoding()) {\n cleanup()\n throw new Error('THREE.KTX2Loader: .startTranscoding failed')\n }\n\n const faces = []\n const buffers = []\n\n for (let face = 0; face < faceCount; face++) {\n const mipmaps = []\n\n for (let mip = 0; mip < levelCount; mip++) {\n const layerMips = []\n\n let mipWidth, mipHeight\n\n for (let layer = 0; layer < layerCount; layer++) {\n const levelInfo = ktx2File.getImageLevelInfo(mip, layer, face)\n\n if (\n face === 0 &&\n mip === 0 &&\n layer === 0 &&\n (levelInfo.origWidth % 4 !== 0 || levelInfo.origHeight % 4 !== 0)\n ) {\n console.warn('THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions.')\n }\n\n if (levelCount > 1) {\n mipWidth = levelInfo.origWidth\n mipHeight = levelInfo.origHeight\n } else {\n // Handles non-multiple-of-four dimensions in textures without mipmaps. Textures with\n // mipmaps must use multiple-of-four dimensions, for some texture formats and APIs.\n // See mrdoob/three.js#25908.\n mipWidth = levelInfo.width\n mipHeight = levelInfo.height\n }\n\n const dst = new Uint8Array(ktx2File.getImageTranscodedSizeInBytes(mip, layer, 0, transcoderFormat))\n const status = ktx2File.transcodeImage(dst, mip, layer, face, transcoderFormat, 0, -1, -1)\n\n if (!status) {\n cleanup()\n throw new Error('THREE.KTX2Loader: .transcodeImage failed.')\n }\n\n layerMips.push(dst)\n }\n\n const mipData = concat(layerMips)\n\n mipmaps.push({ data: mipData, width: mipWidth, height: mipHeight })\n buffers.push(mipData.buffer)\n }\n\n faces.push({ mipmaps, width, height, format: engineFormat })\n }\n\n cleanup()\n\n return { faces, buffers, width, height, hasAlpha, format: engineFormat, dfdFlags }\n }\n\n //\n\n // Optimal choice of a transcoder target format depends on the Basis format (ETC1S or UASTC),\n // device capabilities, and texture dimensions. The list below ranks the formats separately\n // for ETC1S and UASTC.\n //\n // In some cases, transcoding UASTC to RGBA32 might be preferred for higher quality (at\n // significant memory cost) compared to ETC1/2, BC1/3, and PVRTC. The transcoder currently\n // chooses RGBA32 only as a last resort and does not expose that option to the caller.\n const FORMAT_OPTIONS = [\n {\n if: 'astcSupported',\n basisFormat: [BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.ASTC_4x4, TranscoderFormat.ASTC_4x4],\n engineFormat: [EngineFormat.RGBA_ASTC_4x4_Format, EngineFormat.RGBA_ASTC_4x4_Format],\n priorityETC1S: Infinity,\n priorityUASTC: 1,\n needsPowerOfTwo: false,\n },\n {\n if: 'bptcSupported',\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.BC7_M5, TranscoderFormat.BC7_M5],\n engineFormat: [EngineFormat.RGBA_BPTC_Format, EngineFormat.RGBA_BPTC_Format],\n priorityETC1S: 3,\n priorityUASTC: 2,\n needsPowerOfTwo: false,\n },\n {\n if: 'dxtSupported',\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.BC1, TranscoderFormat.BC3],\n engineFormat: [EngineFormat.RGB_S3TC_DXT1_Format, EngineFormat.RGBA_S3TC_DXT5_Format],\n priorityETC1S: 4,\n priorityUASTC: 5,\n needsPowerOfTwo: false,\n },\n {\n if: 'etc2Supported',\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.ETC1, TranscoderFormat.ETC2],\n engineFormat: [EngineFormat.RGB_ETC2_Format, EngineFormat.RGBA_ETC2_EAC_Format],\n priorityETC1S: 1,\n priorityUASTC: 3,\n needsPowerOfTwo: false,\n },\n {\n if: 'etc1Supported',\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.ETC1],\n engineFormat: [EngineFormat.RGB_ETC1_Format],\n priorityETC1S: 2,\n priorityUASTC: 4,\n needsPowerOfTwo: false,\n },\n {\n if: 'pvrtcSupported',\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.PVRTC1_4_RGB, TranscoderFormat.PVRTC1_4_RGBA],\n engineFormat: [EngineFormat.RGB_PVRTC_4BPPV1_Format, EngineFormat.RGBA_PVRTC_4BPPV1_Format],\n priorityETC1S: 5,\n priorityUASTC: 6,\n needsPowerOfTwo: true,\n },\n ]\n\n const ETC1S_OPTIONS = FORMAT_OPTIONS.sort(function (a, b) {\n return a.priorityETC1S - b.priorityETC1S\n })\n const UASTC_OPTIONS = FORMAT_OPTIONS.sort(function (a, b) {\n return a.priorityUASTC - b.priorityUASTC\n })\n\n function getTranscoderFormat(basisFormat, width, height, hasAlpha) {\n let transcoderFormat\n let engineFormat\n\n const options = basisFormat === BasisFormat.ETC1S ? ETC1S_OPTIONS : UASTC_OPTIONS\n\n for (let i = 0; i < options.length; i++) {\n const opt = options[i]\n\n if (!config[opt.if]) continue\n if (!opt.basisFormat.includes(basisFormat)) continue\n if (hasAlpha && opt.transcoderFormat.length < 2) continue\n if (opt.needsPowerOfTwo && !(isPowerOfTwo(width) && isPowerOfTwo(height))) continue\n\n transcoderFormat = opt.transcoderFormat[hasAlpha ? 1 : 0]\n engineFormat = opt.engineFormat[hasAlpha ? 1 : 0]\n\n return { transcoderFormat, engineFormat }\n }\n\n console.warn('THREE.KTX2Loader: No suitable compressed texture format found. Decoding to RGBA32.')\n\n transcoderFormat = TranscoderFormat.RGBA32\n engineFormat = EngineFormat.RGBAFormat\n\n return { transcoderFormat, engineFormat }\n }\n\n function isPowerOfTwo(value) {\n if (value <= 2) return true\n\n return (value & (value - 1)) === 0 && value !== 0\n }\n\n /** Concatenates N byte arrays. */\n function concat(arrays) {\n if (arrays.length === 1) return arrays[0]\n\n let totalByteLength = 0\n\n for (let i = 0; i < arrays.length; i++) {\n const array = arrays[i]\n totalByteLength += array.byteLength\n }\n\n const result = new Uint8Array(totalByteLength)\n\n let byteOffset = 0\n\n for (let i = 0; i < arrays.length; i++) {\n const array = arrays[i]\n result.set(array, byteOffset)\n\n byteOffset += array.byteLength\n }\n\n return result\n }\n }\n\n constructor(manager) {\n super(manager)\n\n this.transcoderPath = ''\n this.transcoderBinary = null\n this.transcoderPending = null\n\n this.workerPool = new WorkerPool()\n this.workerSourceURL = ''\n this.workerConfig = null\n\n if (typeof MSC_TRANSCODER !== 'undefined') {\n console.warn(\n 'THREE.KTX2Loader: Please update to latest \"basis_transcoder\".' +\n ' \"msc_basis_transcoder\" is no longer supported in three.js r125+.',\n )\n }\n }\n\n setTranscoderPath(path) {\n this.transcoderPath = path\n\n return this\n }\n\n setWorkerLimit(num) {\n this.workerPool.setWorkerLimit(num)\n\n return this\n }\n\n detectSupport(renderer) {\n this.workerConfig = {\n astcSupported: renderer.extensions.has('WEBGL_compressed_texture_astc'),\n etc1Supported: renderer.extensions.has('WEBGL_compressed_texture_etc1'),\n etc2Supported: renderer.extensions.has('WEBGL_compressed_texture_etc'),\n dxtSupported: renderer.extensions.has('WEBGL_compressed_texture_s3tc'),\n bptcSupported: renderer.extensions.has('EXT_texture_compression_bptc'),\n pvrtcSupported:\n renderer.extensions.has('WEBGL_compressed_texture_pvrtc') ||\n renderer.extensions.has('WEBKIT_WEBGL_compressed_texture_pvrtc'),\n }\n\n if (renderer.capabilities.isWebGL2) {\n // https://github.com/mrdoob/three.js/pull/22928\n this.workerConfig.etc1Supported = false\n }\n\n return this\n }\n\n init() {\n if (!this.transcoderPending) {\n // Load transcoder wrapper.\n const jsLoader = new FileLoader(this.manager)\n jsLoader.setPath(this.transcoderPath)\n jsLoader.setWithCredentials(this.withCredentials)\n const jsContent = jsLoader.loadAsync('basis_transcoder.js')\n\n // Load transcoder WASM binary.\n const binaryLoader = new FileLoader(this.manager)\n binaryLoader.setPath(this.transcoderPath)\n binaryLoader.setResponseType('arraybuffer')\n binaryLoader.setWithCredentials(this.withCredentials)\n const binaryContent = binaryLoader.loadAsync('basis_transcoder.wasm')\n\n this.transcoderPending = Promise.all([jsContent, binaryContent]).then(([jsContent, binaryContent]) => {\n const fn = KTX2Loader.BasisWorker.toString()\n\n const body = [\n '/* constants */',\n 'let _EngineFormat = ' + JSON.stringify(KTX2Loader.EngineFormat),\n 'let _TranscoderFormat = ' + JSON.stringify(KTX2Loader.TranscoderFormat),\n 'let _BasisFormat = ' + JSON.stringify(KTX2Loader.BasisFormat),\n '/* basis_transcoder.js */',\n jsContent,\n '/* worker */',\n fn.substring(fn.indexOf('{') + 1, fn.lastIndexOf('}')),\n ].join('\\n')\n\n this.workerSourceURL = URL.createObjectURL(new Blob([body]))\n this.transcoderBinary = binaryContent\n\n this.workerPool.setWorkerCreator(() => {\n const worker = new Worker(this.workerSourceURL)\n const transcoderBinary = this.transcoderBinary.slice(0)\n\n worker.postMessage({ type: 'init', config: this.workerConfig, transcoderBinary }, [transcoderBinary])\n\n return worker\n })\n })\n\n if (_activeLoaders > 0) {\n // Each instance loads a transcoder and allocates workers, increasing network and memory cost.\n\n console.warn(\n 'THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues.' +\n ' Use a single KTX2Loader instance, or call .dispose() on old instances.',\n )\n }\n\n _activeLoaders++\n }\n\n return this.transcoderPending\n }\n\n load(url, onLoad, onProgress, onError) {\n if (this.workerConfig === null) {\n throw new Error('THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.')\n }\n\n const loader = new FileLoader(this.manager)\n\n loader.setResponseType('arraybuffer')\n loader.setWithCredentials(this.withCredentials)\n\n loader.load(\n url,\n (buffer) => {\n // Check for an existing task using this buffer. A transferred buffer cannot be transferred\n // again from this thread.\n if (_taskCache.has(buffer)) {\n const cachedTask = _taskCache.get(buffer)\n\n return cachedTask.promise.then(onLoad).catch(onError)\n }\n\n this._createTexture(buffer)\n .then((texture) => (onLoad ? onLoad(texture) : null))\n .catch(onError)\n },\n onProgress,\n onError,\n )\n }\n\n _createTextureFrom(transcodeResult, container) {\n const { faces, width, height, format, type, error, dfdFlags } = transcodeResult\n\n if (type === 'error') return Promise.reject(error)\n\n let texture\n\n if (container.faceCount === 6) {\n texture = new CompressedCubeTexture(faces, format, UnsignedByteType)\n } else {\n const mipmaps = faces[0].mipmaps\n\n texture =\n container.layerCount > 1\n ? new CompressedArrayTexture(mipmaps, width, height, container.layerCount, format, UnsignedByteType)\n : new CompressedTexture(mipmaps, width, height, format, UnsignedByteType)\n }\n\n texture.minFilter = faces[0].mipmaps.length === 1 ? LinearFilter : LinearMipmapLinearFilter\n texture.magFilter = LinearFilter\n texture.generateMipmaps = false\n texture.needsUpdate = true\n\n const colorSpace = parseColorSpace(container)\n if ('colorSpace' in texture) texture.colorSpace = colorSpace\n else texture.encoding = colorSpace === SRGBColorSpace ? sRGBEncoding : LinearEncoding\n\n texture.premultiplyAlpha = !!(dfdFlags & KHR_DF_FLAG_ALPHA_PREMULTIPLIED)\n\n return texture\n }\n\n /**\n * @param {ArrayBuffer} buffer\n * @param {object?} config\n * @return {Promise<CompressedTexture|CompressedArrayTexture|DataTexture|Data3DTexture>}\n */\n async _createTexture(buffer, config = {}) {\n const container = read(new Uint8Array(buffer))\n\n if (container.vkFormat !== VK_FORMAT_UNDEFINED) {\n return createRawTexture(container)\n }\n\n //\n\n const taskConfig = config\n const texturePending = this.init()\n .then(() => {\n return this.workerPool.postMessage({ type: 'transcode', buffer, taskConfig: taskConfig }, [buffer])\n })\n .then((e) => this._createTextureFrom(e.data, container))\n\n // Cache the task result.\n _taskCache.set(buffer, { promise: texturePending })\n\n return texturePending\n }\n\n dispose() {\n this.workerPool.dispose()\n if (this.workerSourceURL) URL.revokeObjectURL(this.workerSourceURL)\n\n _activeLoaders--\n\n return this\n }\n}\n\n//\n// Parsing for non-Basis textures. These textures are may have supercompression\n// like Zstd, but they do not require transcoding.\n\nconst UNCOMPRESSED_FORMATS = new Set([RGBAFormat, RGFormat, RedFormat])\n\nconst FORMAT_MAP = {\n [VK_FORMAT_R32G32B32A32_SFLOAT]: RGBAFormat,\n [VK_FORMAT_R16G16B16A16_SFLOAT]: RGBAFormat,\n [VK_FORMAT_R8G8B8A8_UNORM]: RGBAFormat,\n [VK_FORMAT_R8G8B8A8_SRGB]: RGBAFormat,\n\n [VK_FORMAT_R32G32_SFLOAT]: RGFormat,\n [VK_FORMAT_R16G16_SFLOAT]: RGFormat,\n [VK_FORMAT_R8G8_UNORM]: RGFormat,\n [VK_FORMAT_R8G8_SRGB]: RGFormat,\n\n [VK_FORMAT_R32_SFLOAT]: RedFormat,\n [VK_FORMAT_R16_SFLOAT]: RedFormat,\n [VK_FORMAT_R8_SRGB]: RedFormat,\n [VK_FORMAT_R8_UNORM]: RedFormat,\n\n [VK_FORMAT_ASTC_6x6_SRGB_BLOCK]: RGBA_ASTC_6x6_Format,\n [VK_FORMAT_ASTC_6x6_UNORM_BLOCK]: RGBA_ASTC_6x6_Format,\n}\n\nconst TYPE_MAP = {\n [VK_FORMAT_R32G32B32A32_SFLOAT]: FloatType,\n [VK_FORMAT_R16G16B16A16_SFLOAT]: HalfFloatType,\n [VK_FORMAT_R8G8B8A8_UNORM]: UnsignedByteType,\n [VK_FORMAT_R8G8B8A8_SRGB]: UnsignedByteType,\n\n [VK_FORMAT_R32G32_SFLOAT]: FloatType,\n [VK_FORMAT_R16G16_SFLOAT]: HalfFloatType,\n [VK_FORMAT_R8G8_UNORM]: UnsignedByteType,\n [VK_FORMAT_R8G8_SRGB]: UnsignedByteType,\n\n [VK_FORMAT_R32_SFLOAT]: FloatType,\n [VK_FORMAT_R16_SFLOAT]: HalfFloatType,\n [VK_FORMAT_R8_SRGB]: UnsignedByteType,\n [VK_FORMAT_R8_UNORM]: UnsignedByteType,\n\n [VK_FORMAT_ASTC_6x6_SRGB_BLOCK]: UnsignedByteType,\n [VK_FORMAT_ASTC_6x6_UNORM_BLOCK]: UnsignedByteType,\n}\n\nasync function createRawTexture(container) {\n const { vkFormat } = container\n\n if (FORMAT_MAP[vkFormat] === undefined) {\n throw new Error('THREE.KTX2Loader: Unsupported vkFormat.')\n }\n\n //\n\n let zstd\n\n if (container.supercompressionScheme === KHR_SUPERCOMPRESSION_ZSTD) {\n if (!_zstd) {\n _zstd = new Promise(async (resolve) => {\n const zstd = new ZSTDDecoder()\n await zstd.init()\n resolve(zstd)\n })\n }\n\n zstd = await _zstd\n }\n\n //\n\n const mipmaps = []\n\n for (let levelIndex = 0; levelIndex < container.levels.length; levelIndex++) {\n const levelWidth = Math.max(1, container.pixelWidth >> levelIndex)\n const levelHeight = Math.max(1, container.pixelHeight >> levelIndex)\n const levelDepth = container.pixelDepth ? Math.max(1, container.pixelDepth >> levelIndex) : 0\n\n const level = container.levels[levelIndex]\n\n let levelData\n\n if (container.supercompressionScheme === KHR_SUPERCOMPRESSION_NONE) {\n levelData = level.levelData\n } else if (container.supercompressionScheme === KHR_SUPERCOMPRESSION_ZSTD) {\n levelData = zstd.decode(level.levelData, level.uncompressedByteLength)\n } else {\n throw new Error('THREE.KTX2Loader: Unsupported supercompressionScheme.')\n }\n\n let data\n\n if (TYPE_MAP[vkFormat] === FloatType) {\n data = new Float32Array(\n levelData.buffer,\n levelData.byteOffset,\n levelData.byteLength / Float32Array.BYTES_PER_ELEMENT,\n )\n } else if (TYPE_MAP[vkFormat] === HalfFloatType) {\n data = new Uint16Array(\n levelData.buffer,\n levelData.byteOffset,\n levelData.byteLength / Uint16Array.BYTES_PER_ELEMENT,\n )\n } else {\n data = levelData\n }\n\n mipmaps.push({\n data: data,\n width: levelWidth,\n height: levelHeight,\n depth: levelDepth,\n })\n }\n\n let texture\n\n if (UNCOMPRESSED_FORMATS.has(FORMAT_MAP[vkFormat])) {\n texture =\n container.pixelDepth === 0\n ? new DataTexture(mipmaps[0].data, container.pixelWidth, container.pixelHeight)\n : new Data3DTexture(mipmaps[0].data, container.pixelWidth, container.pixelHeight, container.pixelDepth)\n } else {\n if (container.pixelDepth > 0) throw new Error('THREE.KTX2Loader: Unsupported pixelDepth.')\n\n texture = new CompressedTexture(mipmaps, container.pixelWidth, container.pixelHeight)\n }\n\n texture.mipmaps = mipmaps\n\n texture.type = TYPE_MAP[vkFormat]\n texture.format = FORMAT_MAP[vkFormat]\n texture.needsUpdate = true\n\n const colorSpace = parseColorSpace(container)\n if ('colorSpace' in texture) texture.colorSpace = colorSpace\n else texture.encoding = colorSpace === SRGBColorSpace ? sRGBEncoding : LinearEncoding\n\n //\n\n return Promise.resolve(texture)\n}\n\nfunction parseColorSpace(container) {\n const dfd = container.dataFormatDescriptor[0]\n\n if (dfd.colorPrimaries === KHR_DF_PRIMARIES_BT709) {\n return dfd.transferFunction === KHR_DF_TRANSFER_SRGB ? SRGBColorSpace : LinearSRGBColorSpace\n } else if (dfd.colorPrimaries === KHR_DF_PRIMARIES_DISPLAYP3) {\n return dfd.transferFunction === KHR_DF_TRANSFER_SRGB ? DisplayP3ColorSpace : LinearDisplayP3ColorSpace\n } else if (dfd.colorPrimaries === KHR_DF_PRIMARIES_UNSPECIFIED) {\n return NoColorSpace\n } else {\n console.warn(`THREE.KTX2Loader: Unsupported color primaries, \"${dfd.colorPrimaries}\"`)\n return NoColorSpace\n }\n}\n\nexport { KTX2Loader }\n"],"names":["Loader","WorkerPool","FileLoader","jsContent","binaryContent","CompressedCubeTexture","UnsignedByteType","CompressedArrayTexture","CompressedTexture","LinearFilter","LinearMipmapLinearFilter","KHR_DF_FLAG_ALPHA_PREMULTIPLIED","read","VK_FORMAT_UNDEFINED","RGBAFormat","RGBA_ASTC_4x4_Format","RGBA_BPTC_Format","RGBA_ETC2_EAC_Format","RGBA_PVRTC_4BPPV1_Format","RGBA_S3TC_DXT5_Format","RGB_ETC1_Format","RGB_ETC2_Format","RGB_PVRTC_4BPPV1_Format","RGB_S3TC_DXT1_Format","RGFormat","RedFormat","VK_FORMAT_R32G32B32A32_SFLOAT","VK_FORMAT_R16G16B16A16_SFLOAT","VK_FORMAT_R8G8B8A8_UNORM","VK_FORMAT_R8G8B8A8_SRGB","VK_FORMAT_R32G32_SFLOAT","VK_FORMAT_R16G16_SFLOAT","VK_FORMAT_R8G8_UNORM","VK_FORMAT_R8G8_SRGB","VK_FORMAT_R32_SFLOAT","VK_FORMAT_R16_SFLOAT","VK_FORMAT_R8_SRGB","VK_FORMAT_R8_UNORM","VK_FORMAT_ASTC_6x6_SRGB_BLOCK","RGBA_ASTC_6x6_Format","VK_FORMAT_ASTC_6x6_UNORM_BLOCK","FloatType","HalfFloatType","KHR_SUPERCOMPRESSION_ZSTD","zstd","ZSTDDecoder","KHR_SUPERCOMPRESSION_NONE","DataTexture","Data3DTexture","KHR_DF_PRIMARIES_BT709","KHR_DF_TRANSFER_SRGB","KHR_DF_PRIMARIES_DISPLAYP3","KHR_DF_PRIMARIES_UNSPECIFIED"],"mappings":"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"}