@vctrl/hooks 0.9.5 → 0.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/CHANGELOG.md +210 -0
  2. package/README.md +202 -383
  3. package/package.json +66 -55
  4. package/project.json +55 -0
  5. package/src/index.ts +38 -0
  6. package/src/use-export-model/use-export-model.ts +113 -0
  7. package/src/use-load-model/event-system.ts +46 -0
  8. package/src/use-load-model/index.ts +15 -0
  9. package/src/use-load-model/model-context.tsx +174 -0
  10. package/src/use-load-model/state.ts +75 -0
  11. package/src/use-load-model/types.ts +284 -0
  12. package/src/use-load-model/use-load-model.ts +682 -0
  13. package/src/use-load-model/utils/calculate-referenced-bytes.ts +123 -0
  14. package/src/use-load-model/utils/index.ts +7 -0
  15. package/src/use-load-model/utils/read-directory.ts +35 -0
  16. package/src/use-load-model/utils/reconstruct-files.ts +85 -0
  17. package/src/use-load-model/utils/resolve-scene-payload.ts +151 -0
  18. package/{use-optimize-model/index.d.ts → src/use-optimize-model/index.ts} +2 -1
  19. package/src/use-optimize-model/state.ts +40 -0
  20. package/src/use-optimize-model/types.ts +37 -0
  21. package/src/use-optimize-model/use-calc-optimization-info.ts +97 -0
  22. package/src/use-optimize-model/use-optimize-model.ts +467 -0
  23. package/src/use-optimize-model/utils/index.ts +29 -0
  24. package/src/use-optimize-model/utils/texture-optimization.ts +292 -0
  25. package/src/use-optimize-model/utils/validation.ts +62 -0
  26. package/src/utils/server-communication.ts +351 -0
  27. package/tsconfig.json +21 -0
  28. package/tsconfig.lib.json +16 -0
  29. package/vite.config.ts +77 -0
  30. package/GLTFExporter-BmLF430n.cjs +0 -18
  31. package/GLTFExporter-C4hCeb4H.js +0 -1263
  32. package/index.cjs.js +0 -1
  33. package/index.d.ts +0 -3
  34. package/index.es.js +0 -12
  35. package/model-context-CQJta_vi.cjs +0 -9
  36. package/model-context-D1Q8WdpT.js +0 -3431
  37. package/use-export-model/types.d.ts +0 -19
  38. package/use-export-model/use-export-model.d.ts +0 -14
  39. package/use-export-model/utils/data-uri-to-blob.d.ts +0 -9
  40. package/use-export-model/utils/export-handlers.d.ts +0 -23
  41. package/use-export-model/utils/file-helpers.d.ts +0 -17
  42. package/use-export-model/utils/index.d.ts +0 -3
  43. package/use-export-model-AFharGg5.js +0 -77
  44. package/use-export-model-CWcKp4A3.cjs +0 -1
  45. package/use-export-model.cjs.js +0 -1
  46. package/use-export-model.es.js +0 -4
  47. package/use-load-model/event-system.d.ts +0 -7
  48. package/use-load-model/file-type-hooks/index.d.ts +0 -2
  49. package/use-load-model/file-type-hooks/use-load-binary.d.ts +0 -11
  50. package/use-load-model/file-type-hooks/use-load-gltf.d.ts +0 -5
  51. package/use-load-model/index.d.ts +0 -3
  52. package/use-load-model/loaders/create-gltf-loader.d.ts +0 -3
  53. package/use-load-model/loaders/create-usdz-loader.d.ts +0 -3
  54. package/use-load-model/loaders/index.d.ts +0 -2
  55. package/use-load-model/model-context.d.ts +0 -78
  56. package/use-load-model/state.d.ts +0 -19
  57. package/use-load-model/types.d.ts +0 -51
  58. package/use-load-model/use-load-model.d.ts +0 -74
  59. package/use-load-model/utils/array-buffer-to-base64.d.ts +0 -2
  60. package/use-load-model/utils/index.d.ts +0 -2
  61. package/use-load-model/utils/read-directory.d.ts +0 -8
  62. package/use-load-model.cjs.js +0 -1
  63. package/use-load-model.es.js +0 -8
  64. package/use-optimize-model/state.d.ts +0 -13
  65. package/use-optimize-model/types.d.ts +0 -37
  66. package/use-optimize-model/use-optimize-model.d.ts +0 -29
  67. package/use-optimize-model-Cqkp__Vi.cjs +0 -1
  68. package/use-optimize-model-DZWIb_40.js +0 -127
  69. package/use-optimize-model.cjs.js +0 -1
  70. package/use-optimize-model.es.js +0 -4
  71. /package/{use-export-model/index.d.ts → src/use-export-model/index.ts} +0 -0
@@ -1,3431 +0,0 @@
1
- import { jsx as Bt } from "react/jsx-runtime";
2
- import { useCallback as z, useRef as Ct, useReducer as bt, useEffect as lt, createContext as ft, useContext as Et } from "react";
3
- import { TrianglesDrawMode as Qt, TriangleFanDrawMode as XA, TriangleStripDrawMode as Ge, Loader as TA, LoaderUtils as mA, FileLoader as aA, MeshPhysicalMaterial as W, Vector2 as SA, Color as rA, LinearSRGBColorSpace as Y, SRGBColorSpace as AA, SpotLight as dt, PointLight as ht, DirectionalLight as pt, Matrix4 as yA, Vector3 as CA, Quaternion as xe, InstancedMesh as ut, InstancedBufferAttribute as mt, Object3D as ie, TextureLoader as Te, ImageBitmapLoader as wt, BufferAttribute as X, InterleavedBuffer as Dt, InterleavedBufferAttribute as kt, LinearMipmapLinearFilter as se, NearestMipmapLinearFilter as Rt, LinearMipmapNearestFilter as Ft, NearestMipmapNearestFilter as St, LinearFilter as GA, NearestFilter as yt, RepeatWrapping as xA, MirroredRepeatWrapping as Le, ClampToEdgeWrapping as Me, PointsMaterial as Gt, Material as UA, LineBasicMaterial as xt, MeshStandardMaterial as Ue, DoubleSide as Tt, MeshBasicMaterial as hA, PropertyBinding as Lt, BufferGeometry as ne, SkinnedMesh as Mt, Mesh as Ne, LineSegments as Ut, Line as Nt, LineLoop as _t, Points as qt, Group as kA, PerspectiveCamera as Ht, MathUtils as Ot, OrthographicCamera as vt, Skeleton as Jt, AnimationClip as jt, Bone as Kt, InterpolateDiscrete as Pt, InterpolateLinear as _e, Texture as le, VectorKeyframeTrack as fe, NumberKeyframeTrack as Ee, QuaternionKeyframeTrack as Qe, ColorManagement as de, FrontSide as Yt, Interpolant as Wt, Box3 as Vt, Sphere as zt, CompressedCubeTexture as Xt, UnsignedByteType as K, CompressedArrayTexture as Zt, CompressedTexture as qe, DisplayP3ColorSpace as $t, LinearDisplayP3ColorSpace as Aa, NoColorSpace as oA, RGBA_ASTC_6x6_Format as he, RedFormat as pA, RGFormat as uA, RGBAFormat as bA, HalfFloatType as RA, FloatType as FA, DataTexture as ea, Data3DTexture as ta, RGBA_S3TC_DXT1_Format as aa, RGB_PVRTC_4BPPV1_Format as ia, RGB_ETC2_Format as sa, RGB_ETC1_Format as na, RGBA_S3TC_DXT5_Format as oa, RGBA_PVRTC_4BPPV1_Format as ra, RGBA_ETC2_EAC_Format as ca, RGBA_BPTC_Format as ga, RGBA_ASTC_4x4_Format as Ia, WebGLRenderer as Ba } from "three";
4
- const BA = {}, V = {
5
- emit(n, A) {
6
- const e = BA[n];
7
- e && e.forEach((a) => a(A));
8
- },
9
- on(n, A) {
10
- BA[n] || (BA[n] = []), BA[n].push(A);
11
- },
12
- off(n, A) {
13
- const e = BA[n];
14
- e && (BA[n] = e.filter(
15
- (a) => a !== A
16
- ));
17
- }
18
- };
19
- var q = /* @__PURE__ */ ((n) => (n.gltf = "gltf", n.glb = "glb", n.usdz = "usdz", n))(q || {});
20
- const He = {
21
- /**
22
- * Currently loaded file
23
- */
24
- file: null,
25
- /**
26
- * Flag indicating if a file is currently being loaded
27
- */
28
- isFileLoading: !1,
29
- /**
30
- * Current loading progress (0-100)
31
- */
32
- progress: 0,
33
- /**
34
- * List of supported file types
35
- * @type {ModelFileTypes[]}
36
- */
37
- supportedFileTypes: Object.values(q)
38
- };
39
- function Ca(n, A) {
40
- switch (A.type) {
41
- case "set-file":
42
- return { ...n, file: A.payload };
43
- case "set-file-loading":
44
- return { ...n, isFileLoading: A.payload };
45
- case "set-progress":
46
- return { ...n, progress: A.payload };
47
- case "reset-state":
48
- return { ...He };
49
- default:
50
- return n;
51
- }
52
- }
53
- async function pe(n) {
54
- const A = new Blob([n]), e = new FileReader();
55
- return new Promise((a, t) => {
56
- e.onloadend = () => {
57
- if (!(e != null && e.result)) return;
58
- const i = (e == null ? void 0 : e.result).split(",")[1];
59
- a(i);
60
- }, e.onerror = t, e.readAsDataURL(A);
61
- });
62
- }
63
- async function ba(n) {
64
- const A = [];
65
- async function* e(a) {
66
- for await (const [, t] of a)
67
- t.kind === "file" ? yield await t.getFile() : t.kind === "directory" && (yield* e(t));
68
- }
69
- for await (const a of e(n))
70
- A.push(a);
71
- return A;
72
- }
73
- function ue(n, A) {
74
- if (A === Qt)
75
- return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."), n;
76
- if (A === XA || A === Ge) {
77
- let e = n.getIndex();
78
- if (e === null) {
79
- const s = [], o = n.getAttribute("position");
80
- if (o !== void 0) {
81
- for (let r = 0; r < o.count; r++)
82
- s.push(r);
83
- n.setIndex(s), e = n.getIndex();
84
- } else
85
- return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."), n;
86
- }
87
- const a = e.count - 2, t = [];
88
- if (A === XA)
89
- for (let s = 1; s <= a; s++)
90
- t.push(e.getX(0)), t.push(e.getX(s)), t.push(e.getX(s + 1));
91
- else
92
- for (let s = 0; s < a; s++)
93
- s % 2 === 0 ? (t.push(e.getX(s)), t.push(e.getX(s + 1)), t.push(e.getX(s + 2))) : (t.push(e.getX(s + 2)), t.push(e.getX(s + 1)), t.push(e.getX(s)));
94
- t.length / 3 !== a && console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.");
95
- const i = n.clone();
96
- return i.setIndex(t), i.clearGroups(), i;
97
- } else
98
- return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:", A), n;
99
- }
100
- class la extends TA {
101
- constructor(A) {
102
- super(A), this.dracoLoader = null, this.ktx2Loader = null, this.meshoptDecoder = null, this.pluginCallbacks = [], this.register(function(e) {
103
- return new ha(e);
104
- }), this.register(function(e) {
105
- return new pa(e);
106
- }), this.register(function(e) {
107
- return new ya(e);
108
- }), this.register(function(e) {
109
- return new Ga(e);
110
- }), this.register(function(e) {
111
- return new xa(e);
112
- }), this.register(function(e) {
113
- return new ma(e);
114
- }), this.register(function(e) {
115
- return new wa(e);
116
- }), this.register(function(e) {
117
- return new Da(e);
118
- }), this.register(function(e) {
119
- return new ka(e);
120
- }), this.register(function(e) {
121
- return new da(e);
122
- }), this.register(function(e) {
123
- return new Ra(e);
124
- }), this.register(function(e) {
125
- return new ua(e);
126
- }), this.register(function(e) {
127
- return new Sa(e);
128
- }), this.register(function(e) {
129
- return new Fa(e);
130
- }), this.register(function(e) {
131
- return new Ea(e);
132
- }), this.register(function(e) {
133
- return new Ta(e);
134
- }), this.register(function(e) {
135
- return new La(e);
136
- });
137
- }
138
- load(A, e, a, t) {
139
- const i = this;
140
- let s;
141
- if (this.resourcePath !== "")
142
- s = this.resourcePath;
143
- else if (this.path !== "") {
144
- const c = mA.extractUrlBase(A);
145
- s = mA.resolveURL(c, this.path);
146
- } else
147
- s = mA.extractUrlBase(A);
148
- this.manager.itemStart(A);
149
- const o = function(c) {
150
- t ? t(c) : console.error(c), i.manager.itemError(A), i.manager.itemEnd(A);
151
- }, r = new aA(this.manager);
152
- r.setPath(this.path), r.setResponseType("arraybuffer"), r.setRequestHeader(this.requestHeader), r.setWithCredentials(this.withCredentials), r.load(A, function(c) {
153
- try {
154
- i.parse(c, s, function(I) {
155
- e(I), i.manager.itemEnd(A);
156
- }, o);
157
- } catch (I) {
158
- o(I);
159
- }
160
- }, a, o);
161
- }
162
- setDRACOLoader(A) {
163
- return this.dracoLoader = A, this;
164
- }
165
- setDDSLoader() {
166
- throw new Error(
167
- 'THREE.GLTFLoader: "MSFT_texture_dds" no longer supported. Please update to "KHR_texture_basisu".'
168
- );
169
- }
170
- setKTX2Loader(A) {
171
- return this.ktx2Loader = A, this;
172
- }
173
- setMeshoptDecoder(A) {
174
- return this.meshoptDecoder = A, this;
175
- }
176
- register(A) {
177
- return this.pluginCallbacks.indexOf(A) === -1 && this.pluginCallbacks.push(A), this;
178
- }
179
- unregister(A) {
180
- return this.pluginCallbacks.indexOf(A) !== -1 && this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(A), 1), this;
181
- }
182
- parse(A, e, a, t) {
183
- let i;
184
- const s = {}, o = {}, r = new TextDecoder();
185
- if (typeof A == "string")
186
- i = JSON.parse(A);
187
- else if (A instanceof ArrayBuffer)
188
- if (r.decode(new Uint8Array(A, 0, 4)) === Oe) {
189
- try {
190
- s[y.KHR_BINARY_GLTF] = new Ma(A);
191
- } catch (g) {
192
- t && t(g);
193
- return;
194
- }
195
- i = JSON.parse(s[y.KHR_BINARY_GLTF].content);
196
- } else
197
- i = JSON.parse(r.decode(A));
198
- else
199
- i = A;
200
- if (i.asset === void 0 || i.asset.version[0] < 2) {
201
- t && t(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported."));
202
- return;
203
- }
204
- const c = new Wa(i, {
205
- path: e || this.resourcePath || "",
206
- crossOrigin: this.crossOrigin,
207
- requestHeader: this.requestHeader,
208
- manager: this.manager,
209
- ktx2Loader: this.ktx2Loader,
210
- meshoptDecoder: this.meshoptDecoder
211
- });
212
- c.fileLoader.setRequestHeader(this.requestHeader);
213
- for (let I = 0; I < this.pluginCallbacks.length; I++) {
214
- const g = this.pluginCallbacks[I](c);
215
- g.name || console.error("THREE.GLTFLoader: Invalid plugin found: missing name"), o[g.name] = g, s[g.name] = !0;
216
- }
217
- if (i.extensionsUsed)
218
- for (let I = 0; I < i.extensionsUsed.length; ++I) {
219
- const g = i.extensionsUsed[I], B = i.extensionsRequired || [];
220
- switch (g) {
221
- case y.KHR_MATERIALS_UNLIT:
222
- s[g] = new Qa();
223
- break;
224
- case y.KHR_DRACO_MESH_COMPRESSION:
225
- s[g] = new Ua(i, this.dracoLoader);
226
- break;
227
- case y.KHR_TEXTURE_TRANSFORM:
228
- s[g] = new Na();
229
- break;
230
- case y.KHR_MESH_QUANTIZATION:
231
- s[g] = new _a();
232
- break;
233
- default:
234
- B.indexOf(g) >= 0 && o[g] === void 0 && console.warn('THREE.GLTFLoader: Unknown extension "' + g + '".');
235
- }
236
- }
237
- c.setExtensions(s), c.setPlugins(o), c.parse(a, t);
238
- }
239
- parseAsync(A, e) {
240
- const a = this;
241
- return new Promise(function(t, i) {
242
- a.parse(A, e, t, i);
243
- });
244
- }
245
- }
246
- function fa() {
247
- let n = {};
248
- return {
249
- get: function(A) {
250
- return n[A];
251
- },
252
- add: function(A, e) {
253
- n[A] = e;
254
- },
255
- remove: function(A) {
256
- delete n[A];
257
- },
258
- removeAll: function() {
259
- n = {};
260
- }
261
- };
262
- }
263
- const y = {
264
- KHR_BINARY_GLTF: "KHR_binary_glTF",
265
- KHR_DRACO_MESH_COMPRESSION: "KHR_draco_mesh_compression",
266
- KHR_LIGHTS_PUNCTUAL: "KHR_lights_punctual",
267
- KHR_MATERIALS_CLEARCOAT: "KHR_materials_clearcoat",
268
- KHR_MATERIALS_DISPERSION: "KHR_materials_dispersion",
269
- KHR_MATERIALS_IOR: "KHR_materials_ior",
270
- KHR_MATERIALS_SHEEN: "KHR_materials_sheen",
271
- KHR_MATERIALS_SPECULAR: "KHR_materials_specular",
272
- KHR_MATERIALS_TRANSMISSION: "KHR_materials_transmission",
273
- KHR_MATERIALS_IRIDESCENCE: "KHR_materials_iridescence",
274
- KHR_MATERIALS_ANISOTROPY: "KHR_materials_anisotropy",
275
- KHR_MATERIALS_UNLIT: "KHR_materials_unlit",
276
- KHR_MATERIALS_VOLUME: "KHR_materials_volume",
277
- KHR_TEXTURE_BASISU: "KHR_texture_basisu",
278
- KHR_TEXTURE_TRANSFORM: "KHR_texture_transform",
279
- KHR_MESH_QUANTIZATION: "KHR_mesh_quantization",
280
- KHR_MATERIALS_EMISSIVE_STRENGTH: "KHR_materials_emissive_strength",
281
- EXT_MATERIALS_BUMP: "EXT_materials_bump",
282
- EXT_TEXTURE_WEBP: "EXT_texture_webp",
283
- EXT_TEXTURE_AVIF: "EXT_texture_avif",
284
- EXT_MESHOPT_COMPRESSION: "EXT_meshopt_compression",
285
- EXT_MESH_GPU_INSTANCING: "EXT_mesh_gpu_instancing"
286
- };
287
- class Ea {
288
- constructor(A) {
289
- this.parser = A, this.name = y.KHR_LIGHTS_PUNCTUAL, this.cache = { refs: {}, uses: {} };
290
- }
291
- _markDefs() {
292
- const A = this.parser, e = this.parser.json.nodes || [];
293
- for (let a = 0, t = e.length; a < t; a++) {
294
- const i = e[a];
295
- i.extensions && i.extensions[this.name] && i.extensions[this.name].light !== void 0 && A._addNodeRef(this.cache, i.extensions[this.name].light);
296
- }
297
- }
298
- _loadLight(A) {
299
- const e = this.parser, a = "light:" + A;
300
- let t = e.cache.get(a);
301
- if (t) return t;
302
- const i = e.json, r = ((i.extensions && i.extensions[this.name] || {}).lights || [])[A];
303
- let c;
304
- const I = new rA(16777215);
305
- r.color !== void 0 && I.setRGB(r.color[0], r.color[1], r.color[2], Y);
306
- const g = r.range !== void 0 ? r.range : 0;
307
- switch (r.type) {
308
- case "directional":
309
- c = new pt(I), c.target.position.set(0, 0, -1), c.add(c.target);
310
- break;
311
- case "point":
312
- c = new ht(I), c.distance = g;
313
- break;
314
- case "spot":
315
- c = new dt(I), c.distance = g, r.spot = r.spot || {}, r.spot.innerConeAngle = r.spot.innerConeAngle !== void 0 ? r.spot.innerConeAngle : 0, r.spot.outerConeAngle = r.spot.outerConeAngle !== void 0 ? r.spot.outerConeAngle : Math.PI / 4, c.angle = r.spot.outerConeAngle, c.penumbra = 1 - r.spot.innerConeAngle / r.spot.outerConeAngle, c.target.position.set(0, 0, -1), c.add(c.target);
316
- break;
317
- default:
318
- throw new Error("THREE.GLTFLoader: Unexpected light type: " + r.type);
319
- }
320
- return c.position.set(0, 0, 0), c.decay = 2, tA(c, r), r.intensity !== void 0 && (c.intensity = r.intensity), c.name = e.createUniqueName(r.name || "light_" + A), t = Promise.resolve(c), e.cache.add(a, t), t;
321
- }
322
- getDependency(A, e) {
323
- if (A === "light")
324
- return this._loadLight(e);
325
- }
326
- createNodeAttachment(A) {
327
- const e = this, a = this.parser, i = a.json.nodes[A], o = (i.extensions && i.extensions[this.name] || {}).light;
328
- return o === void 0 ? null : this._loadLight(o).then(function(r) {
329
- return a._getNodeRef(e.cache, o, r);
330
- });
331
- }
332
- }
333
- class Qa {
334
- constructor() {
335
- this.name = y.KHR_MATERIALS_UNLIT;
336
- }
337
- getMaterialType() {
338
- return hA;
339
- }
340
- extendParams(A, e, a) {
341
- const t = [];
342
- A.color = new rA(1, 1, 1), A.opacity = 1;
343
- const i = e.pbrMetallicRoughness;
344
- if (i) {
345
- if (Array.isArray(i.baseColorFactor)) {
346
- const s = i.baseColorFactor;
347
- A.color.setRGB(s[0], s[1], s[2], Y), A.opacity = s[3];
348
- }
349
- i.baseColorTexture !== void 0 && t.push(a.assignTexture(A, "map", i.baseColorTexture, AA));
350
- }
351
- return Promise.all(t);
352
- }
353
- }
354
- class da {
355
- constructor(A) {
356
- this.parser = A, this.name = y.KHR_MATERIALS_EMISSIVE_STRENGTH;
357
- }
358
- extendMaterialParams(A, e) {
359
- const t = this.parser.json.materials[A];
360
- if (!t.extensions || !t.extensions[this.name])
361
- return Promise.resolve();
362
- const i = t.extensions[this.name].emissiveStrength;
363
- return i !== void 0 && (e.emissiveIntensity = i), Promise.resolve();
364
- }
365
- }
366
- class ha {
367
- constructor(A) {
368
- this.parser = A, this.name = y.KHR_MATERIALS_CLEARCOAT;
369
- }
370
- getMaterialType(A) {
371
- const a = this.parser.json.materials[A];
372
- return !a.extensions || !a.extensions[this.name] ? null : W;
373
- }
374
- extendMaterialParams(A, e) {
375
- const a = this.parser, t = a.json.materials[A];
376
- if (!t.extensions || !t.extensions[this.name])
377
- return Promise.resolve();
378
- const i = [], s = t.extensions[this.name];
379
- if (s.clearcoatFactor !== void 0 && (e.clearcoat = s.clearcoatFactor), s.clearcoatTexture !== void 0 && i.push(a.assignTexture(e, "clearcoatMap", s.clearcoatTexture)), s.clearcoatRoughnessFactor !== void 0 && (e.clearcoatRoughness = s.clearcoatRoughnessFactor), s.clearcoatRoughnessTexture !== void 0 && i.push(a.assignTexture(e, "clearcoatRoughnessMap", s.clearcoatRoughnessTexture)), s.clearcoatNormalTexture !== void 0 && (i.push(a.assignTexture(e, "clearcoatNormalMap", s.clearcoatNormalTexture)), s.clearcoatNormalTexture.scale !== void 0)) {
380
- const o = s.clearcoatNormalTexture.scale;
381
- e.clearcoatNormalScale = new SA(o, o);
382
- }
383
- return Promise.all(i);
384
- }
385
- }
386
- class pa {
387
- constructor(A) {
388
- this.parser = A, this.name = y.KHR_MATERIALS_DISPERSION;
389
- }
390
- getMaterialType(A) {
391
- const a = this.parser.json.materials[A];
392
- return !a.extensions || !a.extensions[this.name] ? null : W;
393
- }
394
- extendMaterialParams(A, e) {
395
- const t = this.parser.json.materials[A];
396
- if (!t.extensions || !t.extensions[this.name])
397
- return Promise.resolve();
398
- const i = t.extensions[this.name];
399
- return e.dispersion = i.dispersion !== void 0 ? i.dispersion : 0, Promise.resolve();
400
- }
401
- }
402
- class ua {
403
- constructor(A) {
404
- this.parser = A, this.name = y.KHR_MATERIALS_IRIDESCENCE;
405
- }
406
- getMaterialType(A) {
407
- const a = this.parser.json.materials[A];
408
- return !a.extensions || !a.extensions[this.name] ? null : W;
409
- }
410
- extendMaterialParams(A, e) {
411
- const a = this.parser, t = a.json.materials[A];
412
- if (!t.extensions || !t.extensions[this.name])
413
- return Promise.resolve();
414
- const i = [], s = t.extensions[this.name];
415
- return s.iridescenceFactor !== void 0 && (e.iridescence = s.iridescenceFactor), s.iridescenceTexture !== void 0 && i.push(a.assignTexture(e, "iridescenceMap", s.iridescenceTexture)), s.iridescenceIor !== void 0 && (e.iridescenceIOR = s.iridescenceIor), e.iridescenceThicknessRange === void 0 && (e.iridescenceThicknessRange = [100, 400]), s.iridescenceThicknessMinimum !== void 0 && (e.iridescenceThicknessRange[0] = s.iridescenceThicknessMinimum), s.iridescenceThicknessMaximum !== void 0 && (e.iridescenceThicknessRange[1] = s.iridescenceThicknessMaximum), s.iridescenceThicknessTexture !== void 0 && i.push(a.assignTexture(e, "iridescenceThicknessMap", s.iridescenceThicknessTexture)), Promise.all(i);
416
- }
417
- }
418
- class ma {
419
- constructor(A) {
420
- this.parser = A, this.name = y.KHR_MATERIALS_SHEEN;
421
- }
422
- getMaterialType(A) {
423
- const a = this.parser.json.materials[A];
424
- return !a.extensions || !a.extensions[this.name] ? null : W;
425
- }
426
- extendMaterialParams(A, e) {
427
- const a = this.parser, t = a.json.materials[A];
428
- if (!t.extensions || !t.extensions[this.name])
429
- return Promise.resolve();
430
- const i = [];
431
- e.sheenColor = new rA(0, 0, 0), e.sheenRoughness = 0, e.sheen = 1;
432
- const s = t.extensions[this.name];
433
- if (s.sheenColorFactor !== void 0) {
434
- const o = s.sheenColorFactor;
435
- e.sheenColor.setRGB(o[0], o[1], o[2], Y);
436
- }
437
- return s.sheenRoughnessFactor !== void 0 && (e.sheenRoughness = s.sheenRoughnessFactor), s.sheenColorTexture !== void 0 && i.push(a.assignTexture(e, "sheenColorMap", s.sheenColorTexture, AA)), s.sheenRoughnessTexture !== void 0 && i.push(a.assignTexture(e, "sheenRoughnessMap", s.sheenRoughnessTexture)), Promise.all(i);
438
- }
439
- }
440
- class wa {
441
- constructor(A) {
442
- this.parser = A, this.name = y.KHR_MATERIALS_TRANSMISSION;
443
- }
444
- getMaterialType(A) {
445
- const a = this.parser.json.materials[A];
446
- return !a.extensions || !a.extensions[this.name] ? null : W;
447
- }
448
- extendMaterialParams(A, e) {
449
- const a = this.parser, t = a.json.materials[A];
450
- if (!t.extensions || !t.extensions[this.name])
451
- return Promise.resolve();
452
- const i = [], s = t.extensions[this.name];
453
- return s.transmissionFactor !== void 0 && (e.transmission = s.transmissionFactor), s.transmissionTexture !== void 0 && i.push(a.assignTexture(e, "transmissionMap", s.transmissionTexture)), Promise.all(i);
454
- }
455
- }
456
- class Da {
457
- constructor(A) {
458
- this.parser = A, this.name = y.KHR_MATERIALS_VOLUME;
459
- }
460
- getMaterialType(A) {
461
- const a = this.parser.json.materials[A];
462
- return !a.extensions || !a.extensions[this.name] ? null : W;
463
- }
464
- extendMaterialParams(A, e) {
465
- const a = this.parser, t = a.json.materials[A];
466
- if (!t.extensions || !t.extensions[this.name])
467
- return Promise.resolve();
468
- const i = [], s = t.extensions[this.name];
469
- e.thickness = s.thicknessFactor !== void 0 ? s.thicknessFactor : 0, s.thicknessTexture !== void 0 && i.push(a.assignTexture(e, "thicknessMap", s.thicknessTexture)), e.attenuationDistance = s.attenuationDistance || 1 / 0;
470
- const o = s.attenuationColor || [1, 1, 1];
471
- return e.attenuationColor = new rA().setRGB(o[0], o[1], o[2], Y), Promise.all(i);
472
- }
473
- }
474
- class ka {
475
- constructor(A) {
476
- this.parser = A, this.name = y.KHR_MATERIALS_IOR;
477
- }
478
- getMaterialType(A) {
479
- const a = this.parser.json.materials[A];
480
- return !a.extensions || !a.extensions[this.name] ? null : W;
481
- }
482
- extendMaterialParams(A, e) {
483
- const t = this.parser.json.materials[A];
484
- if (!t.extensions || !t.extensions[this.name])
485
- return Promise.resolve();
486
- const i = t.extensions[this.name];
487
- return e.ior = i.ior !== void 0 ? i.ior : 1.5, Promise.resolve();
488
- }
489
- }
490
- class Ra {
491
- constructor(A) {
492
- this.parser = A, this.name = y.KHR_MATERIALS_SPECULAR;
493
- }
494
- getMaterialType(A) {
495
- const a = this.parser.json.materials[A];
496
- return !a.extensions || !a.extensions[this.name] ? null : W;
497
- }
498
- extendMaterialParams(A, e) {
499
- const a = this.parser, t = a.json.materials[A];
500
- if (!t.extensions || !t.extensions[this.name])
501
- return Promise.resolve();
502
- const i = [], s = t.extensions[this.name];
503
- e.specularIntensity = s.specularFactor !== void 0 ? s.specularFactor : 1, s.specularTexture !== void 0 && i.push(a.assignTexture(e, "specularIntensityMap", s.specularTexture));
504
- const o = s.specularColorFactor || [1, 1, 1];
505
- return e.specularColor = new rA().setRGB(o[0], o[1], o[2], Y), s.specularColorTexture !== void 0 && i.push(a.assignTexture(e, "specularColorMap", s.specularColorTexture, AA)), Promise.all(i);
506
- }
507
- }
508
- class Fa {
509
- constructor(A) {
510
- this.parser = A, this.name = y.EXT_MATERIALS_BUMP;
511
- }
512
- getMaterialType(A) {
513
- const a = this.parser.json.materials[A];
514
- return !a.extensions || !a.extensions[this.name] ? null : W;
515
- }
516
- extendMaterialParams(A, e) {
517
- const a = this.parser, t = a.json.materials[A];
518
- if (!t.extensions || !t.extensions[this.name])
519
- return Promise.resolve();
520
- const i = [], s = t.extensions[this.name];
521
- return e.bumpScale = s.bumpFactor !== void 0 ? s.bumpFactor : 1, s.bumpTexture !== void 0 && i.push(a.assignTexture(e, "bumpMap", s.bumpTexture)), Promise.all(i);
522
- }
523
- }
524
- class Sa {
525
- constructor(A) {
526
- this.parser = A, this.name = y.KHR_MATERIALS_ANISOTROPY;
527
- }
528
- getMaterialType(A) {
529
- const a = this.parser.json.materials[A];
530
- return !a.extensions || !a.extensions[this.name] ? null : W;
531
- }
532
- extendMaterialParams(A, e) {
533
- const a = this.parser, t = a.json.materials[A];
534
- if (!t.extensions || !t.extensions[this.name])
535
- return Promise.resolve();
536
- const i = [], s = t.extensions[this.name];
537
- return s.anisotropyStrength !== void 0 && (e.anisotropy = s.anisotropyStrength), s.anisotropyRotation !== void 0 && (e.anisotropyRotation = s.anisotropyRotation), s.anisotropyTexture !== void 0 && i.push(a.assignTexture(e, "anisotropyMap", s.anisotropyTexture)), Promise.all(i);
538
- }
539
- }
540
- class ya {
541
- constructor(A) {
542
- this.parser = A, this.name = y.KHR_TEXTURE_BASISU;
543
- }
544
- loadTexture(A) {
545
- const e = this.parser, a = e.json, t = a.textures[A];
546
- if (!t.extensions || !t.extensions[this.name])
547
- return null;
548
- const i = t.extensions[this.name], s = e.options.ktx2Loader;
549
- if (!s) {
550
- if (a.extensionsRequired && a.extensionsRequired.indexOf(this.name) >= 0)
551
- throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");
552
- return null;
553
- }
554
- return e.loadTextureImage(A, i.source, s);
555
- }
556
- }
557
- class Ga {
558
- constructor(A) {
559
- this.parser = A, this.name = y.EXT_TEXTURE_WEBP, this.isSupported = null;
560
- }
561
- loadTexture(A) {
562
- const e = this.name, a = this.parser, t = a.json, i = t.textures[A];
563
- if (!i.extensions || !i.extensions[e])
564
- return null;
565
- const s = i.extensions[e], o = t.images[s.source];
566
- let r = a.textureLoader;
567
- if (o.uri) {
568
- const c = a.options.manager.getHandler(o.uri);
569
- c !== null && (r = c);
570
- }
571
- return this.detectSupport().then(function(c) {
572
- if (c) return a.loadTextureImage(A, s.source, r);
573
- if (t.extensionsRequired && t.extensionsRequired.indexOf(e) >= 0)
574
- throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported.");
575
- return a.loadTexture(A);
576
- });
577
- }
578
- detectSupport() {
579
- return this.isSupported || (this.isSupported = new Promise(function(A) {
580
- const e = new Image();
581
- e.src = "data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA", e.onload = e.onerror = function() {
582
- A(e.height === 1);
583
- };
584
- })), this.isSupported;
585
- }
586
- }
587
- class xa {
588
- constructor(A) {
589
- this.parser = A, this.name = y.EXT_TEXTURE_AVIF, this.isSupported = null;
590
- }
591
- loadTexture(A) {
592
- const e = this.name, a = this.parser, t = a.json, i = t.textures[A];
593
- if (!i.extensions || !i.extensions[e])
594
- return null;
595
- const s = i.extensions[e], o = t.images[s.source];
596
- let r = a.textureLoader;
597
- if (o.uri) {
598
- const c = a.options.manager.getHandler(o.uri);
599
- c !== null && (r = c);
600
- }
601
- return this.detectSupport().then(function(c) {
602
- if (c) return a.loadTextureImage(A, s.source, r);
603
- if (t.extensionsRequired && t.extensionsRequired.indexOf(e) >= 0)
604
- throw new Error("THREE.GLTFLoader: AVIF required by asset but unsupported.");
605
- return a.loadTexture(A);
606
- });
607
- }
608
- detectSupport() {
609
- return this.isSupported || (this.isSupported = new Promise(function(A) {
610
- const e = new Image();
611
- e.src = "data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=", e.onload = e.onerror = function() {
612
- A(e.height === 1);
613
- };
614
- })), this.isSupported;
615
- }
616
- }
617
- class Ta {
618
- constructor(A) {
619
- this.name = y.EXT_MESHOPT_COMPRESSION, this.parser = A;
620
- }
621
- loadBufferView(A) {
622
- const e = this.parser.json, a = e.bufferViews[A];
623
- if (a.extensions && a.extensions[this.name]) {
624
- const t = a.extensions[this.name], i = this.parser.getDependency("buffer", t.buffer), s = this.parser.options.meshoptDecoder;
625
- if (!s || !s.supported) {
626
- if (e.extensionsRequired && e.extensionsRequired.indexOf(this.name) >= 0)
627
- throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files");
628
- return null;
629
- }
630
- return i.then(function(o) {
631
- const r = t.byteOffset || 0, c = t.byteLength || 0, I = t.count, g = t.byteStride, B = new Uint8Array(o, r, c);
632
- return s.decodeGltfBufferAsync ? s.decodeGltfBufferAsync(I, g, B, t.mode, t.filter).then(function(C) {
633
- return C.buffer;
634
- }) : s.ready.then(function() {
635
- const C = new ArrayBuffer(I * g);
636
- return s.decodeGltfBuffer(new Uint8Array(C), I, g, B, t.mode, t.filter), C;
637
- });
638
- });
639
- } else
640
- return null;
641
- }
642
- }
643
- class La {
644
- constructor(A) {
645
- this.name = y.EXT_MESH_GPU_INSTANCING, this.parser = A;
646
- }
647
- createNodeMesh(A) {
648
- const e = this.parser.json, a = e.nodes[A];
649
- if (!a.extensions || !a.extensions[this.name] || a.mesh === void 0)
650
- return null;
651
- const t = e.meshes[a.mesh];
652
- for (const c of t.primitives)
653
- if (c.mode !== O.TRIANGLES && c.mode !== O.TRIANGLE_STRIP && c.mode !== O.TRIANGLE_FAN && c.mode !== void 0)
654
- return null;
655
- const s = a.extensions[this.name].attributes, o = [], r = {};
656
- for (const c in s)
657
- o.push(this.parser.getDependency("accessor", s[c]).then((I) => (r[c] = I, r[c])));
658
- return o.length < 1 ? null : (o.push(this.parser.createNodeMesh(A)), Promise.all(o).then((c) => {
659
- const I = c.pop(), g = I.isGroup ? I.children : [I], B = c[0].count, C = [];
660
- for (const f of g) {
661
- const d = new yA(), p = new CA(), E = new xe(), l = new CA(1, 1, 1), h = new ut(f.geometry, f.material, B);
662
- for (let u = 0; u < B; u++)
663
- r.TRANSLATION && p.fromBufferAttribute(r.TRANSLATION, u), r.ROTATION && E.fromBufferAttribute(r.ROTATION, u), r.SCALE && l.fromBufferAttribute(r.SCALE, u), h.setMatrixAt(u, d.compose(p, E, l));
664
- for (const u in r)
665
- if (u === "_COLOR_0") {
666
- const k = r[u];
667
- h.instanceColor = new mt(k.array, k.itemSize, k.normalized);
668
- } else u !== "TRANSLATION" && u !== "ROTATION" && u !== "SCALE" && f.geometry.setAttribute(u, r[u]);
669
- ie.prototype.copy.call(h, f), this.parser.assignFinalMaterial(h), C.push(h);
670
- }
671
- return I.isGroup ? (I.clear(), I.add(...C), I) : C[0];
672
- }));
673
- }
674
- }
675
- const Oe = "glTF", QA = 12, me = { JSON: 1313821514, BIN: 5130562 };
676
- class Ma {
677
- constructor(A) {
678
- this.name = y.KHR_BINARY_GLTF, this.content = null, this.body = null;
679
- const e = new DataView(A, 0, QA), a = new TextDecoder();
680
- if (this.header = {
681
- magic: a.decode(new Uint8Array(A.slice(0, 4))),
682
- version: e.getUint32(4, !0),
683
- length: e.getUint32(8, !0)
684
- }, this.header.magic !== Oe)
685
- throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header.");
686
- if (this.header.version < 2)
687
- throw new Error("THREE.GLTFLoader: Legacy binary file detected.");
688
- const t = this.header.length - QA, i = new DataView(A, QA);
689
- let s = 0;
690
- for (; s < t; ) {
691
- const o = i.getUint32(s, !0);
692
- s += 4;
693
- const r = i.getUint32(s, !0);
694
- if (s += 4, r === me.JSON) {
695
- const c = new Uint8Array(A, QA + s, o);
696
- this.content = a.decode(c);
697
- } else if (r === me.BIN) {
698
- const c = QA + s;
699
- this.body = A.slice(c, c + o);
700
- }
701
- s += o;
702
- }
703
- if (this.content === null)
704
- throw new Error("THREE.GLTFLoader: JSON content not found.");
705
- }
706
- }
707
- class Ua {
708
- constructor(A, e) {
709
- if (!e)
710
- throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided.");
711
- this.name = y.KHR_DRACO_MESH_COMPRESSION, this.json = A, this.dracoLoader = e, this.dracoLoader.preload();
712
- }
713
- decodePrimitive(A, e) {
714
- const a = this.json, t = this.dracoLoader, i = A.extensions[this.name].bufferView, s = A.extensions[this.name].attributes, o = {}, r = {}, c = {};
715
- for (const I in s) {
716
- const g = ZA[I] || I.toLowerCase();
717
- o[g] = s[I];
718
- }
719
- for (const I in A.attributes) {
720
- const g = ZA[I] || I.toLowerCase();
721
- if (s[I] !== void 0) {
722
- const B = a.accessors[A.attributes[I]], C = fA[B.componentType];
723
- c[g] = C.name, r[g] = B.normalized === !0;
724
- }
725
- }
726
- return e.getDependency("bufferView", i).then(function(I) {
727
- return new Promise(function(g, B) {
728
- t.decodeDracoFile(I, function(C) {
729
- for (const f in C.attributes) {
730
- const d = C.attributes[f], p = r[f];
731
- p !== void 0 && (d.normalized = p);
732
- }
733
- g(C);
734
- }, o, c, Y, B);
735
- });
736
- });
737
- }
738
- }
739
- class Na {
740
- constructor() {
741
- this.name = y.KHR_TEXTURE_TRANSFORM;
742
- }
743
- extendTexture(A, e) {
744
- return (e.texCoord === void 0 || e.texCoord === A.channel) && e.offset === void 0 && e.rotation === void 0 && e.scale === void 0 || (A = A.clone(), e.texCoord !== void 0 && (A.channel = e.texCoord), e.offset !== void 0 && A.offset.fromArray(e.offset), e.rotation !== void 0 && (A.rotation = e.rotation), e.scale !== void 0 && A.repeat.fromArray(e.scale), A.needsUpdate = !0), A;
745
- }
746
- }
747
- class _a {
748
- constructor() {
749
- this.name = y.KHR_MESH_QUANTIZATION;
750
- }
751
- }
752
- class ve extends Wt {
753
- constructor(A, e, a, t) {
754
- super(A, e, a, t);
755
- }
756
- copySampleValue_(A) {
757
- const e = this.resultBuffer, a = this.sampleValues, t = this.valueSize, i = A * t * 3 + t;
758
- for (let s = 0; s !== t; s++)
759
- e[s] = a[i + s];
760
- return e;
761
- }
762
- interpolate_(A, e, a, t) {
763
- const i = this.resultBuffer, s = this.sampleValues, o = this.valueSize, r = o * 2, c = o * 3, I = t - e, g = (a - e) / I, B = g * g, C = B * g, f = A * c, d = f - c, p = -2 * C + 3 * B, E = C - B, l = 1 - p, h = E - B + g;
764
- for (let u = 0; u !== o; u++) {
765
- const k = s[d + u + o], F = s[d + u + r] * I, G = s[f + u + o], M = s[f + u] * I;
766
- i[u] = l * k + h * F + p * G + E * M;
767
- }
768
- return i;
769
- }
770
- }
771
- const qa = new xe();
772
- class Ha extends ve {
773
- interpolate_(A, e, a, t) {
774
- const i = super.interpolate_(A, e, a, t);
775
- return qa.fromArray(i).normalize().toArray(i), i;
776
- }
777
- }
778
- const O = {
779
- POINTS: 0,
780
- LINES: 1,
781
- LINE_LOOP: 2,
782
- LINE_STRIP: 3,
783
- TRIANGLES: 4,
784
- TRIANGLE_STRIP: 5,
785
- TRIANGLE_FAN: 6
786
- }, fA = {
787
- 5120: Int8Array,
788
- 5121: Uint8Array,
789
- 5122: Int16Array,
790
- 5123: Uint16Array,
791
- 5125: Uint32Array,
792
- 5126: Float32Array
793
- }, we = {
794
- 9728: yt,
795
- 9729: GA,
796
- 9984: St,
797
- 9985: Ft,
798
- 9986: Rt,
799
- 9987: se
800
- }, De = {
801
- 33071: Me,
802
- 33648: Le,
803
- 10497: xA
804
- }, NA = {
805
- SCALAR: 1,
806
- VEC2: 2,
807
- VEC3: 3,
808
- VEC4: 4,
809
- MAT2: 4,
810
- MAT3: 9,
811
- MAT4: 16
812
- }, ZA = {
813
- POSITION: "position",
814
- NORMAL: "normal",
815
- TANGENT: "tangent",
816
- TEXCOORD_0: "uv",
817
- TEXCOORD_1: "uv1",
818
- TEXCOORD_2: "uv2",
819
- TEXCOORD_3: "uv3",
820
- COLOR_0: "color",
821
- WEIGHTS_0: "skinWeight",
822
- JOINTS_0: "skinIndex"
823
- }, sA = {
824
- scale: "scale",
825
- translation: "position",
826
- rotation: "quaternion",
827
- weights: "morphTargetInfluences"
828
- }, Oa = {
829
- CUBICSPLINE: void 0,
830
- // We use a custom interpolant (GLTFCubicSplineInterpolation) for CUBICSPLINE tracks. Each
831
- // keyframe track will be initialized with a default interpolation type, then modified.
832
- LINEAR: _e,
833
- STEP: Pt
834
- }, _A = {
835
- OPAQUE: "OPAQUE",
836
- MASK: "MASK",
837
- BLEND: "BLEND"
838
- };
839
- function va(n) {
840
- return n.DefaultMaterial === void 0 && (n.DefaultMaterial = new Ue({
841
- color: 16777215,
842
- emissive: 0,
843
- metalness: 1,
844
- roughness: 1,
845
- transparent: !1,
846
- depthTest: !0,
847
- side: Yt
848
- })), n.DefaultMaterial;
849
- }
850
- function gA(n, A, e) {
851
- for (const a in e.extensions)
852
- n[a] === void 0 && (A.userData.gltfExtensions = A.userData.gltfExtensions || {}, A.userData.gltfExtensions[a] = e.extensions[a]);
853
- }
854
- function tA(n, A) {
855
- A.extras !== void 0 && (typeof A.extras == "object" ? Object.assign(n.userData, A.extras) : console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, " + A.extras));
856
- }
857
- function Ja(n, A, e) {
858
- let a = !1, t = !1, i = !1;
859
- for (let c = 0, I = A.length; c < I; c++) {
860
- const g = A[c];
861
- if (g.POSITION !== void 0 && (a = !0), g.NORMAL !== void 0 && (t = !0), g.COLOR_0 !== void 0 && (i = !0), a && t && i) break;
862
- }
863
- if (!a && !t && !i) return Promise.resolve(n);
864
- const s = [], o = [], r = [];
865
- for (let c = 0, I = A.length; c < I; c++) {
866
- const g = A[c];
867
- if (a) {
868
- const B = g.POSITION !== void 0 ? e.getDependency("accessor", g.POSITION) : n.attributes.position;
869
- s.push(B);
870
- }
871
- if (t) {
872
- const B = g.NORMAL !== void 0 ? e.getDependency("accessor", g.NORMAL) : n.attributes.normal;
873
- o.push(B);
874
- }
875
- if (i) {
876
- const B = g.COLOR_0 !== void 0 ? e.getDependency("accessor", g.COLOR_0) : n.attributes.color;
877
- r.push(B);
878
- }
879
- }
880
- return Promise.all([
881
- Promise.all(s),
882
- Promise.all(o),
883
- Promise.all(r)
884
- ]).then(function(c) {
885
- const I = c[0], g = c[1], B = c[2];
886
- return a && (n.morphAttributes.position = I), t && (n.morphAttributes.normal = g), i && (n.morphAttributes.color = B), n.morphTargetsRelative = !0, n;
887
- });
888
- }
889
- function ja(n, A) {
890
- if (n.updateMorphTargets(), A.weights !== void 0)
891
- for (let e = 0, a = A.weights.length; e < a; e++)
892
- n.morphTargetInfluences[e] = A.weights[e];
893
- if (A.extras && Array.isArray(A.extras.targetNames)) {
894
- const e = A.extras.targetNames;
895
- if (n.morphTargetInfluences.length === e.length) {
896
- n.morphTargetDictionary = {};
897
- for (let a = 0, t = e.length; a < t; a++)
898
- n.morphTargetDictionary[e[a]] = a;
899
- } else
900
- console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.");
901
- }
902
- }
903
- function Ka(n) {
904
- let A;
905
- const e = n.extensions && n.extensions[y.KHR_DRACO_MESH_COMPRESSION];
906
- if (e ? A = "draco:" + e.bufferView + ":" + e.indices + ":" + qA(e.attributes) : A = n.indices + ":" + qA(n.attributes) + ":" + n.mode, n.targets !== void 0)
907
- for (let a = 0, t = n.targets.length; a < t; a++)
908
- A += ":" + qA(n.targets[a]);
909
- return A;
910
- }
911
- function qA(n) {
912
- let A = "";
913
- const e = Object.keys(n).sort();
914
- for (let a = 0, t = e.length; a < t; a++)
915
- A += e[a] + ":" + n[e[a]] + ";";
916
- return A;
917
- }
918
- function $A(n) {
919
- switch (n) {
920
- case Int8Array:
921
- return 1 / 127;
922
- case Uint8Array:
923
- return 1 / 255;
924
- case Int16Array:
925
- return 1 / 32767;
926
- case Uint16Array:
927
- return 1 / 65535;
928
- default:
929
- throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type.");
930
- }
931
- }
932
- function Pa(n) {
933
- return n.search(/\.jpe?g($|\?)/i) > 0 || n.search(/^data\:image\/jpeg/) === 0 ? "image/jpeg" : n.search(/\.webp($|\?)/i) > 0 || n.search(/^data\:image\/webp/) === 0 ? "image/webp" : "image/png";
934
- }
935
- const Ya = new yA();
936
- class Wa {
937
- constructor(A = {}, e = {}) {
938
- this.json = A, this.extensions = {}, this.plugins = {}, this.options = e, this.cache = new fa(), this.associations = /* @__PURE__ */ new Map(), this.primitiveCache = {}, this.nodeCache = {}, this.meshCache = { refs: {}, uses: {} }, this.cameraCache = { refs: {}, uses: {} }, this.lightCache = { refs: {}, uses: {} }, this.sourceCache = {}, this.textureCache = {}, this.nodeNamesUsed = {};
939
- let a = !1, t = -1, i = !1, s = -1;
940
- if (typeof navigator < "u") {
941
- const o = navigator.userAgent;
942
- a = /^((?!chrome|android).)*safari/i.test(o) === !0;
943
- const r = o.match(/Version\/(\d+)/);
944
- t = a && r ? parseInt(r[1], 10) : -1, i = o.indexOf("Firefox") > -1, s = i ? o.match(/Firefox\/([0-9]+)\./)[1] : -1;
945
- }
946
- typeof createImageBitmap > "u" || a && t < 17 || i && s < 98 ? this.textureLoader = new Te(this.options.manager) : this.textureLoader = new wt(this.options.manager), this.textureLoader.setCrossOrigin(this.options.crossOrigin), this.textureLoader.setRequestHeader(this.options.requestHeader), this.fileLoader = new aA(this.options.manager), this.fileLoader.setResponseType("arraybuffer"), this.options.crossOrigin === "use-credentials" && this.fileLoader.setWithCredentials(!0);
947
- }
948
- setExtensions(A) {
949
- this.extensions = A;
950
- }
951
- setPlugins(A) {
952
- this.plugins = A;
953
- }
954
- parse(A, e) {
955
- const a = this, t = this.json, i = this.extensions;
956
- this.cache.removeAll(), this.nodeCache = {}, this._invokeAll(function(s) {
957
- return s._markDefs && s._markDefs();
958
- }), Promise.all(this._invokeAll(function(s) {
959
- return s.beforeRoot && s.beforeRoot();
960
- })).then(function() {
961
- return Promise.all([
962
- a.getDependencies("scene"),
963
- a.getDependencies("animation"),
964
- a.getDependencies("camera")
965
- ]);
966
- }).then(function(s) {
967
- const o = {
968
- scene: s[0][t.scene || 0],
969
- scenes: s[0],
970
- animations: s[1],
971
- cameras: s[2],
972
- asset: t.asset,
973
- parser: a,
974
- userData: {}
975
- };
976
- return gA(i, o, t), tA(o, t), Promise.all(a._invokeAll(function(r) {
977
- return r.afterRoot && r.afterRoot(o);
978
- })).then(function() {
979
- for (const r of o.scenes)
980
- r.updateMatrixWorld();
981
- A(o);
982
- });
983
- }).catch(e);
984
- }
985
- /**
986
- * Marks the special nodes/meshes in json for efficient parse.
987
- */
988
- _markDefs() {
989
- const A = this.json.nodes || [], e = this.json.skins || [], a = this.json.meshes || [];
990
- for (let t = 0, i = e.length; t < i; t++) {
991
- const s = e[t].joints;
992
- for (let o = 0, r = s.length; o < r; o++)
993
- A[s[o]].isBone = !0;
994
- }
995
- for (let t = 0, i = A.length; t < i; t++) {
996
- const s = A[t];
997
- s.mesh !== void 0 && (this._addNodeRef(this.meshCache, s.mesh), s.skin !== void 0 && (a[s.mesh].isSkinnedMesh = !0)), s.camera !== void 0 && this._addNodeRef(this.cameraCache, s.camera);
998
- }
999
- }
1000
- /**
1001
- * Counts references to shared node / Object3D resources. These resources
1002
- * can be reused, or "instantiated", at multiple nodes in the scene
1003
- * hierarchy. Mesh, Camera, and Light instances are instantiated and must
1004
- * be marked. Non-scenegraph resources (like Materials, Geometries, and
1005
- * Textures) can be reused directly and are not marked here.
1006
- *
1007
- * Example: CesiumMilkTruck sample model reuses "Wheel" meshes.
1008
- */
1009
- _addNodeRef(A, e) {
1010
- e !== void 0 && (A.refs[e] === void 0 && (A.refs[e] = A.uses[e] = 0), A.refs[e]++);
1011
- }
1012
- /** Returns a reference to a shared resource, cloning it if necessary. */
1013
- _getNodeRef(A, e, a) {
1014
- if (A.refs[e] <= 1) return a;
1015
- const t = a.clone(), i = (s, o) => {
1016
- const r = this.associations.get(s);
1017
- r != null && this.associations.set(o, r);
1018
- for (const [c, I] of s.children.entries())
1019
- i(I, o.children[c]);
1020
- };
1021
- return i(a, t), t.name += "_instance_" + A.uses[e]++, t;
1022
- }
1023
- _invokeOne(A) {
1024
- const e = Object.values(this.plugins);
1025
- e.push(this);
1026
- for (let a = 0; a < e.length; a++) {
1027
- const t = A(e[a]);
1028
- if (t) return t;
1029
- }
1030
- return null;
1031
- }
1032
- _invokeAll(A) {
1033
- const e = Object.values(this.plugins);
1034
- e.unshift(this);
1035
- const a = [];
1036
- for (let t = 0; t < e.length; t++) {
1037
- const i = A(e[t]);
1038
- i && a.push(i);
1039
- }
1040
- return a;
1041
- }
1042
- /**
1043
- * Requests the specified dependency asynchronously, with caching.
1044
- * @param {string} type
1045
- * @param {number} index
1046
- * @return {Promise<Object3D|Material|THREE.Texture|AnimationClip|ArrayBuffer|Object>}
1047
- */
1048
- getDependency(A, e) {
1049
- const a = A + ":" + e;
1050
- let t = this.cache.get(a);
1051
- if (!t) {
1052
- switch (A) {
1053
- case "scene":
1054
- t = this.loadScene(e);
1055
- break;
1056
- case "node":
1057
- t = this._invokeOne(function(i) {
1058
- return i.loadNode && i.loadNode(e);
1059
- });
1060
- break;
1061
- case "mesh":
1062
- t = this._invokeOne(function(i) {
1063
- return i.loadMesh && i.loadMesh(e);
1064
- });
1065
- break;
1066
- case "accessor":
1067
- t = this.loadAccessor(e);
1068
- break;
1069
- case "bufferView":
1070
- t = this._invokeOne(function(i) {
1071
- return i.loadBufferView && i.loadBufferView(e);
1072
- });
1073
- break;
1074
- case "buffer":
1075
- t = this.loadBuffer(e);
1076
- break;
1077
- case "material":
1078
- t = this._invokeOne(function(i) {
1079
- return i.loadMaterial && i.loadMaterial(e);
1080
- });
1081
- break;
1082
- case "texture":
1083
- t = this._invokeOne(function(i) {
1084
- return i.loadTexture && i.loadTexture(e);
1085
- });
1086
- break;
1087
- case "skin":
1088
- t = this.loadSkin(e);
1089
- break;
1090
- case "animation":
1091
- t = this._invokeOne(function(i) {
1092
- return i.loadAnimation && i.loadAnimation(e);
1093
- });
1094
- break;
1095
- case "camera":
1096
- t = this.loadCamera(e);
1097
- break;
1098
- default:
1099
- if (t = this._invokeOne(function(i) {
1100
- return i != this && i.getDependency && i.getDependency(A, e);
1101
- }), !t)
1102
- throw new Error("Unknown type: " + A);
1103
- break;
1104
- }
1105
- this.cache.add(a, t);
1106
- }
1107
- return t;
1108
- }
1109
- /**
1110
- * Requests all dependencies of the specified type asynchronously, with caching.
1111
- * @param {string} type
1112
- * @return {Promise<Array<Object>>}
1113
- */
1114
- getDependencies(A) {
1115
- let e = this.cache.get(A);
1116
- if (!e) {
1117
- const a = this, t = this.json[A + (A === "mesh" ? "es" : "s")] || [];
1118
- e = Promise.all(t.map(function(i, s) {
1119
- return a.getDependency(A, s);
1120
- })), this.cache.add(A, e);
1121
- }
1122
- return e;
1123
- }
1124
- /**
1125
- * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views
1126
- * @param {number} bufferIndex
1127
- * @return {Promise<ArrayBuffer>}
1128
- */
1129
- loadBuffer(A) {
1130
- const e = this.json.buffers[A], a = this.fileLoader;
1131
- if (e.type && e.type !== "arraybuffer")
1132
- throw new Error("THREE.GLTFLoader: " + e.type + " buffer type is not supported.");
1133
- if (e.uri === void 0 && A === 0)
1134
- return Promise.resolve(this.extensions[y.KHR_BINARY_GLTF].body);
1135
- const t = this.options;
1136
- return new Promise(function(i, s) {
1137
- a.load(mA.resolveURL(e.uri, t.path), i, void 0, function() {
1138
- s(new Error('THREE.GLTFLoader: Failed to load buffer "' + e.uri + '".'));
1139
- });
1140
- });
1141
- }
1142
- /**
1143
- * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views
1144
- * @param {number} bufferViewIndex
1145
- * @return {Promise<ArrayBuffer>}
1146
- */
1147
- loadBufferView(A) {
1148
- const e = this.json.bufferViews[A];
1149
- return this.getDependency("buffer", e.buffer).then(function(a) {
1150
- const t = e.byteLength || 0, i = e.byteOffset || 0;
1151
- return a.slice(i, i + t);
1152
- });
1153
- }
1154
- /**
1155
- * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#accessors
1156
- * @param {number} accessorIndex
1157
- * @return {Promise<BufferAttribute|InterleavedBufferAttribute>}
1158
- */
1159
- loadAccessor(A) {
1160
- const e = this, a = this.json, t = this.json.accessors[A];
1161
- if (t.bufferView === void 0 && t.sparse === void 0) {
1162
- const s = NA[t.type], o = fA[t.componentType], r = t.normalized === !0, c = new o(t.count * s);
1163
- return Promise.resolve(new X(c, s, r));
1164
- }
1165
- const i = [];
1166
- return t.bufferView !== void 0 ? i.push(this.getDependency("bufferView", t.bufferView)) : i.push(null), t.sparse !== void 0 && (i.push(this.getDependency("bufferView", t.sparse.indices.bufferView)), i.push(this.getDependency("bufferView", t.sparse.values.bufferView))), Promise.all(i).then(function(s) {
1167
- const o = s[0], r = NA[t.type], c = fA[t.componentType], I = c.BYTES_PER_ELEMENT, g = I * r, B = t.byteOffset || 0, C = t.bufferView !== void 0 ? a.bufferViews[t.bufferView].byteStride : void 0, f = t.normalized === !0;
1168
- let d, p;
1169
- if (C && C !== g) {
1170
- const E = Math.floor(B / C), l = "InterleavedBuffer:" + t.bufferView + ":" + t.componentType + ":" + E + ":" + t.count;
1171
- let h = e.cache.get(l);
1172
- h || (d = new c(o, E * C, t.count * C / I), h = new Dt(d, C / I), e.cache.add(l, h)), p = new kt(h, r, B % C / I, f);
1173
- } else
1174
- o === null ? d = new c(t.count * r) : d = new c(o, B, t.count * r), p = new X(d, r, f);
1175
- if (t.sparse !== void 0) {
1176
- const E = NA.SCALAR, l = fA[t.sparse.indices.componentType], h = t.sparse.indices.byteOffset || 0, u = t.sparse.values.byteOffset || 0, k = new l(s[1], h, t.sparse.count * E), F = new c(s[2], u, t.sparse.count * r);
1177
- o !== null && (p = new X(p.array.slice(), p.itemSize, p.normalized));
1178
- for (let G = 0, M = k.length; G < M; G++) {
1179
- const b = k[G];
1180
- if (p.setX(b, F[G * r]), r >= 2 && p.setY(b, F[G * r + 1]), r >= 3 && p.setZ(b, F[G * r + 2]), r >= 4 && p.setW(b, F[G * r + 3]), r >= 5) throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.");
1181
- }
1182
- }
1183
- return p;
1184
- });
1185
- }
1186
- /**
1187
- * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#textures
1188
- * @param {number} textureIndex
1189
- * @return {Promise<THREE.Texture|null>}
1190
- */
1191
- loadTexture(A) {
1192
- const e = this.json, a = this.options, i = e.textures[A].source, s = e.images[i];
1193
- let o = this.textureLoader;
1194
- if (s.uri) {
1195
- const r = a.manager.getHandler(s.uri);
1196
- r !== null && (o = r);
1197
- }
1198
- return this.loadTextureImage(A, i, o);
1199
- }
1200
- loadTextureImage(A, e, a) {
1201
- const t = this, i = this.json, s = i.textures[A], o = i.images[e], r = (o.uri || o.bufferView) + ":" + s.sampler;
1202
- if (this.textureCache[r])
1203
- return this.textureCache[r];
1204
- const c = this.loadImageSource(e, a).then(function(I) {
1205
- I.flipY = !1, I.name = s.name || o.name || "", I.name === "" && typeof o.uri == "string" && o.uri.startsWith("data:image/") === !1 && (I.name = o.uri);
1206
- const B = (i.samplers || {})[s.sampler] || {};
1207
- return I.magFilter = we[B.magFilter] || GA, I.minFilter = we[B.minFilter] || se, I.wrapS = De[B.wrapS] || xA, I.wrapT = De[B.wrapT] || xA, t.associations.set(I, { textures: A }), I;
1208
- }).catch(function() {
1209
- return null;
1210
- });
1211
- return this.textureCache[r] = c, c;
1212
- }
1213
- loadImageSource(A, e) {
1214
- const a = this, t = this.json, i = this.options;
1215
- if (this.sourceCache[A] !== void 0)
1216
- return this.sourceCache[A].then((g) => g.clone());
1217
- const s = t.images[A], o = self.URL || self.webkitURL;
1218
- let r = s.uri || "", c = !1;
1219
- if (s.bufferView !== void 0)
1220
- r = a.getDependency("bufferView", s.bufferView).then(function(g) {
1221
- c = !0;
1222
- const B = new Blob([g], { type: s.mimeType });
1223
- return r = o.createObjectURL(B), r;
1224
- });
1225
- else if (s.uri === void 0)
1226
- throw new Error("THREE.GLTFLoader: Image " + A + " is missing URI and bufferView");
1227
- const I = Promise.resolve(r).then(function(g) {
1228
- return new Promise(function(B, C) {
1229
- let f = B;
1230
- e.isImageBitmapLoader === !0 && (f = function(d) {
1231
- const p = new le(d);
1232
- p.needsUpdate = !0, B(p);
1233
- }), e.load(mA.resolveURL(g, i.path), f, void 0, C);
1234
- });
1235
- }).then(function(g) {
1236
- return c === !0 && o.revokeObjectURL(r), tA(g, s), g.userData.mimeType = s.mimeType || Pa(s.uri), g;
1237
- }).catch(function(g) {
1238
- throw console.error("THREE.GLTFLoader: Couldn't load texture", r), g;
1239
- });
1240
- return this.sourceCache[A] = I, I;
1241
- }
1242
- /**
1243
- * Asynchronously assigns a texture to the given material parameters.
1244
- * @param {Object} materialParams
1245
- * @param {string} mapName
1246
- * @param {Object} mapDef
1247
- * @return {Promise<Texture>}
1248
- */
1249
- assignTexture(A, e, a, t) {
1250
- const i = this;
1251
- return this.getDependency("texture", a.index).then(function(s) {
1252
- if (!s) return null;
1253
- if (a.texCoord !== void 0 && a.texCoord > 0 && (s = s.clone(), s.channel = a.texCoord), i.extensions[y.KHR_TEXTURE_TRANSFORM]) {
1254
- const o = a.extensions !== void 0 ? a.extensions[y.KHR_TEXTURE_TRANSFORM] : void 0;
1255
- if (o) {
1256
- const r = i.associations.get(s);
1257
- s = i.extensions[y.KHR_TEXTURE_TRANSFORM].extendTexture(s, o), i.associations.set(s, r);
1258
- }
1259
- }
1260
- return t !== void 0 && (s.colorSpace = t), A[e] = s, s;
1261
- });
1262
- }
1263
- /**
1264
- * Assigns final material to a Mesh, Line, or Points instance. The instance
1265
- * already has a material (generated from the glTF material options alone)
1266
- * but reuse of the same glTF material may require multiple threejs materials
1267
- * to accommodate different primitive types, defines, etc. New materials will
1268
- * be created if necessary, and reused from a cache.
1269
- * @param {Object3D} mesh Mesh, Line, or Points instance.
1270
- */
1271
- assignFinalMaterial(A) {
1272
- const e = A.geometry;
1273
- let a = A.material;
1274
- const t = e.attributes.tangent === void 0, i = e.attributes.color !== void 0, s = e.attributes.normal === void 0;
1275
- if (A.isPoints) {
1276
- const o = "PointsMaterial:" + a.uuid;
1277
- let r = this.cache.get(o);
1278
- r || (r = new Gt(), UA.prototype.copy.call(r, a), r.color.copy(a.color), r.map = a.map, r.sizeAttenuation = !1, this.cache.add(o, r)), a = r;
1279
- } else if (A.isLine) {
1280
- const o = "LineBasicMaterial:" + a.uuid;
1281
- let r = this.cache.get(o);
1282
- r || (r = new xt(), UA.prototype.copy.call(r, a), r.color.copy(a.color), r.map = a.map, this.cache.add(o, r)), a = r;
1283
- }
1284
- if (t || i || s) {
1285
- let o = "ClonedMaterial:" + a.uuid + ":";
1286
- t && (o += "derivative-tangents:"), i && (o += "vertex-colors:"), s && (o += "flat-shading:");
1287
- let r = this.cache.get(o);
1288
- r || (r = a.clone(), i && (r.vertexColors = !0), s && (r.flatShading = !0), t && (r.normalScale && (r.normalScale.y *= -1), r.clearcoatNormalScale && (r.clearcoatNormalScale.y *= -1)), this.cache.add(o, r), this.associations.set(r, this.associations.get(a))), a = r;
1289
- }
1290
- A.material = a;
1291
- }
1292
- getMaterialType() {
1293
- return Ue;
1294
- }
1295
- /**
1296
- * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials
1297
- * @param {number} materialIndex
1298
- * @return {Promise<Material>}
1299
- */
1300
- loadMaterial(A) {
1301
- const e = this, a = this.json, t = this.extensions, i = a.materials[A];
1302
- let s;
1303
- const o = {}, r = i.extensions || {}, c = [];
1304
- if (r[y.KHR_MATERIALS_UNLIT]) {
1305
- const g = t[y.KHR_MATERIALS_UNLIT];
1306
- s = g.getMaterialType(), c.push(g.extendParams(o, i, e));
1307
- } else {
1308
- const g = i.pbrMetallicRoughness || {};
1309
- if (o.color = new rA(1, 1, 1), o.opacity = 1, Array.isArray(g.baseColorFactor)) {
1310
- const B = g.baseColorFactor;
1311
- o.color.setRGB(B[0], B[1], B[2], Y), o.opacity = B[3];
1312
- }
1313
- g.baseColorTexture !== void 0 && c.push(e.assignTexture(o, "map", g.baseColorTexture, AA)), o.metalness = g.metallicFactor !== void 0 ? g.metallicFactor : 1, o.roughness = g.roughnessFactor !== void 0 ? g.roughnessFactor : 1, g.metallicRoughnessTexture !== void 0 && (c.push(e.assignTexture(o, "metalnessMap", g.metallicRoughnessTexture)), c.push(e.assignTexture(o, "roughnessMap", g.metallicRoughnessTexture))), s = this._invokeOne(function(B) {
1314
- return B.getMaterialType && B.getMaterialType(A);
1315
- }), c.push(Promise.all(this._invokeAll(function(B) {
1316
- return B.extendMaterialParams && B.extendMaterialParams(A, o);
1317
- })));
1318
- }
1319
- i.doubleSided === !0 && (o.side = Tt);
1320
- const I = i.alphaMode || _A.OPAQUE;
1321
- if (I === _A.BLEND ? (o.transparent = !0, o.depthWrite = !1) : (o.transparent = !1, I === _A.MASK && (o.alphaTest = i.alphaCutoff !== void 0 ? i.alphaCutoff : 0.5)), i.normalTexture !== void 0 && s !== hA && (c.push(e.assignTexture(o, "normalMap", i.normalTexture)), o.normalScale = new SA(1, 1), i.normalTexture.scale !== void 0)) {
1322
- const g = i.normalTexture.scale;
1323
- o.normalScale.set(g, g);
1324
- }
1325
- if (i.occlusionTexture !== void 0 && s !== hA && (c.push(e.assignTexture(o, "aoMap", i.occlusionTexture)), i.occlusionTexture.strength !== void 0 && (o.aoMapIntensity = i.occlusionTexture.strength)), i.emissiveFactor !== void 0 && s !== hA) {
1326
- const g = i.emissiveFactor;
1327
- o.emissive = new rA().setRGB(g[0], g[1], g[2], Y);
1328
- }
1329
- return i.emissiveTexture !== void 0 && s !== hA && c.push(e.assignTexture(o, "emissiveMap", i.emissiveTexture, AA)), Promise.all(c).then(function() {
1330
- const g = new s(o);
1331
- return i.name && (g.name = i.name), tA(g, i), e.associations.set(g, { materials: A }), i.extensions && gA(t, g, i), g;
1332
- });
1333
- }
1334
- /** When Object3D instances are targeted by animation, they need unique names. */
1335
- createUniqueName(A) {
1336
- const e = Lt.sanitizeNodeName(A || "");
1337
- return e in this.nodeNamesUsed ? e + "_" + ++this.nodeNamesUsed[e] : (this.nodeNamesUsed[e] = 0, e);
1338
- }
1339
- /**
1340
- * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#geometry
1341
- *
1342
- * Creates BufferGeometries from primitives.
1343
- *
1344
- * @param {Array<GLTF.Primitive>} primitives
1345
- * @return {Promise<Array<BufferGeometry>>}
1346
- */
1347
- loadGeometries(A) {
1348
- const e = this, a = this.extensions, t = this.primitiveCache;
1349
- function i(o) {
1350
- return a[y.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(o, e).then(function(r) {
1351
- return ke(r, o, e);
1352
- });
1353
- }
1354
- const s = [];
1355
- for (let o = 0, r = A.length; o < r; o++) {
1356
- const c = A[o], I = Ka(c), g = t[I];
1357
- if (g)
1358
- s.push(g.promise);
1359
- else {
1360
- let B;
1361
- c.extensions && c.extensions[y.KHR_DRACO_MESH_COMPRESSION] ? B = i(c) : B = ke(new ne(), c, e), t[I] = { primitive: c, promise: B }, s.push(B);
1362
- }
1363
- }
1364
- return Promise.all(s);
1365
- }
1366
- /**
1367
- * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshes
1368
- * @param {number} meshIndex
1369
- * @return {Promise<Group|Mesh|SkinnedMesh>}
1370
- */
1371
- loadMesh(A) {
1372
- const e = this, a = this.json, t = this.extensions, i = a.meshes[A], s = i.primitives, o = [];
1373
- for (let r = 0, c = s.length; r < c; r++) {
1374
- const I = s[r].material === void 0 ? va(this.cache) : this.getDependency("material", s[r].material);
1375
- o.push(I);
1376
- }
1377
- return o.push(e.loadGeometries(s)), Promise.all(o).then(function(r) {
1378
- const c = r.slice(0, r.length - 1), I = r[r.length - 1], g = [];
1379
- for (let C = 0, f = I.length; C < f; C++) {
1380
- const d = I[C], p = s[C];
1381
- let E;
1382
- const l = c[C];
1383
- if (p.mode === O.TRIANGLES || p.mode === O.TRIANGLE_STRIP || p.mode === O.TRIANGLE_FAN || p.mode === void 0)
1384
- E = i.isSkinnedMesh === !0 ? new Mt(d, l) : new Ne(d, l), E.isSkinnedMesh === !0 && E.normalizeSkinWeights(), p.mode === O.TRIANGLE_STRIP ? E.geometry = ue(E.geometry, Ge) : p.mode === O.TRIANGLE_FAN && (E.geometry = ue(E.geometry, XA));
1385
- else if (p.mode === O.LINES)
1386
- E = new Ut(d, l);
1387
- else if (p.mode === O.LINE_STRIP)
1388
- E = new Nt(d, l);
1389
- else if (p.mode === O.LINE_LOOP)
1390
- E = new _t(d, l);
1391
- else if (p.mode === O.POINTS)
1392
- E = new qt(d, l);
1393
- else
1394
- throw new Error("THREE.GLTFLoader: Primitive mode unsupported: " + p.mode);
1395
- Object.keys(E.geometry.morphAttributes).length > 0 && ja(E, i), E.name = e.createUniqueName(i.name || "mesh_" + A), tA(E, i), p.extensions && gA(t, E, p), e.assignFinalMaterial(E), g.push(E);
1396
- }
1397
- for (let C = 0, f = g.length; C < f; C++)
1398
- e.associations.set(g[C], {
1399
- meshes: A,
1400
- primitives: C
1401
- });
1402
- if (g.length === 1)
1403
- return i.extensions && gA(t, g[0], i), g[0];
1404
- const B = new kA();
1405
- i.extensions && gA(t, B, i), e.associations.set(B, { meshes: A });
1406
- for (let C = 0, f = g.length; C < f; C++)
1407
- B.add(g[C]);
1408
- return B;
1409
- });
1410
- }
1411
- /**
1412
- * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#cameras
1413
- * @param {number} cameraIndex
1414
- * @return {Promise<THREE.Camera>}
1415
- */
1416
- loadCamera(A) {
1417
- let e;
1418
- const a = this.json.cameras[A], t = a[a.type];
1419
- if (!t) {
1420
- console.warn("THREE.GLTFLoader: Missing camera parameters.");
1421
- return;
1422
- }
1423
- return a.type === "perspective" ? e = new Ht(Ot.radToDeg(t.yfov), t.aspectRatio || 1, t.znear || 1, t.zfar || 2e6) : a.type === "orthographic" && (e = new vt(-t.xmag, t.xmag, t.ymag, -t.ymag, t.znear, t.zfar)), a.name && (e.name = this.createUniqueName(a.name)), tA(e, a), Promise.resolve(e);
1424
- }
1425
- /**
1426
- * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins
1427
- * @param {number} skinIndex
1428
- * @return {Promise<Skeleton>}
1429
- */
1430
- loadSkin(A) {
1431
- const e = this.json.skins[A], a = [];
1432
- for (let t = 0, i = e.joints.length; t < i; t++)
1433
- a.push(this._loadNodeShallow(e.joints[t]));
1434
- return e.inverseBindMatrices !== void 0 ? a.push(this.getDependency("accessor", e.inverseBindMatrices)) : a.push(null), Promise.all(a).then(function(t) {
1435
- const i = t.pop(), s = t, o = [], r = [];
1436
- for (let c = 0, I = s.length; c < I; c++) {
1437
- const g = s[c];
1438
- if (g) {
1439
- o.push(g);
1440
- const B = new yA();
1441
- i !== null && B.fromArray(i.array, c * 16), r.push(B);
1442
- } else
1443
- console.warn('THREE.GLTFLoader: Joint "%s" could not be found.', e.joints[c]);
1444
- }
1445
- return new Jt(o, r);
1446
- });
1447
- }
1448
- /**
1449
- * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#animations
1450
- * @param {number} animationIndex
1451
- * @return {Promise<AnimationClip>}
1452
- */
1453
- loadAnimation(A) {
1454
- const e = this.json, a = this, t = e.animations[A], i = t.name ? t.name : "animation_" + A, s = [], o = [], r = [], c = [], I = [];
1455
- for (let g = 0, B = t.channels.length; g < B; g++) {
1456
- const C = t.channels[g], f = t.samplers[C.sampler], d = C.target, p = d.node, E = t.parameters !== void 0 ? t.parameters[f.input] : f.input, l = t.parameters !== void 0 ? t.parameters[f.output] : f.output;
1457
- d.node !== void 0 && (s.push(this.getDependency("node", p)), o.push(this.getDependency("accessor", E)), r.push(this.getDependency("accessor", l)), c.push(f), I.push(d));
1458
- }
1459
- return Promise.all([
1460
- Promise.all(s),
1461
- Promise.all(o),
1462
- Promise.all(r),
1463
- Promise.all(c),
1464
- Promise.all(I)
1465
- ]).then(function(g) {
1466
- const B = g[0], C = g[1], f = g[2], d = g[3], p = g[4], E = [];
1467
- for (let l = 0, h = B.length; l < h; l++) {
1468
- const u = B[l], k = C[l], F = f[l], G = d[l], M = p[l];
1469
- if (u === void 0) continue;
1470
- u.updateMatrix && u.updateMatrix();
1471
- const b = a._createAnimationTracks(u, k, F, G, M);
1472
- if (b)
1473
- for (let Q = 0; Q < b.length; Q++)
1474
- E.push(b[Q]);
1475
- }
1476
- return new jt(i, void 0, E);
1477
- });
1478
- }
1479
- createNodeMesh(A) {
1480
- const e = this.json, a = this, t = e.nodes[A];
1481
- return t.mesh === void 0 ? null : a.getDependency("mesh", t.mesh).then(function(i) {
1482
- const s = a._getNodeRef(a.meshCache, t.mesh, i);
1483
- return t.weights !== void 0 && s.traverse(function(o) {
1484
- if (o.isMesh)
1485
- for (let r = 0, c = t.weights.length; r < c; r++)
1486
- o.morphTargetInfluences[r] = t.weights[r];
1487
- }), s;
1488
- });
1489
- }
1490
- /**
1491
- * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#nodes-and-hierarchy
1492
- * @param {number} nodeIndex
1493
- * @return {Promise<Object3D>}
1494
- */
1495
- loadNode(A) {
1496
- const e = this.json, a = this, t = e.nodes[A], i = a._loadNodeShallow(A), s = [], o = t.children || [];
1497
- for (let c = 0, I = o.length; c < I; c++)
1498
- s.push(a.getDependency("node", o[c]));
1499
- const r = t.skin === void 0 ? Promise.resolve(null) : a.getDependency("skin", t.skin);
1500
- return Promise.all([
1501
- i,
1502
- Promise.all(s),
1503
- r
1504
- ]).then(function(c) {
1505
- const I = c[0], g = c[1], B = c[2];
1506
- B !== null && I.traverse(function(C) {
1507
- C.isSkinnedMesh && C.bind(B, Ya);
1508
- });
1509
- for (let C = 0, f = g.length; C < f; C++)
1510
- I.add(g[C]);
1511
- return I;
1512
- });
1513
- }
1514
- // ._loadNodeShallow() parses a single node.
1515
- // skin and child nodes are created and added in .loadNode() (no '_' prefix).
1516
- _loadNodeShallow(A) {
1517
- const e = this.json, a = this.extensions, t = this;
1518
- if (this.nodeCache[A] !== void 0)
1519
- return this.nodeCache[A];
1520
- const i = e.nodes[A], s = i.name ? t.createUniqueName(i.name) : "", o = [], r = t._invokeOne(function(c) {
1521
- return c.createNodeMesh && c.createNodeMesh(A);
1522
- });
1523
- return r && o.push(r), i.camera !== void 0 && o.push(t.getDependency("camera", i.camera).then(function(c) {
1524
- return t._getNodeRef(t.cameraCache, i.camera, c);
1525
- })), t._invokeAll(function(c) {
1526
- return c.createNodeAttachment && c.createNodeAttachment(A);
1527
- }).forEach(function(c) {
1528
- o.push(c);
1529
- }), this.nodeCache[A] = Promise.all(o).then(function(c) {
1530
- let I;
1531
- if (i.isBone === !0 ? I = new Kt() : c.length > 1 ? I = new kA() : c.length === 1 ? I = c[0] : I = new ie(), I !== c[0])
1532
- for (let g = 0, B = c.length; g < B; g++)
1533
- I.add(c[g]);
1534
- if (i.name && (I.userData.name = i.name, I.name = s), tA(I, i), i.extensions && gA(a, I, i), i.matrix !== void 0) {
1535
- const g = new yA();
1536
- g.fromArray(i.matrix), I.applyMatrix4(g);
1537
- } else
1538
- i.translation !== void 0 && I.position.fromArray(i.translation), i.rotation !== void 0 && I.quaternion.fromArray(i.rotation), i.scale !== void 0 && I.scale.fromArray(i.scale);
1539
- return t.associations.has(I) || t.associations.set(I, {}), t.associations.get(I).nodes = A, I;
1540
- }), this.nodeCache[A];
1541
- }
1542
- /**
1543
- * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#scenes
1544
- * @param {number} sceneIndex
1545
- * @return {Promise<Group>}
1546
- */
1547
- loadScene(A) {
1548
- const e = this.extensions, a = this.json.scenes[A], t = this, i = new kA();
1549
- a.name && (i.name = t.createUniqueName(a.name)), tA(i, a), a.extensions && gA(e, i, a);
1550
- const s = a.nodes || [], o = [];
1551
- for (let r = 0, c = s.length; r < c; r++)
1552
- o.push(t.getDependency("node", s[r]));
1553
- return Promise.all(o).then(function(r) {
1554
- for (let I = 0, g = r.length; I < g; I++)
1555
- i.add(r[I]);
1556
- const c = (I) => {
1557
- const g = /* @__PURE__ */ new Map();
1558
- for (const [B, C] of t.associations)
1559
- (B instanceof UA || B instanceof le) && g.set(B, C);
1560
- return I.traverse((B) => {
1561
- const C = t.associations.get(B);
1562
- C != null && g.set(B, C);
1563
- }), g;
1564
- };
1565
- return t.associations = c(i), i;
1566
- });
1567
- }
1568
- _createAnimationTracks(A, e, a, t, i) {
1569
- const s = [], o = A.name ? A.name : A.uuid, r = [];
1570
- sA[i.path] === sA.weights ? A.traverse(function(B) {
1571
- B.morphTargetInfluences && r.push(B.name ? B.name : B.uuid);
1572
- }) : r.push(o);
1573
- let c;
1574
- switch (sA[i.path]) {
1575
- case sA.weights:
1576
- c = Ee;
1577
- break;
1578
- case sA.rotation:
1579
- c = Qe;
1580
- break;
1581
- case sA.position:
1582
- case sA.scale:
1583
- c = fe;
1584
- break;
1585
- default:
1586
- switch (a.itemSize) {
1587
- case 1:
1588
- c = Ee;
1589
- break;
1590
- case 2:
1591
- case 3:
1592
- default:
1593
- c = fe;
1594
- break;
1595
- }
1596
- break;
1597
- }
1598
- const I = t.interpolation !== void 0 ? Oa[t.interpolation] : _e, g = this._getArrayFromAccessor(a);
1599
- for (let B = 0, C = r.length; B < C; B++) {
1600
- const f = new c(
1601
- r[B] + "." + sA[i.path],
1602
- e.array,
1603
- g,
1604
- I
1605
- );
1606
- t.interpolation === "CUBICSPLINE" && this._createCubicSplineTrackInterpolant(f), s.push(f);
1607
- }
1608
- return s;
1609
- }
1610
- _getArrayFromAccessor(A) {
1611
- let e = A.array;
1612
- if (A.normalized) {
1613
- const a = $A(e.constructor), t = new Float32Array(e.length);
1614
- for (let i = 0, s = e.length; i < s; i++)
1615
- t[i] = e[i] * a;
1616
- e = t;
1617
- }
1618
- return e;
1619
- }
1620
- _createCubicSplineTrackInterpolant(A) {
1621
- A.createInterpolant = function(a) {
1622
- const t = this instanceof Qe ? Ha : ve;
1623
- return new t(this.times, this.values, this.getValueSize() / 3, a);
1624
- }, A.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = !0;
1625
- }
1626
- }
1627
- function Va(n, A, e) {
1628
- const a = A.attributes, t = new Vt();
1629
- if (a.POSITION !== void 0) {
1630
- const o = e.json.accessors[a.POSITION], r = o.min, c = o.max;
1631
- if (r !== void 0 && c !== void 0) {
1632
- if (t.set(
1633
- new CA(r[0], r[1], r[2]),
1634
- new CA(c[0], c[1], c[2])
1635
- ), o.normalized) {
1636
- const I = $A(fA[o.componentType]);
1637
- t.min.multiplyScalar(I), t.max.multiplyScalar(I);
1638
- }
1639
- } else {
1640
- console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");
1641
- return;
1642
- }
1643
- } else
1644
- return;
1645
- const i = A.targets;
1646
- if (i !== void 0) {
1647
- const o = new CA(), r = new CA();
1648
- for (let c = 0, I = i.length; c < I; c++) {
1649
- const g = i[c];
1650
- if (g.POSITION !== void 0) {
1651
- const B = e.json.accessors[g.POSITION], C = B.min, f = B.max;
1652
- if (C !== void 0 && f !== void 0) {
1653
- if (r.setX(Math.max(Math.abs(C[0]), Math.abs(f[0]))), r.setY(Math.max(Math.abs(C[1]), Math.abs(f[1]))), r.setZ(Math.max(Math.abs(C[2]), Math.abs(f[2]))), B.normalized) {
1654
- const d = $A(fA[B.componentType]);
1655
- r.multiplyScalar(d);
1656
- }
1657
- o.max(r);
1658
- } else
1659
- console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");
1660
- }
1661
- }
1662
- t.expandByVector(o);
1663
- }
1664
- n.boundingBox = t;
1665
- const s = new zt();
1666
- t.getCenter(s.center), s.radius = t.min.distanceTo(t.max) / 2, n.boundingSphere = s;
1667
- }
1668
- function ke(n, A, e) {
1669
- const a = A.attributes, t = [];
1670
- function i(s, o) {
1671
- return e.getDependency("accessor", s).then(function(r) {
1672
- n.setAttribute(o, r);
1673
- });
1674
- }
1675
- for (const s in a) {
1676
- const o = ZA[s] || s.toLowerCase();
1677
- o in n.attributes || t.push(i(a[s], o));
1678
- }
1679
- if (A.indices !== void 0 && !n.index) {
1680
- const s = e.getDependency("accessor", A.indices).then(function(o) {
1681
- n.setIndex(o);
1682
- });
1683
- t.push(s);
1684
- }
1685
- return de.workingColorSpace !== Y && "COLOR_0" in a && console.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${de.workingColorSpace}" not supported.`), tA(n, A), Va(n, A, e), Promise.all(t).then(function() {
1686
- return A.targets !== void 0 ? Ja(n, A.targets, e) : n;
1687
- });
1688
- }
1689
- const HA = /* @__PURE__ */ new WeakMap();
1690
- class za extends TA {
1691
- constructor(A) {
1692
- super(A), this.decoderPath = "", this.decoderConfig = {}, this.decoderBinary = null, this.decoderPending = null, this.workerLimit = 4, this.workerPool = [], this.workerNextTaskID = 1, this.workerSourceURL = "", this.defaultAttributeIDs = {
1693
- position: "POSITION",
1694
- normal: "NORMAL",
1695
- color: "COLOR",
1696
- uv: "TEX_COORD"
1697
- }, this.defaultAttributeTypes = {
1698
- position: "Float32Array",
1699
- normal: "Float32Array",
1700
- color: "Float32Array",
1701
- uv: "Float32Array"
1702
- };
1703
- }
1704
- setDecoderPath(A) {
1705
- return this.decoderPath = A, this;
1706
- }
1707
- setDecoderConfig(A) {
1708
- return this.decoderConfig = A, this;
1709
- }
1710
- setWorkerLimit(A) {
1711
- return this.workerLimit = A, this;
1712
- }
1713
- load(A, e, a, t) {
1714
- const i = new aA(this.manager);
1715
- i.setPath(this.path), i.setResponseType("arraybuffer"), i.setRequestHeader(this.requestHeader), i.setWithCredentials(this.withCredentials), i.load(A, (s) => {
1716
- this.parse(s, e, t);
1717
- }, a, t);
1718
- }
1719
- parse(A, e, a = () => {
1720
- }) {
1721
- this.decodeDracoFile(A, e, null, null, AA, a).catch(a);
1722
- }
1723
- decodeDracoFile(A, e, a, t, i = Y, s = () => {
1724
- }) {
1725
- const o = {
1726
- attributeIDs: a || this.defaultAttributeIDs,
1727
- attributeTypes: t || this.defaultAttributeTypes,
1728
- useUniqueIDs: !!a,
1729
- vertexColorSpace: i
1730
- };
1731
- return this.decodeGeometry(A, o).then(e).catch(s);
1732
- }
1733
- decodeGeometry(A, e) {
1734
- const a = JSON.stringify(e);
1735
- if (HA.has(A)) {
1736
- const r = HA.get(A);
1737
- if (r.key === a)
1738
- return r.promise;
1739
- if (A.byteLength === 0)
1740
- throw new Error(
1741
- "THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred."
1742
- );
1743
- }
1744
- let t;
1745
- const i = this.workerNextTaskID++, s = A.byteLength, o = this._getWorker(i, s).then((r) => (t = r, new Promise((c, I) => {
1746
- t._callbacks[i] = { resolve: c, reject: I }, t.postMessage({ type: "decode", id: i, taskConfig: e, buffer: A }, [A]);
1747
- }))).then((r) => this._createGeometry(r.geometry));
1748
- return o.catch(() => !0).then(() => {
1749
- t && i && this._releaseTask(t, i);
1750
- }), HA.set(A, {
1751
- key: a,
1752
- promise: o
1753
- }), o;
1754
- }
1755
- _createGeometry(A) {
1756
- const e = new ne();
1757
- A.index && e.setIndex(new X(A.index.array, 1));
1758
- for (let a = 0; a < A.attributes.length; a++) {
1759
- const t = A.attributes[a], i = t.name, s = t.array, o = t.itemSize, r = new X(s, o);
1760
- i === "color" && (this._assignVertexColorSpace(r, t.vertexColorSpace), r.normalized = !(s instanceof Float32Array)), e.setAttribute(i, r);
1761
- }
1762
- return e;
1763
- }
1764
- _assignVertexColorSpace(A, e) {
1765
- if (e !== AA) return;
1766
- const a = new rA();
1767
- for (let t = 0, i = A.count; t < i; t++)
1768
- a.fromBufferAttribute(A, t).convertSRGBToLinear(), A.setXYZ(t, a.r, a.g, a.b);
1769
- }
1770
- _loadLibrary(A, e) {
1771
- const a = new aA(this.manager);
1772
- return a.setPath(this.decoderPath), a.setResponseType(e), a.setWithCredentials(this.withCredentials), new Promise((t, i) => {
1773
- a.load(A, t, void 0, i);
1774
- });
1775
- }
1776
- preload() {
1777
- return this._initDecoder(), this;
1778
- }
1779
- _initDecoder() {
1780
- if (this.decoderPending) return this.decoderPending;
1781
- const A = typeof WebAssembly != "object" || this.decoderConfig.type === "js", e = [];
1782
- return A ? e.push(this._loadLibrary("draco_decoder.js", "text")) : (e.push(this._loadLibrary("draco_wasm_wrapper.js", "text")), e.push(this._loadLibrary("draco_decoder.wasm", "arraybuffer"))), this.decoderPending = Promise.all(e).then((a) => {
1783
- const t = a[0];
1784
- A || (this.decoderConfig.wasmBinary = a[1]);
1785
- const i = Xa.toString(), s = [
1786
- "/* draco decoder */",
1787
- t,
1788
- "",
1789
- "/* worker */",
1790
- i.substring(i.indexOf("{") + 1, i.lastIndexOf("}"))
1791
- ].join(`
1792
- `);
1793
- this.workerSourceURL = URL.createObjectURL(new Blob([s]));
1794
- }), this.decoderPending;
1795
- }
1796
- _getWorker(A, e) {
1797
- return this._initDecoder().then(() => {
1798
- if (this.workerPool.length < this.workerLimit) {
1799
- const t = new Worker(this.workerSourceURL);
1800
- t._callbacks = {}, t._taskCosts = {}, t._taskLoad = 0, t.postMessage({ type: "init", decoderConfig: this.decoderConfig }), t.onmessage = function(i) {
1801
- const s = i.data;
1802
- switch (s.type) {
1803
- case "decode":
1804
- t._callbacks[s.id].resolve(s);
1805
- break;
1806
- case "error":
1807
- t._callbacks[s.id].reject(s);
1808
- break;
1809
- default:
1810
- console.error('THREE.DRACOLoader: Unexpected message, "' + s.type + '"');
1811
- }
1812
- }, this.workerPool.push(t);
1813
- } else
1814
- this.workerPool.sort(function(t, i) {
1815
- return t._taskLoad > i._taskLoad ? -1 : 1;
1816
- });
1817
- const a = this.workerPool[this.workerPool.length - 1];
1818
- return a._taskCosts[A] = e, a._taskLoad += e, a;
1819
- });
1820
- }
1821
- _releaseTask(A, e) {
1822
- A._taskLoad -= A._taskCosts[e], delete A._callbacks[e], delete A._taskCosts[e];
1823
- }
1824
- debug() {
1825
- console.log("Task load: ", this.workerPool.map((A) => A._taskLoad));
1826
- }
1827
- dispose() {
1828
- for (let A = 0; A < this.workerPool.length; ++A)
1829
- this.workerPool[A].terminate();
1830
- return this.workerPool.length = 0, this.workerSourceURL !== "" && URL.revokeObjectURL(this.workerSourceURL), this;
1831
- }
1832
- }
1833
- function Xa() {
1834
- let n, A;
1835
- onmessage = function(s) {
1836
- const o = s.data;
1837
- switch (o.type) {
1838
- case "init":
1839
- n = o.decoderConfig, A = new Promise(function(I) {
1840
- n.onModuleLoaded = function(g) {
1841
- I({ draco: g });
1842
- }, DracoDecoderModule(n);
1843
- });
1844
- break;
1845
- case "decode":
1846
- const r = o.buffer, c = o.taskConfig;
1847
- A.then((I) => {
1848
- const g = I.draco, B = new g.Decoder();
1849
- try {
1850
- const C = e(g, B, new Int8Array(r), c), f = C.attributes.map((d) => d.array.buffer);
1851
- C.index && f.push(C.index.array.buffer), self.postMessage({ type: "decode", id: o.id, geometry: C }, f);
1852
- } catch (C) {
1853
- console.error(C), self.postMessage({ type: "error", id: o.id, error: C.message });
1854
- } finally {
1855
- g.destroy(B);
1856
- }
1857
- });
1858
- break;
1859
- }
1860
- };
1861
- function e(s, o, r, c) {
1862
- const I = c.attributeIDs, g = c.attributeTypes;
1863
- let B, C;
1864
- const f = o.GetEncodedGeometryType(r);
1865
- if (f === s.TRIANGULAR_MESH)
1866
- B = new s.Mesh(), C = o.DecodeArrayToMesh(r, r.byteLength, B);
1867
- else if (f === s.POINT_CLOUD)
1868
- B = new s.PointCloud(), C = o.DecodeArrayToPointCloud(r, r.byteLength, B);
1869
- else
1870
- throw new Error("THREE.DRACOLoader: Unexpected geometry type.");
1871
- if (!C.ok() || B.ptr === 0)
1872
- throw new Error("THREE.DRACOLoader: Decoding failed: " + C.error_msg());
1873
- const d = { index: null, attributes: [] };
1874
- for (const p in I) {
1875
- const E = self[g[p]];
1876
- let l, h;
1877
- if (c.useUniqueIDs)
1878
- h = I[p], l = o.GetAttributeByUniqueId(B, h);
1879
- else {
1880
- if (h = o.GetAttributeId(B, s[I[p]]), h === -1) continue;
1881
- l = o.GetAttribute(B, h);
1882
- }
1883
- const u = t(s, o, B, p, E, l);
1884
- p === "color" && (u.vertexColorSpace = c.vertexColorSpace), d.attributes.push(u);
1885
- }
1886
- return f === s.TRIANGULAR_MESH && (d.index = a(s, o, B)), s.destroy(B), d;
1887
- }
1888
- function a(s, o, r) {
1889
- const I = r.num_faces() * 3, g = I * 4, B = s._malloc(g);
1890
- o.GetTrianglesUInt32Array(r, g, B);
1891
- const C = new Uint32Array(s.HEAPF32.buffer, B, I).slice();
1892
- return s._free(B), { array: C, itemSize: 1 };
1893
- }
1894
- function t(s, o, r, c, I, g) {
1895
- const B = g.num_components(), f = r.num_points() * B, d = f * I.BYTES_PER_ELEMENT, p = i(s, I), E = s._malloc(d);
1896
- o.GetAttributeDataArrayForAllPoints(r, g, p, d, E);
1897
- const l = new I(s.HEAPF32.buffer, E, f).slice();
1898
- return s._free(E), {
1899
- name: c,
1900
- array: l,
1901
- itemSize: B
1902
- };
1903
- }
1904
- function i(s, o) {
1905
- switch (o) {
1906
- case Float32Array:
1907
- return s.DT_FLOAT32;
1908
- case Int8Array:
1909
- return s.DT_INT8;
1910
- case Int16Array:
1911
- return s.DT_INT16;
1912
- case Int32Array:
1913
- return s.DT_INT32;
1914
- case Uint8Array:
1915
- return s.DT_UINT8;
1916
- case Uint16Array:
1917
- return s.DT_UINT16;
1918
- case Uint32Array:
1919
- return s.DT_UINT32;
1920
- }
1921
- }
1922
- }
1923
- class Za {
1924
- constructor(A = 4) {
1925
- this.pool = A, this.queue = [], this.workers = [], this.workersResolve = [], this.workerStatus = 0;
1926
- }
1927
- _initWorker(A) {
1928
- if (!this.workers[A]) {
1929
- const e = this.workerCreator();
1930
- e.addEventListener("message", this._onMessage.bind(this, A)), this.workers[A] = e;
1931
- }
1932
- }
1933
- _getIdleWorker() {
1934
- for (let A = 0; A < this.pool; A++)
1935
- if (!(this.workerStatus & 1 << A)) return A;
1936
- return -1;
1937
- }
1938
- _onMessage(A, e) {
1939
- const a = this.workersResolve[A];
1940
- if (a && a(e), this.queue.length) {
1941
- const { resolve: t, msg: i, transfer: s } = this.queue.shift();
1942
- this.workersResolve[A] = t, this.workers[A].postMessage(i, s);
1943
- } else
1944
- this.workerStatus ^= 1 << A;
1945
- }
1946
- setWorkerCreator(A) {
1947
- this.workerCreator = A;
1948
- }
1949
- setWorkerLimit(A) {
1950
- this.pool = A;
1951
- }
1952
- postMessage(A, e) {
1953
- return new Promise((a) => {
1954
- const t = this._getIdleWorker();
1955
- t !== -1 ? (this._initWorker(t), this.workerStatus |= 1 << t, this.workersResolve[t] = a, this.workers[t].postMessage(A, e)) : this.queue.push({ resolve: a, msg: A, transfer: e });
1956
- });
1957
- }
1958
- dispose() {
1959
- this.workers.forEach((A) => A.terminate()), this.workersResolve.length = 0, this.workers.length = 0, this.queue.length = 0, this.workerStatus = 0;
1960
- }
1961
- }
1962
- const $a = 0, Re = 2, Ai = 1, Fe = 2, ei = 0, ti = 1, ai = 10, ii = 0, Je = 9, je = 15, Ke = 16, Pe = 22, Ye = 37, We = 43, Ve = 76, ze = 83, Xe = 97, Ze = 100, $e = 103, At = 109, et = 165, tt = 166;
1963
- class si {
1964
- constructor() {
1965
- this.vkFormat = 0, this.typeSize = 1, this.pixelWidth = 0, this.pixelHeight = 0, this.pixelDepth = 0, this.layerCount = 0, this.faceCount = 1, this.supercompressionScheme = 0, this.levels = [], this.dataFormatDescriptor = [{ vendorId: 0, descriptorType: 0, descriptorBlockSize: 0, versionNumber: 2, colorModel: 0, colorPrimaries: 1, transferFunction: 2, flags: 0, texelBlockDimension: [0, 0, 0, 0], bytesPlane: [0, 0, 0, 0, 0, 0, 0, 0], samples: [] }], this.keyValue = {}, this.globalData = null;
1966
- }
1967
- }
1968
- class dA {
1969
- constructor(A, e, a, t) {
1970
- this._dataView = new DataView(A.buffer, A.byteOffset + e, a), this._littleEndian = t, this._offset = 0;
1971
- }
1972
- _nextUint8() {
1973
- const A = this._dataView.getUint8(this._offset);
1974
- return this._offset += 1, A;
1975
- }
1976
- _nextUint16() {
1977
- const A = this._dataView.getUint16(this._offset, this._littleEndian);
1978
- return this._offset += 2, A;
1979
- }
1980
- _nextUint32() {
1981
- const A = this._dataView.getUint32(this._offset, this._littleEndian);
1982
- return this._offset += 4, A;
1983
- }
1984
- _nextUint64() {
1985
- const A = this._dataView.getUint32(this._offset, this._littleEndian) + 4294967296 * this._dataView.getUint32(this._offset + 4, this._littleEndian);
1986
- return this._offset += 8, A;
1987
- }
1988
- _nextInt32() {
1989
- const A = this._dataView.getInt32(this._offset, this._littleEndian);
1990
- return this._offset += 4, A;
1991
- }
1992
- _skip(A) {
1993
- return this._offset += A, this;
1994
- }
1995
- _scan(A, e = 0) {
1996
- const a = this._offset;
1997
- let t = 0;
1998
- for (; this._dataView.getUint8(this._offset) !== e && t < A; ) t++, this._offset++;
1999
- return t < A && this._offset++, new Uint8Array(this._dataView.buffer, this._dataView.byteOffset + a, t);
2000
- }
2001
- }
2002
- const N = [171, 75, 84, 88, 32, 50, 48, 187, 13, 10, 26, 10];
2003
- function Se(n) {
2004
- return typeof TextDecoder < "u" ? new TextDecoder().decode(n) : Buffer.from(n).toString("utf8");
2005
- }
2006
- function ni(n) {
2007
- const A = new Uint8Array(n.buffer, n.byteOffset, N.length);
2008
- if (A[0] !== N[0] || A[1] !== N[1] || A[2] !== N[2] || A[3] !== N[3] || A[4] !== N[4] || A[5] !== N[5] || A[6] !== N[6] || A[7] !== N[7] || A[8] !== N[8] || A[9] !== N[9] || A[10] !== N[10] || A[11] !== N[11]) throw new Error("Missing KTX 2.0 identifier.");
2009
- const e = new si(), a = 17 * Uint32Array.BYTES_PER_ELEMENT, t = new dA(n, N.length, a, !0);
2010
- e.vkFormat = t._nextUint32(), e.typeSize = t._nextUint32(), e.pixelWidth = t._nextUint32(), e.pixelHeight = t._nextUint32(), e.pixelDepth = t._nextUint32(), e.layerCount = t._nextUint32(), e.faceCount = t._nextUint32();
2011
- const i = t._nextUint32();
2012
- e.supercompressionScheme = t._nextUint32();
2013
- const s = t._nextUint32(), o = t._nextUint32(), r = t._nextUint32(), c = t._nextUint32(), I = t._nextUint64(), g = t._nextUint64(), B = new dA(n, N.length + a, 3 * i * 8, !0);
2014
- for (let T = 0; T < i; T++) e.levels.push({ levelData: new Uint8Array(n.buffer, n.byteOffset + B._nextUint64(), B._nextUint64()), uncompressedByteLength: B._nextUint64() });
2015
- const C = new dA(n, s, o, !0), f = { vendorId: C._skip(4)._nextUint16(), descriptorType: C._nextUint16(), versionNumber: C._nextUint16(), descriptorBlockSize: C._nextUint16(), colorModel: C._nextUint8(), colorPrimaries: C._nextUint8(), transferFunction: C._nextUint8(), flags: C._nextUint8(), texelBlockDimension: [C._nextUint8(), C._nextUint8(), C._nextUint8(), C._nextUint8()], bytesPlane: [C._nextUint8(), C._nextUint8(), C._nextUint8(), C._nextUint8(), C._nextUint8(), C._nextUint8(), C._nextUint8(), C._nextUint8()], samples: [] }, d = (f.descriptorBlockSize / 4 - 6) / 4;
2016
- for (let T = 0; T < d; T++) {
2017
- const U = { bitOffset: C._nextUint16(), bitLength: C._nextUint8(), channelType: C._nextUint8(), samplePosition: [C._nextUint8(), C._nextUint8(), C._nextUint8(), C._nextUint8()], sampleLower: -1 / 0, sampleUpper: 1 / 0 };
2018
- 64 & U.channelType ? (U.sampleLower = C._nextInt32(), U.sampleUpper = C._nextInt32()) : (U.sampleLower = C._nextUint32(), U.sampleUpper = C._nextUint32()), f.samples[T] = U;
2019
- }
2020
- e.dataFormatDescriptor.length = 0, e.dataFormatDescriptor.push(f);
2021
- const p = new dA(n, r, c, !0);
2022
- for (; p._offset < c; ) {
2023
- const T = p._nextUint32(), U = p._scan(T), _ = Se(U), J = p._scan(T - U.byteLength);
2024
- e.keyValue[_] = _.match(/^ktx/i) ? Se(J) : J, p._offset % 4 && p._skip(4 - p._offset % 4);
2025
- }
2026
- if (g <= 0) return e;
2027
- const E = new dA(n, I, g, !0), l = E._nextUint16(), h = E._nextUint16(), u = E._nextUint32(), k = E._nextUint32(), F = E._nextUint32(), G = E._nextUint32(), M = [];
2028
- for (let T = 0; T < i; T++) M.push({ imageFlags: E._nextUint32(), rgbSliceByteOffset: E._nextUint32(), rgbSliceByteLength: E._nextUint32(), alphaSliceByteOffset: E._nextUint32(), alphaSliceByteLength: E._nextUint32() });
2029
- const b = I + E._offset, Q = b + u, m = Q + k, D = m + F, w = new Uint8Array(n.buffer, n.byteOffset + b, u), S = new Uint8Array(n.buffer, n.byteOffset + Q, k), R = new Uint8Array(n.buffer, n.byteOffset + m, F), x = new Uint8Array(n.buffer, n.byteOffset + D, G);
2030
- return e.globalData = { endpointCount: l, selectorCount: h, imageDescs: M, endpointsData: w, selectorsData: S, tablesData: R, extendedData: x }, e;
2031
- }
2032
- let OA, eA, Ae;
2033
- const vA = { env: { emscripten_notify_memory_growth: function(n) {
2034
- Ae = new Uint8Array(eA.exports.memory.buffer);
2035
- } } };
2036
- class oi {
2037
- init() {
2038
- return OA || (OA = typeof fetch < "u" ? fetch("data:application/wasm;base64," + ye).then((A) => A.arrayBuffer()).then((A) => WebAssembly.instantiate(A, vA)).then(this._init) : WebAssembly.instantiate(Buffer.from(ye, "base64"), vA).then(this._init), OA);
2039
- }
2040
- _init(A) {
2041
- eA = A.instance, vA.env.emscripten_notify_memory_growth(0);
2042
- }
2043
- decode(A, e = 0) {
2044
- if (!eA) throw new Error("ZSTDDecoder: Await .init() before decoding.");
2045
- const a = A.byteLength, t = eA.exports.malloc(a);
2046
- Ae.set(A, t), e = e || Number(eA.exports.ZSTD_findDecompressedSize(t, a));
2047
- const i = eA.exports.malloc(e), s = eA.exports.ZSTD_decompress(i, e, t, a), o = Ae.slice(i, i + s);
2048
- return eA.exports.free(t), eA.exports.free(i), o;
2049
- }
2050
- }
2051
- const ye = "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IAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigC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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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", JA = /* @__PURE__ */ new WeakMap();
2052
- let jA = 0, KA;
2053
- class $ extends TA {
2054
- constructor(A) {
2055
- super(A), this.transcoderPath = "", this.transcoderBinary = null, this.transcoderPending = null, this.workerPool = new Za(), this.workerSourceURL = "", this.workerConfig = null, typeof MSC_TRANSCODER < "u" && console.warn(
2056
- 'THREE.KTX2Loader: Please update to latest "basis_transcoder". "msc_basis_transcoder" is no longer supported in three.js r125+.'
2057
- );
2058
- }
2059
- setTranscoderPath(A) {
2060
- return this.transcoderPath = A, this;
2061
- }
2062
- setWorkerLimit(A) {
2063
- return this.workerPool.setWorkerLimit(A), this;
2064
- }
2065
- async detectSupportAsync(A) {
2066
- return this.workerConfig = {
2067
- astcSupported: await A.hasFeatureAsync("texture-compression-astc"),
2068
- etc1Supported: await A.hasFeatureAsync("texture-compression-etc1"),
2069
- etc2Supported: await A.hasFeatureAsync("texture-compression-etc2"),
2070
- dxtSupported: await A.hasFeatureAsync("texture-compression-bc"),
2071
- bptcSupported: await A.hasFeatureAsync("texture-compression-bptc"),
2072
- pvrtcSupported: await A.hasFeatureAsync("texture-compression-pvrtc")
2073
- }, this;
2074
- }
2075
- detectSupport(A) {
2076
- return A.isWebGPURenderer === !0 ? this.workerConfig = {
2077
- astcSupported: A.hasFeature("texture-compression-astc"),
2078
- etc1Supported: A.hasFeature("texture-compression-etc1"),
2079
- etc2Supported: A.hasFeature("texture-compression-etc2"),
2080
- dxtSupported: A.hasFeature("texture-compression-bc"),
2081
- bptcSupported: A.hasFeature("texture-compression-bptc"),
2082
- pvrtcSupported: A.hasFeature("texture-compression-pvrtc")
2083
- } : this.workerConfig = {
2084
- astcSupported: A.extensions.has("WEBGL_compressed_texture_astc"),
2085
- etc1Supported: A.extensions.has("WEBGL_compressed_texture_etc1"),
2086
- etc2Supported: A.extensions.has("WEBGL_compressed_texture_etc"),
2087
- dxtSupported: A.extensions.has("WEBGL_compressed_texture_s3tc"),
2088
- bptcSupported: A.extensions.has("EXT_texture_compression_bptc"),
2089
- pvrtcSupported: A.extensions.has("WEBGL_compressed_texture_pvrtc") || A.extensions.has("WEBKIT_WEBGL_compressed_texture_pvrtc")
2090
- }, this;
2091
- }
2092
- init() {
2093
- if (!this.transcoderPending) {
2094
- const A = new aA(this.manager);
2095
- A.setPath(this.transcoderPath), A.setWithCredentials(this.withCredentials);
2096
- const e = A.loadAsync("basis_transcoder.js"), a = new aA(this.manager);
2097
- a.setPath(this.transcoderPath), a.setResponseType("arraybuffer"), a.setWithCredentials(this.withCredentials);
2098
- const t = a.loadAsync("basis_transcoder.wasm");
2099
- this.transcoderPending = Promise.all([e, t]).then(([i, s]) => {
2100
- const o = $.BasisWorker.toString(), r = [
2101
- "/* constants */",
2102
- "let _EngineFormat = " + JSON.stringify($.EngineFormat),
2103
- "let _TranscoderFormat = " + JSON.stringify($.TranscoderFormat),
2104
- "let _BasisFormat = " + JSON.stringify($.BasisFormat),
2105
- "/* basis_transcoder.js */",
2106
- i,
2107
- "/* worker */",
2108
- o.substring(o.indexOf("{") + 1, o.lastIndexOf("}"))
2109
- ].join(`
2110
- `);
2111
- this.workerSourceURL = URL.createObjectURL(new Blob([r])), this.transcoderBinary = s, this.workerPool.setWorkerCreator(() => {
2112
- const c = new Worker(this.workerSourceURL), I = this.transcoderBinary.slice(0);
2113
- return c.postMessage({ type: "init", config: this.workerConfig, transcoderBinary: I }, [I]), c;
2114
- });
2115
- }), jA > 0 && console.warn(
2116
- "THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances."
2117
- ), jA++;
2118
- }
2119
- return this.transcoderPending;
2120
- }
2121
- load(A, e, a, t) {
2122
- if (this.workerConfig === null)
2123
- throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");
2124
- const i = new aA(this.manager);
2125
- i.setResponseType("arraybuffer"), i.setWithCredentials(this.withCredentials), i.load(A, (s) => {
2126
- this.parse(s, e, t);
2127
- }, a, t);
2128
- }
2129
- parse(A, e, a) {
2130
- if (this.workerConfig === null)
2131
- throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");
2132
- if (JA.has(A))
2133
- return JA.get(A).promise.then(e).catch(a);
2134
- this._createTexture(A).then((t) => e ? e(t) : null).catch(a);
2135
- }
2136
- _createTextureFrom(A, e) {
2137
- const { faces: a, width: t, height: i, format: s, type: o, error: r, dfdFlags: c } = A;
2138
- if (o === "error") return Promise.reject(r);
2139
- let I;
2140
- if (e.faceCount === 6)
2141
- I = new Xt(a, s, K);
2142
- else {
2143
- const g = a[0].mipmaps;
2144
- I = e.layerCount > 1 ? new Zt(g, t, i, e.layerCount, s, K) : new qe(g, t, i, s, K);
2145
- }
2146
- return I.minFilter = a[0].mipmaps.length === 1 ? GA : se, I.magFilter = GA, I.generateMipmaps = !1, I.needsUpdate = !0, I.colorSpace = at(e), I.premultiplyAlpha = !!(c & Ai), I;
2147
- }
2148
- /**
2149
- * @param {ArrayBuffer} buffer
2150
- * @param {object?} config
2151
- * @return {Promise<CompressedTexture|CompressedArrayTexture|DataTexture|Data3DTexture>}
2152
- */
2153
- async _createTexture(A, e = {}) {
2154
- const a = ni(new Uint8Array(A));
2155
- if (a.vkFormat !== ii)
2156
- return ci(a);
2157
- const t = e, i = this.init().then(() => this.workerPool.postMessage({ type: "transcode", buffer: A, taskConfig: t }, [A])).then((s) => this._createTextureFrom(s.data, a));
2158
- return JA.set(A, { promise: i }), i;
2159
- }
2160
- dispose() {
2161
- return this.workerPool.dispose(), this.workerSourceURL && URL.revokeObjectURL(this.workerSourceURL), jA--, this;
2162
- }
2163
- }
2164
- $.BasisFormat = {
2165
- ETC1S: 0,
2166
- UASTC_4x4: 1
2167
- };
2168
- $.TranscoderFormat = {
2169
- ETC1: 0,
2170
- ETC2: 1,
2171
- BC1: 2,
2172
- BC3: 3,
2173
- BC4: 4,
2174
- BC5: 5,
2175
- BC7_M6_OPAQUE_ONLY: 6,
2176
- BC7_M5: 7,
2177
- PVRTC1_4_RGB: 8,
2178
- PVRTC1_4_RGBA: 9,
2179
- ASTC_4x4: 10,
2180
- ATC_RGB: 11,
2181
- ATC_RGBA_INTERPOLATED_ALPHA: 12,
2182
- RGBA32: 13,
2183
- RGB565: 14,
2184
- BGR565: 15,
2185
- RGBA4444: 16
2186
- };
2187
- $.EngineFormat = {
2188
- RGBAFormat: bA,
2189
- RGBA_ASTC_4x4_Format: Ia,
2190
- RGBA_BPTC_Format: ga,
2191
- RGBA_ETC2_EAC_Format: ca,
2192
- RGBA_PVRTC_4BPPV1_Format: ra,
2193
- RGBA_S3TC_DXT5_Format: oa,
2194
- RGB_ETC1_Format: na,
2195
- RGB_ETC2_Format: sa,
2196
- RGB_PVRTC_4BPPV1_Format: ia,
2197
- RGBA_S3TC_DXT1_Format: aa
2198
- };
2199
- $.BasisWorker = function() {
2200
- let n, A, e;
2201
- const a = _EngineFormat, t = _TranscoderFormat, i = _BasisFormat;
2202
- self.addEventListener("message", function(f) {
2203
- const d = f.data;
2204
- switch (d.type) {
2205
- case "init":
2206
- n = d.config, s(d.transcoderBinary);
2207
- break;
2208
- case "transcode":
2209
- A.then(() => {
2210
- try {
2211
- const { faces: p, buffers: E, width: l, height: h, hasAlpha: u, format: k, dfdFlags: F } = o(d.buffer);
2212
- self.postMessage({ type: "transcode", id: d.id, faces: p, width: l, height: h, hasAlpha: u, format: k, dfdFlags: F }, E);
2213
- } catch (p) {
2214
- console.error(p), self.postMessage({ type: "error", id: d.id, error: p.message });
2215
- }
2216
- });
2217
- break;
2218
- }
2219
- });
2220
- function s(f) {
2221
- A = new Promise((d) => {
2222
- e = { wasmBinary: f, onRuntimeInitialized: d }, BASIS(e);
2223
- }).then(() => {
2224
- e.initializeBasis(), e.KTX2File === void 0 && console.warn("THREE.KTX2Loader: Please update Basis Universal transcoder.");
2225
- });
2226
- }
2227
- function o(f) {
2228
- const d = new e.KTX2File(new Uint8Array(f));
2229
- function p() {
2230
- d.close(), d.delete();
2231
- }
2232
- if (!d.isValid())
2233
- throw p(), new Error("THREE.KTX2Loader: Invalid or unsupported .ktx2 file");
2234
- const E = d.isUASTC() ? i.UASTC_4x4 : i.ETC1S, l = d.getWidth(), h = d.getHeight(), u = d.getLayers() || 1, k = d.getLevels(), F = d.getFaces(), G = d.getHasAlpha(), M = d.getDFDFlags(), { transcoderFormat: b, engineFormat: Q } = g(E, l, h, G);
2235
- if (!l || !h || !k)
2236
- throw p(), new Error("THREE.KTX2Loader: Invalid texture");
2237
- if (!d.startTranscoding())
2238
- throw p(), new Error("THREE.KTX2Loader: .startTranscoding failed");
2239
- const m = [], D = [];
2240
- for (let w = 0; w < F; w++) {
2241
- const S = [];
2242
- for (let R = 0; R < k; R++) {
2243
- const x = [];
2244
- let T, U;
2245
- for (let J = 0; J < u; J++) {
2246
- const iA = d.getImageLevelInfo(R, J, w);
2247
- w === 0 && R === 0 && J === 0 && (iA.origWidth % 4 !== 0 || iA.origHeight % 4 !== 0) && console.warn("THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions."), k > 1 ? (T = iA.origWidth, U = iA.origHeight) : (T = iA.width, U = iA.height);
2248
- const IA = new Uint8Array(d.getImageTranscodedSizeInBytes(R, J, 0, b));
2249
- if (!d.transcodeImage(IA, R, J, w, b, 0, -1, -1))
2250
- throw p(), new Error("THREE.KTX2Loader: .transcodeImage failed.");
2251
- x.push(IA);
2252
- }
2253
- const _ = C(x);
2254
- S.push({ data: _, width: T, height: U }), D.push(_.buffer);
2255
- }
2256
- m.push({ mipmaps: S, width: l, height: h, format: Q });
2257
- }
2258
- return p(), { faces: m, buffers: D, width: l, height: h, hasAlpha: G, format: Q, dfdFlags: M };
2259
- }
2260
- const r = [
2261
- {
2262
- if: "astcSupported",
2263
- basisFormat: [i.UASTC_4x4],
2264
- transcoderFormat: [t.ASTC_4x4, t.ASTC_4x4],
2265
- engineFormat: [a.RGBA_ASTC_4x4_Format, a.RGBA_ASTC_4x4_Format],
2266
- priorityETC1S: 1 / 0,
2267
- priorityUASTC: 1,
2268
- needsPowerOfTwo: !1
2269
- },
2270
- {
2271
- if: "bptcSupported",
2272
- basisFormat: [i.ETC1S, i.UASTC_4x4],
2273
- transcoderFormat: [t.BC7_M5, t.BC7_M5],
2274
- engineFormat: [a.RGBA_BPTC_Format, a.RGBA_BPTC_Format],
2275
- priorityETC1S: 3,
2276
- priorityUASTC: 2,
2277
- needsPowerOfTwo: !1
2278
- },
2279
- {
2280
- if: "dxtSupported",
2281
- basisFormat: [i.ETC1S, i.UASTC_4x4],
2282
- transcoderFormat: [t.BC1, t.BC3],
2283
- engineFormat: [a.RGBA_S3TC_DXT1_Format, a.RGBA_S3TC_DXT5_Format],
2284
- priorityETC1S: 4,
2285
- priorityUASTC: 5,
2286
- needsPowerOfTwo: !1
2287
- },
2288
- {
2289
- if: "etc2Supported",
2290
- basisFormat: [i.ETC1S, i.UASTC_4x4],
2291
- transcoderFormat: [t.ETC1, t.ETC2],
2292
- engineFormat: [a.RGB_ETC2_Format, a.RGBA_ETC2_EAC_Format],
2293
- priorityETC1S: 1,
2294
- priorityUASTC: 3,
2295
- needsPowerOfTwo: !1
2296
- },
2297
- {
2298
- if: "etc1Supported",
2299
- basisFormat: [i.ETC1S, i.UASTC_4x4],
2300
- transcoderFormat: [t.ETC1],
2301
- engineFormat: [a.RGB_ETC1_Format],
2302
- priorityETC1S: 2,
2303
- priorityUASTC: 4,
2304
- needsPowerOfTwo: !1
2305
- },
2306
- {
2307
- if: "pvrtcSupported",
2308
- basisFormat: [i.ETC1S, i.UASTC_4x4],
2309
- transcoderFormat: [t.PVRTC1_4_RGB, t.PVRTC1_4_RGBA],
2310
- engineFormat: [a.RGB_PVRTC_4BPPV1_Format, a.RGBA_PVRTC_4BPPV1_Format],
2311
- priorityETC1S: 5,
2312
- priorityUASTC: 6,
2313
- needsPowerOfTwo: !0
2314
- }
2315
- ], c = r.sort(function(f, d) {
2316
- return f.priorityETC1S - d.priorityETC1S;
2317
- }), I = r.sort(function(f, d) {
2318
- return f.priorityUASTC - d.priorityUASTC;
2319
- });
2320
- function g(f, d, p, E) {
2321
- let l, h;
2322
- const u = f === i.ETC1S ? c : I;
2323
- for (let k = 0; k < u.length; k++) {
2324
- const F = u[k];
2325
- if (n[F.if] && F.basisFormat.includes(f) && !(E && F.transcoderFormat.length < 2) && !(F.needsPowerOfTwo && !(B(d) && B(p))))
2326
- return l = F.transcoderFormat[E ? 1 : 0], h = F.engineFormat[E ? 1 : 0], { transcoderFormat: l, engineFormat: h };
2327
- }
2328
- return console.warn("THREE.KTX2Loader: No suitable compressed texture format found. Decoding to RGBA32."), l = t.RGBA32, h = a.RGBAFormat, { transcoderFormat: l, engineFormat: h };
2329
- }
2330
- function B(f) {
2331
- return f <= 2 ? !0 : (f & f - 1) === 0 && f !== 0;
2332
- }
2333
- function C(f) {
2334
- if (f.length === 1) return f[0];
2335
- let d = 0;
2336
- for (let l = 0; l < f.length; l++) {
2337
- const h = f[l];
2338
- d += h.byteLength;
2339
- }
2340
- const p = new Uint8Array(d);
2341
- let E = 0;
2342
- for (let l = 0; l < f.length; l++) {
2343
- const h = f[l];
2344
- p.set(h, E), E += h.byteLength;
2345
- }
2346
- return p;
2347
- }
2348
- };
2349
- const ri = /* @__PURE__ */ new Set([bA, uA, pA]), PA = {
2350
- [At]: bA,
2351
- [Xe]: bA,
2352
- [Ye]: bA,
2353
- [We]: bA,
2354
- [$e]: uA,
2355
- [ze]: uA,
2356
- [Ke]: uA,
2357
- [Pe]: uA,
2358
- [Ze]: pA,
2359
- [Ve]: pA,
2360
- [je]: pA,
2361
- [Je]: pA,
2362
- [tt]: he,
2363
- [et]: he
2364
- }, YA = {
2365
- [At]: FA,
2366
- [Xe]: RA,
2367
- [Ye]: K,
2368
- [We]: K,
2369
- [$e]: FA,
2370
- [ze]: RA,
2371
- [Ke]: K,
2372
- [Pe]: K,
2373
- [Ze]: FA,
2374
- [Ve]: RA,
2375
- [je]: K,
2376
- [Je]: K,
2377
- [tt]: K,
2378
- [et]: K
2379
- };
2380
- async function ci(n) {
2381
- const { vkFormat: A } = n;
2382
- if (PA[A] === void 0)
2383
- throw new Error("THREE.KTX2Loader: Unsupported vkFormat.");
2384
- let e;
2385
- n.supercompressionScheme === Re && (KA || (KA = new Promise(async (i) => {
2386
- const s = new oi();
2387
- await s.init(), i(s);
2388
- })), e = await KA);
2389
- const a = [];
2390
- for (let i = 0; i < n.levels.length; i++) {
2391
- const s = Math.max(1, n.pixelWidth >> i), o = Math.max(1, n.pixelHeight >> i), r = n.pixelDepth ? Math.max(1, n.pixelDepth >> i) : 0, c = n.levels[i];
2392
- let I;
2393
- if (n.supercompressionScheme === $a)
2394
- I = c.levelData;
2395
- else if (n.supercompressionScheme === Re)
2396
- I = e.decode(c.levelData, c.uncompressedByteLength);
2397
- else
2398
- throw new Error("THREE.KTX2Loader: Unsupported supercompressionScheme.");
2399
- let g;
2400
- YA[A] === FA ? g = new Float32Array(
2401
- I.buffer,
2402
- I.byteOffset,
2403
- I.byteLength / Float32Array.BYTES_PER_ELEMENT
2404
- ) : YA[A] === RA ? g = new Uint16Array(
2405
- I.buffer,
2406
- I.byteOffset,
2407
- I.byteLength / Uint16Array.BYTES_PER_ELEMENT
2408
- ) : g = I, a.push({
2409
- data: g,
2410
- width: s,
2411
- height: o,
2412
- depth: r
2413
- });
2414
- }
2415
- let t;
2416
- if (ri.has(PA[A]))
2417
- t = n.pixelDepth === 0 ? new ea(a[0].data, n.pixelWidth, n.pixelHeight) : new ta(a[0].data, n.pixelWidth, n.pixelHeight, n.pixelDepth);
2418
- else {
2419
- if (n.pixelDepth > 0) throw new Error("THREE.KTX2Loader: Unsupported pixelDepth.");
2420
- t = new qe(a, n.pixelWidth, n.pixelHeight);
2421
- }
2422
- return t.mipmaps = a, t.type = YA[A], t.format = PA[A], t.colorSpace = at(n), t.needsUpdate = !0, Promise.resolve(t);
2423
- }
2424
- function at(n) {
2425
- const A = n.dataFormatDescriptor[0];
2426
- return A.colorPrimaries === ti ? A.transferFunction === Fe ? AA : Y : A.colorPrimaries === ai ? A.transferFunction === Fe ? $t : Aa : A.colorPrimaries === ei ? oA : (console.warn(`THREE.KTX2Loader: Unsupported color primaries, "${A.colorPrimaries}"`), oA);
2427
- }
2428
- var gi = function() {
2429
- var n = "b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuikqbeeedddillviebeoweuec:q;iekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbol79IV9Rbrq:P8Yqdbk;3sezu8Jjjjjbcj;eb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Radz1jjjbhwcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhDcbhqinaqae9pmeaDaeaq9RaqaDfae6Egkcsfgocl4cifcd4hxdndndndnaoc9WGgmTmbcbhPcehsawcjdfhzalhHinaraH9Rax6midnaraHaxfgl9RcK6mbczhoinawcj;cbfaogifgoc9WfhOdndndndndnaHaic9WfgAco4fRbbaAci4coG4ciGPlbedibkaO9cb83ibaOcwf9cb83ibxikaOalRblalRbbgAco4gCaCciSgCE86bbaocGfalclfaCfgORbbaAcl4ciGgCaCciSgCE86bbaocVfaOaCfgORbbaAcd4ciGgCaCciSgCE86bbaoc7faOaCfgORbbaAciGgAaAciSgAE86bbaoctfaOaAfgARbbalRbegOco4gCaCciSgCE86bbaoc91faAaCfgARbbaOcl4ciGgCaCciSgCE86bbaoc4faAaCfgARbbaOcd4ciGgCaCciSgCE86bbaoc93faAaCfgARbbaOciGgOaOciSgOE86bbaoc94faAaOfgARbbalRbdgOco4gCaCciSgCE86bbaoc95faAaCfgARbbaOcl4ciGgCaCciSgCE86bbaoc96faAaCfgARbbaOcd4ciGgCaCciSgCE86bbaoc97faAaCfgARbbaOciGgOaOciSgOE86bbaoc98faAaOfgORbbalRbiglco4gAaAciSgAE86bbaoc99faOaAfgORbbalcl4ciGgAaAciSgAE86bbaoc9:faOaAfgORbbalcd4ciGgAaAciSgAE86bbaocufaOaAfgoRbbalciGglalciSglE86bbaoalfhlxdkaOalRbwalRbbgAcl4gCaCcsSgCE86bbaocGfalcwfaCfgORbbaAcsGgAaAcsSgAE86bbaocVfaOaAfgORbbalRbegAcl4gCaCcsSgCE86bbaoc7faOaCfgORbbaAcsGgAaAcsSgAE86bbaoctfaOaAfgORbbalRbdgAcl4gCaCcsSgCE86bbaoc91faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc4faOaAfgORbbalRbigAcl4gCaCcsSgCE86bbaoc93faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc94faOaAfgORbbalRblgAcl4gCaCcsSgCE86bbaoc95faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc96faOaAfgORbbalRbvgAcl4gCaCcsSgCE86bbaoc97faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc98faOaAfgORbbalRbogAcl4gCaCcsSgCE86bbaoc99faOaCfgORbbaAcsGgAaAcsSgAE86bbaoc9:faOaAfgORbbalRbrglcl4gAaAcsSgAE86bbaocufaOaAfgoRbbalcsGglalcsSglE86bbaoalfhlxekaOal8Pbb83bbaOcwfalcwf8Pbb83bbalczfhlkdnaiam9pmbaiczfhoaral9RcL0mekkaiam6mialTmidnakTmbawaPfRbbhOcbhoazhiinaiawcj;cbfaofRbbgAce4cbaAceG9R7aOfgO86bbaiadfhiaocefgoak9hmbkkazcefhzaPcefgPad6hsalhHaPad9hmexvkkcbhlasceGmdxikalaxad2fhCdnakTmbcbhHcehsawcjdfhminaral9Rax6mialTmdalaxfhlawaHfRbbhOcbhoamhiinaiawcj;cbfaofRbbgAce4cbaAceG9R7aOfgO86bbaiadfhiaocefgoak9hmbkamcefhmaHcefgHad6hsaHad9hmbkaChlxikcbhocehsinaral9Rax6mdalTmealaxfhlaocefgoad6hsadao9hmbkaChlxdkcbhlasceGTmekc9:hoxikabaqad2fawcjdfakad2z1jjjb8Aawawcjdfakcufad2fadz1jjjb8Aakaqfhqalmbkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;ebf8Kjjjjbaok;yzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecjez:jjjjb8AavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhDcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgrc;Ve0mbavc;abfalarcl4cu7fcsGcitfgPydlhsaPydbhzdnarcsGgPak9pmbavaiarcu7fcsGcdtfydbaxaPEhraPThPdndnadcd9hmbabaDcetfgHaz87ebaHcdfas87ebaHclfar87ebxekabaDcdtfgHazBdbaHclfasBdbaHcwfarBdbkaxaPfhxavc;abfalcitfgHarBdbaHasBdlavaicdtfarBdbavc;abfalcefcsGglcitfgHazBdbaHarBdlaiaPfhialcefhlxdkdndnaPcsSmbamaPfaPc987fcefhmxekaocefhrao8SbbgPcFeGhHdndnaPcu9mmbarhoxekaocvfhoaHcFbGhHcrhPdninar8SbbgOcFbGaPtaHVhHaOcu9kmearcefhraPcrfgPc8J9hmbxdkkarcefhokaHce4cbaHceG9R7amfhmkdndnadcd9hmbabaDcetfgraz87ebarcdfas87ebarclfam87ebxekabaDcdtfgrazBdbarclfasBdbarcwfamBdbkavc;abfalcitfgramBdbarasBdlavaicdtfamBdbavc;abfalcefcsGglcitfgrazBdbaramBdlaicefhialcefhlxekdnarcpe0mbaxcefgOavaiaqarcsGfRbbgPcl49RcsGcdtfydbaPcz6gHEhravaiaP9RcsGcdtfydbaOaHfgsaPcsGgOEhPaOThOdndnadcd9hmbabaDcetfgzax87ebazcdfar87ebazclfaP87ebxekabaDcdtfgzaxBdbazclfarBdbazcwfaPBdbkavaicdtfaxBdbavc;abfalcitfgzarBdbazaxBdlavaicefgicsGcdtfarBdbavc;abfalcefcsGcitfgzaPBdbazarBdlavaiaHfcsGgicdtfaPBdbavc;abfalcdfcsGglcitfgraxBdbaraPBdlalcefhlaiaOfhiasaOfhxxekaxcbaoRbbgzEgAarc;:eSgrfhsazcsGhCazcl4hXdndnazcs0mbascefhOxekashOavaiaX9RcsGcdtfydbhskdndnaCmbaOcefhxxekaOhxavaiaz9RcsGcdtfydbhOkdndnarTmbaocefhrxekaocdfhrao8SbegHcFeGhPdnaHcu9kmbaocofhAaPcFbGhPcrhodninar8SbbgHcFbGaotaPVhPaHcu9kmearcefhraocrfgoc8J9hmbkaAhrxekarcefhrkaPce4cbaPceG9R7amfgmhAkdndnaXcsSmbarhPxekarcefhPar8SbbgocFeGhHdnaocu9kmbarcvfhsaHcFbGhHcrhodninaP8SbbgrcFbGaotaHVhHarcu9kmeaPcefhPaocrfgoc8J9hmbkashPxekaPcefhPkaHce4cbaHceG9R7amfgmhskdndnaCcsSmbaPhoxekaPcefhoaP8SbbgrcFeGhHdnarcu9kmbaPcvfhOaHcFbGhHcrhrdninao8SbbgPcFbGartaHVhHaPcu9kmeaocefhoarcrfgrc8J9hmbkaOhoxekaocefhokaHce4cbaHceG9R7amfgmhOkdndnadcd9hmbabaDcetfgraA87ebarcdfas87ebarclfaO87ebxekabaDcdtfgraABdbarclfasBdbarcwfaOBdbkavc;abfalcitfgrasBdbaraABdlavaicdtfaABdbavc;abfalcefcsGcitfgraOBdbarasBdlavaicefgicsGcdtfasBdbavc;abfalcdfcsGcitfgraABdbaraOBdlavaiazcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiaDcifgDae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:llevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:Lvoeue99dud99eud99dndnadcl9hmbaeTmeindndnabcdfgd8Sbb:Yab8Sbbgi:Ygl:l:tabcefgv8Sbbgo:Ygr:l:tgwJbb;:9cawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai86bbdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad86bbdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad86bbabclfhbaecufgembxdkkaeTmbindndnabclfgd8Ueb:Yab8Uebgi:Ygl:l:tabcdfgv8Uebgo:Ygr:l:tgwJb;:FSawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai87ebdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad87ebdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad87ebabcwfhbaecufgembkkk;siliui99iue99dnaeTmbcbhiabhlindndnJ;Zl81Zalcof8UebgvciV:Y:vgoal8Ueb:YNgrJb;:FSNJbbbZJbbb:;arJbbbb9GEMgw:lJbbb9p9DTmbaw:OhDxekcjjjj94hDkalclf8Uebhqalcdf8UebhkabavcefciGaiVcetfaD87ebdndnaoak:YNgwJb;:FSNJbbbZJbbb:;awJbbbb9GEMgx:lJbbb9p9DTmbax:Ohkxekcjjjj94hkkabavcdfciGaiVcetfak87ebdndnaoaq:YNgoJb;:FSNJbbbZJbbb:;aoJbbbb9GEMgx:lJbbb9p9DTmbax:Ohqxekcjjjj94hqkabavcufciGaiVcetfaq87ebdndnJbbjZararN:tawawN:taoaoN:tgrJbbbbarJbbbb9GE:rJb;:FSNJbbbZMgr:lJbbb9p9DTmbar:Ohqxekcjjjj94hqkabavciGaiVcetfaq87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2geTmbinababydbgdcwtcw91:Yadce91cjjj;8ifcjjj98G::NUdbabclfhbaecufgembkkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaiczfhiaeczfheadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkkkebcjwklz9Kbb", A = "b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuikqbbebeedddilve9Weeeviebeoweuec:q;Aekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbwl79IV9RbDq;t9tqlbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk;h8JlHud97euo978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Rad;8qbbcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhwcbhDinaDae9pmeawaeaD9RaDawfae6Egqcsfgoc9WGgkci2hxakcethmaocl4cifcd4hPabaDad2fhscbhzdnincehHalhOcbhAdninaraO9RaP6miavcj;cbfaAak2fhCaOaPfhlcbhidnakc;ab6mbaral9Rc;Gb6mbcbhoinaCaofhidndndndndnaOaoco4fRbbgXciGPlbedibkaipxbbbbbbbbbbbbbbbbpklbxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklbalczfhlkdndndndndnaXcd4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklzxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklzalczfhlkdndndndndnaXcl4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklaxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklaalczfhlkdndndndndnaXco4Plbedibkaipxbbbbbbbbbbbbbbbbpkl8WxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalclfaYpQbfaXc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalcwfaYpQbfaXc:q:yjjbfRbbfhlxekaialpbbbpkl8Walczfhlkaoc;abfhiaocjefak0meaihoaral9Rc;Fb0mbkkdndnaiak9pmbaici4hoinaral9RcK6mdaCaifhXdndndndndnaOaico4fRbbaocoG4ciGPlbedibkaXpxbbbbbbbbbbbbbbbbpklbxikaXalpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaXalpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaXalpbbbpklbalczfhlkaocdfhoaiczfgiak6mbkkalTmbaAci6hHalhOaAcefgohAaoclSmdxekkcbhlaHceGmdkdnakTmbavcjdfazfhiavazfpbdbhYcbhXinaiavcj;cbfaXfgopblbgLcep9TaLpxeeeeeeeeeeeeeeeegQp9op9Hp9rgLaoakfpblbg8Acep9Ta8AaQp9op9Hp9rg8ApmbzeHdOiAlCvXoQrLgEaoamfpblbg3cep9Ta3aQp9op9Hp9rg3aoaxfpblbg5cep9Ta5aQp9op9Hp9rg5pmbzeHdOiAlCvXoQrLg8EpmbezHdiOAlvCXorQLgQaQpmbedibedibedibediaYp9UgYp9AdbbaiadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaEa8EpmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwKDYq8AkEx3m5P8Es8FgLa3a5pmwKDYq8AkEx3m5P8Es8Fg8ApmbezHdiOAlvCXorQLgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfhiaXczfgXak6mbkkazclfgzad6mbkasavcjdfaqad2;8qbbavavcjdfaqcufad2fad;8qbbaqaDfhDc9:hoalmexikkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;kbf8Kjjjjbaokwbz:bjjjbk;uzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecje;8kbavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhDcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgrc;Ve0mbavc;abfalarcl4cu7fcsGcitfgPydlhsaPydbhzdnarcsGgPak9pmbavaiarcu7fcsGcdtfydbaxaPEhraPThPdndnadcd9hmbabaDcetfgHaz87ebaHcdfas87ebaHclfar87ebxekabaDcdtfgHazBdbaHclfasBdbaHcwfarBdbkaxaPfhxavc;abfalcitfgHarBdbaHasBdlavaicdtfarBdbavc;abfalcefcsGglcitfgHazBdbaHarBdlaiaPfhialcefhlxdkdndnaPcsSmbamaPfaPc987fcefhmxekaocefhrao8SbbgPcFeGhHdndnaPcu9mmbarhoxekaocvfhoaHcFbGhHcrhPdninar8SbbgOcFbGaPtaHVhHaOcu9kmearcefhraPcrfgPc8J9hmbxdkkarcefhokaHce4cbaHceG9R7amfhmkdndnadcd9hmbabaDcetfgraz87ebarcdfas87ebarclfam87ebxekabaDcdtfgrazBdbarclfasBdbarcwfamBdbkavc;abfalcitfgramBdbarasBdlavaicdtfamBdbavc;abfalcefcsGglcitfgrazBdbaramBdlaicefhialcefhlxekdnarcpe0mbaxcefgOavaiaqarcsGfRbbgPcl49RcsGcdtfydbaPcz6gHEhravaiaP9RcsGcdtfydbaOaHfgsaPcsGgOEhPaOThOdndnadcd9hmbabaDcetfgzax87ebazcdfar87ebazclfaP87ebxekabaDcdtfgzaxBdbazclfarBdbazcwfaPBdbkavaicdtfaxBdbavc;abfalcitfgzarBdbazaxBdlavaicefgicsGcdtfarBdbavc;abfalcefcsGcitfgzaPBdbazarBdlavaiaHfcsGgicdtfaPBdbavc;abfalcdfcsGglcitfgraxBdbaraPBdlalcefhlaiaOfhiasaOfhxxekaxcbaoRbbgzEgAarc;:eSgrfhsazcsGhCazcl4hXdndnazcs0mbascefhOxekashOavaiaX9RcsGcdtfydbhskdndnaCmbaOcefhxxekaOhxavaiaz9RcsGcdtfydbhOkdndnarTmbaocefhrxekaocdfhrao8SbegHcFeGhPdnaHcu9kmbaocofhAaPcFbGhPcrhodninar8SbbgHcFbGaotaPVhPaHcu9kmearcefhraocrfgoc8J9hmbkaAhrxekarcefhrkaPce4cbaPceG9R7amfgmhAkdndnaXcsSmbarhPxekarcefhPar8SbbgocFeGhHdnaocu9kmbarcvfhsaHcFbGhHcrhodninaP8SbbgrcFbGaotaHVhHarcu9kmeaPcefhPaocrfgoc8J9hmbkashPxekaPcefhPkaHce4cbaHceG9R7amfgmhskdndnaCcsSmbaPhoxekaPcefhoaP8SbbgrcFeGhHdnarcu9kmbaPcvfhOaHcFbGhHcrhrdninao8SbbgPcFbGartaHVhHaPcu9kmeaocefhoarcrfgrc8J9hmbkaOhoxekaocefhokaHce4cbaHceG9R7amfgmhOkdndnadcd9hmbabaDcetfgraA87ebarcdfas87ebarclfaO87ebxekabaDcdtfgraABdbarclfasBdbarcwfaOBdbkavc;abfalcitfgrasBdbaraABdlavaicdtfaABdbavc;abfalcefcsGcitfgraOBdbarasBdlavaicefgicsGcdtfasBdbavc;abfalcdfcsGcitfgraABdbaraOBdlavaiazcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiaDcifgDae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:llevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaicd4cbaice4ceG9R7avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:EPliuo97eue978Jjjjjbca9Rhidndnadcl9hmbdnaec98GglTmbcbhvabhdinadadpbbbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpkbbadczfhdavclfgval6mbkkalae9pmeaiaeciGgvcdtgdVcbczad9R;8kbaiabalcdtfglad;8qbbdnavTmbaiaipblbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpklbkalaiad;8qbbskdnaec98GgxTmbcbhvabhdinadczfglalpbbbgopxbbbbbbFFbbbbbbFFgkp9oadpbbbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpkbbadaDakp9oawaopmbezHdiOAlvCXorQLp9qpkbbadcafhdavclfgvax6mbkkaxae9pmbaiaeciGgvcitgdfcbcaad9R;8kbaiabaxcitfglad;8qbbdnavTmbaiaipblzgopxbbbbbbFFbbbbbbFFgkp9oaipblbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpklzaiaDakp9oawaopmbezHdiOAlvCXorQLp9qpklbkalaiad;8qbbkk;4wllue97euv978Jjjjjbc8W9Rhidnaec98GglTmbcbhvabhoinaiaopbbbgraoczfgwpbbbgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklbaopxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblbpEb:T:j83ibaocwfarp5eaipblbpEe:T:j83ibawaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblbpEd:T:j83ibaocKfakp5eaipblbpEi:T:j83ibaocafhoavclfgval6mbkkdnalae9pmbaiaeciGgvcitgofcbcaao9R;8kbaiabalcitfgwao;8qbbdnavTmbaiaipblbgraipblzgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklaaipxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblapEb:T:j83ibaiarp5eaipblapEe:T:j83iwaiaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblapEd:T:j83izaiakp5eaipblapEi:T:j83iKkawaiao;8qbbkk:Pddiue978Jjjjjbc;ab9Rhidnadcd4ae2glc98GgvTmbcbhdabheinaeaepbbbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepkbbaeczfheadclfgdav6mbkkdnaval9pmbaialciGgdcdtgeVcbc;abae9R;8kbaiabavcdtfgvae;8qbbdnadTmbaiaipblbgocwp:Recwp:Sep;6eaocep:SepxbbjZbbjZbbjZbbjZp:UepxbbjFbbjFbbjFbbjFp9op;Mepklbkavaiae;8qbbkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkkebcjwklz9Tbb", e = new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0, 1, 4, 1, 96, 0, 0, 3, 3, 2, 0, 0, 5, 3, 1, 0, 1, 12, 1, 0, 10, 22, 2, 12, 0, 65, 0, 65, 0, 65, 0, 252, 10, 0, 0, 11, 7, 0, 65, 0, 253, 15, 26, 11]), a = new Uint8Array([32, 0, 65, 2, 1, 106, 34, 33, 3, 128, 11, 4, 13, 64, 6, 253, 10, 7, 15, 116, 127, 5, 8, 12, 40, 16, 19, 54, 20, 9, 27, 255, 113, 17, 42, 67, 24, 23, 146, 148, 18, 14, 22, 45, 70, 69, 56, 114, 101, 21, 25, 63, 75, 136, 108, 28, 118, 29, 73, 115]);
2430
- if (typeof WebAssembly != "object")
2431
- return {
2432
- supported: !1
2433
- };
2434
- var t = WebAssembly.validate(e) ? A : n, i, s = WebAssembly.instantiate(o(t), {}).then(function(E) {
2435
- i = E.instance, i.exports.__wasm_call_ctors();
2436
- });
2437
- function o(E) {
2438
- for (var l = new Uint8Array(E.length), h = 0; h < E.length; ++h) {
2439
- var u = E.charCodeAt(h);
2440
- l[h] = u > 96 ? u - 97 : u > 64 ? u - 39 : u + 4;
2441
- }
2442
- for (var k = 0, h = 0; h < E.length; ++h)
2443
- l[k++] = l[h] < 60 ? a[l[h]] : (l[h] - 60) * 64 + l[++h];
2444
- return l.buffer.slice(0, k);
2445
- }
2446
- function r(E, l, h, u, k, F) {
2447
- var G = i.exports.sbrk, M = h + 3 & -4, b = G(M * u), Q = G(k.length), m = new Uint8Array(i.exports.memory.buffer);
2448
- m.set(k, Q);
2449
- var D = E(b, h, u, Q, k.length);
2450
- if (D == 0 && F && F(b, M, u), l.set(m.subarray(b, b + h * u)), G(b - G(0)), D != 0)
2451
- throw new Error("Malformed buffer data: " + D);
2452
- }
2453
- var c = {
2454
- NONE: "",
2455
- OCTAHEDRAL: "meshopt_decodeFilterOct",
2456
- QUATERNION: "meshopt_decodeFilterQuat",
2457
- EXPONENTIAL: "meshopt_decodeFilterExp"
2458
- }, I = {
2459
- ATTRIBUTES: "meshopt_decodeVertexBuffer",
2460
- TRIANGLES: "meshopt_decodeIndexBuffer",
2461
- INDICES: "meshopt_decodeIndexSequence"
2462
- }, g = [], B = 0;
2463
- function C(E) {
2464
- var l = {
2465
- object: new Worker(E),
2466
- pending: 0,
2467
- requests: {}
2468
- };
2469
- return l.object.onmessage = function(h) {
2470
- var u = h.data;
2471
- l.pending -= u.count, l.requests[u.id][u.action](u.value), delete l.requests[u.id];
2472
- }, l;
2473
- }
2474
- function f(E) {
2475
- for (var l = "var instance; var ready = WebAssembly.instantiate(new Uint8Array([" + new Uint8Array(o(t)) + "]), {}).then(function(result) { instance = result.instance; instance.exports.__wasm_call_ctors(); });self.onmessage = workerProcess;" + r.toString() + p.toString(), h = new Blob([l], { type: "text/javascript" }), u = URL.createObjectURL(h), k = 0; k < E; ++k)
2476
- g[k] = C(u);
2477
- URL.revokeObjectURL(u);
2478
- }
2479
- function d(E, l, h, u, k) {
2480
- for (var F = g[0], G = 1; G < g.length; ++G)
2481
- g[G].pending < F.pending && (F = g[G]);
2482
- return new Promise(function(M, b) {
2483
- var Q = new Uint8Array(h), m = B++;
2484
- F.pending += E, F.requests[m] = { resolve: M, reject: b }, F.object.postMessage({ id: m, count: E, size: l, source: Q, mode: u, filter: k }, [Q.buffer]);
2485
- });
2486
- }
2487
- function p(E) {
2488
- s.then(function() {
2489
- var l = E.data;
2490
- try {
2491
- var h = new Uint8Array(l.count * l.size);
2492
- r(i.exports[l.mode], h, l.count, l.size, l.source, i.exports[l.filter]), self.postMessage({ id: l.id, count: l.count, action: "resolve", value: h }, [h.buffer]);
2493
- } catch (u) {
2494
- self.postMessage({ id: l.id, count: l.count, action: "reject", value: u });
2495
- }
2496
- });
2497
- }
2498
- return {
2499
- ready: s,
2500
- supported: !0,
2501
- useWorkers: function(E) {
2502
- f(E);
2503
- },
2504
- decodeVertexBuffer: function(E, l, h, u, k) {
2505
- r(i.exports.meshopt_decodeVertexBuffer, E, l, h, u, i.exports[c[k]]);
2506
- },
2507
- decodeIndexBuffer: function(E, l, h, u) {
2508
- r(i.exports.meshopt_decodeIndexBuffer, E, l, h, u);
2509
- },
2510
- decodeIndexSequence: function(E, l, h, u) {
2511
- r(i.exports.meshopt_decodeIndexSequence, E, l, h, u);
2512
- },
2513
- decodeGltfBuffer: function(E, l, h, u, k, F) {
2514
- r(i.exports[I[k]], E, l, h, u, i.exports[c[F]]);
2515
- },
2516
- decodeGltfBufferAsync: function(E, l, h, u, k) {
2517
- return g.length > 0 ? d(E, l, h, I[u], c[k]) : s.then(function() {
2518
- var F = new Uint8Array(E * l);
2519
- return r(i.exports[I[u]], F, E, l, h, i.exports[c[k]]), F;
2520
- });
2521
- }
2522
- };
2523
- }();
2524
- function oe() {
2525
- const n = new za();
2526
- n.setDecoderPath("/draco/");
2527
- const A = new $();
2528
- A.setTranscoderPath("/draco/");
2529
- const e = new la().setDRACOLoader(n).setKTX2Loader(A.detectSupport(new Ba())).setMeshoptDecoder(gi);
2530
- return e.manager.onError = (a) => {
2531
- V.emit("load-error", `Failed to load file ${a}`);
2532
- }, e;
2533
- }
2534
- /*!
2535
- fflate - fast JavaScript compression/decompression
2536
- <https://101arrowz.github.io/fflate>
2537
- Licensed under MIT. https://github.com/101arrowz/fflate/blob/master/LICENSE
2538
- version 0.8.2
2539
- */
2540
- var H = Uint8Array, lA = Uint16Array, Ii = Int32Array, it = new H([
2541
- 0,
2542
- 0,
2543
- 0,
2544
- 0,
2545
- 0,
2546
- 0,
2547
- 0,
2548
- 0,
2549
- 1,
2550
- 1,
2551
- 1,
2552
- 1,
2553
- 2,
2554
- 2,
2555
- 2,
2556
- 2,
2557
- 3,
2558
- 3,
2559
- 3,
2560
- 3,
2561
- 4,
2562
- 4,
2563
- 4,
2564
- 4,
2565
- 5,
2566
- 5,
2567
- 5,
2568
- 5,
2569
- 0,
2570
- /* unused */
2571
- 0,
2572
- 0,
2573
- /* impossible */
2574
- 0
2575
- ]), st = new H([
2576
- 0,
2577
- 0,
2578
- 0,
2579
- 0,
2580
- 1,
2581
- 1,
2582
- 2,
2583
- 2,
2584
- 3,
2585
- 3,
2586
- 4,
2587
- 4,
2588
- 5,
2589
- 5,
2590
- 6,
2591
- 6,
2592
- 7,
2593
- 7,
2594
- 8,
2595
- 8,
2596
- 9,
2597
- 9,
2598
- 10,
2599
- 10,
2600
- 11,
2601
- 11,
2602
- 12,
2603
- 12,
2604
- 13,
2605
- 13,
2606
- /* unused */
2607
- 0,
2608
- 0
2609
- ]), Bi = new H([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]), nt = function(n, A) {
2610
- for (var e = new lA(31), a = 0; a < 31; ++a)
2611
- e[a] = A += 1 << n[a - 1];
2612
- for (var t = new Ii(e[30]), a = 1; a < 30; ++a)
2613
- for (var i = e[a]; i < e[a + 1]; ++i)
2614
- t[i] = i - e[a] << 5 | a;
2615
- return { b: e, r: t };
2616
- }, ot = nt(it, 2), rt = ot.b, Ci = ot.r;
2617
- rt[28] = 258, Ci[258] = 28;
2618
- var bi = nt(st, 0), li = bi.b, ee = new lA(32768);
2619
- for (var L = 0; L < 32768; ++L) {
2620
- var nA = (L & 43690) >> 1 | (L & 21845) << 1;
2621
- nA = (nA & 52428) >> 2 | (nA & 13107) << 2, nA = (nA & 61680) >> 4 | (nA & 3855) << 4, ee[L] = ((nA & 65280) >> 8 | (nA & 255) << 8) >> 1;
2622
- }
2623
- var wA = function(n, A, e) {
2624
- for (var a = n.length, t = 0, i = new lA(A); t < a; ++t)
2625
- n[t] && ++i[n[t] - 1];
2626
- var s = new lA(A);
2627
- for (t = 1; t < A; ++t)
2628
- s[t] = s[t - 1] + i[t - 1] << 1;
2629
- var o;
2630
- if (e) {
2631
- o = new lA(1 << A);
2632
- var r = 15 - A;
2633
- for (t = 0; t < a; ++t)
2634
- if (n[t])
2635
- for (var c = t << 4 | n[t], I = A - n[t], g = s[n[t] - 1]++ << I, B = g | (1 << I) - 1; g <= B; ++g)
2636
- o[ee[g] >> r] = c;
2637
- } else
2638
- for (o = new lA(a), t = 0; t < a; ++t)
2639
- n[t] && (o[t] = ee[s[n[t] - 1]++] >> 15 - n[t]);
2640
- return o;
2641
- }, DA = new H(288);
2642
- for (var L = 0; L < 144; ++L)
2643
- DA[L] = 8;
2644
- for (var L = 144; L < 256; ++L)
2645
- DA[L] = 9;
2646
- for (var L = 256; L < 280; ++L)
2647
- DA[L] = 7;
2648
- for (var L = 280; L < 288; ++L)
2649
- DA[L] = 8;
2650
- var ct = new H(32);
2651
- for (var L = 0; L < 32; ++L)
2652
- ct[L] = 5;
2653
- var fi = /* @__PURE__ */ wA(DA, 9, 1), Ei = /* @__PURE__ */ wA(ct, 5, 1), WA = function(n) {
2654
- for (var A = n[0], e = 1; e < n.length; ++e)
2655
- n[e] > A && (A = n[e]);
2656
- return A;
2657
- }, j = function(n, A, e) {
2658
- var a = A / 8 | 0;
2659
- return (n[a] | n[a + 1] << 8) >> (A & 7) & e;
2660
- }, VA = function(n, A) {
2661
- var e = A / 8 | 0;
2662
- return (n[e] | n[e + 1] << 8 | n[e + 2] << 16) >> (A & 7);
2663
- }, Qi = function(n) {
2664
- return (n + 7) / 8 | 0;
2665
- }, re = function(n, A, e) {
2666
- return (A == null || A < 0) && (A = 0), (e == null || e > n.length) && (e = n.length), new H(n.subarray(A, e));
2667
- }, di = [
2668
- "unexpected EOF",
2669
- "invalid block type",
2670
- "invalid length/literal",
2671
- "invalid distance",
2672
- "stream finished",
2673
- "no stream handler",
2674
- ,
2675
- "no callback",
2676
- "invalid UTF-8 data",
2677
- "extra field too long",
2678
- "date not in range 1980-2099",
2679
- "filename too long",
2680
- "stream finishing",
2681
- "invalid zip data"
2682
- // determined by unknown compression method
2683
- ], v = function(n, A, e) {
2684
- var a = new Error(A || di[n]);
2685
- if (a.code = n, Error.captureStackTrace && Error.captureStackTrace(a, v), !e)
2686
- throw a;
2687
- return a;
2688
- }, hi = function(n, A, e, a) {
2689
- var t = n.length, i = a ? a.length : 0;
2690
- if (!t || A.f && !A.l)
2691
- return e || new H(0);
2692
- var s = !e, o = s || A.i != 2, r = A.i;
2693
- s && (e = new H(t * 3));
2694
- var c = function(Be) {
2695
- var Ce = e.length;
2696
- if (Be > Ce) {
2697
- var be = new H(Math.max(Ce * 2, Be));
2698
- be.set(e), e = be;
2699
- }
2700
- }, I = A.f || 0, g = A.p || 0, B = A.b || 0, C = A.l, f = A.d, d = A.m, p = A.n, E = t * 8;
2701
- do {
2702
- if (!C) {
2703
- I = j(n, g, 1);
2704
- var l = j(n, g + 1, 3);
2705
- if (g += 3, l)
2706
- if (l == 1)
2707
- C = fi, f = Ei, d = 9, p = 5;
2708
- else if (l == 2) {
2709
- var F = j(n, g, 31) + 257, G = j(n, g + 10, 15) + 4, M = F + j(n, g + 5, 31) + 1;
2710
- g += 14;
2711
- for (var b = new H(M), Q = new H(19), m = 0; m < G; ++m)
2712
- Q[Bi[m]] = j(n, g + m * 3, 7);
2713
- g += G * 3;
2714
- for (var D = WA(Q), w = (1 << D) - 1, S = wA(Q, D, 1), m = 0; m < M; ) {
2715
- var R = S[j(n, g, w)];
2716
- g += R & 15;
2717
- var h = R >> 4;
2718
- if (h < 16)
2719
- b[m++] = h;
2720
- else {
2721
- var x = 0, T = 0;
2722
- for (h == 16 ? (T = 3 + j(n, g, 3), g += 2, x = b[m - 1]) : h == 17 ? (T = 3 + j(n, g, 7), g += 3) : h == 18 && (T = 11 + j(n, g, 127), g += 7); T--; )
2723
- b[m++] = x;
2724
- }
2725
- }
2726
- var U = b.subarray(0, F), _ = b.subarray(F);
2727
- d = WA(U), p = WA(_), C = wA(U, d, 1), f = wA(_, p, 1);
2728
- } else
2729
- v(1);
2730
- else {
2731
- var h = Qi(g) + 4, u = n[h - 4] | n[h - 3] << 8, k = h + u;
2732
- if (k > t) {
2733
- r && v(0);
2734
- break;
2735
- }
2736
- o && c(B + u), e.set(n.subarray(h, k), B), A.b = B += u, A.p = g = k * 8, A.f = I;
2737
- continue;
2738
- }
2739
- if (g > E) {
2740
- r && v(0);
2741
- break;
2742
- }
2743
- }
2744
- o && c(B + 131072);
2745
- for (var J = (1 << d) - 1, iA = (1 << p) - 1, IA = g; ; IA = g) {
2746
- var x = C[VA(n, g) & J], cA = x >> 4;
2747
- if (g += x & 15, g > E) {
2748
- r && v(0);
2749
- break;
2750
- }
2751
- if (x || v(2), cA < 256)
2752
- e[B++] = cA;
2753
- else if (cA == 256) {
2754
- IA = g, C = null;
2755
- break;
2756
- } else {
2757
- var ce = cA - 254;
2758
- if (cA > 264) {
2759
- var m = cA - 257, EA = it[m];
2760
- ce = j(n, g, (1 << EA) - 1) + rt[m], g += EA;
2761
- }
2762
- var LA = f[VA(n, g) & iA], MA = LA >> 4;
2763
- LA || v(3), g += LA & 15;
2764
- var _ = li[MA];
2765
- if (MA > 3) {
2766
- var EA = st[MA];
2767
- _ += VA(n, g) & (1 << EA) - 1, g += EA;
2768
- }
2769
- if (g > E) {
2770
- r && v(0);
2771
- break;
2772
- }
2773
- o && c(B + 131072);
2774
- var ge = B + ce;
2775
- if (B < _) {
2776
- var Ie = i - _, It = Math.min(_, ge);
2777
- for (Ie + B < 0 && v(3); B < It; ++B)
2778
- e[B] = a[Ie + B];
2779
- }
2780
- for (; B < ge; ++B)
2781
- e[B] = e[B - _];
2782
- }
2783
- }
2784
- A.l = C, A.p = IA, A.b = B, A.f = I, C && (I = 1, A.m = d, A.d = f, A.n = p);
2785
- } while (!I);
2786
- return B != e.length && s ? re(e, 0, B) : e.subarray(0, B);
2787
- }, pi = /* @__PURE__ */ new H(0), Z = function(n, A) {
2788
- return n[A] | n[A + 1] << 8;
2789
- }, P = function(n, A) {
2790
- return (n[A] | n[A + 1] << 8 | n[A + 2] << 16 | n[A + 3] << 24) >>> 0;
2791
- }, zA = function(n, A) {
2792
- return P(n, A) + P(n, A + 4) * 4294967296;
2793
- };
2794
- function ui(n, A) {
2795
- return hi(n, { i: 2 }, A && A.out, A && A.dictionary);
2796
- }
2797
- var te = typeof TextDecoder < "u" && /* @__PURE__ */ new TextDecoder(), mi = 0;
2798
- try {
2799
- te.decode(pi, { stream: !0 }), mi = 1;
2800
- } catch {
2801
- }
2802
- var wi = function(n) {
2803
- for (var A = "", e = 0; ; ) {
2804
- var a = n[e++], t = (a > 127) + (a > 223) + (a > 239);
2805
- if (e + t > n.length)
2806
- return { s: A, r: re(n, e - 1) };
2807
- t ? t == 3 ? (a = ((a & 15) << 18 | (n[e++] & 63) << 12 | (n[e++] & 63) << 6 | n[e++] & 63) - 65536, A += String.fromCharCode(55296 | a >> 10, 56320 | a & 1023)) : t & 1 ? A += String.fromCharCode((a & 31) << 6 | n[e++] & 63) : A += String.fromCharCode((a & 15) << 12 | (n[e++] & 63) << 6 | n[e++] & 63) : A += String.fromCharCode(a);
2808
- }
2809
- };
2810
- function ae(n, A) {
2811
- if (A) {
2812
- for (var e = "", a = 0; a < n.length; a += 16384)
2813
- e += String.fromCharCode.apply(null, n.subarray(a, a + 16384));
2814
- return e;
2815
- } else {
2816
- if (te)
2817
- return te.decode(n);
2818
- var t = wi(n), i = t.s, e = t.r;
2819
- return e.length && v(8), i;
2820
- }
2821
- }
2822
- var Di = function(n, A) {
2823
- return A + 30 + Z(n, A + 26) + Z(n, A + 28);
2824
- }, ki = function(n, A, e) {
2825
- var a = Z(n, A + 28), t = ae(n.subarray(A + 46, A + 46 + a), !(Z(n, A + 8) & 2048)), i = A + 46 + a, s = P(n, A + 20), o = e && s == 4294967295 ? Ri(n, i) : [s, P(n, A + 24), P(n, A + 42)], r = o[0], c = o[1], I = o[2];
2826
- return [Z(n, A + 10), r, c, t, i + Z(n, A + 30) + Z(n, A + 32), I];
2827
- }, Ri = function(n, A) {
2828
- for (; Z(n, A) != 1; A += 4 + Z(n, A + 2))
2829
- ;
2830
- return [zA(n, A + 12), zA(n, A + 4), zA(n, A + 20)];
2831
- };
2832
- function Fi(n, A) {
2833
- for (var e = {}, a = n.length - 22; P(n, a) != 101010256; --a)
2834
- (!a || n.length - a > 65558) && v(13);
2835
- var t = Z(n, a + 8);
2836
- if (!t)
2837
- return {};
2838
- var i = P(n, a + 16), s = i == 4294967295 || t == 65535;
2839
- if (s) {
2840
- var o = P(n, a - 12);
2841
- s = P(n, o) == 101075792, s && (t = P(n, o + 32), i = P(n, o + 48));
2842
- }
2843
- for (var r = 0; r < t; ++r) {
2844
- var c = ki(n, i, s), I = c[0], g = c[1], B = c[2], C = c[3], f = c[4], d = c[5], p = Di(n, d);
2845
- i = f, I ? I == 8 ? e[C] = ui(n.subarray(p, p + g), { out: new H(B) }) : v(14, "unknown compression type " + I) : e[C] = re(n, p, p + g);
2846
- }
2847
- return e;
2848
- }
2849
- class Si {
2850
- parse(A) {
2851
- const e = {}, a = A.split(`
2852
- `);
2853
- let t = null, i = e;
2854
- const s = [e];
2855
- for (const o of a)
2856
- if (o.includes("=")) {
2857
- const r = o.split("="), c = r[0].trim(), I = r[1].trim();
2858
- if (I.endsWith("{")) {
2859
- const g = {};
2860
- s.push(g), i[c] = g, i = g;
2861
- } else if (I.endsWith("(")) {
2862
- const g = I.slice(0, -1);
2863
- i[c] = g;
2864
- const B = {};
2865
- s.push(B), i = B;
2866
- } else
2867
- i[c] = I;
2868
- } else if (o.endsWith("{")) {
2869
- const r = i[t] || {};
2870
- s.push(r), i[t] = r, i = r;
2871
- } else if (o.endsWith("}")) {
2872
- if (s.pop(), s.length === 0) continue;
2873
- i = s[s.length - 1];
2874
- } else if (o.endsWith("(")) {
2875
- const r = {};
2876
- s.push(r), t = o.split("(")[0].trim() || t, i[t] = r, i = r;
2877
- } else o.endsWith(")") ? (s.pop(), i = s[s.length - 1]) : t = o.trim();
2878
- return e;
2879
- }
2880
- }
2881
- class yi extends TA {
2882
- constructor(A) {
2883
- super(A);
2884
- }
2885
- load(A, e, a, t) {
2886
- const i = this, s = new aA(i.manager);
2887
- s.setPath(i.path), s.setResponseType("arraybuffer"), s.setRequestHeader(i.requestHeader), s.setWithCredentials(i.withCredentials), s.load(A, function(o) {
2888
- try {
2889
- e(i.parse(o));
2890
- } catch (r) {
2891
- t ? t(r) : console.error(r), i.manager.itemError(A);
2892
- }
2893
- }, a, t);
2894
- }
2895
- parse(A) {
2896
- const e = new Si();
2897
- function a(b) {
2898
- const Q = {};
2899
- new aA().setResponseType("arraybuffer");
2900
- for (const D in b) {
2901
- if (D.endsWith("png")) {
2902
- const w = new Blob([b[D]], { type: { type: "image/png" } });
2903
- Q[D] = URL.createObjectURL(w);
2904
- }
2905
- if (D.endsWith("usd") || D.endsWith("usda")) {
2906
- if (t(b[D]))
2907
- throw Error("THREE.USDZLoader: Crate files (.usdc or binary .usd) are not supported.");
2908
- const w = ae(b[D]);
2909
- Q[D] = e.parse(w);
2910
- }
2911
- }
2912
- return Q;
2913
- }
2914
- function t(b) {
2915
- const Q = b.slice(0, 7), m = new Uint8Array([80, 88, 82, 45, 85, 83, 68, 67]);
2916
- return Q.every((D, w) => D === m[w]);
2917
- }
2918
- function i(b) {
2919
- if (b.length < 1) return;
2920
- const Q = Object.keys(b)[0];
2921
- let m = !1;
2922
- if (Q.endsWith("usda")) return b[Q];
2923
- if (Q.endsWith("usdc"))
2924
- m = !0;
2925
- else if (Q.endsWith("usd"))
2926
- if (t(b[Q]))
2927
- m = !0;
2928
- else
2929
- return b[Q];
2930
- if (m)
2931
- throw Error("THREE.USDZLoader: Crate files (.usdc or binary .usd) are not supported.");
2932
- }
2933
- const s = Fi(new Uint8Array(A)), o = a(s), r = i(s), c = ae(r), I = e.parse(c);
2934
- function g(b) {
2935
- if (b) {
2936
- if ("prepend references" in b) {
2937
- const m = b["prepend references"].split("@"), D = m[1].replace(/^.\//, ""), w = m[2].replace(/^<\//, "").replace(/>$/, "");
2938
- return B(o[D], w);
2939
- }
2940
- return B(b);
2941
- }
2942
- }
2943
- function B(b, Q) {
2944
- if (b) {
2945
- if (Q !== void 0) {
2946
- const m = `def Mesh "${Q}"`;
2947
- if (m in b)
2948
- return b[m];
2949
- }
2950
- for (const m in b) {
2951
- const D = b[m];
2952
- if (m.startsWith("def Mesh"))
2953
- return D;
2954
- if (typeof D == "object") {
2955
- const w = B(D);
2956
- if (w) return w;
2957
- }
2958
- }
2959
- }
2960
- }
2961
- function C(b) {
2962
- if (!b) return;
2963
- const Q = new ne();
2964
- let m = null, D = null, w = null, S = -1;
2965
- if ("int[] faceVertexIndices" in b && (m = JSON.parse(b["int[] faceVertexIndices"])), "int[] faceVertexCounts" in b && (D = JSON.parse(b["int[] faceVertexCounts"]), m = f(m, D)), "point3f[] points" in b) {
2966
- const R = JSON.parse(b["point3f[] points"].replace(/[()]*/g, ""));
2967
- S = R.length;
2968
- let x = new X(new Float32Array(R), 3);
2969
- m !== null && (x = d(x, m)), Q.setAttribute("position", x);
2970
- }
2971
- if ("float2[] primvars:st" in b && (b["texCoord2f[] primvars:st"] = b["float2[] primvars:st"]), "texCoord2f[] primvars:st" in b) {
2972
- w = JSON.parse(b["texCoord2f[] primvars:st"].replace(/[()]*/g, ""));
2973
- let R = new X(new Float32Array(w), 2);
2974
- m !== null && (R = d(R, m)), Q.setAttribute("uv", R);
2975
- }
2976
- if ("int[] primvars:st:indices" in b && w !== null) {
2977
- const R = new X(new Float32Array(w), 2);
2978
- let x = JSON.parse(b["int[] primvars:st:indices"]);
2979
- x = f(x, D), Q.setAttribute("uv", d(R, x));
2980
- }
2981
- if ("normal3f[] normals" in b) {
2982
- const R = JSON.parse(b["normal3f[] normals"].replace(/[()]*/g, ""));
2983
- let x = new X(new Float32Array(R), 3);
2984
- if (R.length === S)
2985
- m !== null && (x = d(x, m));
2986
- else {
2987
- let T = Array.from(Array(R.length / 3).keys());
2988
- T = f(T, D), x = d(x, T);
2989
- }
2990
- Q.setAttribute("normal", x);
2991
- } else
2992
- Q.computeVertexNormals();
2993
- return Q;
2994
- }
2995
- function f(b, Q) {
2996
- const m = [];
2997
- for (let D = 0; D < Q.length; D++) {
2998
- const w = Q[D], S = D * w;
2999
- if (w === 3) {
3000
- const R = b[S + 0], x = b[S + 1], T = b[S + 2];
3001
- m.push(R, x, T);
3002
- } else if (w === 4) {
3003
- const R = b[S + 0], x = b[S + 1], T = b[S + 2], U = b[S + 3];
3004
- m.push(R, x, T), m.push(R, T, U);
3005
- } else
3006
- console.warn("THREE.USDZLoader: Face vertex count of %s unsupported.", w);
3007
- }
3008
- return m;
3009
- }
3010
- function d(b, Q) {
3011
- const m = b.array, D = b.itemSize, w = new m.constructor(Q.length * D);
3012
- let S = 0, R = 0;
3013
- for (let x = 0, T = Q.length; x < T; x++) {
3014
- S = Q[x] * D;
3015
- for (let U = 0; U < D; U++)
3016
- w[R++] = m[S++];
3017
- }
3018
- return new X(w, D);
3019
- }
3020
- function p(b) {
3021
- if (b) {
3022
- if ("rel material:binding" in b) {
3023
- const D = b["rel material:binding"].replace(/^<\//, "").replace(/>$/, "").split("/");
3024
- return E(I, ` "${D[1]}"`);
3025
- }
3026
- return E(b);
3027
- }
3028
- }
3029
- function E(b, Q = "") {
3030
- for (const m in b) {
3031
- const D = b[m];
3032
- if (m.startsWith("def Material" + Q))
3033
- return D;
3034
- if (typeof D == "object") {
3035
- const w = E(D, Q);
3036
- if (w) return w;
3037
- }
3038
- }
3039
- }
3040
- function l(b, Q) {
3041
- Q["float inputs:rotation"] && (b.rotation = parseFloat(Q["float inputs:rotation"])), Q["float2 inputs:scale"] && (b.repeat = new SA().fromArray(JSON.parse("[" + Q["float2 inputs:scale"].replace(/[()]*/g, "") + "]"))), Q["float2 inputs:translation"] && (b.offset = new SA().fromArray(JSON.parse("[" + Q["float2 inputs:translation"].replace(/[()]*/g, "") + "]")));
3042
- }
3043
- function h(b) {
3044
- const Q = new W();
3045
- if (b !== void 0) {
3046
- const m = b["token outputs:surface.connect"], D = /(\w+).output/.exec(m)[1], w = b[`def Shader "${D}"`];
3047
- if (w !== void 0) {
3048
- if ("color3f inputs:diffuseColor.connect" in w) {
3049
- const S = w["color3f inputs:diffuseColor.connect"], R = u(I, /(\w+).output/.exec(S)[1]);
3050
- Q.map = k(R), Q.map.colorSpace = AA, 'def Shader "Transform2d_diffuse"' in b && l(Q.map, b['def Shader "Transform2d_diffuse"']);
3051
- } else if ("color3f inputs:diffuseColor" in w) {
3052
- const S = w["color3f inputs:diffuseColor"].replace(/[()]*/g, "");
3053
- Q.color.fromArray(JSON.parse("[" + S + "]"));
3054
- }
3055
- if ("color3f inputs:emissiveColor.connect" in w) {
3056
- const S = w["color3f inputs:emissiveColor.connect"], R = u(I, /(\w+).output/.exec(S)[1]);
3057
- Q.emissiveMap = k(R), Q.emissiveMap.colorSpace = AA, Q.emissive.set(16777215), 'def Shader "Transform2d_emissive"' in b && l(Q.emissiveMap, b['def Shader "Transform2d_emissive"']);
3058
- } else if ("color3f inputs:emissiveColor" in w) {
3059
- const S = w["color3f inputs:emissiveColor"].replace(/[()]*/g, "");
3060
- Q.emissive.fromArray(JSON.parse("[" + S + "]"));
3061
- }
3062
- if ("normal3f inputs:normal.connect" in w) {
3063
- const S = w["normal3f inputs:normal.connect"], R = u(I, /(\w+).output/.exec(S)[1]);
3064
- Q.normalMap = k(R), Q.normalMap.colorSpace = oA, 'def Shader "Transform2d_normal"' in b && l(Q.normalMap, b['def Shader "Transform2d_normal"']);
3065
- }
3066
- if ("float inputs:roughness.connect" in w) {
3067
- const S = w["float inputs:roughness.connect"], R = u(I, /(\w+).output/.exec(S)[1]);
3068
- Q.roughness = 1, Q.roughnessMap = k(R), Q.roughnessMap.colorSpace = oA, 'def Shader "Transform2d_roughness"' in b && l(Q.roughnessMap, b['def Shader "Transform2d_roughness"']);
3069
- } else "float inputs:roughness" in w && (Q.roughness = parseFloat(w["float inputs:roughness"]));
3070
- if ("float inputs:metallic.connect" in w) {
3071
- const S = w["float inputs:metallic.connect"], R = u(I, /(\w+).output/.exec(S)[1]);
3072
- Q.metalness = 1, Q.metalnessMap = k(R), Q.metalnessMap.colorSpace = oA, 'def Shader "Transform2d_metallic"' in b && l(Q.metalnessMap, b['def Shader "Transform2d_metallic"']);
3073
- } else "float inputs:metallic" in w && (Q.metalness = parseFloat(w["float inputs:metallic"]));
3074
- if ("float inputs:clearcoat.connect" in w) {
3075
- const S = w["float inputs:clearcoat.connect"], R = u(I, /(\w+).output/.exec(S)[1]);
3076
- Q.clearcoat = 1, Q.clearcoatMap = k(R), Q.clearcoatMap.colorSpace = oA, 'def Shader "Transform2d_clearcoat"' in b && l(Q.clearcoatMap, b['def Shader "Transform2d_clearcoat"']);
3077
- } else "float inputs:clearcoat" in w && (Q.clearcoat = parseFloat(w["float inputs:clearcoat"]));
3078
- if ("float inputs:clearcoatRoughness.connect" in w) {
3079
- const S = w["float inputs:clearcoatRoughness.connect"], R = u(I, /(\w+).output/.exec(S)[1]);
3080
- Q.clearcoatRoughness = 1, Q.clearcoatRoughnessMap = k(R), Q.clearcoatRoughnessMap.colorSpace = oA, 'def Shader "Transform2d_clearcoatRoughness"' in b && l(Q.clearcoatRoughnessMap, b['def Shader "Transform2d_clearcoatRoughness"']);
3081
- } else "float inputs:clearcoatRoughness" in w && (Q.clearcoatRoughness = parseFloat(w["float inputs:clearcoatRoughness"]));
3082
- if ("float inputs:ior" in w && (Q.ior = parseFloat(w["float inputs:ior"])), "float inputs:occlusion.connect" in w) {
3083
- const S = w["float inputs:occlusion.connect"], R = u(I, /(\w+).output/.exec(S)[1]);
3084
- Q.aoMap = k(R), Q.aoMap.colorSpace = oA, 'def Shader "Transform2d_occlusion"' in b && l(Q.aoMap, b['def Shader "Transform2d_occlusion"']);
3085
- }
3086
- }
3087
- }
3088
- return Q;
3089
- }
3090
- function u(b, Q) {
3091
- for (const m in b) {
3092
- const D = b[m];
3093
- if (m.startsWith(`def Shader "${Q}"`))
3094
- return D;
3095
- if (typeof D == "object") {
3096
- const w = u(D, Q);
3097
- if (w) return w;
3098
- }
3099
- }
3100
- }
3101
- function k(b) {
3102
- if ("asset inputs:file" in b) {
3103
- const Q = b["asset inputs:file"].replace(/@*/g, "").trim(), D = new Te().load(o[Q]), w = {
3104
- '"clamp"': Me,
3105
- '"mirror"': Le,
3106
- '"repeat"': xA
3107
- };
3108
- return "token inputs:wrapS" in b && (D.wrapS = w[b["token inputs:wrapS"]]), "token inputs:wrapT" in b && (D.wrapT = w[b["token inputs:wrapT"]]), D;
3109
- }
3110
- return null;
3111
- }
3112
- function F(b) {
3113
- const Q = C(g(b)), m = h(p(b)), D = Q ? new Ne(Q, m) : new ie();
3114
- if ("matrix4d xformOp:transform" in b) {
3115
- const w = JSON.parse("[" + b["matrix4d xformOp:transform"].replace(/[()]*/g, "") + "]");
3116
- D.matrix.fromArray(w), D.matrix.decompose(D.position, D.quaternion, D.scale);
3117
- }
3118
- return D;
3119
- }
3120
- function G(b, Q) {
3121
- for (const m in b)
3122
- if (m.startsWith("def Scope"))
3123
- G(b[m], Q);
3124
- else if (m.startsWith("def Xform")) {
3125
- const D = F(b[m]);
3126
- /def Xform "(\w+)"/.test(m) && (D.name = /def Xform "(\w+)"/.exec(m)[1]), Q.add(D), G(b[m], D);
3127
- }
3128
- }
3129
- const M = new kA();
3130
- return G(I, M), M;
3131
- }
3132
- }
3133
- function Gi() {
3134
- const n = new yi();
3135
- return n.manager.onError = (A) => {
3136
- V.emit("load-error", `Failed to load file ${A}`);
3137
- }, n;
3138
- }
3139
- function xi(n) {
3140
- const A = z(
3141
- async (a, t, i) => {
3142
- var I, g;
3143
- const s = new Map(t.map((B) => [B.name, B])), o = (((I = a.buffers) == null ? void 0 : I.length) || 0) + (((g = a.images) == null ? void 0 : g.length) || 0);
3144
- let r = 0;
3145
- const c = () => {
3146
- r++, i(r / o * 100);
3147
- };
3148
- if (a.buffers)
3149
- for (let B = 0; B < a.buffers.length; B++) {
3150
- const C = a.buffers[B];
3151
- if (!C.uri || C.uri.startsWith("data:")) {
3152
- c();
3153
- continue;
3154
- }
3155
- const f = C.uri.split("/").pop() || "", d = s.get(f);
3156
- if (d) {
3157
- const p = await d.arrayBuffer(), E = await pe(p);
3158
- C.uri = `data:application/octet-stream;base64,${E}`;
3159
- }
3160
- c();
3161
- }
3162
- if (a.images)
3163
- for (let B = 0; B < a.images.length; B++) {
3164
- const C = a.images[B];
3165
- if (!C.uri || C.uri.startsWith("data:")) {
3166
- c();
3167
- continue;
3168
- }
3169
- const f = C.uri.split("/").pop() || "", d = s.get(f);
3170
- if (d) {
3171
- const p = await d.arrayBuffer(), E = await pe(p), l = d.type || "image/png";
3172
- C.uri = `data:${l};base64,${E}`;
3173
- }
3174
- c();
3175
- }
3176
- return a;
3177
- },
3178
- []
3179
- );
3180
- return { loadGltf: z(
3181
- (a, t, i) => {
3182
- const s = new FileReader();
3183
- s.onload = async (o) => {
3184
- var g;
3185
- const r = JSON.parse((g = o.target) == null ? void 0 : g.result);
3186
- i(10);
3187
- const c = await A(
3188
- r,
3189
- t,
3190
- (B) => {
3191
- i(10 + B * 0.8);
3192
- }
3193
- );
3194
- oe().parse(JSON.stringify(c), "", (B) => {
3195
- n({
3196
- type: "set-file",
3197
- payload: {
3198
- model: B.scene,
3199
- type: q.gltf,
3200
- name: a.name
3201
- }
3202
- });
3203
- }), i(100), n({ type: "set-file-loading", payload: !1 });
3204
- }, s.readAsText(a);
3205
- },
3206
- [n, A]
3207
- ) };
3208
- }
3209
- function Ti(n) {
3210
- return { loadBinary: z(
3211
- (e, a, t) => {
3212
- const i = new FileReader();
3213
- i.onload = async (s) => {
3214
- var o;
3215
- if ((o = s.target) != null && o.result) {
3216
- const r = s.target.result;
3217
- if (a === q.glb)
3218
- oe().parse(r, "", (I) => {
3219
- n({
3220
- type: "set-file",
3221
- payload: {
3222
- model: I.scene,
3223
- type: q.glb,
3224
- name: e.name
3225
- }
3226
- });
3227
- });
3228
- else if (a === q.usdz) {
3229
- const I = Gi().parse(r);
3230
- n({
3231
- type: "set-file",
3232
- payload: {
3233
- model: I,
3234
- type: q.usdz,
3235
- name: e.name
3236
- }
3237
- });
3238
- }
3239
- t(), n({ type: "set-file-loading", payload: !1 });
3240
- }
3241
- }, i.onerror = (s) => {
3242
- console.error("Error reading file:", s), n({ type: "set-file-loading", payload: !1 });
3243
- }, i.readAsArrayBuffer(e);
3244
- },
3245
- [n]
3246
- ) };
3247
- }
3248
- function Li(n) {
3249
- const A = Ct(!1), [e, a] = bt(Ca, He), { loadGltf: t } = xi(a), { loadBinary: i } = Ti(a), s = z(
3250
- (B, C) => B.find((f) => f.name.endsWith("." + C)),
3251
- []
3252
- ), o = z((B) => {
3253
- a({ type: "set-progress", payload: B }), V.emit("load-progress", B);
3254
- }, []), r = z(() => {
3255
- a({ type: "reset-state" }), V.emit("load-reset");
3256
- }, []), c = z(
3257
- (B) => {
3258
- if (B.length === 0) return;
3259
- const C = s(B, q.gltf), f = s(B, q.glb), d = s(B, q.usdz), p = [C, f, d].filter(
3260
- Boolean
3261
- );
3262
- if (p.length > 1) {
3263
- V.emit("multiple-models", p);
3264
- return;
3265
- }
3266
- const E = B.filter(
3267
- (h) => h !== C && h !== f && h !== d
3268
- ), l = (h) => {
3269
- o(h), h === 100 && (A.current = !0);
3270
- };
3271
- if (C)
3272
- t(C, E, l);
3273
- else if (f)
3274
- i(f, q.glb, () => l(100));
3275
- else if (d)
3276
- i(
3277
- d,
3278
- q.usdz,
3279
- () => l(100)
3280
- );
3281
- else {
3282
- V.emit("not-loaded-files", B), a({ type: "set-file-loading", payload: !1 });
3283
- return;
3284
- }
3285
- },
3286
- [o, s, t, i]
3287
- ), I = z(
3288
- async (B) => {
3289
- const C = [];
3290
- V.emit("load-start"), a({ type: "reset-state" }), a({ type: "set-file-loading", payload: !0 }), o(0), A.current = !1;
3291
- for (const f of B)
3292
- if (f instanceof File)
3293
- C.push(f);
3294
- else if ("kind" in f && f.kind === "directory") {
3295
- const d = await ba(f);
3296
- C.push(...d);
3297
- }
3298
- c(C);
3299
- },
3300
- [c, o]
3301
- );
3302
- lt(() => {
3303
- A.current && e.file && (V.emit("load-complete", e.file), A.current = !1, n && e.file.model && n.load(e.file.model));
3304
- }, [e.file, n]);
3305
- const g = Mi(
3306
- n,
3307
- a,
3308
- e.file
3309
- );
3310
- return {
3311
- ...e,
3312
- /**
3313
- * Add an event listener to the event system.
3314
- */
3315
- on: V.on,
3316
- /**
3317
- * Remove an event listener from the event system.
3318
- */
3319
- off: V.off,
3320
- /**
3321
- * Load a model and integrate it with the optimizer if available.
3322
- * This also makes the model available in the use-model-context hook.
3323
- */
3324
- load: I,
3325
- /**
3326
- * Reset the model and optimizer state to the initial state.
3327
- */
3328
- reset: r,
3329
- /**
3330
- * Integration of the optimizer
3331
- * An object containing functions to interact with the optimizer.
3332
- *
3333
- * It exposes the following functions:
3334
- *
3335
- * - `simplifyOptimization(options?: SimplifyOptions)`: Runs the simplification optimization with the given options.
3336
- * - `dedupOptimization(options?: DedupOptions)`: Runs the deduplication optimization with the given options.
3337
- * - `quantizeOptimization(options?: QuantizeOptions)`: Runs the quantization optimization with the given options.
3338
- * - `texturesCompressionOptimization(options?: TextureCompressionOptions)`: Runs the texture compression optimization with the given options.
3339
- * - `getSize()`: Returns the size of the optimized model.
3340
- * - `reset()`: Resets the optimizer.
3341
- * - `report`: The report state of the optimizer.
3342
- * - `error`: The error state of the optimizer.
3343
- * - `loading`: The loading state of the optimizer.
3344
- */
3345
- optimize: g
3346
- };
3347
- }
3348
- function Mi(n, A, e) {
3349
- const a = z(
3350
- (o) => {
3351
- oe().parse(
3352
- o.buffer,
3353
- "",
3354
- (c) => {
3355
- A({
3356
- type: "set-file",
3357
- payload: {
3358
- model: c.scene,
3359
- type: q.glb,
3360
- name: (e == null ? void 0 : e.name) || "optimized.glb"
3361
- }
3362
- });
3363
- },
3364
- (c) => {
3365
- console.error("Error loading new model:", c);
3366
- }
3367
- );
3368
- },
3369
- [A, e]
3370
- ), t = z(
3371
- async (o, r) => {
3372
- if (!n || !o) {
3373
- console.warn("Optimizer or optimization function is not available");
3374
- return;
3375
- }
3376
- try {
3377
- await o(r);
3378
- const c = await n.getModel();
3379
- c && a(c);
3380
- } catch (c) {
3381
- console.error("Optimization failed:", c);
3382
- }
3383
- },
3384
- [n, a]
3385
- ), i = (o) => () => {
3386
- console.warn(o);
3387
- }, s = {
3388
- simplifyOptimization: i(
3389
- "Optimizer is not available"
3390
- ),
3391
- dedupOptimization: i("Optimizer is not available"),
3392
- quantizeOptimization: i(
3393
- "Optimizer is not available"
3394
- ),
3395
- normalsOptimization: i("Optimizer is not available"),
3396
- texturesCompressOptimization: i(
3397
- "Optimizer is not available"
3398
- ),
3399
- getSize: i("Optimizer is not available"),
3400
- reset: i("Optimizer is not available"),
3401
- report: null,
3402
- error: null,
3403
- loading: !1
3404
- };
3405
- return n ? {
3406
- simplifyOptimization: (o) => t(n.simplifyOptimization, o),
3407
- dedupOptimization: (o) => t(n.dedupOptimization, o),
3408
- quantizeOptimization: (o) => t(n.quantizeOptimization, o),
3409
- normalsOptimization: (o) => t(n.normalsOptimization, o),
3410
- texturesCompressOptimization: (o) => t(n.texturesOptimization, o),
3411
- getSize: n.getSize,
3412
- reset: n.reset,
3413
- report: n.report,
3414
- // Include the report state
3415
- error: n.error,
3416
- // Include the error state
3417
- loading: n.loading
3418
- // Include the loading state
3419
- } : s;
3420
- }
3421
- const gt = ft({}), qi = ({ children: n, optimizer: A }) => {
3422
- const e = Li(A);
3423
- return /* @__PURE__ */ Bt(gt.Provider, { value: e, children: n });
3424
- }, Hi = () => Et(gt);
3425
- export {
3426
- q as M,
3427
- gt as a,
3428
- qi as b,
3429
- Hi as c,
3430
- Li as u
3431
- };