@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.
- package/CHANGELOG.md +210 -0
- package/README.md +202 -383
- package/package.json +66 -55
- package/project.json +55 -0
- package/src/index.ts +38 -0
- package/src/use-export-model/use-export-model.ts +113 -0
- package/src/use-load-model/event-system.ts +46 -0
- package/src/use-load-model/index.ts +15 -0
- package/src/use-load-model/model-context.tsx +174 -0
- package/src/use-load-model/state.ts +75 -0
- package/src/use-load-model/types.ts +284 -0
- package/src/use-load-model/use-load-model.ts +682 -0
- package/src/use-load-model/utils/calculate-referenced-bytes.ts +123 -0
- package/src/use-load-model/utils/index.ts +7 -0
- package/src/use-load-model/utils/read-directory.ts +35 -0
- package/src/use-load-model/utils/reconstruct-files.ts +85 -0
- package/src/use-load-model/utils/resolve-scene-payload.ts +151 -0
- package/{use-optimize-model/index.d.ts → src/use-optimize-model/index.ts} +2 -1
- package/src/use-optimize-model/state.ts +40 -0
- package/src/use-optimize-model/types.ts +37 -0
- package/src/use-optimize-model/use-calc-optimization-info.ts +97 -0
- package/src/use-optimize-model/use-optimize-model.ts +467 -0
- package/src/use-optimize-model/utils/index.ts +29 -0
- package/src/use-optimize-model/utils/texture-optimization.ts +292 -0
- package/src/use-optimize-model/utils/validation.ts +62 -0
- package/src/utils/server-communication.ts +351 -0
- package/tsconfig.json +21 -0
- package/tsconfig.lib.json +16 -0
- package/vite.config.ts +77 -0
- package/GLTFExporter-BmLF430n.cjs +0 -18
- package/GLTFExporter-C4hCeb4H.js +0 -1263
- package/index.cjs.js +0 -1
- package/index.d.ts +0 -3
- package/index.es.js +0 -12
- package/model-context-CQJta_vi.cjs +0 -9
- package/model-context-D1Q8WdpT.js +0 -3431
- package/use-export-model/types.d.ts +0 -19
- package/use-export-model/use-export-model.d.ts +0 -14
- package/use-export-model/utils/data-uri-to-blob.d.ts +0 -9
- package/use-export-model/utils/export-handlers.d.ts +0 -23
- package/use-export-model/utils/file-helpers.d.ts +0 -17
- package/use-export-model/utils/index.d.ts +0 -3
- package/use-export-model-AFharGg5.js +0 -77
- package/use-export-model-CWcKp4A3.cjs +0 -1
- package/use-export-model.cjs.js +0 -1
- package/use-export-model.es.js +0 -4
- package/use-load-model/event-system.d.ts +0 -7
- package/use-load-model/file-type-hooks/index.d.ts +0 -2
- package/use-load-model/file-type-hooks/use-load-binary.d.ts +0 -11
- package/use-load-model/file-type-hooks/use-load-gltf.d.ts +0 -5
- package/use-load-model/index.d.ts +0 -3
- package/use-load-model/loaders/create-gltf-loader.d.ts +0 -3
- package/use-load-model/loaders/create-usdz-loader.d.ts +0 -3
- package/use-load-model/loaders/index.d.ts +0 -2
- package/use-load-model/model-context.d.ts +0 -78
- package/use-load-model/state.d.ts +0 -19
- package/use-load-model/types.d.ts +0 -51
- package/use-load-model/use-load-model.d.ts +0 -74
- package/use-load-model/utils/array-buffer-to-base64.d.ts +0 -2
- package/use-load-model/utils/index.d.ts +0 -2
- package/use-load-model/utils/read-directory.d.ts +0 -8
- package/use-load-model.cjs.js +0 -1
- package/use-load-model.es.js +0 -8
- package/use-optimize-model/state.d.ts +0 -13
- package/use-optimize-model/types.d.ts +0 -37
- package/use-optimize-model/use-optimize-model.d.ts +0 -29
- package/use-optimize-model-Cqkp__Vi.cjs +0 -1
- package/use-optimize-model-DZWIb_40.js +0 -127
- package/use-optimize-model.cjs.js +0 -1
- package/use-optimize-model.es.js +0 -4
- /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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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdBKGogACgCBBATQQAhBCAHQeAAaiEMIAdB5ABqIQoDQCAHQShqEARBAksgBCAXTnJFBEAgBygCQCAHKAI8QQN0aikCACIdQhCIp0H/AXEhCyAHKAJQIAcoAkxBA3RqKQIAIh5CEIinQf8BcSEJIAcoAkggBygCREEDdGopAgAiH0IgiKchCCAeQiCIISAgHUIgiKchAgJAIB9CEIinQf8BcSIDQQJPBEACQCAGRSADQRlJckUEQCAIIAdBKGogA0EgIAcoAixrIg0gDSADSxsiDRAFIAMgDWsiA3RqIQggB0EoahAEGiADRQ0BIAdBKGogAxAFIAhqIQgMAQsgB0EoaiADEAUgCGohCCAHQShqEAQaCyAHKQJUISEgByAINgJUIAcgITcDWAwBCwJAIANFBEAgAgRAIAcoAlQhCAwDCyAHKAJYIQgMAQsCQAJAIAdBKGpBARAFIAggAkVqaiIDQQNGBEAgBygCVEF/aiIDIANFaiEIDAELIANBAnQgB2ooAlQiCCAIRWohCCADQQFGDQELIAcgBygCWDYCXAsLIAcgBygCVDYCWCAHIAg2AlQLICCnIQMgCQRAIAdBKGogCRAFIANqIQMLIAkgC2pBFE8EQCAHQShqEAQaCyALBEAgB0EoaiALEAUgAmohAgsgB0EoahAEGiAHIAcoAmggAmoiCSADajYCaCAKIAwgCCAJSxsoAgAhDSAHIAdBKGogHUIYiKdB/wFxEAggHadB//8DcWo2AjwgByAHQShqIB5CGIinQf8BcRAIIB6nQf//A3FqNgJMIAdBKGoQBBogB0EoaiAfQhiIp0H/AXEQCCEOIAdB8ABqIARBBHRqIgsgCSANaiAIazYCDCALIAg2AgggCyADNgIEIAsgAjYCACAHIA4gH6dB//8DcWo2AkQgBEEBaiEEDAELCyAEIBdIDQEgEkFgaiEYIAdB4ABqIRogB0HkAGohGyABIQMDQCAHQShqEARBAksgBCAFTnJFBEAgBygCQCAHKAI8QQN0aikCACIdQhCIp0H/AXEhCyAHKAJQIAcoAkxBA3RqKQIAIh5CEIinQf8BcSEIIAcoAkggBygCREEDdGopAgAiH0IgiKchCSAeQiCIISAgHUIgiKchDAJAIB9CEIinQf8BcSICQQJPBEACQCAGRSACQRlJckUEQCAJIAdBKGogAkEgIAcoAixrIgogCiACSxsiChAFIAIgCmsiAnRqIQkgB0EoahAEGiACRQ0BIAdBKGogAhAFIAlqIQkMAQsgB0EoaiACEAUgCWohCSAHQShqEAQaCyAHKQJUISEgByAJNgJUIAcgITcDWAwBCwJAIAJFBEAgDARAIAcoAlQhCQwDCyAHKAJYIQkMAQsCQAJAIAdBKGpBARAFIAkgDEVqaiICQQNGBEAgBygCVEF/aiICIAJFaiEJDAELIAJBAnQgB2ooAlQiCSAJRWohCSACQQFGDQELIAcgBygCWDYCXAsLIAcgBygCVDYCWCAHIAk2AlQLICCnIRQgCARAIAdBKGogCBAFIBRqIRQLIAggC2pBFE8EQCAHQShqEAQaCyALBEAgB0EoaiALEAUgDGohDAsgB0EoahAEGiAHIAcoAmggDGoiGSAUajYCaCAbIBogCSAZSxsoAgAhHCAHIAdBKGogHUIYiKdB/wFxEAggHadB//8DcWo2AjwgByAHQShqIB5CGIinQf8BcRAIIB6nQf//A3FqNgJMIAdBKGoQBBogByAHQShqIB9CGIinQf8BcRAIIB+nQf//A3FqNgJEIAcgB0HwAGogBEEDcUEEdGoiDSkDCCIdNwPIASAHIA0pAwAiHjcDwAECQAJAAkAgBygCvAEiDiAepyICaiIWIBNLDQAgAyAHKALEASIKIAJqIgtqIBhLDQAgEiADayALQSBqTw0BCyAHIAcpA8gBNwMQIAcgBykDwAE3AwggAyASIAdBCGogB0G8AWogEyAPIBUgERAeIQsMAQsgAiADaiEIIAMgDhAHIAJBEU8EQCADQRBqIQIDQCACIA5BEGoiDhAHIAJBEGoiAiAISQ0ACwsgCCAdpyIOayECIAcgFjYCvAEgDiAIIA9rSwRAIA4gCCAVa0sEQEFsIQsMAgsgESACIA9rIgJqIhYgCmogEU0EQCAIIBYgChAPGgwCCyAIIBZBACACaxAPIQggByACIApqIgo2AsQBIAggAmshCCAPIQILIA5BEE8EQCAIIApqIQoDQCAIIAIQByACQRBqIQIgCEEQaiIIIApJDQALDAELAkAgDkEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgDkECdCIKQcAeaigCAGoiAhAXIAIgCkHgHmooAgBrIQIgBygCxAEhCgwBCyAIIAIQDAsgCkEJSQ0AIAggCmohCiAIQQhqIgggAkEIaiICa0EPTARAA0AgCCACEAwgAkEIaiECIAhBCGoiCCAKSQ0ADAIACwALA0AgCCACEAcgAkEQaiECIAhBEGoiCCAKSQ0ACwsgCxADBEAgCyEQDAQFIA0gDDYCACANIBkgHGogCWs2AgwgDSAJNgIIIA0gFDYCBCAEQQFqIQQgAyALaiEDDAILAAsLIAQgBUgNASAEIBdrIQtBACEEA0AgCyAFSARAIAcgB0HwAGogC0EDcUEEdGoiAikDCCIdNwPIASAHIAIpAwAiHjcDwAECQAJAAkAgBygCvAEiDCAepyICaiIKIBNLDQAgAyAHKALEASIJIAJqIhBqIBhLDQAgEiADayAQQSBqTw0BCyAHIAcpA8gBNwMgIAcgBykDwAE3AxggAyASIAdBGGogB0G8AWogEyAPIBUgERAeIRAMAQsgAiADaiEIIAMgDBAHIAJBEU8EQCADQRBqIQIDQCACIAxBEGoiDBAHIAJBEGoiAiAISQ0ACwsgCCAdpyIGayECIAcgCjYCvAEgBiAIIA9rSwRAIAYgCCAVa0sEQEFsIRAMAgsgESACIA9rIgJqIgwgCWogEU0EQCAIIAwgCRAPGgwCCyAIIAxBACACaxAPIQggByACIAlqIgk2AsQBIAggAmshCCAPIQILIAZBEE8EQCAIIAlqIQYDQCAIIAIQByACQRBqIQIgCEEQaiIIIAZJDQALDAELAkAgBkEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgBkECdCIGQcAeaigCAGoiAhAXIAIgBkHgHmooAgBrIQIgBygCxAEhCQwBCyAIIAIQDAsgCUEJSQ0AIAggCWohBiAIQQhqIgggAkEIaiICa0EPTARAA0AgCCACEAwgAkEIaiECIAhBCGoiCCAGSQ0ADAIACwALA0AgCCACEAcgAkEQaiECIAhBEGoiCCAGSQ0ACwsgEBADDQMgC0EBaiELIAMgEGohAwwBCwsDQCAEQQNHBEAgACAEQQJ0IgJqQazQAWogAiAHaigCVDYCACAEQQFqIQQMAQsLIAcoArwBIQgLQbp/IRAgEyAIayIAIBIgA2tLDQAgAwR/IAMgCCAAEAsgAGoFQQALIAFrIRALIAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/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
|
-
};
|