three-stdlib 2.28.9 → 2.28.11

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,12 +4,20 @@ var __publicField = (obj, key, value) => {
4
4
  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
5
  return value;
6
6
  };
7
- import { Loader, 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, FileLoader, UnsignedByteType, CompressedTexture, LinearFilter, LinearMipmapLinearFilter, FloatType, HalfFloatType, DataTexture, RGFormat, RedFormat } from "three";
7
+ import { Loader, 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, FileLoader, UnsignedByteType, CompressedTexture, LinearFilter, LinearMipmapLinearFilter, FloatType, HalfFloatType, DataTexture, RGFormat, RedFormat, RGBA_ASTC_6x6_Format } from "three";
8
8
  import { WorkerPool } from "../utils/WorkerPool.js";
9
- import { KHR_DF_TRANSFER_SRGB, KHR_DF_FLAG_ALPHA_PREMULTIPLIED, read, VK_FORMAT_UNDEFINED, KHR_SUPERCOMPRESSION_NONE, KHR_SUPERCOMPRESSION_ZSTD, 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 } from "../libs/ktx-parse.js";
9
+ import { KHR_DF_FLAG_ALPHA_PREMULTIPLIED, read, VK_FORMAT_UNDEFINED, KHR_SUPERCOMPRESSION_ZSTD, KHR_SUPERCOMPRESSION_NONE, KHR_DF_PRIMARIES_BT709, KHR_DF_TRANSFER_SRGB, KHR_DF_PRIMARIES_DISPLAYP3, KHR_DF_PRIMARIES_UNSPECIFIED, 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, VK_FORMAT_ASTC_6x6_UNORM_BLOCK } from "../libs/ktx-parse.js";
10
10
  import { ZSTDDecoder } from "../libs/zstddec.js";
11
+ import { CompressedCubeTexture } from "../_polyfill/CompressedCubeTexture.js";
11
12
  import { CompressedArrayTexture } from "../_polyfill/CompressedArrayTexture.js";
12
13
  import { Data3DTexture } from "../_polyfill/Data3DTexture.js";
14
+ const LinearEncoding = 3e3;
15
+ const sRGBEncoding = 3001;
16
+ const NoColorSpace = "";
17
+ const DisplayP3ColorSpace = "display-p3";
18
+ const LinearDisplayP3ColorSpace = "display-p3-linear";
19
+ const LinearSRGBColorSpace = "srgb-linear";
20
+ const SRGBColorSpace = "srgb";
13
21
  const _taskCache = /* @__PURE__ */ new WeakMap();
14
22
  let _activeLoaders = 0;
15
23
  let _zstd;
@@ -112,18 +120,25 @@ const _KTX2Loader = class extends Loader {
112
120
  );
113
121
  }
114
122
  _createTextureFrom(transcodeResult, container) {
115
- const { mipmaps, width, height, format, type, error, dfdTransferFn, dfdFlags } = transcodeResult;
123
+ const { faces, width, height, format, type, error, dfdFlags } = transcodeResult;
116
124
  if (type === "error")
117
125
  return Promise.reject(error);
118
- const texture = container.layerCount > 1 ? new CompressedArrayTexture(mipmaps, width, height, container.layerCount, format, UnsignedByteType) : new CompressedTexture(mipmaps, width, height, format, UnsignedByteType);
119
- texture.minFilter = mipmaps.length === 1 ? LinearFilter : LinearMipmapLinearFilter;
126
+ let texture;
127
+ if (container.faceCount === 6) {
128
+ texture = new CompressedCubeTexture(faces, format, UnsignedByteType);
129
+ } else {
130
+ const mipmaps = faces[0].mipmaps;
131
+ texture = container.layerCount > 1 ? new CompressedArrayTexture(mipmaps, width, height, container.layerCount, format, UnsignedByteType) : new CompressedTexture(mipmaps, width, height, format, UnsignedByteType);
132
+ }
133
+ texture.minFilter = faces[0].mipmaps.length === 1 ? LinearFilter : LinearMipmapLinearFilter;
120
134
  texture.magFilter = LinearFilter;
121
135
  texture.generateMipmaps = false;
122
136
  texture.needsUpdate = true;
137
+ const colorSpace = parseColorSpace(container);
123
138
  if ("colorSpace" in texture)
124
- texture.colorSpace = dfdTransferFn === KHR_DF_TRANSFER_SRGB ? "srgb" : "srgb-linear";
139
+ texture.colorSpace = colorSpace;
125
140
  else
126
- texture.encoding = dfdTransferFn === KHR_DF_TRANSFER_SRGB ? 3001 : 3e3;
141
+ texture.encoding = colorSpace === SRGBColorSpace ? sRGBEncoding : LinearEncoding;
127
142
  texture.premultiplyAlpha = !!(dfdFlags & KHR_DF_FLAG_ALPHA_PREMULTIPLIED);
128
143
  return texture;
129
144
  }
@@ -135,7 +150,7 @@ const _KTX2Loader = class extends Loader {
135
150
  async _createTexture(buffer, config = {}) {
136
151
  const container = read(new Uint8Array(buffer));
137
152
  if (container.vkFormat !== VK_FORMAT_UNDEFINED) {
138
- return createDataTexture(container);
153
+ return createRawTexture(container);
139
154
  }
140
155
  const taskConfig = config;
141
156
  const texturePending = this.init().then(() => {
@@ -194,9 +209,9 @@ __publicField(KTX2Loader, "BasisWorker", function() {
194
209
  let config;
195
210
  let transcoderPending;
196
211
  let BasisModule;
197
- const EngineFormat = _EngineFormat;
198
- const TranscoderFormat = _TranscoderFormat;
199
- const BasisFormat = _BasisFormat;
212
+ const EngineFormat = _KTX2Loader.EngineFormat;
213
+ const TranscoderFormat = _KTX2Loader.TranscoderFormat;
214
+ const BasisFormat = _KTX2Loader.BasisFormat;
200
215
  self.addEventListener("message", function(e) {
201
216
  const message = e.data;
202
217
  switch (message.type) {
@@ -207,23 +222,9 @@ __publicField(KTX2Loader, "BasisWorker", function() {
207
222
  case "transcode":
208
223
  transcoderPending.then(() => {
209
224
  try {
210
- const { width, height, hasAlpha, mipmaps, format, dfdTransferFn, dfdFlags } = transcode(message.buffer);
211
- const buffers = [];
212
- for (let i = 0; i < mipmaps.length; ++i) {
213
- buffers.push(mipmaps[i].data.buffer);
214
- }
225
+ const { faces, buffers, width, height, hasAlpha, format, dfdFlags } = transcode(message.buffer);
215
226
  self.postMessage(
216
- {
217
- type: "transcode",
218
- id: message.id,
219
- width,
220
- height,
221
- hasAlpha,
222
- mipmaps,
223
- format,
224
- dfdTransferFn,
225
- dfdFlags
226
- },
227
+ { type: "transcode", id: message.id, faces, width, height, hasAlpha, format, dfdFlags },
227
228
  buffers
228
229
  );
229
230
  } catch (error) {
@@ -258,13 +259,13 @@ __publicField(KTX2Loader, "BasisWorker", function() {
258
259
  const basisFormat = ktx2File.isUASTC() ? BasisFormat.UASTC_4x4 : BasisFormat.ETC1S;
259
260
  const width = ktx2File.getWidth();
260
261
  const height = ktx2File.getHeight();
261
- const layers = ktx2File.getLayers() || 1;
262
- const levels = ktx2File.getLevels();
262
+ const layerCount = ktx2File.getLayers() || 1;
263
+ const levelCount = ktx2File.getLevels();
264
+ const faceCount = ktx2File.getFaces();
263
265
  const hasAlpha = ktx2File.getHasAlpha();
264
- const dfdTransferFn = ktx2File.getDFDTransferFunc();
265
266
  const dfdFlags = ktx2File.getDFDFlags();
266
267
  const { transcoderFormat, engineFormat } = getTranscoderFormat(basisFormat, width, height, hasAlpha);
267
- if (!width || !height || !levels) {
268
+ if (!width || !height || !levelCount) {
268
269
  cleanup();
269
270
  throw new Error("THREE.KTX2Loader: Invalid texture");
270
271
  }
@@ -272,26 +273,41 @@ __publicField(KTX2Loader, "BasisWorker", function() {
272
273
  cleanup();
273
274
  throw new Error("THREE.KTX2Loader: .startTranscoding failed");
274
275
  }
275
- const mipmaps = [];
276
- for (let mip = 0; mip < levels; mip++) {
277
- const layerMips = [];
278
- let mipWidth, mipHeight;
279
- for (let layer = 0; layer < layers; layer++) {
280
- const levelInfo = ktx2File.getImageLevelInfo(mip, layer, 0);
281
- mipWidth = levelInfo.origWidth < 4 ? levelInfo.origWidth : levelInfo.width;
282
- mipHeight = levelInfo.origHeight < 4 ? levelInfo.origHeight : levelInfo.height;
283
- const dst = new Uint8Array(ktx2File.getImageTranscodedSizeInBytes(mip, layer, 0, transcoderFormat));
284
- const status = ktx2File.transcodeImage(dst, mip, layer, 0, transcoderFormat, 0, -1, -1);
285
- if (!status) {
286
- cleanup();
287
- throw new Error("THREE.KTX2Loader: .transcodeImage failed.");
276
+ const faces = [];
277
+ const buffers = [];
278
+ for (let face = 0; face < faceCount; face++) {
279
+ const mipmaps = [];
280
+ for (let mip = 0; mip < levelCount; mip++) {
281
+ const layerMips = [];
282
+ let mipWidth, mipHeight;
283
+ for (let layer = 0; layer < layerCount; layer++) {
284
+ const levelInfo = ktx2File.getImageLevelInfo(mip, layer, face);
285
+ if (face === 0 && mip === 0 && layer === 0 && (levelInfo.origWidth % 4 !== 0 || levelInfo.origHeight % 4 !== 0)) {
286
+ console.warn("THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions.");
287
+ }
288
+ if (levelCount > 1) {
289
+ mipWidth = levelInfo.origWidth;
290
+ mipHeight = levelInfo.origHeight;
291
+ } else {
292
+ mipWidth = levelInfo.width;
293
+ mipHeight = levelInfo.height;
294
+ }
295
+ const dst = new Uint8Array(ktx2File.getImageTranscodedSizeInBytes(mip, layer, 0, transcoderFormat));
296
+ const status = ktx2File.transcodeImage(dst, mip, layer, face, transcoderFormat, 0, -1, -1);
297
+ if (!status) {
298
+ cleanup();
299
+ throw new Error("THREE.KTX2Loader: .transcodeImage failed.");
300
+ }
301
+ layerMips.push(dst);
288
302
  }
289
- layerMips.push(dst);
303
+ const mipData = concat(layerMips);
304
+ mipmaps.push({ data: mipData, width: mipWidth, height: mipHeight });
305
+ buffers.push(mipData.buffer);
290
306
  }
291
- mipmaps.push({ data: concat(layerMips), width: mipWidth, height: mipHeight });
307
+ faces.push({ mipmaps, width, height, format: engineFormat });
292
308
  }
293
309
  cleanup();
294
- return { width, height, hasAlpha, mipmaps, format: engineFormat, dfdTransferFn, dfdFlags };
310
+ return { faces, buffers, width, height, hasAlpha, format: engineFormat, dfdFlags };
295
311
  }
296
312
  const FORMAT_OPTIONS = [
297
313
  {
@@ -384,6 +400,8 @@ __publicField(KTX2Loader, "BasisWorker", function() {
384
400
  return (value & value - 1) === 0 && value !== 0;
385
401
  }
386
402
  function concat(arrays) {
403
+ if (arrays.length === 1)
404
+ return arrays[0];
387
405
  let totalByteLength = 0;
388
406
  for (let i = 0; i < arrays.length; i++) {
389
407
  const array = arrays[i];
@@ -399,6 +417,7 @@ __publicField(KTX2Loader, "BasisWorker", function() {
399
417
  return result;
400
418
  }
401
419
  });
420
+ const UNCOMPRESSED_FORMATS = /* @__PURE__ */ new Set([RGBAFormat, RGFormat, RedFormat]);
402
421
  const FORMAT_MAP = {
403
422
  [VK_FORMAT_R32G32B32A32_SFLOAT]: RGBAFormat,
404
423
  [VK_FORMAT_R16G16B16A16_SFLOAT]: RGBAFormat,
@@ -411,7 +430,9 @@ const FORMAT_MAP = {
411
430
  [VK_FORMAT_R32_SFLOAT]: RedFormat,
412
431
  [VK_FORMAT_R16_SFLOAT]: RedFormat,
413
432
  [VK_FORMAT_R8_SRGB]: RedFormat,
414
- [VK_FORMAT_R8_UNORM]: RedFormat
433
+ [VK_FORMAT_R8_UNORM]: RedFormat,
434
+ [VK_FORMAT_ASTC_6x6_SRGB_BLOCK]: RGBA_ASTC_6x6_Format,
435
+ [VK_FORMAT_ASTC_6x6_UNORM_BLOCK]: RGBA_ASTC_6x6_Format
415
436
  };
416
437
  const TYPE_MAP = {
417
438
  [VK_FORMAT_R32G32B32A32_SFLOAT]: FloatType,
@@ -425,56 +446,95 @@ const TYPE_MAP = {
425
446
  [VK_FORMAT_R32_SFLOAT]: FloatType,
426
447
  [VK_FORMAT_R16_SFLOAT]: HalfFloatType,
427
448
  [VK_FORMAT_R8_SRGB]: UnsignedByteType,
428
- [VK_FORMAT_R8_UNORM]: UnsignedByteType
449
+ [VK_FORMAT_R8_UNORM]: UnsignedByteType,
450
+ [VK_FORMAT_ASTC_6x6_SRGB_BLOCK]: UnsignedByteType,
451
+ [VK_FORMAT_ASTC_6x6_UNORM_BLOCK]: UnsignedByteType
429
452
  };
430
- const ENCODING_MAP = {
431
- [VK_FORMAT_R8G8B8A8_SRGB]: 3001,
432
- // sRGBEncoding
433
- [VK_FORMAT_R8G8_SRGB]: 3001,
434
- // sRGBEncoding
435
- [VK_FORMAT_R8_SRGB]: 3001
436
- // sRGBEncoding
437
- };
438
- async function createDataTexture(container) {
439
- const { vkFormat, pixelWidth, pixelHeight, pixelDepth } = container;
453
+ async function createRawTexture(container) {
454
+ const { vkFormat } = container;
440
455
  if (FORMAT_MAP[vkFormat] === void 0) {
441
456
  throw new Error("THREE.KTX2Loader: Unsupported vkFormat.");
442
457
  }
443
- const level = container.levels[0];
444
- let levelData;
445
- let view;
446
- if (container.supercompressionScheme === KHR_SUPERCOMPRESSION_NONE) {
447
- levelData = level.levelData;
448
- } else if (container.supercompressionScheme === KHR_SUPERCOMPRESSION_ZSTD) {
458
+ let zstd;
459
+ if (container.supercompressionScheme === KHR_SUPERCOMPRESSION_ZSTD) {
449
460
  if (!_zstd) {
450
461
  _zstd = new Promise(async (resolve) => {
451
- const zstd = new ZSTDDecoder();
452
- await zstd.init();
453
- resolve(zstd);
462
+ const zstd2 = new ZSTDDecoder();
463
+ await zstd2.init();
464
+ resolve(zstd2);
454
465
  });
455
466
  }
456
- levelData = (await _zstd).decode(level.levelData, level.uncompressedByteLength);
457
- } else {
458
- throw new Error("THREE.KTX2Loader: Unsupported supercompressionScheme.");
467
+ zstd = await _zstd;
459
468
  }
460
- if (TYPE_MAP[vkFormat] === FloatType) {
461
- view = new Float32Array(
462
- levelData.buffer,
463
- levelData.byteOffset,
464
- levelData.byteLength / Float32Array.BYTES_PER_ELEMENT
465
- );
466
- } else if (TYPE_MAP[vkFormat] === HalfFloatType) {
467
- view = new Uint16Array(levelData.buffer, levelData.byteOffset, levelData.byteLength / Uint16Array.BYTES_PER_ELEMENT);
469
+ const mipmaps = [];
470
+ for (let levelIndex = 0; levelIndex < container.levels.length; levelIndex++) {
471
+ const levelWidth = Math.max(1, container.pixelWidth >> levelIndex);
472
+ const levelHeight = Math.max(1, container.pixelHeight >> levelIndex);
473
+ const levelDepth = container.pixelDepth ? Math.max(1, container.pixelDepth >> levelIndex) : 0;
474
+ const level = container.levels[levelIndex];
475
+ let levelData;
476
+ if (container.supercompressionScheme === KHR_SUPERCOMPRESSION_NONE) {
477
+ levelData = level.levelData;
478
+ } else if (container.supercompressionScheme === KHR_SUPERCOMPRESSION_ZSTD) {
479
+ levelData = zstd.decode(level.levelData, level.uncompressedByteLength);
480
+ } else {
481
+ throw new Error("THREE.KTX2Loader: Unsupported supercompressionScheme.");
482
+ }
483
+ let data;
484
+ if (TYPE_MAP[vkFormat] === FloatType) {
485
+ data = new Float32Array(
486
+ levelData.buffer,
487
+ levelData.byteOffset,
488
+ levelData.byteLength / Float32Array.BYTES_PER_ELEMENT
489
+ );
490
+ } else if (TYPE_MAP[vkFormat] === HalfFloatType) {
491
+ data = new Uint16Array(
492
+ levelData.buffer,
493
+ levelData.byteOffset,
494
+ levelData.byteLength / Uint16Array.BYTES_PER_ELEMENT
495
+ );
496
+ } else {
497
+ data = levelData;
498
+ }
499
+ mipmaps.push({
500
+ data,
501
+ width: levelWidth,
502
+ height: levelHeight,
503
+ depth: levelDepth
504
+ });
505
+ }
506
+ let texture;
507
+ if (UNCOMPRESSED_FORMATS.has(FORMAT_MAP[vkFormat])) {
508
+ texture = container.pixelDepth === 0 ? new DataTexture(mipmaps[0].data, container.pixelWidth, container.pixelHeight) : new Data3DTexture(mipmaps[0].data, container.pixelWidth, container.pixelHeight, container.pixelDepth);
468
509
  } else {
469
- view = levelData;
510
+ if (container.pixelDepth > 0)
511
+ throw new Error("THREE.KTX2Loader: Unsupported pixelDepth.");
512
+ texture = new CompressedTexture(mipmaps, container.pixelWidth, container.pixelHeight);
470
513
  }
471
- const texture = pixelDepth === 0 ? new DataTexture(view, pixelWidth, pixelHeight) : new Data3DTexture(view, pixelWidth, pixelHeight, pixelDepth);
514
+ texture.mipmaps = mipmaps;
472
515
  texture.type = TYPE_MAP[vkFormat];
473
516
  texture.format = FORMAT_MAP[vkFormat];
474
- texture.encoding = ENCODING_MAP[vkFormat] || 3e3;
475
517
  texture.needsUpdate = true;
518
+ const colorSpace = parseColorSpace(container);
519
+ if ("colorSpace" in texture)
520
+ texture.colorSpace = colorSpace;
521
+ else
522
+ texture.encoding = colorSpace === SRGBColorSpace ? sRGBEncoding : LinearEncoding;
476
523
  return Promise.resolve(texture);
477
524
  }
525
+ function parseColorSpace(container) {
526
+ const dfd = container.dataFormatDescriptor[0];
527
+ if (dfd.colorPrimaries === KHR_DF_PRIMARIES_BT709) {
528
+ return dfd.transferFunction === KHR_DF_TRANSFER_SRGB ? SRGBColorSpace : LinearSRGBColorSpace;
529
+ } else if (dfd.colorPrimaries === KHR_DF_PRIMARIES_DISPLAYP3) {
530
+ return dfd.transferFunction === KHR_DF_TRANSFER_SRGB ? DisplayP3ColorSpace : LinearDisplayP3ColorSpace;
531
+ } else if (dfd.colorPrimaries === KHR_DF_PRIMARIES_UNSPECIFIED) {
532
+ return NoColorSpace;
533
+ } else {
534
+ console.warn(`THREE.KTX2Loader: Unsupported color primaries, "${dfd.colorPrimaries}"`);
535
+ return NoColorSpace;
536
+ }
537
+ }
478
538
  export {
479
539
  KTX2Loader
480
540
  };
@@ -1 +1 @@
1
- {"version":3,"file":"KTX2Loader.js","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":["jsContent","binaryContent"],"mappings":"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"}
1
+ {"version":3,"file":"KTX2Loader.js","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":["jsContent","binaryContent","zstd"],"mappings":";;;;;;;;;;;;;AAoEA,MAAM,iBAAiB;AACvB,MAAM,eAAe;AAErB,MAAM,eAAe;AACrB,MAAM,sBAAsB;AAC5B,MAAM,4BAA4B;AAClC,MAAM,uBAAuB;AAC7B,MAAM,iBAAiB;AAEvB,MAAM,aAAa,oBAAI,QAAS;AAEhC,IAAI,iBAAiB;AAErB,IAAI;AAEJ,MAAM,cAAN,cAAyB,OAAO;AAAA,EA+T9B,YAAY,SAAS;AACnB,UAAM,OAAO;AAEb,SAAK,iBAAiB;AACtB,SAAK,mBAAmB;AACxB,SAAK,oBAAoB;AAEzB,SAAK,aAAa,IAAI,WAAY;AAClC,SAAK,kBAAkB;AACvB,SAAK,eAAe;AAEpB,QAAI,OAAO,mBAAmB,aAAa;AACzC,cAAQ;AAAA,QACN;AAAA,MAED;AAAA,IACF;AAAA,EACF;AAAA,EAED,kBAAkB,MAAM;AACtB,SAAK,iBAAiB;AAEtB,WAAO;AAAA,EACR;AAAA,EAED,eAAe,KAAK;AAClB,SAAK,WAAW,eAAe,GAAG;AAElC,WAAO;AAAA,EACR;AAAA,EAED,cAAc,UAAU;AACtB,SAAK,eAAe;AAAA,MAClB,eAAe,SAAS,WAAW,IAAI,+BAA+B;AAAA,MACtE,eAAe,SAAS,WAAW,IAAI,+BAA+B;AAAA,MACtE,eAAe,SAAS,WAAW,IAAI,8BAA8B;AAAA,MACrE,cAAc,SAAS,WAAW,IAAI,+BAA+B;AAAA,MACrE,eAAe,SAAS,WAAW,IAAI,8BAA8B;AAAA,MACrE,gBACE,SAAS,WAAW,IAAI,gCAAgC,KACxD,SAAS,WAAW,IAAI,uCAAuC;AAAA,IAClE;AAED,QAAI,SAAS,aAAa,UAAU;AAElC,WAAK,aAAa,gBAAgB;AAAA,IACnC;AAED,WAAO;AAAA,EACR;AAAA,EAED,OAAO;AACL,QAAI,CAAC,KAAK,mBAAmB;AAE3B,YAAM,WAAW,IAAI,WAAW,KAAK,OAAO;AAC5C,eAAS,QAAQ,KAAK,cAAc;AACpC,eAAS,mBAAmB,KAAK,eAAe;AAChD,YAAM,YAAY,SAAS,UAAU,qBAAqB;AAG1D,YAAM,eAAe,IAAI,WAAW,KAAK,OAAO;AAChD,mBAAa,QAAQ,KAAK,cAAc;AACxC,mBAAa,gBAAgB,aAAa;AAC1C,mBAAa,mBAAmB,KAAK,eAAe;AACpD,YAAM,gBAAgB,aAAa,UAAU,uBAAuB;AAEpE,WAAK,oBAAoB,QAAQ,IAAI,CAAC,WAAW,aAAa,CAAC,EAAE,KAAK,CAAC,CAACA,YAAWC,cAAa,MAAM;AACpG,cAAM,KAAK,YAAW,YAAY,SAAU;AAE5C,cAAM,OAAO;AAAA,UACX;AAAA,UACA,yBAAyB,KAAK,UAAU,YAAW,YAAY;AAAA,UAC/D,6BAA6B,KAAK,UAAU,YAAW,gBAAgB;AAAA,UACvE,wBAAwB,KAAK,UAAU,YAAW,WAAW;AAAA,UAC7D;AAAA,UACAD;AAAA,UACA;AAAA,UACA,GAAG,UAAU,GAAG,QAAQ,GAAG,IAAI,GAAG,GAAG,YAAY,GAAG,CAAC;AAAA,QAC/D,EAAU,KAAK,IAAI;AAEX,aAAK,kBAAkB,IAAI,gBAAgB,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;AAC3D,aAAK,mBAAmBC;AAExB,aAAK,WAAW,iBAAiB,MAAM;AACrC,gBAAM,SAAS,IAAI,OAAO,KAAK,eAAe;AAC9C,gBAAM,mBAAmB,KAAK,iBAAiB,MAAM,CAAC;AAEtD,iBAAO,YAAY,EAAE,MAAM,QAAQ,QAAQ,KAAK,cAAc,oBAAoB,CAAC,gBAAgB,CAAC;AAEpG,iBAAO;AAAA,QACjB,CAAS;AAAA,MACT,CAAO;AAED,UAAI,iBAAiB,GAAG;AAGtB,gBAAQ;AAAA,UACN;AAAA,QAED;AAAA,MACF;AAED;AAAA,IACD;AAED,WAAO,KAAK;AAAA,EACb;AAAA,EAED,KAAK,KAAK,QAAQ,YAAY,SAAS;AACrC,QAAI,KAAK,iBAAiB,MAAM;AAC9B,YAAM,IAAI,MAAM,6EAA6E;AAAA,IAC9F;AAED,UAAM,SAAS,IAAI,WAAW,KAAK,OAAO;AAE1C,WAAO,gBAAgB,aAAa;AACpC,WAAO,mBAAmB,KAAK,eAAe;AAE9C,WAAO;AAAA,MACL;AAAA,MACA,CAAC,WAAW;AAGV,YAAI,WAAW,IAAI,MAAM,GAAG;AAC1B,gBAAM,aAAa,WAAW,IAAI,MAAM;AAExC,iBAAO,WAAW,QAAQ,KAAK,MAAM,EAAE,MAAM,OAAO;AAAA,QACrD;AAED,aAAK,eAAe,MAAM,EACvB,KAAK,CAAC,YAAa,SAAS,OAAO,OAAO,IAAI,IAAK,EACnD,MAAM,OAAO;AAAA,MACjB;AAAA,MACD;AAAA,MACA;AAAA,IACD;AAAA,EACF;AAAA,EAED,mBAAmB,iBAAiB,WAAW;AAC7C,UAAM,EAAE,OAAO,OAAO,QAAQ,QAAQ,MAAM,OAAO,SAAQ,IAAK;AAEhE,QAAI,SAAS;AAAS,aAAO,QAAQ,OAAO,KAAK;AAEjD,QAAI;AAEJ,QAAI,UAAU,cAAc,GAAG;AAC7B,gBAAU,IAAI,sBAAsB,OAAO,QAAQ,gBAAgB;AAAA,IACzE,OAAW;AACL,YAAM,UAAU,MAAM,CAAC,EAAE;AAEzB,gBACE,UAAU,aAAa,IACnB,IAAI,uBAAuB,SAAS,OAAO,QAAQ,UAAU,YAAY,QAAQ,gBAAgB,IACjG,IAAI,kBAAkB,SAAS,OAAO,QAAQ,QAAQ,gBAAgB;AAAA,IAC7E;AAED,YAAQ,YAAY,MAAM,CAAC,EAAE,QAAQ,WAAW,IAAI,eAAe;AACnE,YAAQ,YAAY;AACpB,YAAQ,kBAAkB;AAC1B,YAAQ,cAAc;AAEtB,UAAM,aAAa,gBAAgB,SAAS;AAC5C,QAAI,gBAAgB;AAAS,cAAQ,aAAa;AAAA;AAC7C,cAAQ,WAAW,eAAe,iBAAiB,eAAe;AAEvE,YAAQ,mBAAmB,CAAC,EAAE,WAAW;AAEzC,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,MAAM,eAAe,QAAQ,SAAS,IAAI;AACxC,UAAM,YAAY,KAAK,IAAI,WAAW,MAAM,CAAC;AAE7C,QAAI,UAAU,aAAa,qBAAqB;AAC9C,aAAO,iBAAiB,SAAS;AAAA,IAClC;AAID,UAAM,aAAa;AACnB,UAAM,iBAAiB,KAAK,KAAM,EAC/B,KAAK,MAAM;AACV,aAAO,KAAK,WAAW,YAAY,EAAE,MAAM,aAAa,QAAQ,cAA0B,CAAC,MAAM,CAAC;AAAA,IAC1G,CAAO,EACA,KAAK,CAAC,MAAM,KAAK,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAGzD,eAAW,IAAI,QAAQ,EAAE,SAAS,eAAc,CAAE;AAElD,WAAO;AAAA,EACR;AAAA,EAED,UAAU;AACR,SAAK,WAAW,QAAS;AACzB,QAAI,KAAK;AAAiB,UAAI,gBAAgB,KAAK,eAAe;AAElE;AAEA,WAAO;AAAA,EACR;AACH;AA5gBA,IAAM,aAAN;AAAA;AAGE,cAHI,YAGG,eAAc;AAAA,EACnB,OAAO;AAAA,EACP,WAAW;AACZ;AAED,cARI,YAQG,oBAAmB;AAAA,EACxB,MAAM;AAAA,EACN,MAAM;AAAA,EACN,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,oBAAoB;AAAA,EACpB,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,eAAe;AAAA,EACf,UAAU;AAAA,EACV,SAAS;AAAA,EACT,6BAA6B;AAAA,EAC7B,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,UAAU;AACX;AAED,cA5BI,YA4BG,gBAAe;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAAA;AAID,cA3CI,YA2CG,eAAc,WAAY;AAC/B,MAAI;AACJ,MAAI;AACJ,MAAI;AAEJ,QAAM,eAAe,YAAW;AAChC,QAAM,mBAAmB,YAAW;AACpC,QAAM,cAAc,YAAW;AAE/B,OAAK,iBAAiB,WAAW,SAAU,GAAG;AAC5C,UAAM,UAAU,EAAE;AAElB,YAAQ,QAAQ,MAAI;AAAA,MAClB,KAAK;AACH,iBAAS,QAAQ;AACjB,aAAK,QAAQ,gBAAgB;AAC7B;AAAA,MAEF,KAAK;AACH,0BAAkB,KAAK,MAAM;AAC3B,cAAI;AACF,kBAAM,EAAE,OAAO,SAAS,OAAO,QAAQ,UAAU,QAAQ,SAAU,IAAG,UAAU,QAAQ,MAAM;AAE9F,iBAAK;AAAA,cACH,EAAE,MAAM,aAAa,IAAI,QAAQ,IAAI,OAAO,OAAO,QAAQ,UAAU,QAAQ,SAAU;AAAA,cACvF;AAAA,YACD;AAAA,UACF,SAAQ,OAAP;AACA,oBAAQ,MAAM,KAAK;AAEnB,iBAAK,YAAY,EAAE,MAAM,SAAS,IAAI,QAAQ,IAAI,OAAO,MAAM,QAAO,CAAE;AAAA,UACzE;AAAA,QACb,CAAW;AACD;AAAA,IACH;AAAA,EACP,CAAK;AAED,WAAS,KAAK,YAAY;AACxB,wBAAoB,IAAI,QAAQ,CAAC,YAAY;AAC3C,oBAAc,EAAE,YAAY,sBAAsB,QAAS;AAC3D,YAAM,WAAW;AAAA,IACzB,CAAO,EAAE,KAAK,MAAM;AACZ,kBAAY,gBAAiB;AAE7B,UAAI,YAAY,aAAa,QAAW;AACtC,gBAAQ,KAAK,6DAA6D;AAAA,MAC3E;AAAA,IACT,CAAO;AAAA,EACF;AAED,WAAS,UAAU,QAAQ;AACzB,UAAM,WAAW,IAAI,YAAY,SAAS,IAAI,WAAW,MAAM,CAAC;AAEhE,aAAS,UAAU;AACjB,eAAS,MAAO;AAChB,eAAS,OAAQ;AAAA,IAClB;AAED,QAAI,CAAC,SAAS,WAAW;AACvB,cAAS;AACT,YAAM,IAAI,MAAM,qDAAqD;AAAA,IACtE;AAED,UAAM,cAAc,SAAS,QAAO,IAAK,YAAY,YAAY,YAAY;AAC7E,UAAM,QAAQ,SAAS,SAAU;AACjC,UAAM,SAAS,SAAS,UAAW;AACnC,UAAM,aAAa,SAAS,UAAS,KAAM;AAC3C,UAAM,aAAa,SAAS,UAAW;AACvC,UAAM,YAAY,SAAS,SAAU;AACrC,UAAM,WAAW,SAAS,YAAa;AACvC,UAAM,WAAW,SAAS,YAAa;AAEvC,UAAM,EAAE,kBAAkB,iBAAiB,oBAAoB,aAAa,OAAO,QAAQ,QAAQ;AAEnG,QAAI,CAAC,SAAS,CAAC,UAAU,CAAC,YAAY;AACpC,cAAS;AACT,YAAM,IAAI,MAAM,mCAAmC;AAAA,IACpD;AAED,QAAI,CAAC,SAAS,oBAAoB;AAChC,cAAS;AACT,YAAM,IAAI,MAAM,4CAA4C;AAAA,IAC7D;AAED,UAAM,QAAQ,CAAE;AAChB,UAAM,UAAU,CAAE;AAElB,aAAS,OAAO,GAAG,OAAO,WAAW,QAAQ;AAC3C,YAAM,UAAU,CAAE;AAElB,eAAS,MAAM,GAAG,MAAM,YAAY,OAAO;AACzC,cAAM,YAAY,CAAE;AAEpB,YAAI,UAAU;AAEd,iBAAS,QAAQ,GAAG,QAAQ,YAAY,SAAS;AAC/C,gBAAM,YAAY,SAAS,kBAAkB,KAAK,OAAO,IAAI;AAE7D,cACE,SAAS,KACT,QAAQ,KACR,UAAU,MACT,UAAU,YAAY,MAAM,KAAK,UAAU,aAAa,MAAM,IAC/D;AACA,oBAAQ,KAAK,oFAAoF;AAAA,UAClG;AAED,cAAI,aAAa,GAAG;AAClB,uBAAW,UAAU;AACrB,wBAAY,UAAU;AAAA,UACpC,OAAmB;AAIL,uBAAW,UAAU;AACrB,wBAAY,UAAU;AAAA,UACvB;AAED,gBAAM,MAAM,IAAI,WAAW,SAAS,8BAA8B,KAAK,OAAO,GAAG,gBAAgB,CAAC;AAClG,gBAAM,SAAS,SAAS,eAAe,KAAK,KAAK,OAAO,MAAM,kBAAkB,GAAG,IAAI,EAAE;AAEzF,cAAI,CAAC,QAAQ;AACX,oBAAS;AACT,kBAAM,IAAI,MAAM,2CAA2C;AAAA,UAC5D;AAED,oBAAU,KAAK,GAAG;AAAA,QACnB;AAED,cAAM,UAAU,OAAO,SAAS;AAEhC,gBAAQ,KAAK,EAAE,MAAM,SAAS,OAAO,UAAU,QAAQ,WAAW;AAClE,gBAAQ,KAAK,QAAQ,MAAM;AAAA,MAC5B;AAED,YAAM,KAAK,EAAE,SAAS,OAAO,QAAQ,QAAQ,cAAc;AAAA,IAC5D;AAED,YAAS;AAET,WAAO,EAAE,OAAO,SAAS,OAAO,QAAQ,UAAU,QAAQ,cAAc,SAAU;AAAA,EACnF;AAWD,QAAM,iBAAiB;AAAA,IACrB;AAAA,MACE,IAAI;AAAA,MACJ,aAAa,CAAC,YAAY,SAAS;AAAA,MACnC,kBAAkB,CAAC,iBAAiB,UAAU,iBAAiB,QAAQ;AAAA,MACvE,cAAc,CAAC,aAAa,sBAAsB,aAAa,oBAAoB;AAAA,MACnF,eAAe;AAAA,MACf,eAAe;AAAA,MACf,iBAAiB;AAAA,IAClB;AAAA,IACD;AAAA,MACE,IAAI;AAAA,MACJ,aAAa,CAAC,YAAY,OAAO,YAAY,SAAS;AAAA,MACtD,kBAAkB,CAAC,iBAAiB,QAAQ,iBAAiB,MAAM;AAAA,MACnE,cAAc,CAAC,aAAa,kBAAkB,aAAa,gBAAgB;AAAA,MAC3E,eAAe;AAAA,MACf,eAAe;AAAA,MACf,iBAAiB;AAAA,IAClB;AAAA,IACD;AAAA,MACE,IAAI;AAAA,MACJ,aAAa,CAAC,YAAY,OAAO,YAAY,SAAS;AAAA,MACtD,kBAAkB,CAAC,iBAAiB,KAAK,iBAAiB,GAAG;AAAA,MAC7D,cAAc,CAAC,aAAa,sBAAsB,aAAa,qBAAqB;AAAA,MACpF,eAAe;AAAA,MACf,eAAe;AAAA,MACf,iBAAiB;AAAA,IAClB;AAAA,IACD;AAAA,MACE,IAAI;AAAA,MACJ,aAAa,CAAC,YAAY,OAAO,YAAY,SAAS;AAAA,MACtD,kBAAkB,CAAC,iBAAiB,MAAM,iBAAiB,IAAI;AAAA,MAC/D,cAAc,CAAC,aAAa,iBAAiB,aAAa,oBAAoB;AAAA,MAC9E,eAAe;AAAA,MACf,eAAe;AAAA,MACf,iBAAiB;AAAA,IAClB;AAAA,IACD;AAAA,MACE,IAAI;AAAA,MACJ,aAAa,CAAC,YAAY,OAAO,YAAY,SAAS;AAAA,MACtD,kBAAkB,CAAC,iBAAiB,IAAI;AAAA,MACxC,cAAc,CAAC,aAAa,eAAe;AAAA,MAC3C,eAAe;AAAA,MACf,eAAe;AAAA,MACf,iBAAiB;AAAA,IAClB;AAAA,IACD;AAAA,MACE,IAAI;AAAA,MACJ,aAAa,CAAC,YAAY,OAAO,YAAY,SAAS;AAAA,MACtD,kBAAkB,CAAC,iBAAiB,cAAc,iBAAiB,aAAa;AAAA,MAChF,cAAc,CAAC,aAAa,yBAAyB,aAAa,wBAAwB;AAAA,MAC1F,eAAe;AAAA,MACf,eAAe;AAAA,MACf,iBAAiB;AAAA,IAClB;AAAA,EACF;AAED,QAAM,gBAAgB,eAAe,KAAK,SAAU,GAAG,GAAG;AACxD,WAAO,EAAE,gBAAgB,EAAE;AAAA,EACjC,CAAK;AACD,QAAM,gBAAgB,eAAe,KAAK,SAAU,GAAG,GAAG;AACxD,WAAO,EAAE,gBAAgB,EAAE;AAAA,EACjC,CAAK;AAED,WAAS,oBAAoB,aAAa,OAAO,QAAQ,UAAU;AACjE,QAAI;AACJ,QAAI;AAEJ,UAAM,UAAU,gBAAgB,YAAY,QAAQ,gBAAgB;AAEpE,aAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,YAAM,MAAM,QAAQ,CAAC;AAErB,UAAI,CAAC,OAAO,IAAI,EAAE;AAAG;AACrB,UAAI,CAAC,IAAI,YAAY,SAAS,WAAW;AAAG;AAC5C,UAAI,YAAY,IAAI,iBAAiB,SAAS;AAAG;AACjD,UAAI,IAAI,mBAAmB,EAAE,aAAa,KAAK,KAAK,aAAa,MAAM;AAAI;AAE3E,yBAAmB,IAAI,iBAAiB,WAAW,IAAI,CAAC;AACxD,qBAAe,IAAI,aAAa,WAAW,IAAI,CAAC;AAEhD,aAAO,EAAE,kBAAkB,aAAc;AAAA,IAC1C;AAED,YAAQ,KAAK,oFAAoF;AAEjG,uBAAmB,iBAAiB;AACpC,mBAAe,aAAa;AAE5B,WAAO,EAAE,kBAAkB,aAAc;AAAA,EAC1C;AAED,WAAS,aAAa,OAAO;AAC3B,QAAI,SAAS;AAAG,aAAO;AAEvB,YAAQ,QAAS,QAAQ,OAAQ,KAAK,UAAU;AAAA,EACjD;AAGD,WAAS,OAAO,QAAQ;AACtB,QAAI,OAAO,WAAW;AAAG,aAAO,OAAO,CAAC;AAExC,QAAI,kBAAkB;AAEtB,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,YAAM,QAAQ,OAAO,CAAC;AACtB,yBAAmB,MAAM;AAAA,IAC1B;AAED,UAAM,SAAS,IAAI,WAAW,eAAe;AAE7C,QAAI,aAAa;AAEjB,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,YAAM,QAAQ,OAAO,CAAC;AACtB,aAAO,IAAI,OAAO,UAAU;AAE5B,oBAAc,MAAM;AAAA,IACrB;AAED,WAAO;AAAA,EACR;AACF;AAqNH,MAAM,uBAAuB,oBAAI,IAAI,CAAC,YAAY,UAAU,SAAS,CAAC;AAEtE,MAAM,aAAa;AAAA,EACjB,CAAC,6BAA6B,GAAG;AAAA,EACjC,CAAC,6BAA6B,GAAG;AAAA,EACjC,CAAC,wBAAwB,GAAG;AAAA,EAC5B,CAAC,uBAAuB,GAAG;AAAA,EAE3B,CAAC,uBAAuB,GAAG;AAAA,EAC3B,CAAC,uBAAuB,GAAG;AAAA,EAC3B,CAAC,oBAAoB,GAAG;AAAA,EACxB,CAAC,mBAAmB,GAAG;AAAA,EAEvB,CAAC,oBAAoB,GAAG;AAAA,EACxB,CAAC,oBAAoB,GAAG;AAAA,EACxB,CAAC,iBAAiB,GAAG;AAAA,EACrB,CAAC,kBAAkB,GAAG;AAAA,EAEtB,CAAC,6BAA6B,GAAG;AAAA,EACjC,CAAC,8BAA8B,GAAG;AACpC;AAEA,MAAM,WAAW;AAAA,EACf,CAAC,6BAA6B,GAAG;AAAA,EACjC,CAAC,6BAA6B,GAAG;AAAA,EACjC,CAAC,wBAAwB,GAAG;AAAA,EAC5B,CAAC,uBAAuB,GAAG;AAAA,EAE3B,CAAC,uBAAuB,GAAG;AAAA,EAC3B,CAAC,uBAAuB,GAAG;AAAA,EAC3B,CAAC,oBAAoB,GAAG;AAAA,EACxB,CAAC,mBAAmB,GAAG;AAAA,EAEvB,CAAC,oBAAoB,GAAG;AAAA,EACxB,CAAC,oBAAoB,GAAG;AAAA,EACxB,CAAC,iBAAiB,GAAG;AAAA,EACrB,CAAC,kBAAkB,GAAG;AAAA,EAEtB,CAAC,6BAA6B,GAAG;AAAA,EACjC,CAAC,8BAA8B,GAAG;AACpC;AAEA,eAAe,iBAAiB,WAAW;AACzC,QAAM,EAAE,SAAQ,IAAK;AAErB,MAAI,WAAW,QAAQ,MAAM,QAAW;AACtC,UAAM,IAAI,MAAM,yCAAyC;AAAA,EAC1D;AAID,MAAI;AAEJ,MAAI,UAAU,2BAA2B,2BAA2B;AAClE,QAAI,CAAC,OAAO;AACV,cAAQ,IAAI,QAAQ,OAAO,YAAY;AACrC,cAAMC,QAAO,IAAI,YAAa;AAC9B,cAAMA,MAAK,KAAM;AACjB,gBAAQA,KAAI;AAAA,MACpB,CAAO;AAAA,IACF;AAED,WAAO,MAAM;AAAA,EACd;AAID,QAAM,UAAU,CAAE;AAElB,WAAS,aAAa,GAAG,aAAa,UAAU,OAAO,QAAQ,cAAc;AAC3E,UAAM,aAAa,KAAK,IAAI,GAAG,UAAU,cAAc,UAAU;AACjE,UAAM,cAAc,KAAK,IAAI,GAAG,UAAU,eAAe,UAAU;AACnE,UAAM,aAAa,UAAU,aAAa,KAAK,IAAI,GAAG,UAAU,cAAc,UAAU,IAAI;AAE5F,UAAM,QAAQ,UAAU,OAAO,UAAU;AAEzC,QAAI;AAEJ,QAAI,UAAU,2BAA2B,2BAA2B;AAClE,kBAAY,MAAM;AAAA,IACxB,WAAe,UAAU,2BAA2B,2BAA2B;AACzE,kBAAY,KAAK,OAAO,MAAM,WAAW,MAAM,sBAAsB;AAAA,IAC3E,OAAW;AACL,YAAM,IAAI,MAAM,uDAAuD;AAAA,IACxE;AAED,QAAI;AAEJ,QAAI,SAAS,QAAQ,MAAM,WAAW;AACpC,aAAO,IAAI;AAAA,QACT,UAAU;AAAA,QACV,UAAU;AAAA,QACV,UAAU,aAAa,aAAa;AAAA,MACrC;AAAA,IACF,WAAU,SAAS,QAAQ,MAAM,eAAe;AAC/C,aAAO,IAAI;AAAA,QACT,UAAU;AAAA,QACV,UAAU;AAAA,QACV,UAAU,aAAa,YAAY;AAAA,MACpC;AAAA,IACP,OAAW;AACL,aAAO;AAAA,IACR;AAED,YAAQ,KAAK;AAAA,MACX;AAAA,MACA,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,OAAO;AAAA,IACb,CAAK;AAAA,EACF;AAED,MAAI;AAEJ,MAAI,qBAAqB,IAAI,WAAW,QAAQ,CAAC,GAAG;AAClD,cACE,UAAU,eAAe,IACrB,IAAI,YAAY,QAAQ,CAAC,EAAE,MAAM,UAAU,YAAY,UAAU,WAAW,IAC5E,IAAI,cAAc,QAAQ,CAAC,EAAE,MAAM,UAAU,YAAY,UAAU,aAAa,UAAU,UAAU;AAAA,EAC9G,OAAS;AACL,QAAI,UAAU,aAAa;AAAG,YAAM,IAAI,MAAM,2CAA2C;AAEzF,cAAU,IAAI,kBAAkB,SAAS,UAAU,YAAY,UAAU,WAAW;AAAA,EACrF;AAED,UAAQ,UAAU;AAElB,UAAQ,OAAO,SAAS,QAAQ;AAChC,UAAQ,SAAS,WAAW,QAAQ;AACpC,UAAQ,cAAc;AAEtB,QAAM,aAAa,gBAAgB,SAAS;AAC5C,MAAI,gBAAgB;AAAS,YAAQ,aAAa;AAAA;AAC7C,YAAQ,WAAW,eAAe,iBAAiB,eAAe;AAIvE,SAAO,QAAQ,QAAQ,OAAO;AAChC;AAEA,SAAS,gBAAgB,WAAW;AAClC,QAAM,MAAM,UAAU,qBAAqB,CAAC;AAE5C,MAAI,IAAI,mBAAmB,wBAAwB;AACjD,WAAO,IAAI,qBAAqB,uBAAuB,iBAAiB;AAAA,EAC5E,WAAa,IAAI,mBAAmB,4BAA4B;AAC5D,WAAO,IAAI,qBAAqB,uBAAuB,sBAAsB;AAAA,EACjF,WAAa,IAAI,mBAAmB,8BAA8B;AAC9D,WAAO;AAAA,EACX,OAAS;AACL,YAAQ,KAAK,mDAAmD,IAAI,iBAAiB;AACrF,WAAO;AAAA,EACR;AACH;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "three-stdlib",
3
- "version": "2.28.9",
3
+ "version": "2.28.11",
4
4
  "description": "stand-alone library of threejs examples",
5
5
  "keywords": [
6
6
  "three",