@jdultra/threedtiles 11.1.13 → 12.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/decoder/B3DMDecoder.d.ts +3 -4
- package/dist/draco-decoders/draco_decoder.js +33 -1
- package/dist/draco-decoders/draco_decoder.wasm +0 -0
- package/dist/draco-decoders/draco_encoder.js +33 -1
- package/dist/draco-decoders/draco_wasm_wrapper.js +116 -1
- package/dist/draco-decoders/gltf/draco_decoder.js +33 -1
- package/dist/draco-decoders/gltf/draco_encoder.js +33 -1
- package/dist/draco-decoders/gltf/draco_wasm_wrapper.js +116 -1
- package/dist/geometry/obb.d.ts +7 -11
- package/dist/ktx2-decoders/basis_transcoder.js +19 -1
- package/dist/threedtiles.cjs.js +21 -0
- package/dist/threedtiles.cjs.js.map +1 -0
- package/dist/threedtiles.es.js +3667 -0
- package/dist/threedtiles.es.js.map +1 -0
- package/dist/threedtiles.umd.js +21 -0
- package/dist/threedtiles.umd.js.map +1 -0
- package/dist/tileset/OGC3DTile.d.ts +10 -8
- package/dist/tileset/OcclusionCullingService.d.ts +4 -5
- package/dist/tileset/TileLoader.d.ts +1 -2
- package/dist/tileset/instanced/InstancedOGC3DTile.d.ts +3 -3
- package/dist/tileset/instanced/InstancedTile.d.ts +6 -3
- package/dist/tileset/instanced/InstancedTileLoader.d.ts +1 -2
- package/dist/tileset/instanced/MeshTile.d.ts +1 -2
- package/package.json +43 -66
- package/dist/index.d.ts +0 -1
- package/dist/index.html +0 -1
- package/dist/threedtiles.min.js +0 -3
- package/dist/threedtiles.min.js.LICENSE.txt +0 -24
- package/dist/threedtiles.min.js.map +0 -1
|
@@ -0,0 +1,3667 @@
|
|
|
1
|
+
var mA = Object.defineProperty;
|
|
2
|
+
var QA = (n, e, a) => e in n ? mA(n, e, { enumerable: !0, configurable: !0, writable: !0, value: a }) : n[e] = a;
|
|
3
|
+
var fa = (n, e, a) => QA(n, typeof e != "symbol" ? e + "" : e, a);
|
|
4
|
+
import * as m from "three";
|
|
5
|
+
import { Vector3 as H, Box3 as Ha, Sphere as qa, Matrix3 as wA, BufferGeometry as ba, BufferAttribute as fe, TrianglesDrawMode as yA, TriangleFanDrawMode as ia, TriangleStripDrawMode as Ja, Loader as da, LoaderUtils as De, FileLoader as ce, Color as se, LinearSRGBColorSpace as q, SpotLight as kA, PointLight as xA, DirectionalLight as DA, MeshBasicMaterial as ye, SRGBColorSpace as $, MeshPhysicalMaterial as Y, Vector2 as Oa, Matrix4 as Le, Quaternion as Ka, InstancedMesh as jA, InstancedBufferAttribute as MA, Object3D as Va, TextureLoader as RA, ImageBitmapLoader as FA, InterleavedBuffer as SA, InterleavedBufferAttribute as TA, LinearFilter as Me, LinearMipmapLinearFilter as ga, RepeatWrapping as sa, NearestFilter as za, PointsMaterial as LA, Material as ve, LineBasicMaterial as GA, MeshStandardMaterial as ua, DoubleSide as vA, PropertyBinding as UA, SkinnedMesh as NA, Mesh as _A, LineSegments as PA, Line as HA, LineLoop as qA, Points as JA, Group as Ue, PerspectiveCamera as OA, MathUtils as KA, OrthographicCamera as VA, Skeleton as zA, AnimationClip as YA, Bone as WA, InterpolateLinear as Ya, ColorManagement as ra, NearestMipmapNearestFilter as XA, LinearMipmapNearestFilter as ZA, NearestMipmapLinearFilter as $A, ClampToEdgeWrapping as et, MirroredRepeatWrapping as at, InterpolateDiscrete as At, FrontSide as tt, Texture as Ba, VectorKeyframeTrack as Ca, NumberKeyframeTrack as Ea, QuaternionKeyframeTrack as pa, Interpolant as it, CompressedCubeTexture as st, CompressedArrayTexture as rt, CompressedTexture as ma, RGBAFormat as le, RGBA_ASTC_4x4_Format as Wa, RGB_BPTC_UNSIGNED_Format as nt, RGBA_BPTC_Format as ot, RGBA_ETC2_EAC_Format as ct, RGBA_PVRTC_4BPPV1_Format as bt, RGBA_S3TC_DXT5_Format as dt, RGB_ETC1_Format as gt, RGB_ETC2_Format as ht, RGB_PVRTC_4BPPV1_Format as lt, RGBA_S3TC_DXT1_Format as It, UnsignedByteType as W, HalfFloatType as Ie, FloatType as je, DataTexture as ft, Data3DTexture as ut, NoColorSpace as Bt, RGFormat as ke, RedFormat as xe, RGBA_ASTC_6x6_Format as Qa } from "three";
|
|
6
|
+
class Qi {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.cullMap = [], this.cullMaterial = new m.MeshBasicMaterial({ vertexColors: !0 }), this.cullMaterial.side = m.FrontSide, this.cullTarget = this._createCullTarget(), this.cullPixels = new Uint8Array(4 * this.cullTarget.width * this.cullTarget.height);
|
|
9
|
+
}
|
|
10
|
+
setSide(e) {
|
|
11
|
+
this.cullMaterial.side = e;
|
|
12
|
+
}
|
|
13
|
+
_createCullTarget() {
|
|
14
|
+
const e = new m.WebGLRenderTarget(Math.floor(0.05 * window.innerWidth), Math.floor(0.05 * window.innerHeight));
|
|
15
|
+
return e.texture.format = m.RGBAFormat, e.texture.colorSpace = m.LinearSRGBColorSpace, e.texture.minFilter = m.NearestFilter, e.texture.magFilter = m.NearestFilter, e.texture.generateMipmaps = !1, e.stencilBuffer = !1, e.depthBuffer = !0, e.depthTexture = new m.DepthTexture(), e.depthTexture.format = m.DepthFormat, e.depthTexture.type = m.UnsignedShortType, e;
|
|
16
|
+
}
|
|
17
|
+
update(e, a, A) {
|
|
18
|
+
let t = a.getRenderTarget(), i = e.overrideMaterial;
|
|
19
|
+
e.overrideMaterial = this.cullMaterial, a.setRenderTarget(this.cullTarget), a.render(e, A), e.overrideMaterial = i, a.setRenderTarget(t), a.readRenderTargetPixels(this.cullTarget, 0, 0, this.cullTarget.width, this.cullTarget.height, this.cullPixels), this.cullMap = [];
|
|
20
|
+
for (let s = 0; s < this.cullPixels.length; s += 4) {
|
|
21
|
+
const r = m.MathUtils.clamp(this.cullPixels[s], 0, 255) << 16 ^ m.MathUtils.clamp(this.cullPixels[s + 1], 0, 255) << 8 ^ m.MathUtils.clamp(this.cullPixels[s + 2], 0, 255);
|
|
22
|
+
this.cullMap[r] = !0;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
hasID(e) {
|
|
26
|
+
return this.cullMap[e];
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
class te {
|
|
30
|
+
constructor(e) {
|
|
31
|
+
this.center = new H(e[0], e[1], e[2]);
|
|
32
|
+
var a = new H(e[3], e[4], e[4]), A = new H(e[6], e[7], e[8]), t = new H(e[9], e[10], e[11]);
|
|
33
|
+
this.halfWidth = a.length(), this.halfHeight = A.length(), this.halfDepth = t.length(), this.aabb = new Ha();
|
|
34
|
+
const i = new H(), s = [-1, 1];
|
|
35
|
+
for (let r of s) for (let b of s) for (let o of s) i.copy(this.center).addScaledVector(a, r).addScaledVector(A, b).addScaledVector(t, o), this.aabb.expandByPoint(i);
|
|
36
|
+
a.normalize(), A.normalize(), t.normalize(), this.sphere = new qa(this.center, Math.sqrt(this.halfWidth * this.halfWidth + this.halfHeight * this.halfHeight + this.halfDepth * this.halfDepth)), this.matrixToOBBCoordinateSystem = new wA(), this.matrixToOBBCoordinateSystem.set(a.x, a.y, a.z, A.x, A.y, A.z, t.x, t.y, t.z);
|
|
37
|
+
}
|
|
38
|
+
inFrustum(e) {
|
|
39
|
+
return e.intersectsSphere(this.sphere);
|
|
40
|
+
}
|
|
41
|
+
distanceToPoint(e) {
|
|
42
|
+
let a = e.clone();
|
|
43
|
+
a.sub(this.center), a.applyMatrix3(this.matrixToOBBCoordinateSystem);
|
|
44
|
+
let A = Math.max(0, Math.max(-this.halfWidth - a.x, a.x - this.halfWidth)), t = Math.max(0, Math.max(-this.halfHeight - a.y, a.y - this.halfHeight)), i = Math.max(0, Math.max(-this.halfDepth - a.z, a.z - this.halfDepth));
|
|
45
|
+
return Math.sqrt(A * A + t * t + i * i);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* @copyright 2021 Aaron Zhao <yujianzhao2013@gmail.com>
|
|
50
|
+
* @license MIT
|
|
51
|
+
* Heap implementation using 1-d array
|
|
52
|
+
* Children is index of 2n + 1 and 2n + 2 where n is the parent index
|
|
53
|
+
* Parent is math.floor((m - 1) / 2) where m is is the child index
|
|
54
|
+
* @class Heap
|
|
55
|
+
*/
|
|
56
|
+
var Ct = class {
|
|
57
|
+
constructor(n, e) {
|
|
58
|
+
if (this._data = [], this._comparator = function(a, A) {
|
|
59
|
+
return a >= A;
|
|
60
|
+
}, n != null) {
|
|
61
|
+
if (!Array.isArray(n)) throw Error("Constructor expects data to be an array");
|
|
62
|
+
this._data = n;
|
|
63
|
+
}
|
|
64
|
+
if (e != null) {
|
|
65
|
+
if (typeof e != "function") throw Error("Constructor expects comparator to be a function");
|
|
66
|
+
this._comparator = e;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
peek() {
|
|
70
|
+
return this.size() < 1 ? null : this._data[0];
|
|
71
|
+
}
|
|
72
|
+
pop() {
|
|
73
|
+
if (this.size() < 1) return null;
|
|
74
|
+
const n = this._data[0];
|
|
75
|
+
return this.swap(this.size() - 1, 0), this._data.pop(), this.heapifyDown(0), n;
|
|
76
|
+
}
|
|
77
|
+
replaceTop(n) {
|
|
78
|
+
if (this.size() < 1) return null;
|
|
79
|
+
const e = this._data[0];
|
|
80
|
+
return this._data[0] = n, this.heapifyDown(0), e;
|
|
81
|
+
}
|
|
82
|
+
push(n) {
|
|
83
|
+
this._data.push(n), this.heapifyUp(this._data.length - 1);
|
|
84
|
+
}
|
|
85
|
+
size() {
|
|
86
|
+
return this._data.length;
|
|
87
|
+
}
|
|
88
|
+
swap(n, e) {
|
|
89
|
+
const a = this._data[n];
|
|
90
|
+
this._data[n] = this._data[e], this._data[e] = a;
|
|
91
|
+
}
|
|
92
|
+
heapifyUp(n) {
|
|
93
|
+
if (n === 0) return;
|
|
94
|
+
const e = Math.floor((n - 1) / 2);
|
|
95
|
+
this._comparator(this._data[n], this._data[e]) || (this.swap(n, e), this.heapifyUp(e));
|
|
96
|
+
}
|
|
97
|
+
heapifyDown(n) {
|
|
98
|
+
const e = 2 * n + 1, a = 2 * n + 2;
|
|
99
|
+
if (e >= this._data.length) return;
|
|
100
|
+
const A = a < this._data.length && !this._comparator(this._data[a], this._data[e]) ? a : e;
|
|
101
|
+
this._comparator(this._data[n], this._data[A]) && (this.swap(n, A), this.heapifyDown(A));
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* @copyright 2021 Aaron Zhao <yujianzhao2013@gmail.com>
|
|
106
|
+
* @license MIT
|
|
107
|
+
* FIFO queue data structure
|
|
108
|
+
* @class Queue
|
|
109
|
+
*/
|
|
110
|
+
var Et = class {
|
|
111
|
+
constructor(n, e) {
|
|
112
|
+
if (this._data = [], this._head = 0, this._cap = null, n != null) {
|
|
113
|
+
if (!Array.isArray(n)) throw Error("Constructor expects data to be an array");
|
|
114
|
+
this._data = n;
|
|
115
|
+
}
|
|
116
|
+
if (e != null) {
|
|
117
|
+
if (typeof e != "number") throw Error("Constructor expects capacity to be a number");
|
|
118
|
+
this._cap = e;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
enqueue(n) {
|
|
122
|
+
return !(this._cap != null && this.size() >= this._cap) && (this._data.push(n), !0);
|
|
123
|
+
}
|
|
124
|
+
dequeue() {
|
|
125
|
+
if (this.size() === 0) return null;
|
|
126
|
+
const n = this._data[this._head];
|
|
127
|
+
return this._head += 1, 2 * this._head >= this._data.length && (this._data = this._data.slice(this._head), this._head = 0), n;
|
|
128
|
+
}
|
|
129
|
+
peek(n = !1) {
|
|
130
|
+
return this.size() > 0 ? n ? this._data[this._data.length - 1] : this._data[this._head] : null;
|
|
131
|
+
}
|
|
132
|
+
size() {
|
|
133
|
+
return this._data.length - this._head;
|
|
134
|
+
}
|
|
135
|
+
updateCapacity(n) {
|
|
136
|
+
this._cap = n;
|
|
137
|
+
}
|
|
138
|
+
reset() {
|
|
139
|
+
this._data = [], this._head = 0;
|
|
140
|
+
}
|
|
141
|
+
forEach(n) {
|
|
142
|
+
for (let e = this._head; e < this._data.length; e += 1) n(this._data[e], e - this._head);
|
|
143
|
+
}
|
|
144
|
+
toArray() {
|
|
145
|
+
return this._data.slice(this._head);
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
/**
|
|
149
|
+
* @copyright 2021 Aaron Zhao <yujianzhao2013@gmail.com>
|
|
150
|
+
* @license MIT
|
|
151
|
+
* Linked hash map data structure
|
|
152
|
+
* @class LinkedHashMap
|
|
153
|
+
*/
|
|
154
|
+
var Xa = { Heap: Ct, Queue: Et, LinkedHashMap: class {
|
|
155
|
+
constructor() {
|
|
156
|
+
this._data = /* @__PURE__ */ new Map(), this._link = /* @__PURE__ */ new Map(), this._head = void 0, this._tail = void 0;
|
|
157
|
+
}
|
|
158
|
+
put(n, e, a = !1) {
|
|
159
|
+
this.has(n) ? this._data.set(n, e) : (this._data.set(n, e), this._link.set(n, { previous: void 0, next: void 0 }), this._head == null ? (this._head = n, this._tail = n) : a ? (this._link.get(this._head).previous = n, this._link.get(n).next = this._head, this._head = n) : (this._link.get(this._tail).next = n, this._link.get(n).previous = this._tail, this._tail = n));
|
|
160
|
+
}
|
|
161
|
+
head() {
|
|
162
|
+
return { key: this._head, value: this.get(this._head), next: () => this.next(this._head), previous: () => null };
|
|
163
|
+
}
|
|
164
|
+
tail() {
|
|
165
|
+
return { key: this._tail, value: this.get(this._tail), next: () => null, previous: () => this.previous(this._tail) };
|
|
166
|
+
}
|
|
167
|
+
get(n) {
|
|
168
|
+
return this._data.get(n);
|
|
169
|
+
}
|
|
170
|
+
previousKey(n) {
|
|
171
|
+
const e = this._link.get(n);
|
|
172
|
+
return e != null ? e.previous : void 0;
|
|
173
|
+
}
|
|
174
|
+
previousValue(n) {
|
|
175
|
+
return this.get(this.previousKey(n));
|
|
176
|
+
}
|
|
177
|
+
previous(n) {
|
|
178
|
+
const e = this.previousKey(n);
|
|
179
|
+
return { key: e, value: this.get(e), next: () => this.next(e), previous: () => this.previous(e) };
|
|
180
|
+
}
|
|
181
|
+
nextKey(n) {
|
|
182
|
+
const e = this._link.get(n);
|
|
183
|
+
return e != null ? e.next : void 0;
|
|
184
|
+
}
|
|
185
|
+
nextValue(n) {
|
|
186
|
+
return this.get(this.nextKey(n));
|
|
187
|
+
}
|
|
188
|
+
next(n) {
|
|
189
|
+
const e = this.nextKey(n);
|
|
190
|
+
return { key: e, value: this.get(e), next: () => this.next(e), previous: () => this.previous(e) };
|
|
191
|
+
}
|
|
192
|
+
remove(n) {
|
|
193
|
+
const e = this._data.get(n);
|
|
194
|
+
if (e != null) if (this.size() === 1) this.reset();
|
|
195
|
+
else {
|
|
196
|
+
if (n === this._head) {
|
|
197
|
+
const a = this._link.get(this._head);
|
|
198
|
+
this._link.get(a.next).previous = null, this._head = a.next;
|
|
199
|
+
} else if (n === this._tail) {
|
|
200
|
+
const a = this._link.get(this._tail);
|
|
201
|
+
this._link.get(a.previous).next = null, this._tail = a.previous;
|
|
202
|
+
} else {
|
|
203
|
+
const a = this._link.get(n), A = this._link.get(a.previous), t = this._link.get(a.next);
|
|
204
|
+
A.next = a.next, t.previous = a.previous;
|
|
205
|
+
}
|
|
206
|
+
this._link.delete(n), this._data.delete(n);
|
|
207
|
+
}
|
|
208
|
+
return e;
|
|
209
|
+
}
|
|
210
|
+
has(n) {
|
|
211
|
+
return this._data.has(n);
|
|
212
|
+
}
|
|
213
|
+
size() {
|
|
214
|
+
return this._data.size;
|
|
215
|
+
}
|
|
216
|
+
reset() {
|
|
217
|
+
this._data.clear(), this._link.clear(), this._head = void 0, this._tail = void 0;
|
|
218
|
+
}
|
|
219
|
+
keys() {
|
|
220
|
+
return this._data.keys();
|
|
221
|
+
}
|
|
222
|
+
values() {
|
|
223
|
+
return this._data.values();
|
|
224
|
+
}
|
|
225
|
+
entries() {
|
|
226
|
+
return this._data.entries();
|
|
227
|
+
}
|
|
228
|
+
toArray(n = "orderByInsert") {
|
|
229
|
+
if (n !== "orderByInsert") {
|
|
230
|
+
const e = [];
|
|
231
|
+
let a = this._head;
|
|
232
|
+
for (; a != null; ) e.push({ key: a, value: this.get(a) }), a = this.nextKey(a);
|
|
233
|
+
return e;
|
|
234
|
+
}
|
|
235
|
+
return Array.from(this.keys()).map((e) => ({ key: e, value: this.get(e) }));
|
|
236
|
+
}
|
|
237
|
+
} };
|
|
238
|
+
const pt = new TextDecoder();
|
|
239
|
+
class Za {
|
|
240
|
+
constructor(e, a, A, t) {
|
|
241
|
+
this.buffer = e, this.binOffset = a + A, this.binLength = t;
|
|
242
|
+
let i = null;
|
|
243
|
+
if (A !== 0) try {
|
|
244
|
+
const s = new Uint8Array(e, a, A);
|
|
245
|
+
i = JSON.parse(pt.decode(s));
|
|
246
|
+
} catch {
|
|
247
|
+
i = {};
|
|
248
|
+
}
|
|
249
|
+
else i = {};
|
|
250
|
+
this.header = i;
|
|
251
|
+
}
|
|
252
|
+
getKeys() {
|
|
253
|
+
return Object.keys(this.header);
|
|
254
|
+
}
|
|
255
|
+
getData(e, a, A = null, t = null) {
|
|
256
|
+
const i = this.header;
|
|
257
|
+
if (!(e in i)) return null;
|
|
258
|
+
const s = i[e];
|
|
259
|
+
if (s instanceof Object) {
|
|
260
|
+
if (Array.isArray(s)) return s;
|
|
261
|
+
{
|
|
262
|
+
const { buffer: r, binOffset: b, binLength: o } = this, d = s.byteOffset || 0, c = s.type || t, g = s.componentType || A;
|
|
263
|
+
if ("type" in s && t && s.type !== t) throw new Error("FeatureTable: Specified type does not match expected type.");
|
|
264
|
+
let l, h;
|
|
265
|
+
switch (c) {
|
|
266
|
+
case "SCALAR":
|
|
267
|
+
l = 1;
|
|
268
|
+
break;
|
|
269
|
+
case "VEC2":
|
|
270
|
+
l = 2;
|
|
271
|
+
break;
|
|
272
|
+
case "VEC3":
|
|
273
|
+
l = 3;
|
|
274
|
+
break;
|
|
275
|
+
case "VEC4":
|
|
276
|
+
l = 4;
|
|
277
|
+
break;
|
|
278
|
+
default:
|
|
279
|
+
throw new Error(`FeatureTable : Feature type not provided for "${e}".`);
|
|
280
|
+
}
|
|
281
|
+
const f = b + d, I = a * l;
|
|
282
|
+
switch (g) {
|
|
283
|
+
case "BYTE":
|
|
284
|
+
h = new Int8Array(r, f, I);
|
|
285
|
+
break;
|
|
286
|
+
case "UNSIGNED_BYTE":
|
|
287
|
+
h = new Uint8Array(r, f, I);
|
|
288
|
+
break;
|
|
289
|
+
case "SHORT":
|
|
290
|
+
h = new Int16Array(r, f, I);
|
|
291
|
+
break;
|
|
292
|
+
case "UNSIGNED_SHORT":
|
|
293
|
+
h = new Uint16Array(r, f, I);
|
|
294
|
+
break;
|
|
295
|
+
case "INT":
|
|
296
|
+
h = new Int32Array(r, f, I);
|
|
297
|
+
break;
|
|
298
|
+
case "UNSIGNED_INT":
|
|
299
|
+
h = new Uint32Array(r, f, I);
|
|
300
|
+
break;
|
|
301
|
+
case "FLOAT":
|
|
302
|
+
h = new Float32Array(r, f, I);
|
|
303
|
+
break;
|
|
304
|
+
case "DOUBLE":
|
|
305
|
+
h = new Float64Array(r, f, I);
|
|
306
|
+
break;
|
|
307
|
+
default:
|
|
308
|
+
throw new Error(`FeatureTable : Feature component type not provided for "${e}".`);
|
|
309
|
+
}
|
|
310
|
+
if (f + I * h.BYTES_PER_ELEMENT > b + o) throw new Error("FeatureTable: Feature data read outside binary body length.");
|
|
311
|
+
return h;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
return s;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
class mt extends Za {
|
|
318
|
+
constructor(e, a, A, t, i) {
|
|
319
|
+
super(e, A, t, i), this.batchSize = a;
|
|
320
|
+
}
|
|
321
|
+
getData(e, a = null, A = null) {
|
|
322
|
+
return super.getData(e, this.batchSize, a, A);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
function wa(n) {
|
|
326
|
+
let e, a, A, t = -1, i = 0;
|
|
327
|
+
for (let o = 0; o < n.length; ++o) {
|
|
328
|
+
const d = n[o];
|
|
329
|
+
if (e === void 0 && (e = d.array.constructor), e !== d.array.constructor) return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes."), null;
|
|
330
|
+
if (a === void 0 && (a = d.itemSize), a !== d.itemSize) return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes."), null;
|
|
331
|
+
if (A === void 0 && (A = d.normalized), A !== d.normalized) return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes."), null;
|
|
332
|
+
if (t === -1 && (t = d.gpuType), t !== d.gpuType) return console.error("THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.gpuType must be consistent across matching attributes."), null;
|
|
333
|
+
i += d.count * a;
|
|
334
|
+
}
|
|
335
|
+
const s = new e(i), r = new fe(s, a, A);
|
|
336
|
+
let b = 0;
|
|
337
|
+
for (let o = 0; o < n.length; ++o) {
|
|
338
|
+
const d = n[o];
|
|
339
|
+
if (d.isInterleavedBufferAttribute) {
|
|
340
|
+
const c = b / a;
|
|
341
|
+
for (let g = 0, l = d.count; g < l; g++) for (let h = 0; h < a; h++) {
|
|
342
|
+
const f = d.getComponent(g, h);
|
|
343
|
+
r.setComponent(g + c, h, f);
|
|
344
|
+
}
|
|
345
|
+
} else s.set(d.array, b);
|
|
346
|
+
b += d.count * a;
|
|
347
|
+
}
|
|
348
|
+
return t !== void 0 && (r.gpuType = t), r;
|
|
349
|
+
}
|
|
350
|
+
function ya(n, e) {
|
|
351
|
+
if (e === yA) return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."), n;
|
|
352
|
+
if (e === ia || e === Ja) {
|
|
353
|
+
let a = n.getIndex();
|
|
354
|
+
if (a === null) {
|
|
355
|
+
const s = [], r = n.getAttribute("position");
|
|
356
|
+
if (r === void 0) return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."), n;
|
|
357
|
+
for (let b = 0; b < r.count; b++) s.push(b);
|
|
358
|
+
n.setIndex(s), a = n.getIndex();
|
|
359
|
+
}
|
|
360
|
+
const A = a.count - 2, t = [];
|
|
361
|
+
if (e === ia) for (let s = 1; s <= A; s++) t.push(a.getX(0)), t.push(a.getX(s)), t.push(a.getX(s + 1));
|
|
362
|
+
else for (let s = 0; s < A; s++) s % 2 == 0 ? (t.push(a.getX(s)), t.push(a.getX(s + 1)), t.push(a.getX(s + 2))) : (t.push(a.getX(s + 2)), t.push(a.getX(s + 1)), t.push(a.getX(s)));
|
|
363
|
+
t.length / 3 !== A && console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.");
|
|
364
|
+
const i = n.clone();
|
|
365
|
+
return i.setIndex(t), i.clearGroups(), i;
|
|
366
|
+
}
|
|
367
|
+
return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:", e), n;
|
|
368
|
+
}
|
|
369
|
+
class $a {
|
|
370
|
+
constructor(e) {
|
|
371
|
+
fa(this, "checkLoaderInitialized", async () => new Promise((e) => {
|
|
372
|
+
const a = setInterval(() => {
|
|
373
|
+
this.gltfLoader.hasDracoLoader && !this.gltfLoader.dracoLoader || this.gltfLoader.hasKTX2Loader && !this.gltfLoader.ktx2Loader || (clearInterval(a), e());
|
|
374
|
+
}, 10);
|
|
375
|
+
}));
|
|
376
|
+
this.gltfLoader = e, this.tempMatrix = new m.Matrix4(), this.zUpToYUpMatrix = new m.Matrix4(), this.zUpToYUpMatrix.set(1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1);
|
|
377
|
+
}
|
|
378
|
+
parseB3DM(e, a, A, t) {
|
|
379
|
+
const i = this, s = new DataView(e), r = String.fromCharCode(s.getUint8(0)) + String.fromCharCode(s.getUint8(1)) + String.fromCharCode(s.getUint8(2)) + String.fromCharCode(s.getUint8(3));
|
|
380
|
+
console.assert(r === "b3dm");
|
|
381
|
+
const b = s.getUint32(8, !0);
|
|
382
|
+
console.assert(b === e.byteLength);
|
|
383
|
+
const o = s.getUint32(12, !0), d = s.getUint32(16, !0), c = s.getUint32(20, !0), g = s.getUint32(24, !0), l = new Za(e, 28, o, d), h = 28 + o + d;
|
|
384
|
+
new mt(e, l.getData("BATCH_LENGTH"), h, c, g);
|
|
385
|
+
const f = h + c + g, I = new Uint8Array(e, f, b - f).slice().buffer;
|
|
386
|
+
return new Promise(async (B, u) => {
|
|
387
|
+
await this.checkLoaderInitialized(), this.gltfLoader.parse(I, null, (E) => {
|
|
388
|
+
const C = l.getData("RTC_CENTER");
|
|
389
|
+
C ? (this.tempMatrix.makeTranslation(C[0], C[1], C[2]), E.scene.applyMatrix4(this.tempMatrix)) : E.userData.gltfExtensions && E.userData.gltfExtensions.CESIUM_RTC && (this.tempMatrix.makeTranslation(E.userData.gltfExtensions.CESIUM_RTC.center[0], E.userData.gltfExtensions.CESIUM_RTC.center[1], E.userData.gltfExtensions.CESIUM_RTC.center[2]), E.scene.applyMatrix4(this.tempMatrix)), A && E.scene.applyMatrix4(i.zUpToYUpMatrix), E.scene.asset = E.asset, E.scene.traverse((D) => {
|
|
390
|
+
D.isMesh && (t && D.applyMatrix4(i.zUpToYUpMatrix), a && a(D));
|
|
391
|
+
}), B(E.scene);
|
|
392
|
+
}, (E) => {
|
|
393
|
+
console.error(E);
|
|
394
|
+
});
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
parseB3DMInstanced(e, a, A, t, i) {
|
|
398
|
+
return this.parseB3DM(e, a, t, i).then((s) => {
|
|
399
|
+
let r, b = [], o = [];
|
|
400
|
+
s.updateWorldMatrix(!1, !0), s.traverse((c) => {
|
|
401
|
+
c.isMesh && (c.geometry.applyMatrix4(c.matrixWorld), b.push(c.geometry), o.push(c.material));
|
|
402
|
+
});
|
|
403
|
+
let d = function(c) {
|
|
404
|
+
let g = /* @__PURE__ */ new Set();
|
|
405
|
+
return c.forEach((h) => {
|
|
406
|
+
for (let f in h.attributes) g.add(f);
|
|
407
|
+
}), c.forEach((h) => {
|
|
408
|
+
g.forEach((f) => {
|
|
409
|
+
if (!h.attributes[f]) {
|
|
410
|
+
const I = function(u) {
|
|
411
|
+
switch (u) {
|
|
412
|
+
case "position":
|
|
413
|
+
case "normal":
|
|
414
|
+
case "color":
|
|
415
|
+
return 3;
|
|
416
|
+
case "uv":
|
|
417
|
+
case "uv2":
|
|
418
|
+
return 2;
|
|
419
|
+
default:
|
|
420
|
+
throw new Error(`Unknown attribute ${u}`);
|
|
421
|
+
}
|
|
422
|
+
}(f), B = new Float32Array(I * h.getAttribute("position").count).fill(0);
|
|
423
|
+
h.setAttribute(f, new m.BufferAttribute(B, I));
|
|
424
|
+
}
|
|
425
|
+
});
|
|
426
|
+
}), function(h, f = !1) {
|
|
427
|
+
const I = h[0].index !== null, B = new Set(Object.keys(h[0].attributes)), u = new Set(Object.keys(h[0].morphAttributes)), E = {}, C = {}, D = h[0].morphTargetsRelative, y = new ba();
|
|
428
|
+
let w = 0;
|
|
429
|
+
for (let p = 0; p < h.length; ++p) {
|
|
430
|
+
const Q = h[p];
|
|
431
|
+
let k = 0;
|
|
432
|
+
if (I !== (Q.index !== null)) return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + p + ". All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them."), null;
|
|
433
|
+
for (const x in Q.attributes) {
|
|
434
|
+
if (!B.has(x)) return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + p + '. All geometries must have compatible attributes; make sure "' + x + '" attribute exists among all geometries, or in none of them.'), null;
|
|
435
|
+
E[x] === void 0 && (E[x] = []), E[x].push(Q.attributes[x]), k++;
|
|
436
|
+
}
|
|
437
|
+
if (k !== B.size) return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + p + ". Make sure all geometries have the same number of attributes."), null;
|
|
438
|
+
if (D !== Q.morphTargetsRelative) return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + p + ". .morphTargetsRelative must be consistent throughout all geometries."), null;
|
|
439
|
+
for (const x in Q.morphAttributes) {
|
|
440
|
+
if (!u.has(x)) return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + p + ". .morphAttributes must be consistent throughout all geometries."), null;
|
|
441
|
+
C[x] === void 0 && (C[x] = []), C[x].push(Q.morphAttributes[x]);
|
|
442
|
+
}
|
|
443
|
+
if (f) {
|
|
444
|
+
let x;
|
|
445
|
+
if (I) x = Q.index.count;
|
|
446
|
+
else {
|
|
447
|
+
if (Q.attributes.position === void 0) return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index " + p + ". The geometry must have either an index or a position attribute"), null;
|
|
448
|
+
x = Q.attributes.position.count;
|
|
449
|
+
}
|
|
450
|
+
y.addGroup(w, x, p), w += x;
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
if (I) {
|
|
454
|
+
let p = 0;
|
|
455
|
+
const Q = [];
|
|
456
|
+
for (let k = 0; k < h.length; ++k) {
|
|
457
|
+
const x = h[k].index;
|
|
458
|
+
for (let R = 0; R < x.count; ++R) Q.push(x.getX(R) + p);
|
|
459
|
+
p += h[k].attributes.position.count;
|
|
460
|
+
}
|
|
461
|
+
y.setIndex(Q);
|
|
462
|
+
}
|
|
463
|
+
for (const p in E) {
|
|
464
|
+
const Q = wa(E[p]);
|
|
465
|
+
if (!Q) return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the " + p + " attribute."), null;
|
|
466
|
+
y.setAttribute(p, Q);
|
|
467
|
+
}
|
|
468
|
+
for (const p in C) {
|
|
469
|
+
const Q = C[p][0].length;
|
|
470
|
+
if (Q === 0) break;
|
|
471
|
+
y.morphAttributes = y.morphAttributes || {}, y.morphAttributes[p] = [];
|
|
472
|
+
for (let k = 0; k < Q; ++k) {
|
|
473
|
+
const x = [];
|
|
474
|
+
for (let U = 0; U < C[p].length; ++U) x.push(C[p][U][k]);
|
|
475
|
+
const R = wa(x);
|
|
476
|
+
if (!R) return console.error("THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the " + p + " morphAttribute."), null;
|
|
477
|
+
y.morphAttributes[p].push(R);
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
return y;
|
|
481
|
+
}(c, !0);
|
|
482
|
+
}(b);
|
|
483
|
+
return r = new m.InstancedMesh(d, o, A), r.baseMatrix = new m.Matrix4().identity(), r;
|
|
484
|
+
});
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
class eA extends da {
|
|
488
|
+
constructor(e) {
|
|
489
|
+
super(e), this.dracoLoader = null, this.ktx2Loader = null, this.meshoptDecoder = null, this.pluginCallbacks = [], this.register(function(a) {
|
|
490
|
+
return new xt(a);
|
|
491
|
+
}), this.register(function(a) {
|
|
492
|
+
return new Dt(a);
|
|
493
|
+
}), this.register(function(a) {
|
|
494
|
+
return new vt(a);
|
|
495
|
+
}), this.register(function(a) {
|
|
496
|
+
return new Ut(a);
|
|
497
|
+
}), this.register(function(a) {
|
|
498
|
+
return new Nt(a);
|
|
499
|
+
}), this.register(function(a) {
|
|
500
|
+
return new Mt(a);
|
|
501
|
+
}), this.register(function(a) {
|
|
502
|
+
return new Rt(a);
|
|
503
|
+
}), this.register(function(a) {
|
|
504
|
+
return new Ft(a);
|
|
505
|
+
}), this.register(function(a) {
|
|
506
|
+
return new St(a);
|
|
507
|
+
}), this.register(function(a) {
|
|
508
|
+
return new kt(a);
|
|
509
|
+
}), this.register(function(a) {
|
|
510
|
+
return new Tt(a);
|
|
511
|
+
}), this.register(function(a) {
|
|
512
|
+
return new jt(a);
|
|
513
|
+
}), this.register(function(a) {
|
|
514
|
+
return new Gt(a);
|
|
515
|
+
}), this.register(function(a) {
|
|
516
|
+
return new Lt(a);
|
|
517
|
+
}), this.register(function(a) {
|
|
518
|
+
return new wt(a);
|
|
519
|
+
}), this.register(function(a) {
|
|
520
|
+
return new _t(a);
|
|
521
|
+
}), this.register(function(a) {
|
|
522
|
+
return new Pt(a);
|
|
523
|
+
});
|
|
524
|
+
}
|
|
525
|
+
load(e, a, A, t) {
|
|
526
|
+
const i = this;
|
|
527
|
+
let s;
|
|
528
|
+
if (this.resourcePath !== "") s = this.resourcePath;
|
|
529
|
+
else if (this.path !== "") {
|
|
530
|
+
const o = De.extractUrlBase(e);
|
|
531
|
+
s = De.resolveURL(o, this.path);
|
|
532
|
+
} else s = De.extractUrlBase(e);
|
|
533
|
+
this.manager.itemStart(e);
|
|
534
|
+
const r = function(o) {
|
|
535
|
+
t ? t(o) : console.error(o), i.manager.itemError(e), i.manager.itemEnd(e);
|
|
536
|
+
}, b = new ce(this.manager);
|
|
537
|
+
b.setPath(this.path), b.setResponseType("arraybuffer"), b.setRequestHeader(this.requestHeader), b.setWithCredentials(this.withCredentials), b.load(e, function(o) {
|
|
538
|
+
try {
|
|
539
|
+
i.parse(o, s, function(d) {
|
|
540
|
+
a(d), i.manager.itemEnd(e);
|
|
541
|
+
}, r);
|
|
542
|
+
} catch (d) {
|
|
543
|
+
r(d);
|
|
544
|
+
}
|
|
545
|
+
}, A, r);
|
|
546
|
+
}
|
|
547
|
+
setDRACOLoader(e) {
|
|
548
|
+
return this.dracoLoader = e, this;
|
|
549
|
+
}
|
|
550
|
+
setKTX2Loader(e) {
|
|
551
|
+
return this.ktx2Loader = e, this;
|
|
552
|
+
}
|
|
553
|
+
setMeshoptDecoder(e) {
|
|
554
|
+
return this.meshoptDecoder = e, this;
|
|
555
|
+
}
|
|
556
|
+
register(e) {
|
|
557
|
+
return this.pluginCallbacks.indexOf(e) === -1 && this.pluginCallbacks.push(e), this;
|
|
558
|
+
}
|
|
559
|
+
unregister(e) {
|
|
560
|
+
return this.pluginCallbacks.indexOf(e) !== -1 && this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(e), 1), this;
|
|
561
|
+
}
|
|
562
|
+
parse(e, a, A, t) {
|
|
563
|
+
let i;
|
|
564
|
+
const s = {}, r = {}, b = new TextDecoder();
|
|
565
|
+
if (typeof e == "string") i = JSON.parse(e);
|
|
566
|
+
else if (e instanceof ArrayBuffer)
|
|
567
|
+
if (b.decode(new Uint8Array(e, 0, 4)) === aA) {
|
|
568
|
+
try {
|
|
569
|
+
s[j.KHR_BINARY_GLTF] = new Jt(e);
|
|
570
|
+
} catch (d) {
|
|
571
|
+
return void (t && t(d));
|
|
572
|
+
}
|
|
573
|
+
i = JSON.parse(s[j.KHR_BINARY_GLTF].content);
|
|
574
|
+
} else i = JSON.parse(b.decode(e));
|
|
575
|
+
else i = e;
|
|
576
|
+
if (i.asset === void 0 || i.asset.version[0] < 2) return void (t && t(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.")));
|
|
577
|
+
const o = new ti(i, { path: a || this.resourcePath || "", crossOrigin: this.crossOrigin, requestHeader: this.requestHeader, manager: this.manager, ktx2Loader: this.ktx2Loader, meshoptDecoder: this.meshoptDecoder });
|
|
578
|
+
o.fileLoader.setRequestHeader(this.requestHeader);
|
|
579
|
+
for (let d = 0; d < this.pluginCallbacks.length; d++) {
|
|
580
|
+
const c = this.pluginCallbacks[d](o);
|
|
581
|
+
c.name || console.error("THREE.GLTFLoader: Invalid plugin found: missing name"), r[c.name] = c, s[c.name] = !0;
|
|
582
|
+
}
|
|
583
|
+
if (i.extensionsUsed) for (let d = 0; d < i.extensionsUsed.length; ++d) {
|
|
584
|
+
const c = i.extensionsUsed[d], g = i.extensionsRequired || [];
|
|
585
|
+
switch (c) {
|
|
586
|
+
case j.KHR_MATERIALS_UNLIT:
|
|
587
|
+
s[c] = new yt();
|
|
588
|
+
break;
|
|
589
|
+
case j.KHR_DRACO_MESH_COMPRESSION:
|
|
590
|
+
s[c] = new Ot(i, this.dracoLoader);
|
|
591
|
+
break;
|
|
592
|
+
case j.KHR_TEXTURE_TRANSFORM:
|
|
593
|
+
s[c] = new Kt();
|
|
594
|
+
break;
|
|
595
|
+
case j.KHR_MESH_QUANTIZATION:
|
|
596
|
+
s[c] = new Vt();
|
|
597
|
+
break;
|
|
598
|
+
default:
|
|
599
|
+
g.indexOf(c) >= 0 && r[c] === void 0 && console.warn('THREE.GLTFLoader: Unknown extension "' + c + '".');
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
o.setExtensions(s), o.setPlugins(r), o.parse(A, t);
|
|
603
|
+
}
|
|
604
|
+
parseAsync(e, a) {
|
|
605
|
+
const A = this;
|
|
606
|
+
return new Promise(function(t, i) {
|
|
607
|
+
A.parse(e, a, t, i);
|
|
608
|
+
});
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
function Qt() {
|
|
612
|
+
let n = {};
|
|
613
|
+
return { get: function(e) {
|
|
614
|
+
return n[e];
|
|
615
|
+
}, add: function(e, a) {
|
|
616
|
+
n[e] = a;
|
|
617
|
+
}, remove: function(e) {
|
|
618
|
+
delete n[e];
|
|
619
|
+
}, removeAll: function() {
|
|
620
|
+
n = {};
|
|
621
|
+
} };
|
|
622
|
+
}
|
|
623
|
+
const j = { KHR_BINARY_GLTF: "KHR_binary_glTF", KHR_DRACO_MESH_COMPRESSION: "KHR_draco_mesh_compression", KHR_LIGHTS_PUNCTUAL: "KHR_lights_punctual", KHR_MATERIALS_CLEARCOAT: "KHR_materials_clearcoat", KHR_MATERIALS_DISPERSION: "KHR_materials_dispersion", KHR_MATERIALS_IOR: "KHR_materials_ior", KHR_MATERIALS_SHEEN: "KHR_materials_sheen", KHR_MATERIALS_SPECULAR: "KHR_materials_specular", KHR_MATERIALS_TRANSMISSION: "KHR_materials_transmission", KHR_MATERIALS_IRIDESCENCE: "KHR_materials_iridescence", KHR_MATERIALS_ANISOTROPY: "KHR_materials_anisotropy", KHR_MATERIALS_UNLIT: "KHR_materials_unlit", KHR_MATERIALS_VOLUME: "KHR_materials_volume", KHR_TEXTURE_BASISU: "KHR_texture_basisu", KHR_TEXTURE_TRANSFORM: "KHR_texture_transform", KHR_MESH_QUANTIZATION: "KHR_mesh_quantization", KHR_MATERIALS_EMISSIVE_STRENGTH: "KHR_materials_emissive_strength", EXT_MATERIALS_BUMP: "EXT_materials_bump", EXT_TEXTURE_WEBP: "EXT_texture_webp", EXT_TEXTURE_AVIF: "EXT_texture_avif", EXT_MESHOPT_COMPRESSION: "EXT_meshopt_compression", EXT_MESH_GPU_INSTANCING: "EXT_mesh_gpu_instancing" };
|
|
624
|
+
class wt {
|
|
625
|
+
constructor(e) {
|
|
626
|
+
this.parser = e, this.name = j.KHR_LIGHTS_PUNCTUAL, this.cache = { refs: {}, uses: {} };
|
|
627
|
+
}
|
|
628
|
+
_markDefs() {
|
|
629
|
+
const e = this.parser, a = this.parser.json.nodes || [];
|
|
630
|
+
for (let A = 0, t = a.length; A < t; A++) {
|
|
631
|
+
const i = a[A];
|
|
632
|
+
i.extensions && i.extensions[this.name] && i.extensions[this.name].light !== void 0 && e._addNodeRef(this.cache, i.extensions[this.name].light);
|
|
633
|
+
}
|
|
634
|
+
}
|
|
635
|
+
_loadLight(e) {
|
|
636
|
+
const a = this.parser, A = "light:" + e;
|
|
637
|
+
let t = a.cache.get(A);
|
|
638
|
+
if (t) return t;
|
|
639
|
+
const i = a.json, s = ((i.extensions && i.extensions[this.name] || {}).lights || [])[e];
|
|
640
|
+
let r;
|
|
641
|
+
const b = new se(16777215);
|
|
642
|
+
s.color !== void 0 && b.setRGB(s.color[0], s.color[1], s.color[2], q);
|
|
643
|
+
const o = s.range !== void 0 ? s.range : 0;
|
|
644
|
+
switch (s.type) {
|
|
645
|
+
case "directional":
|
|
646
|
+
r = new DA(b), r.target.position.set(0, 0, -1), r.add(r.target);
|
|
647
|
+
break;
|
|
648
|
+
case "point":
|
|
649
|
+
r = new xA(b), r.distance = o;
|
|
650
|
+
break;
|
|
651
|
+
case "spot":
|
|
652
|
+
r = new kA(b), r.distance = o, s.spot = s.spot || {}, s.spot.innerConeAngle = s.spot.innerConeAngle !== void 0 ? s.spot.innerConeAngle : 0, s.spot.outerConeAngle = s.spot.outerConeAngle !== void 0 ? s.spot.outerConeAngle : Math.PI / 4, r.angle = s.spot.outerConeAngle, r.penumbra = 1 - s.spot.innerConeAngle / s.spot.outerConeAngle, r.target.position.set(0, 0, -1), r.add(r.target);
|
|
653
|
+
break;
|
|
654
|
+
default:
|
|
655
|
+
throw new Error("THREE.GLTFLoader: Unexpected light type: " + s.type);
|
|
656
|
+
}
|
|
657
|
+
return r.position.set(0, 0, 0), r.decay = 2, Z(r, s), s.intensity !== void 0 && (r.intensity = s.intensity), r.name = a.createUniqueName(s.name || "light_" + e), t = Promise.resolve(r), a.cache.add(A, t), t;
|
|
658
|
+
}
|
|
659
|
+
getDependency(e, a) {
|
|
660
|
+
if (e === "light") return this._loadLight(a);
|
|
661
|
+
}
|
|
662
|
+
createNodeAttachment(e) {
|
|
663
|
+
const a = this, A = this.parser, t = A.json.nodes[e], i = (t.extensions && t.extensions[this.name] || {}).light;
|
|
664
|
+
return i === void 0 ? null : this._loadLight(i).then(function(s) {
|
|
665
|
+
return A._getNodeRef(a.cache, i, s);
|
|
666
|
+
});
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
class yt {
|
|
670
|
+
constructor() {
|
|
671
|
+
this.name = j.KHR_MATERIALS_UNLIT;
|
|
672
|
+
}
|
|
673
|
+
getMaterialType() {
|
|
674
|
+
return ye;
|
|
675
|
+
}
|
|
676
|
+
extendParams(e, a, A) {
|
|
677
|
+
const t = [];
|
|
678
|
+
e.color = new se(1, 1, 1), e.opacity = 1;
|
|
679
|
+
const i = a.pbrMetallicRoughness;
|
|
680
|
+
if (i) {
|
|
681
|
+
if (Array.isArray(i.baseColorFactor)) {
|
|
682
|
+
const s = i.baseColorFactor;
|
|
683
|
+
e.color.setRGB(s[0], s[1], s[2], q), e.opacity = s[3];
|
|
684
|
+
}
|
|
685
|
+
i.baseColorTexture !== void 0 && t.push(A.assignTexture(e, "map", i.baseColorTexture, $));
|
|
686
|
+
}
|
|
687
|
+
return Promise.all(t);
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
class kt {
|
|
691
|
+
constructor(e) {
|
|
692
|
+
this.parser = e, this.name = j.KHR_MATERIALS_EMISSIVE_STRENGTH;
|
|
693
|
+
}
|
|
694
|
+
extendMaterialParams(e, a) {
|
|
695
|
+
const A = this.parser.json.materials[e];
|
|
696
|
+
if (!A.extensions || !A.extensions[this.name]) return Promise.resolve();
|
|
697
|
+
const t = A.extensions[this.name].emissiveStrength;
|
|
698
|
+
return t !== void 0 && (a.emissiveIntensity = t), Promise.resolve();
|
|
699
|
+
}
|
|
700
|
+
}
|
|
701
|
+
class xt {
|
|
702
|
+
constructor(e) {
|
|
703
|
+
this.parser = e, this.name = j.KHR_MATERIALS_CLEARCOAT;
|
|
704
|
+
}
|
|
705
|
+
getMaterialType(e) {
|
|
706
|
+
const a = this.parser.json.materials[e];
|
|
707
|
+
return a.extensions && a.extensions[this.name] ? Y : null;
|
|
708
|
+
}
|
|
709
|
+
extendMaterialParams(e, a) {
|
|
710
|
+
const A = this.parser, t = A.json.materials[e];
|
|
711
|
+
if (!t.extensions || !t.extensions[this.name]) return Promise.resolve();
|
|
712
|
+
const i = [], s = t.extensions[this.name];
|
|
713
|
+
if (s.clearcoatFactor !== void 0 && (a.clearcoat = s.clearcoatFactor), s.clearcoatTexture !== void 0 && i.push(A.assignTexture(a, "clearcoatMap", s.clearcoatTexture)), s.clearcoatRoughnessFactor !== void 0 && (a.clearcoatRoughness = s.clearcoatRoughnessFactor), s.clearcoatRoughnessTexture !== void 0 && i.push(A.assignTexture(a, "clearcoatRoughnessMap", s.clearcoatRoughnessTexture)), s.clearcoatNormalTexture !== void 0 && (i.push(A.assignTexture(a, "clearcoatNormalMap", s.clearcoatNormalTexture)), s.clearcoatNormalTexture.scale !== void 0)) {
|
|
714
|
+
const r = s.clearcoatNormalTexture.scale;
|
|
715
|
+
a.clearcoatNormalScale = new Oa(r, r);
|
|
716
|
+
}
|
|
717
|
+
return Promise.all(i);
|
|
718
|
+
}
|
|
719
|
+
}
|
|
720
|
+
class Dt {
|
|
721
|
+
constructor(e) {
|
|
722
|
+
this.parser = e, this.name = j.KHR_MATERIALS_DISPERSION;
|
|
723
|
+
}
|
|
724
|
+
getMaterialType(e) {
|
|
725
|
+
const a = this.parser.json.materials[e];
|
|
726
|
+
return a.extensions && a.extensions[this.name] ? Y : null;
|
|
727
|
+
}
|
|
728
|
+
extendMaterialParams(e, a) {
|
|
729
|
+
const A = this.parser.json.materials[e];
|
|
730
|
+
if (!A.extensions || !A.extensions[this.name]) return Promise.resolve();
|
|
731
|
+
const t = A.extensions[this.name];
|
|
732
|
+
return a.dispersion = t.dispersion !== void 0 ? t.dispersion : 0, Promise.resolve();
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
class jt {
|
|
736
|
+
constructor(e) {
|
|
737
|
+
this.parser = e, this.name = j.KHR_MATERIALS_IRIDESCENCE;
|
|
738
|
+
}
|
|
739
|
+
getMaterialType(e) {
|
|
740
|
+
const a = this.parser.json.materials[e];
|
|
741
|
+
return a.extensions && a.extensions[this.name] ? Y : null;
|
|
742
|
+
}
|
|
743
|
+
extendMaterialParams(e, a) {
|
|
744
|
+
const A = this.parser, t = A.json.materials[e];
|
|
745
|
+
if (!t.extensions || !t.extensions[this.name]) return Promise.resolve();
|
|
746
|
+
const i = [], s = t.extensions[this.name];
|
|
747
|
+
return s.iridescenceFactor !== void 0 && (a.iridescence = s.iridescenceFactor), s.iridescenceTexture !== void 0 && i.push(A.assignTexture(a, "iridescenceMap", s.iridescenceTexture)), s.iridescenceIor !== void 0 && (a.iridescenceIOR = s.iridescenceIor), a.iridescenceThicknessRange === void 0 && (a.iridescenceThicknessRange = [100, 400]), s.iridescenceThicknessMinimum !== void 0 && (a.iridescenceThicknessRange[0] = s.iridescenceThicknessMinimum), s.iridescenceThicknessMaximum !== void 0 && (a.iridescenceThicknessRange[1] = s.iridescenceThicknessMaximum), s.iridescenceThicknessTexture !== void 0 && i.push(A.assignTexture(a, "iridescenceThicknessMap", s.iridescenceThicknessTexture)), Promise.all(i);
|
|
748
|
+
}
|
|
749
|
+
}
|
|
750
|
+
class Mt {
|
|
751
|
+
constructor(e) {
|
|
752
|
+
this.parser = e, this.name = j.KHR_MATERIALS_SHEEN;
|
|
753
|
+
}
|
|
754
|
+
getMaterialType(e) {
|
|
755
|
+
const a = this.parser.json.materials[e];
|
|
756
|
+
return a.extensions && a.extensions[this.name] ? Y : null;
|
|
757
|
+
}
|
|
758
|
+
extendMaterialParams(e, a) {
|
|
759
|
+
const A = this.parser, t = A.json.materials[e];
|
|
760
|
+
if (!t.extensions || !t.extensions[this.name]) return Promise.resolve();
|
|
761
|
+
const i = [];
|
|
762
|
+
a.sheenColor = new se(0, 0, 0), a.sheenRoughness = 0, a.sheen = 1;
|
|
763
|
+
const s = t.extensions[this.name];
|
|
764
|
+
if (s.sheenColorFactor !== void 0) {
|
|
765
|
+
const r = s.sheenColorFactor;
|
|
766
|
+
a.sheenColor.setRGB(r[0], r[1], r[2], q);
|
|
767
|
+
}
|
|
768
|
+
return s.sheenRoughnessFactor !== void 0 && (a.sheenRoughness = s.sheenRoughnessFactor), s.sheenColorTexture !== void 0 && i.push(A.assignTexture(a, "sheenColorMap", s.sheenColorTexture, $)), s.sheenRoughnessTexture !== void 0 && i.push(A.assignTexture(a, "sheenRoughnessMap", s.sheenRoughnessTexture)), Promise.all(i);
|
|
769
|
+
}
|
|
770
|
+
}
|
|
771
|
+
class Rt {
|
|
772
|
+
constructor(e) {
|
|
773
|
+
this.parser = e, this.name = j.KHR_MATERIALS_TRANSMISSION;
|
|
774
|
+
}
|
|
775
|
+
getMaterialType(e) {
|
|
776
|
+
const a = this.parser.json.materials[e];
|
|
777
|
+
return a.extensions && a.extensions[this.name] ? Y : null;
|
|
778
|
+
}
|
|
779
|
+
extendMaterialParams(e, a) {
|
|
780
|
+
const A = this.parser, t = A.json.materials[e];
|
|
781
|
+
if (!t.extensions || !t.extensions[this.name]) return Promise.resolve();
|
|
782
|
+
const i = [], s = t.extensions[this.name];
|
|
783
|
+
return s.transmissionFactor !== void 0 && (a.transmission = s.transmissionFactor), s.transmissionTexture !== void 0 && i.push(A.assignTexture(a, "transmissionMap", s.transmissionTexture)), Promise.all(i);
|
|
784
|
+
}
|
|
785
|
+
}
|
|
786
|
+
class Ft {
|
|
787
|
+
constructor(e) {
|
|
788
|
+
this.parser = e, this.name = j.KHR_MATERIALS_VOLUME;
|
|
789
|
+
}
|
|
790
|
+
getMaterialType(e) {
|
|
791
|
+
const a = this.parser.json.materials[e];
|
|
792
|
+
return a.extensions && a.extensions[this.name] ? Y : null;
|
|
793
|
+
}
|
|
794
|
+
extendMaterialParams(e, a) {
|
|
795
|
+
const A = this.parser, t = A.json.materials[e];
|
|
796
|
+
if (!t.extensions || !t.extensions[this.name]) return Promise.resolve();
|
|
797
|
+
const i = [], s = t.extensions[this.name];
|
|
798
|
+
a.thickness = s.thicknessFactor !== void 0 ? s.thicknessFactor : 0, s.thicknessTexture !== void 0 && i.push(A.assignTexture(a, "thicknessMap", s.thicknessTexture)), a.attenuationDistance = s.attenuationDistance || 1 / 0;
|
|
799
|
+
const r = s.attenuationColor || [1, 1, 1];
|
|
800
|
+
return a.attenuationColor = new se().setRGB(r[0], r[1], r[2], q), Promise.all(i);
|
|
801
|
+
}
|
|
802
|
+
}
|
|
803
|
+
class St {
|
|
804
|
+
constructor(e) {
|
|
805
|
+
this.parser = e, this.name = j.KHR_MATERIALS_IOR;
|
|
806
|
+
}
|
|
807
|
+
getMaterialType(e) {
|
|
808
|
+
const a = this.parser.json.materials[e];
|
|
809
|
+
return a.extensions && a.extensions[this.name] ? Y : null;
|
|
810
|
+
}
|
|
811
|
+
extendMaterialParams(e, a) {
|
|
812
|
+
const A = this.parser.json.materials[e];
|
|
813
|
+
if (!A.extensions || !A.extensions[this.name]) return Promise.resolve();
|
|
814
|
+
const t = A.extensions[this.name];
|
|
815
|
+
return a.ior = t.ior !== void 0 ? t.ior : 1.5, Promise.resolve();
|
|
816
|
+
}
|
|
817
|
+
}
|
|
818
|
+
class Tt {
|
|
819
|
+
constructor(e) {
|
|
820
|
+
this.parser = e, this.name = j.KHR_MATERIALS_SPECULAR;
|
|
821
|
+
}
|
|
822
|
+
getMaterialType(e) {
|
|
823
|
+
const a = this.parser.json.materials[e];
|
|
824
|
+
return a.extensions && a.extensions[this.name] ? Y : null;
|
|
825
|
+
}
|
|
826
|
+
extendMaterialParams(e, a) {
|
|
827
|
+
const A = this.parser, t = A.json.materials[e];
|
|
828
|
+
if (!t.extensions || !t.extensions[this.name]) return Promise.resolve();
|
|
829
|
+
const i = [], s = t.extensions[this.name];
|
|
830
|
+
a.specularIntensity = s.specularFactor !== void 0 ? s.specularFactor : 1, s.specularTexture !== void 0 && i.push(A.assignTexture(a, "specularIntensityMap", s.specularTexture));
|
|
831
|
+
const r = s.specularColorFactor || [1, 1, 1];
|
|
832
|
+
return a.specularColor = new se().setRGB(r[0], r[1], r[2], q), s.specularColorTexture !== void 0 && i.push(A.assignTexture(a, "specularColorMap", s.specularColorTexture, $)), Promise.all(i);
|
|
833
|
+
}
|
|
834
|
+
}
|
|
835
|
+
class Lt {
|
|
836
|
+
constructor(e) {
|
|
837
|
+
this.parser = e, this.name = j.EXT_MATERIALS_BUMP;
|
|
838
|
+
}
|
|
839
|
+
getMaterialType(e) {
|
|
840
|
+
const a = this.parser.json.materials[e];
|
|
841
|
+
return a.extensions && a.extensions[this.name] ? Y : null;
|
|
842
|
+
}
|
|
843
|
+
extendMaterialParams(e, a) {
|
|
844
|
+
const A = this.parser, t = A.json.materials[e];
|
|
845
|
+
if (!t.extensions || !t.extensions[this.name]) return Promise.resolve();
|
|
846
|
+
const i = [], s = t.extensions[this.name];
|
|
847
|
+
return a.bumpScale = s.bumpFactor !== void 0 ? s.bumpFactor : 1, s.bumpTexture !== void 0 && i.push(A.assignTexture(a, "bumpMap", s.bumpTexture)), Promise.all(i);
|
|
848
|
+
}
|
|
849
|
+
}
|
|
850
|
+
class Gt {
|
|
851
|
+
constructor(e) {
|
|
852
|
+
this.parser = e, this.name = j.KHR_MATERIALS_ANISOTROPY;
|
|
853
|
+
}
|
|
854
|
+
getMaterialType(e) {
|
|
855
|
+
const a = this.parser.json.materials[e];
|
|
856
|
+
return a.extensions && a.extensions[this.name] ? Y : null;
|
|
857
|
+
}
|
|
858
|
+
extendMaterialParams(e, a) {
|
|
859
|
+
const A = this.parser, t = A.json.materials[e];
|
|
860
|
+
if (!t.extensions || !t.extensions[this.name]) return Promise.resolve();
|
|
861
|
+
const i = [], s = t.extensions[this.name];
|
|
862
|
+
return s.anisotropyStrength !== void 0 && (a.anisotropy = s.anisotropyStrength), s.anisotropyRotation !== void 0 && (a.anisotropyRotation = s.anisotropyRotation), s.anisotropyTexture !== void 0 && i.push(A.assignTexture(a, "anisotropyMap", s.anisotropyTexture)), Promise.all(i);
|
|
863
|
+
}
|
|
864
|
+
}
|
|
865
|
+
class vt {
|
|
866
|
+
constructor(e) {
|
|
867
|
+
this.parser = e, this.name = j.KHR_TEXTURE_BASISU;
|
|
868
|
+
}
|
|
869
|
+
loadTexture(e) {
|
|
870
|
+
const a = this.parser, A = a.json, t = A.textures[e];
|
|
871
|
+
if (!t.extensions || !t.extensions[this.name]) return null;
|
|
872
|
+
const i = t.extensions[this.name], s = a.options.ktx2Loader;
|
|
873
|
+
if (!s) {
|
|
874
|
+
if (A.extensionsRequired && A.extensionsRequired.indexOf(this.name) >= 0) throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");
|
|
875
|
+
return null;
|
|
876
|
+
}
|
|
877
|
+
return a.loadTextureImage(e, i.source, s);
|
|
878
|
+
}
|
|
879
|
+
}
|
|
880
|
+
class Ut {
|
|
881
|
+
constructor(e) {
|
|
882
|
+
this.parser = e, this.name = j.EXT_TEXTURE_WEBP, this.isSupported = null;
|
|
883
|
+
}
|
|
884
|
+
loadTexture(e) {
|
|
885
|
+
const a = this.name, A = this.parser, t = A.json, i = t.textures[e];
|
|
886
|
+
if (!i.extensions || !i.extensions[a]) return null;
|
|
887
|
+
const s = i.extensions[a], r = t.images[s.source];
|
|
888
|
+
let b = A.textureLoader;
|
|
889
|
+
if (r.uri) {
|
|
890
|
+
const o = A.options.manager.getHandler(r.uri);
|
|
891
|
+
o !== null && (b = o);
|
|
892
|
+
}
|
|
893
|
+
return this.detectSupport().then(function(o) {
|
|
894
|
+
if (o) return A.loadTextureImage(e, s.source, b);
|
|
895
|
+
if (t.extensionsRequired && t.extensionsRequired.indexOf(a) >= 0) throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported.");
|
|
896
|
+
return A.loadTexture(e);
|
|
897
|
+
});
|
|
898
|
+
}
|
|
899
|
+
detectSupport() {
|
|
900
|
+
return this.isSupported || (this.isSupported = new Promise(function(e) {
|
|
901
|
+
const a = new Image();
|
|
902
|
+
a.src = "data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA", a.onload = a.onerror = function() {
|
|
903
|
+
e(a.height === 1);
|
|
904
|
+
};
|
|
905
|
+
})), this.isSupported;
|
|
906
|
+
}
|
|
907
|
+
}
|
|
908
|
+
class Nt {
|
|
909
|
+
constructor(e) {
|
|
910
|
+
this.parser = e, this.name = j.EXT_TEXTURE_AVIF, this.isSupported = null;
|
|
911
|
+
}
|
|
912
|
+
loadTexture(e) {
|
|
913
|
+
const a = this.name, A = this.parser, t = A.json, i = t.textures[e];
|
|
914
|
+
if (!i.extensions || !i.extensions[a]) return null;
|
|
915
|
+
const s = i.extensions[a], r = t.images[s.source];
|
|
916
|
+
let b = A.textureLoader;
|
|
917
|
+
if (r.uri) {
|
|
918
|
+
const o = A.options.manager.getHandler(r.uri);
|
|
919
|
+
o !== null && (b = o);
|
|
920
|
+
}
|
|
921
|
+
return this.detectSupport().then(function(o) {
|
|
922
|
+
if (o) return A.loadTextureImage(e, s.source, b);
|
|
923
|
+
if (t.extensionsRequired && t.extensionsRequired.indexOf(a) >= 0) throw new Error("THREE.GLTFLoader: AVIF required by asset but unsupported.");
|
|
924
|
+
return A.loadTexture(e);
|
|
925
|
+
});
|
|
926
|
+
}
|
|
927
|
+
detectSupport() {
|
|
928
|
+
return this.isSupported || (this.isSupported = new Promise(function(e) {
|
|
929
|
+
const a = new Image();
|
|
930
|
+
a.src = "data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=", a.onload = a.onerror = function() {
|
|
931
|
+
e(a.height === 1);
|
|
932
|
+
};
|
|
933
|
+
})), this.isSupported;
|
|
934
|
+
}
|
|
935
|
+
}
|
|
936
|
+
class _t {
|
|
937
|
+
constructor(e) {
|
|
938
|
+
this.name = j.EXT_MESHOPT_COMPRESSION, this.parser = e;
|
|
939
|
+
}
|
|
940
|
+
loadBufferView(e) {
|
|
941
|
+
const a = this.parser.json, A = a.bufferViews[e];
|
|
942
|
+
if (A.extensions && A.extensions[this.name]) {
|
|
943
|
+
const t = A.extensions[this.name], i = this.parser.getDependency("buffer", t.buffer), s = this.parser.options.meshoptDecoder;
|
|
944
|
+
if (!s || !s.supported) {
|
|
945
|
+
if (a.extensionsRequired && a.extensionsRequired.indexOf(this.name) >= 0) throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files");
|
|
946
|
+
return null;
|
|
947
|
+
}
|
|
948
|
+
return i.then(function(r) {
|
|
949
|
+
const b = t.byteOffset || 0, o = t.byteLength || 0, d = t.count, c = t.byteStride, g = new Uint8Array(r, b, o);
|
|
950
|
+
return s.decodeGltfBufferAsync ? s.decodeGltfBufferAsync(d, c, g, t.mode, t.filter).then(function(l) {
|
|
951
|
+
return l.buffer;
|
|
952
|
+
}) : s.ready.then(function() {
|
|
953
|
+
const l = new ArrayBuffer(d * c);
|
|
954
|
+
return s.decodeGltfBuffer(new Uint8Array(l), d, c, g, t.mode, t.filter), l;
|
|
955
|
+
});
|
|
956
|
+
});
|
|
957
|
+
}
|
|
958
|
+
return null;
|
|
959
|
+
}
|
|
960
|
+
}
|
|
961
|
+
class Pt {
|
|
962
|
+
constructor(e) {
|
|
963
|
+
this.name = j.EXT_MESH_GPU_INSTANCING, this.parser = e;
|
|
964
|
+
}
|
|
965
|
+
createNodeMesh(e) {
|
|
966
|
+
const a = this.parser.json, A = a.nodes[e];
|
|
967
|
+
if (!A.extensions || !A.extensions[this.name] || A.mesh === void 0) return null;
|
|
968
|
+
const t = a.meshes[A.mesh];
|
|
969
|
+
for (const b of t.primitives) if (b.mode !== N.TRIANGLES && b.mode !== N.TRIANGLE_STRIP && b.mode !== N.TRIANGLE_FAN && b.mode !== void 0) return null;
|
|
970
|
+
const i = A.extensions[this.name].attributes, s = [], r = {};
|
|
971
|
+
for (const b in i) s.push(this.parser.getDependency("accessor", i[b]).then((o) => (r[b] = o, r[b])));
|
|
972
|
+
return s.length < 1 ? null : (s.push(this.parser.createNodeMesh(e)), Promise.all(s).then((b) => {
|
|
973
|
+
const o = b.pop(), d = o.isGroup ? o.children : [o], c = b[0].count, g = [];
|
|
974
|
+
for (const l of d) {
|
|
975
|
+
const h = new Le(), f = new H(), I = new Ka(), B = new H(1, 1, 1), u = new jA(l.geometry, l.material, c);
|
|
976
|
+
for (let E = 0; E < c; E++) r.TRANSLATION && f.fromBufferAttribute(r.TRANSLATION, E), r.ROTATION && I.fromBufferAttribute(r.ROTATION, E), r.SCALE && B.fromBufferAttribute(r.SCALE, E), u.setMatrixAt(E, h.compose(f, I, B));
|
|
977
|
+
for (const E in r) if (E === "_COLOR_0") {
|
|
978
|
+
const C = r[E];
|
|
979
|
+
u.instanceColor = new MA(C.array, C.itemSize, C.normalized);
|
|
980
|
+
} else E !== "TRANSLATION" && E !== "ROTATION" && E !== "SCALE" && l.geometry.setAttribute(E, r[E]);
|
|
981
|
+
Va.prototype.copy.call(u, l), this.parser.assignFinalMaterial(u), g.push(u);
|
|
982
|
+
}
|
|
983
|
+
return o.isGroup ? (o.clear(), o.add(...g), o) : g[0];
|
|
984
|
+
}));
|
|
985
|
+
}
|
|
986
|
+
}
|
|
987
|
+
const aA = "glTF", Ht = 1313821514, qt = 5130562;
|
|
988
|
+
class Jt {
|
|
989
|
+
constructor(e) {
|
|
990
|
+
this.name = j.KHR_BINARY_GLTF, this.content = null, this.body = null;
|
|
991
|
+
const a = new DataView(e, 0, 12), A = new TextDecoder();
|
|
992
|
+
if (this.header = { magic: A.decode(new Uint8Array(e.slice(0, 4))), version: a.getUint32(4, !0), length: a.getUint32(8, !0) }, this.header.magic !== aA) throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header.");
|
|
993
|
+
if (this.header.version < 2) throw new Error("THREE.GLTFLoader: Legacy binary file detected.");
|
|
994
|
+
const t = this.header.length - 12, i = new DataView(e, 12);
|
|
995
|
+
let s = 0;
|
|
996
|
+
for (; s < t; ) {
|
|
997
|
+
const r = i.getUint32(s, !0);
|
|
998
|
+
s += 4;
|
|
999
|
+
const b = i.getUint32(s, !0);
|
|
1000
|
+
if (s += 4, b === Ht) {
|
|
1001
|
+
const o = new Uint8Array(e, 12 + s, r);
|
|
1002
|
+
this.content = A.decode(o);
|
|
1003
|
+
} else if (b === qt) {
|
|
1004
|
+
const o = 12 + s;
|
|
1005
|
+
this.body = e.slice(o, o + r);
|
|
1006
|
+
}
|
|
1007
|
+
s += r;
|
|
1008
|
+
}
|
|
1009
|
+
if (this.content === null) throw new Error("THREE.GLTFLoader: JSON content not found.");
|
|
1010
|
+
}
|
|
1011
|
+
}
|
|
1012
|
+
class Ot {
|
|
1013
|
+
constructor(e, a) {
|
|
1014
|
+
if (!a) throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided.");
|
|
1015
|
+
this.name = j.KHR_DRACO_MESH_COMPRESSION, this.json = e, this.dracoLoader = a, this.dracoLoader.preload();
|
|
1016
|
+
}
|
|
1017
|
+
decodePrimitive(e, a) {
|
|
1018
|
+
const A = this.json, t = this.dracoLoader, i = e.extensions[this.name].bufferView, s = e.extensions[this.name].attributes, r = {}, b = {}, o = {};
|
|
1019
|
+
for (const d in s) {
|
|
1020
|
+
const c = na[d] || d.toLowerCase();
|
|
1021
|
+
r[c] = s[d];
|
|
1022
|
+
}
|
|
1023
|
+
for (const d in e.attributes) {
|
|
1024
|
+
const c = na[d] || d.toLowerCase();
|
|
1025
|
+
if (s[d] !== void 0) {
|
|
1026
|
+
const g = A.accessors[e.attributes[d]], l = ue[g.componentType];
|
|
1027
|
+
o[c] = l.name, b[c] = g.normalized === !0;
|
|
1028
|
+
}
|
|
1029
|
+
}
|
|
1030
|
+
return a.getDependency("bufferView", i).then(function(d) {
|
|
1031
|
+
return new Promise(function(c, g) {
|
|
1032
|
+
t.decodeDracoFile(d, function(l) {
|
|
1033
|
+
for (const h in l.attributes) {
|
|
1034
|
+
const f = l.attributes[h], I = b[h];
|
|
1035
|
+
I !== void 0 && (f.normalized = I);
|
|
1036
|
+
}
|
|
1037
|
+
c(l);
|
|
1038
|
+
}, r, o, q, g);
|
|
1039
|
+
});
|
|
1040
|
+
});
|
|
1041
|
+
}
|
|
1042
|
+
}
|
|
1043
|
+
class Kt {
|
|
1044
|
+
constructor() {
|
|
1045
|
+
this.name = j.KHR_TEXTURE_TRANSFORM;
|
|
1046
|
+
}
|
|
1047
|
+
extendTexture(e, a) {
|
|
1048
|
+
return (a.texCoord !== void 0 && a.texCoord !== e.channel || a.offset !== void 0 || a.rotation !== void 0 || a.scale !== void 0) && (e = e.clone(), a.texCoord !== void 0 && (e.channel = a.texCoord), a.offset !== void 0 && e.offset.fromArray(a.offset), a.rotation !== void 0 && (e.rotation = a.rotation), a.scale !== void 0 && e.repeat.fromArray(a.scale), e.needsUpdate = !0), e;
|
|
1049
|
+
}
|
|
1050
|
+
}
|
|
1051
|
+
class Vt {
|
|
1052
|
+
constructor() {
|
|
1053
|
+
this.name = j.KHR_MESH_QUANTIZATION;
|
|
1054
|
+
}
|
|
1055
|
+
}
|
|
1056
|
+
class AA extends it {
|
|
1057
|
+
constructor(e, a, A, t) {
|
|
1058
|
+
super(e, a, A, t);
|
|
1059
|
+
}
|
|
1060
|
+
copySampleValue_(e) {
|
|
1061
|
+
const a = this.resultBuffer, A = this.sampleValues, t = this.valueSize, i = e * t * 3 + t;
|
|
1062
|
+
for (let s = 0; s !== t; s++) a[s] = A[i + s];
|
|
1063
|
+
return a;
|
|
1064
|
+
}
|
|
1065
|
+
interpolate_(e, a, A, t) {
|
|
1066
|
+
const i = this.resultBuffer, s = this.sampleValues, r = this.valueSize, b = 2 * r, o = 3 * r, d = t - a, c = (A - a) / d, g = c * c, l = g * c, h = e * o, f = h - o, I = -2 * l + 3 * g, B = l - g, u = 1 - I, E = B - g + c;
|
|
1067
|
+
for (let C = 0; C !== r; C++) {
|
|
1068
|
+
const D = s[f + C + r], y = s[f + C + b] * d, w = s[h + C + r], p = s[h + C] * d;
|
|
1069
|
+
i[C] = u * D + E * y + I * w + B * p;
|
|
1070
|
+
}
|
|
1071
|
+
return i;
|
|
1072
|
+
}
|
|
1073
|
+
}
|
|
1074
|
+
const zt = new Ka();
|
|
1075
|
+
class Yt extends AA {
|
|
1076
|
+
interpolate_(e, a, A, t) {
|
|
1077
|
+
const i = super.interpolate_(e, a, A, t);
|
|
1078
|
+
return zt.fromArray(i).normalize().toArray(i), i;
|
|
1079
|
+
}
|
|
1080
|
+
}
|
|
1081
|
+
const N = { FLOAT: 5126, FLOAT_MAT3: 35675, FLOAT_MAT4: 35676, FLOAT_VEC2: 35664, FLOAT_VEC3: 35665, FLOAT_VEC4: 35666, LINEAR: 9729, REPEAT: 10497, SAMPLER_2D: 35678, POINTS: 0, LINES: 1, LINE_LOOP: 2, LINE_STRIP: 3, TRIANGLES: 4, TRIANGLE_STRIP: 5, TRIANGLE_FAN: 6, UNSIGNED_BYTE: 5121, UNSIGNED_SHORT: 5123 }, ue = { 5120: Int8Array, 5121: Uint8Array, 5122: Int16Array, 5123: Uint16Array, 5125: Uint32Array, 5126: Float32Array }, ka = { 9728: za, 9729: Me, 9984: XA, 9985: ZA, 9986: $A, 9987: ga }, xa = { 33071: et, 33648: at, 10497: sa }, Ne = { SCALAR: 1, VEC2: 2, VEC3: 3, VEC4: 4, MAT2: 4, MAT3: 9, MAT4: 16 }, na = { POSITION: "position", NORMAL: "normal", TANGENT: "tangent", TEXCOORD_0: "uv", TEXCOORD_1: "uv1", TEXCOORD_2: "uv2", TEXCOORD_3: "uv3", COLOR_0: "color", WEIGHTS_0: "skinWeight", JOINTS_0: "skinIndex" }, ee = { scale: "scale", translation: "position", rotation: "quaternion", weights: "morphTargetInfluences" }, Wt = { CUBICSPLINE: void 0, LINEAR: Ya, STEP: At }, Xt = "OPAQUE", Zt = "MASK", $t = "BLEND";
|
|
1082
|
+
function re(n, e, a) {
|
|
1083
|
+
for (const A in a.extensions) n[A] === void 0 && (e.userData.gltfExtensions = e.userData.gltfExtensions || {}, e.userData.gltfExtensions[A] = a.extensions[A]);
|
|
1084
|
+
}
|
|
1085
|
+
function Z(n, e) {
|
|
1086
|
+
e.extras !== void 0 && (typeof e.extras == "object" ? Object.assign(n.userData, e.extras) : console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, " + e.extras));
|
|
1087
|
+
}
|
|
1088
|
+
function ei(n, e) {
|
|
1089
|
+
if (n.updateMorphTargets(), e.weights !== void 0) for (let a = 0, A = e.weights.length; a < A; a++) n.morphTargetInfluences[a] = e.weights[a];
|
|
1090
|
+
if (e.extras && Array.isArray(e.extras.targetNames)) {
|
|
1091
|
+
const a = e.extras.targetNames;
|
|
1092
|
+
if (n.morphTargetInfluences.length === a.length) {
|
|
1093
|
+
n.morphTargetDictionary = {};
|
|
1094
|
+
for (let A = 0, t = a.length; A < t; A++) n.morphTargetDictionary[a[A]] = A;
|
|
1095
|
+
} else console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.");
|
|
1096
|
+
}
|
|
1097
|
+
}
|
|
1098
|
+
function ai(n) {
|
|
1099
|
+
let e;
|
|
1100
|
+
const a = n.extensions && n.extensions[j.KHR_DRACO_MESH_COMPRESSION];
|
|
1101
|
+
if (e = a ? "draco:" + a.bufferView + ":" + a.indices + ":" + _e(a.attributes) : n.indices + ":" + _e(n.attributes) + ":" + n.mode, n.targets !== void 0) for (let A = 0, t = n.targets.length; A < t; A++) e += ":" + _e(n.targets[A]);
|
|
1102
|
+
return e;
|
|
1103
|
+
}
|
|
1104
|
+
function _e(n) {
|
|
1105
|
+
let e = "";
|
|
1106
|
+
const a = Object.keys(n).sort();
|
|
1107
|
+
for (let A = 0, t = a.length; A < t; A++) e += a[A] + ":" + n[a[A]] + ";";
|
|
1108
|
+
return e;
|
|
1109
|
+
}
|
|
1110
|
+
function oa(n) {
|
|
1111
|
+
switch (n) {
|
|
1112
|
+
case Int8Array:
|
|
1113
|
+
return 1 / 127;
|
|
1114
|
+
case Uint8Array:
|
|
1115
|
+
return 1 / 255;
|
|
1116
|
+
case Int16Array:
|
|
1117
|
+
return 1 / 32767;
|
|
1118
|
+
case Uint16Array:
|
|
1119
|
+
return 1 / 65535;
|
|
1120
|
+
default:
|
|
1121
|
+
throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type.");
|
|
1122
|
+
}
|
|
1123
|
+
}
|
|
1124
|
+
const Ai = new Le();
|
|
1125
|
+
class ti {
|
|
1126
|
+
constructor(e = {}, a = {}) {
|
|
1127
|
+
this.json = e, this.extensions = {}, this.plugins = {}, this.options = a, this.cache = new Qt(), 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 = {};
|
|
1128
|
+
let A = !1, t = -1, i = !1, s = -1;
|
|
1129
|
+
if (typeof navigator < "u") {
|
|
1130
|
+
const r = navigator.userAgent;
|
|
1131
|
+
A = /^((?!chrome|android).)*safari/i.test(r) === !0;
|
|
1132
|
+
const b = r.match(/Version\/(\d+)/);
|
|
1133
|
+
t = A && b ? parseInt(b[1], 10) : -1, i = r.indexOf("Firefox") > -1, s = i ? r.match(/Firefox\/([0-9]+)\./)[1] : -1;
|
|
1134
|
+
}
|
|
1135
|
+
typeof createImageBitmap > "u" || A && t < 17 || i && s < 98 ? this.textureLoader = new RA(this.options.manager) : this.textureLoader = new FA(this.options.manager), this.textureLoader.setCrossOrigin(this.options.crossOrigin), this.textureLoader.setRequestHeader(this.options.requestHeader), this.fileLoader = new ce(this.options.manager), this.fileLoader.setResponseType("arraybuffer"), this.options.crossOrigin === "use-credentials" && this.fileLoader.setWithCredentials(!0);
|
|
1136
|
+
}
|
|
1137
|
+
setExtensions(e) {
|
|
1138
|
+
this.extensions = e;
|
|
1139
|
+
}
|
|
1140
|
+
setPlugins(e) {
|
|
1141
|
+
this.plugins = e;
|
|
1142
|
+
}
|
|
1143
|
+
parse(e, a) {
|
|
1144
|
+
const A = this, t = this.json, i = this.extensions;
|
|
1145
|
+
this.cache.removeAll(), this.nodeCache = {}, this._invokeAll(function(s) {
|
|
1146
|
+
return s._markDefs && s._markDefs();
|
|
1147
|
+
}), Promise.all(this._invokeAll(function(s) {
|
|
1148
|
+
return s.beforeRoot && s.beforeRoot();
|
|
1149
|
+
})).then(function() {
|
|
1150
|
+
return Promise.all([A.getDependencies("scene"), A.getDependencies("animation"), A.getDependencies("camera")]);
|
|
1151
|
+
}).then(function(s) {
|
|
1152
|
+
const r = { scene: s[0][t.scene || 0], scenes: s[0], animations: s[1], cameras: s[2], asset: t.asset, parser: A, userData: {} };
|
|
1153
|
+
return re(i, r, t), Z(r, t), Promise.all(A._invokeAll(function(b) {
|
|
1154
|
+
return b.afterRoot && b.afterRoot(r);
|
|
1155
|
+
})).then(function() {
|
|
1156
|
+
for (const b of r.scenes) b.updateMatrixWorld();
|
|
1157
|
+
e(r);
|
|
1158
|
+
});
|
|
1159
|
+
}).catch(a);
|
|
1160
|
+
}
|
|
1161
|
+
_markDefs() {
|
|
1162
|
+
const e = this.json.nodes || [], a = this.json.skins || [], A = this.json.meshes || [];
|
|
1163
|
+
for (let t = 0, i = a.length; t < i; t++) {
|
|
1164
|
+
const s = a[t].joints;
|
|
1165
|
+
for (let r = 0, b = s.length; r < b; r++) e[s[r]].isBone = !0;
|
|
1166
|
+
}
|
|
1167
|
+
for (let t = 0, i = e.length; t < i; t++) {
|
|
1168
|
+
const s = e[t];
|
|
1169
|
+
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);
|
|
1170
|
+
}
|
|
1171
|
+
}
|
|
1172
|
+
_addNodeRef(e, a) {
|
|
1173
|
+
a !== void 0 && (e.refs[a] === void 0 && (e.refs[a] = e.uses[a] = 0), e.refs[a]++);
|
|
1174
|
+
}
|
|
1175
|
+
_getNodeRef(e, a, A) {
|
|
1176
|
+
if (e.refs[a] <= 1) return A;
|
|
1177
|
+
const t = A.clone(), i = (s, r) => {
|
|
1178
|
+
const b = this.associations.get(s);
|
|
1179
|
+
b != null && this.associations.set(r, b);
|
|
1180
|
+
for (const [o, d] of s.children.entries()) i(d, r.children[o]);
|
|
1181
|
+
};
|
|
1182
|
+
return i(A, t), t.name += "_instance_" + e.uses[a]++, t;
|
|
1183
|
+
}
|
|
1184
|
+
_invokeOne(e) {
|
|
1185
|
+
const a = Object.values(this.plugins);
|
|
1186
|
+
a.push(this);
|
|
1187
|
+
for (let A = 0; A < a.length; A++) {
|
|
1188
|
+
const t = e(a[A]);
|
|
1189
|
+
if (t) return t;
|
|
1190
|
+
}
|
|
1191
|
+
return null;
|
|
1192
|
+
}
|
|
1193
|
+
_invokeAll(e) {
|
|
1194
|
+
const a = Object.values(this.plugins);
|
|
1195
|
+
a.unshift(this);
|
|
1196
|
+
const A = [];
|
|
1197
|
+
for (let t = 0; t < a.length; t++) {
|
|
1198
|
+
const i = e(a[t]);
|
|
1199
|
+
i && A.push(i);
|
|
1200
|
+
}
|
|
1201
|
+
return A;
|
|
1202
|
+
}
|
|
1203
|
+
getDependency(e, a) {
|
|
1204
|
+
const A = e + ":" + a;
|
|
1205
|
+
let t = this.cache.get(A);
|
|
1206
|
+
if (!t) {
|
|
1207
|
+
switch (e) {
|
|
1208
|
+
case "scene":
|
|
1209
|
+
t = this.loadScene(a);
|
|
1210
|
+
break;
|
|
1211
|
+
case "node":
|
|
1212
|
+
t = this._invokeOne(function(i) {
|
|
1213
|
+
return i.loadNode && i.loadNode(a);
|
|
1214
|
+
});
|
|
1215
|
+
break;
|
|
1216
|
+
case "mesh":
|
|
1217
|
+
t = this._invokeOne(function(i) {
|
|
1218
|
+
return i.loadMesh && i.loadMesh(a);
|
|
1219
|
+
});
|
|
1220
|
+
break;
|
|
1221
|
+
case "accessor":
|
|
1222
|
+
t = this.loadAccessor(a);
|
|
1223
|
+
break;
|
|
1224
|
+
case "bufferView":
|
|
1225
|
+
t = this._invokeOne(function(i) {
|
|
1226
|
+
return i.loadBufferView && i.loadBufferView(a);
|
|
1227
|
+
});
|
|
1228
|
+
break;
|
|
1229
|
+
case "buffer":
|
|
1230
|
+
t = this.loadBuffer(a);
|
|
1231
|
+
break;
|
|
1232
|
+
case "material":
|
|
1233
|
+
t = this._invokeOne(function(i) {
|
|
1234
|
+
return i.loadMaterial && i.loadMaterial(a);
|
|
1235
|
+
});
|
|
1236
|
+
break;
|
|
1237
|
+
case "texture":
|
|
1238
|
+
t = this._invokeOne(function(i) {
|
|
1239
|
+
return i.loadTexture && i.loadTexture(a);
|
|
1240
|
+
});
|
|
1241
|
+
break;
|
|
1242
|
+
case "skin":
|
|
1243
|
+
t = this.loadSkin(a);
|
|
1244
|
+
break;
|
|
1245
|
+
case "animation":
|
|
1246
|
+
t = this._invokeOne(function(i) {
|
|
1247
|
+
return i.loadAnimation && i.loadAnimation(a);
|
|
1248
|
+
});
|
|
1249
|
+
break;
|
|
1250
|
+
case "camera":
|
|
1251
|
+
t = this.loadCamera(a);
|
|
1252
|
+
break;
|
|
1253
|
+
default:
|
|
1254
|
+
if (t = this._invokeOne(function(i) {
|
|
1255
|
+
return i != this && i.getDependency && i.getDependency(e, a);
|
|
1256
|
+
}), !t) throw new Error("Unknown type: " + e);
|
|
1257
|
+
}
|
|
1258
|
+
this.cache.add(A, t);
|
|
1259
|
+
}
|
|
1260
|
+
return t;
|
|
1261
|
+
}
|
|
1262
|
+
getDependencies(e) {
|
|
1263
|
+
let a = this.cache.get(e);
|
|
1264
|
+
if (!a) {
|
|
1265
|
+
const A = this, t = this.json[e + (e === "mesh" ? "es" : "s")] || [];
|
|
1266
|
+
a = Promise.all(t.map(function(i, s) {
|
|
1267
|
+
return A.getDependency(e, s);
|
|
1268
|
+
})), this.cache.add(e, a);
|
|
1269
|
+
}
|
|
1270
|
+
return a;
|
|
1271
|
+
}
|
|
1272
|
+
loadBuffer(e) {
|
|
1273
|
+
const a = this.json.buffers[e], A = this.fileLoader;
|
|
1274
|
+
if (a.type && a.type !== "arraybuffer") throw new Error("THREE.GLTFLoader: " + a.type + " buffer type is not supported.");
|
|
1275
|
+
if (a.uri === void 0 && e === 0) return Promise.resolve(this.extensions[j.KHR_BINARY_GLTF].body);
|
|
1276
|
+
const t = this.options;
|
|
1277
|
+
return new Promise(function(i, s) {
|
|
1278
|
+
A.load(De.resolveURL(a.uri, t.path), i, void 0, function() {
|
|
1279
|
+
s(new Error('THREE.GLTFLoader: Failed to load buffer "' + a.uri + '".'));
|
|
1280
|
+
});
|
|
1281
|
+
});
|
|
1282
|
+
}
|
|
1283
|
+
loadBufferView(e) {
|
|
1284
|
+
const a = this.json.bufferViews[e];
|
|
1285
|
+
return this.getDependency("buffer", a.buffer).then(function(A) {
|
|
1286
|
+
const t = a.byteLength || 0, i = a.byteOffset || 0;
|
|
1287
|
+
return A.slice(i, i + t);
|
|
1288
|
+
});
|
|
1289
|
+
}
|
|
1290
|
+
loadAccessor(e) {
|
|
1291
|
+
const a = this, A = this.json, t = this.json.accessors[e];
|
|
1292
|
+
if (t.bufferView === void 0 && t.sparse === void 0) {
|
|
1293
|
+
const s = Ne[t.type], r = ue[t.componentType], b = t.normalized === !0, o = new r(t.count * s);
|
|
1294
|
+
return Promise.resolve(new fe(o, s, b));
|
|
1295
|
+
}
|
|
1296
|
+
const i = [];
|
|
1297
|
+
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) {
|
|
1298
|
+
const r = s[0], b = Ne[t.type], o = ue[t.componentType], d = o.BYTES_PER_ELEMENT, c = d * b, g = t.byteOffset || 0, l = t.bufferView !== void 0 ? A.bufferViews[t.bufferView].byteStride : void 0, h = t.normalized === !0;
|
|
1299
|
+
let f, I;
|
|
1300
|
+
if (l && l !== c) {
|
|
1301
|
+
const B = Math.floor(g / l), u = "InterleavedBuffer:" + t.bufferView + ":" + t.componentType + ":" + B + ":" + t.count;
|
|
1302
|
+
let E = a.cache.get(u);
|
|
1303
|
+
E || (f = new o(r, B * l, t.count * l / d), E = new SA(f, l / d), a.cache.add(u, E)), I = new TA(E, b, g % l / d, h);
|
|
1304
|
+
} else f = r === null ? new o(t.count * b) : new o(r, g, t.count * b), I = new fe(f, b, h);
|
|
1305
|
+
if (t.sparse !== void 0) {
|
|
1306
|
+
const B = Ne.SCALAR, u = ue[t.sparse.indices.componentType], E = t.sparse.indices.byteOffset || 0, C = t.sparse.values.byteOffset || 0, D = new u(s[1], E, t.sparse.count * B), y = new o(s[2], C, t.sparse.count * b);
|
|
1307
|
+
r !== null && (I = new fe(I.array.slice(), I.itemSize, I.normalized)), I.normalized = !1;
|
|
1308
|
+
for (let w = 0, p = D.length; w < p; w++) {
|
|
1309
|
+
const Q = D[w];
|
|
1310
|
+
if (I.setX(Q, y[w * b]), b >= 2 && I.setY(Q, y[w * b + 1]), b >= 3 && I.setZ(Q, y[w * b + 2]), b >= 4 && I.setW(Q, y[w * b + 3]), b >= 5) throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.");
|
|
1311
|
+
}
|
|
1312
|
+
I.normalized = h;
|
|
1313
|
+
}
|
|
1314
|
+
return I;
|
|
1315
|
+
});
|
|
1316
|
+
}
|
|
1317
|
+
loadTexture(e) {
|
|
1318
|
+
const a = this.json, A = this.options, t = a.textures[e].source, i = a.images[t];
|
|
1319
|
+
let s = this.textureLoader;
|
|
1320
|
+
if (i.uri) {
|
|
1321
|
+
const r = A.manager.getHandler(i.uri);
|
|
1322
|
+
r !== null && (s = r);
|
|
1323
|
+
}
|
|
1324
|
+
return this.loadTextureImage(e, t, s);
|
|
1325
|
+
}
|
|
1326
|
+
loadTextureImage(e, a, A) {
|
|
1327
|
+
const t = this, i = this.json, s = i.textures[e], r = i.images[a], b = (r.uri || r.bufferView) + ":" + s.sampler;
|
|
1328
|
+
if (this.textureCache[b]) return this.textureCache[b];
|
|
1329
|
+
const o = this.loadImageSource(a, A).then(function(d) {
|
|
1330
|
+
d.flipY = !1, d.name = s.name || r.name || "", d.name === "" && typeof r.uri == "string" && r.uri.startsWith("data:image/") === !1 && (d.name = r.uri);
|
|
1331
|
+
const c = (i.samplers || {})[s.sampler] || {};
|
|
1332
|
+
return d.magFilter = ka[c.magFilter] || Me, d.minFilter = ka[c.minFilter] || ga, d.wrapS = xa[c.wrapS] || sa, d.wrapT = xa[c.wrapT] || sa, d.generateMipmaps = !d.isCompressedTexture && d.minFilter !== za && d.minFilter !== Me, t.associations.set(d, { textures: e }), d;
|
|
1333
|
+
}).catch(function() {
|
|
1334
|
+
return null;
|
|
1335
|
+
});
|
|
1336
|
+
return this.textureCache[b] = o, o;
|
|
1337
|
+
}
|
|
1338
|
+
loadImageSource(e, a) {
|
|
1339
|
+
const A = this, t = this.json, i = this.options;
|
|
1340
|
+
if (this.sourceCache[e] !== void 0) return this.sourceCache[e].then((c) => c.clone());
|
|
1341
|
+
const s = t.images[e], r = self.URL || self.webkitURL;
|
|
1342
|
+
let b = s.uri || "", o = !1;
|
|
1343
|
+
if (s.bufferView !== void 0) b = A.getDependency("bufferView", s.bufferView).then(function(c) {
|
|
1344
|
+
o = !0;
|
|
1345
|
+
const g = new Blob([c], { type: s.mimeType });
|
|
1346
|
+
return b = r.createObjectURL(g), b;
|
|
1347
|
+
});
|
|
1348
|
+
else if (s.uri === void 0) throw new Error("THREE.GLTFLoader: Image " + e + " is missing URI and bufferView");
|
|
1349
|
+
const d = Promise.resolve(b).then(function(c) {
|
|
1350
|
+
return new Promise(function(g, l) {
|
|
1351
|
+
let h = g;
|
|
1352
|
+
a.isImageBitmapLoader === !0 && (h = function(f) {
|
|
1353
|
+
const I = new Ba(f);
|
|
1354
|
+
I.needsUpdate = !0, g(I);
|
|
1355
|
+
}), a.load(De.resolveURL(c, i.path), h, void 0, l);
|
|
1356
|
+
});
|
|
1357
|
+
}).then(function(c) {
|
|
1358
|
+
var g;
|
|
1359
|
+
return o === !0 && r.revokeObjectURL(b), Z(c, s), c.userData.mimeType = s.mimeType || ((g = s.uri).search(/\.jpe?g($|\?)/i) > 0 || g.search(/^data\:image\/jpeg/) === 0 ? "image/jpeg" : g.search(/\.webp($|\?)/i) > 0 || g.search(/^data\:image\/webp/) === 0 ? "image/webp" : g.search(/\.ktx2($|\?)/i) > 0 || g.search(/^data\:image\/ktx2/) === 0 ? "image/ktx2" : "image/png"), c;
|
|
1360
|
+
}).catch(function(c) {
|
|
1361
|
+
throw console.error("THREE.GLTFLoader: Couldn't load texture", b), c;
|
|
1362
|
+
});
|
|
1363
|
+
return this.sourceCache[e] = d, d;
|
|
1364
|
+
}
|
|
1365
|
+
assignTexture(e, a, A, t) {
|
|
1366
|
+
const i = this;
|
|
1367
|
+
return this.getDependency("texture", A.index).then(function(s) {
|
|
1368
|
+
if (!s) return null;
|
|
1369
|
+
if (A.texCoord !== void 0 && A.texCoord > 0 && ((s = s.clone()).channel = A.texCoord), i.extensions[j.KHR_TEXTURE_TRANSFORM]) {
|
|
1370
|
+
const r = A.extensions !== void 0 ? A.extensions[j.KHR_TEXTURE_TRANSFORM] : void 0;
|
|
1371
|
+
if (r) {
|
|
1372
|
+
const b = i.associations.get(s);
|
|
1373
|
+
s = i.extensions[j.KHR_TEXTURE_TRANSFORM].extendTexture(s, r), i.associations.set(s, b);
|
|
1374
|
+
}
|
|
1375
|
+
}
|
|
1376
|
+
return t !== void 0 && (s.colorSpace = t), e[a] = s, s;
|
|
1377
|
+
});
|
|
1378
|
+
}
|
|
1379
|
+
assignFinalMaterial(e) {
|
|
1380
|
+
const a = e.geometry;
|
|
1381
|
+
let A = e.material;
|
|
1382
|
+
const t = a.attributes.tangent === void 0, i = a.attributes.color !== void 0, s = a.attributes.normal === void 0;
|
|
1383
|
+
if (e.isPoints) {
|
|
1384
|
+
const r = "PointsMaterial:" + A.uuid;
|
|
1385
|
+
let b = this.cache.get(r);
|
|
1386
|
+
b || (b = new LA(), ve.prototype.copy.call(b, A), b.color.copy(A.color), b.map = A.map, b.sizeAttenuation = !1, this.cache.add(r, b)), A = b;
|
|
1387
|
+
} else if (e.isLine) {
|
|
1388
|
+
const r = "LineBasicMaterial:" + A.uuid;
|
|
1389
|
+
let b = this.cache.get(r);
|
|
1390
|
+
b || (b = new GA(), ve.prototype.copy.call(b, A), b.color.copy(A.color), b.map = A.map, this.cache.add(r, b)), A = b;
|
|
1391
|
+
}
|
|
1392
|
+
if (t || i || s) {
|
|
1393
|
+
let r = "ClonedMaterial:" + A.uuid + ":";
|
|
1394
|
+
t && (r += "derivative-tangents:"), i && (r += "vertex-colors:"), s && (r += "flat-shading:");
|
|
1395
|
+
let b = this.cache.get(r);
|
|
1396
|
+
b || (b = A.clone(), i && (b.vertexColors = !0), s && (b.flatShading = !0), t && (b.normalScale && (b.normalScale.y *= -1), b.clearcoatNormalScale && (b.clearcoatNormalScale.y *= -1)), this.cache.add(r, b), this.associations.set(b, this.associations.get(A))), A = b;
|
|
1397
|
+
}
|
|
1398
|
+
e.material = A;
|
|
1399
|
+
}
|
|
1400
|
+
getMaterialType() {
|
|
1401
|
+
return ua;
|
|
1402
|
+
}
|
|
1403
|
+
loadMaterial(e) {
|
|
1404
|
+
const a = this, A = this.json, t = this.extensions, i = A.materials[e];
|
|
1405
|
+
let s;
|
|
1406
|
+
const r = {}, b = [];
|
|
1407
|
+
if ((i.extensions || {})[j.KHR_MATERIALS_UNLIT]) {
|
|
1408
|
+
const d = t[j.KHR_MATERIALS_UNLIT];
|
|
1409
|
+
s = d.getMaterialType(), b.push(d.extendParams(r, i, a));
|
|
1410
|
+
} else {
|
|
1411
|
+
const d = i.pbrMetallicRoughness || {};
|
|
1412
|
+
if (r.color = new se(1, 1, 1), r.opacity = 1, Array.isArray(d.baseColorFactor)) {
|
|
1413
|
+
const c = d.baseColorFactor;
|
|
1414
|
+
r.color.setRGB(c[0], c[1], c[2], q), r.opacity = c[3];
|
|
1415
|
+
}
|
|
1416
|
+
d.baseColorTexture !== void 0 && b.push(a.assignTexture(r, "map", d.baseColorTexture, $)), r.metalness = d.metallicFactor !== void 0 ? d.metallicFactor : 1, r.roughness = d.roughnessFactor !== void 0 ? d.roughnessFactor : 1, d.metallicRoughnessTexture !== void 0 && (b.push(a.assignTexture(r, "metalnessMap", d.metallicRoughnessTexture)), b.push(a.assignTexture(r, "roughnessMap", d.metallicRoughnessTexture))), s = this._invokeOne(function(c) {
|
|
1417
|
+
return c.getMaterialType && c.getMaterialType(e);
|
|
1418
|
+
}), b.push(Promise.all(this._invokeAll(function(c) {
|
|
1419
|
+
return c.extendMaterialParams && c.extendMaterialParams(e, r);
|
|
1420
|
+
})));
|
|
1421
|
+
}
|
|
1422
|
+
i.doubleSided === !0 && (r.side = vA);
|
|
1423
|
+
const o = i.alphaMode || Xt;
|
|
1424
|
+
if (o === $t ? (r.transparent = !0, r.depthWrite = !1) : (r.transparent = !1, o === Zt && (r.alphaTest = i.alphaCutoff !== void 0 ? i.alphaCutoff : 0.5)), i.normalTexture !== void 0 && s !== ye && (b.push(a.assignTexture(r, "normalMap", i.normalTexture)), r.normalScale = new Oa(1, 1), i.normalTexture.scale !== void 0)) {
|
|
1425
|
+
const d = i.normalTexture.scale;
|
|
1426
|
+
r.normalScale.set(d, d);
|
|
1427
|
+
}
|
|
1428
|
+
if (i.occlusionTexture !== void 0 && s !== ye && (b.push(a.assignTexture(r, "aoMap", i.occlusionTexture)), i.occlusionTexture.strength !== void 0 && (r.aoMapIntensity = i.occlusionTexture.strength)), i.emissiveFactor !== void 0 && s !== ye) {
|
|
1429
|
+
const d = i.emissiveFactor;
|
|
1430
|
+
r.emissive = new se().setRGB(d[0], d[1], d[2], q);
|
|
1431
|
+
}
|
|
1432
|
+
return i.emissiveTexture !== void 0 && s !== ye && b.push(a.assignTexture(r, "emissiveMap", i.emissiveTexture, $)), Promise.all(b).then(function() {
|
|
1433
|
+
const d = new s(r);
|
|
1434
|
+
return i.name && (d.name = i.name), Z(d, i), a.associations.set(d, { materials: e }), i.extensions && re(t, d, i), d;
|
|
1435
|
+
});
|
|
1436
|
+
}
|
|
1437
|
+
createUniqueName(e) {
|
|
1438
|
+
const a = UA.sanitizeNodeName(e || "");
|
|
1439
|
+
return a in this.nodeNamesUsed ? a + "_" + ++this.nodeNamesUsed[a] : (this.nodeNamesUsed[a] = 0, a);
|
|
1440
|
+
}
|
|
1441
|
+
loadGeometries(e) {
|
|
1442
|
+
const a = this, A = this.extensions, t = this.primitiveCache;
|
|
1443
|
+
function i(r) {
|
|
1444
|
+
return A[j.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(r, a).then(function(b) {
|
|
1445
|
+
return Da(b, r, a);
|
|
1446
|
+
});
|
|
1447
|
+
}
|
|
1448
|
+
const s = [];
|
|
1449
|
+
for (let r = 0, b = e.length; r < b; r++) {
|
|
1450
|
+
const o = e[r], d = ai(o), c = t[d];
|
|
1451
|
+
if (c) s.push(c.promise);
|
|
1452
|
+
else {
|
|
1453
|
+
let g;
|
|
1454
|
+
g = o.extensions && o.extensions[j.KHR_DRACO_MESH_COMPRESSION] ? i(o) : Da(new ba(), o, a), t[d] = { primitive: o, promise: g }, s.push(g);
|
|
1455
|
+
}
|
|
1456
|
+
}
|
|
1457
|
+
return Promise.all(s);
|
|
1458
|
+
}
|
|
1459
|
+
loadMesh(e) {
|
|
1460
|
+
const a = this, A = this.json, t = this.extensions, i = A.meshes[e], s = i.primitives, r = [];
|
|
1461
|
+
for (let o = 0, d = s.length; o < d; o++) {
|
|
1462
|
+
const c = s[o].material === void 0 ? ((b = this.cache).DefaultMaterial === void 0 && (b.DefaultMaterial = new ua({ color: 16777215, emissive: 0, metalness: 1, roughness: 1, transparent: !1, depthTest: !0, side: tt })), b.DefaultMaterial) : this.getDependency("material", s[o].material);
|
|
1463
|
+
r.push(c);
|
|
1464
|
+
}
|
|
1465
|
+
var b;
|
|
1466
|
+
return r.push(a.loadGeometries(s)), Promise.all(r).then(function(o) {
|
|
1467
|
+
const d = o.slice(0, o.length - 1), c = o[o.length - 1], g = [];
|
|
1468
|
+
for (let h = 0, f = c.length; h < f; h++) {
|
|
1469
|
+
const I = c[h], B = s[h];
|
|
1470
|
+
let u;
|
|
1471
|
+
const E = d[h];
|
|
1472
|
+
if (B.mode === N.TRIANGLES || B.mode === N.TRIANGLE_STRIP || B.mode === N.TRIANGLE_FAN || B.mode === void 0) u = i.isSkinnedMesh === !0 ? new NA(I, E) : new _A(I, E), u.isSkinnedMesh === !0 && u.normalizeSkinWeights(), B.mode === N.TRIANGLE_STRIP ? u.geometry = ya(u.geometry, Ja) : B.mode === N.TRIANGLE_FAN && (u.geometry = ya(u.geometry, ia));
|
|
1473
|
+
else if (B.mode === N.LINES) u = new PA(I, E);
|
|
1474
|
+
else if (B.mode === N.LINE_STRIP) u = new HA(I, E);
|
|
1475
|
+
else if (B.mode === N.LINE_LOOP) u = new qA(I, E);
|
|
1476
|
+
else {
|
|
1477
|
+
if (B.mode !== N.POINTS) throw new Error("THREE.GLTFLoader: Primitive mode unsupported: " + B.mode);
|
|
1478
|
+
u = new JA(I, E);
|
|
1479
|
+
}
|
|
1480
|
+
Object.keys(u.geometry.morphAttributes).length > 0 && ei(u, i), u.name = a.createUniqueName(i.name || "mesh_" + e), Z(u, i), B.extensions && re(t, u, B), a.assignFinalMaterial(u), g.push(u);
|
|
1481
|
+
}
|
|
1482
|
+
for (let h = 0, f = g.length; h < f; h++) a.associations.set(g[h], { meshes: e, primitives: h });
|
|
1483
|
+
if (g.length === 1) return i.extensions && re(t, g[0], i), g[0];
|
|
1484
|
+
const l = new Ue();
|
|
1485
|
+
i.extensions && re(t, l, i), a.associations.set(l, { meshes: e });
|
|
1486
|
+
for (let h = 0, f = g.length; h < f; h++) l.add(g[h]);
|
|
1487
|
+
return l;
|
|
1488
|
+
});
|
|
1489
|
+
}
|
|
1490
|
+
loadCamera(e) {
|
|
1491
|
+
let a;
|
|
1492
|
+
const A = this.json.cameras[e], t = A[A.type];
|
|
1493
|
+
if (t) return A.type === "perspective" ? a = new OA(KA.radToDeg(t.yfov), t.aspectRatio || 1, t.znear || 1, t.zfar || 2e6) : A.type === "orthographic" && (a = new VA(-t.xmag, t.xmag, t.ymag, -t.ymag, t.znear, t.zfar)), A.name && (a.name = this.createUniqueName(A.name)), Z(a, A), Promise.resolve(a);
|
|
1494
|
+
console.warn("THREE.GLTFLoader: Missing camera parameters.");
|
|
1495
|
+
}
|
|
1496
|
+
loadSkin(e) {
|
|
1497
|
+
const a = this.json.skins[e], A = [];
|
|
1498
|
+
for (let t = 0, i = a.joints.length; t < i; t++) A.push(this._loadNodeShallow(a.joints[t]));
|
|
1499
|
+
return a.inverseBindMatrices !== void 0 ? A.push(this.getDependency("accessor", a.inverseBindMatrices)) : A.push(null), Promise.all(A).then(function(t) {
|
|
1500
|
+
const i = t.pop(), s = t, r = [], b = [];
|
|
1501
|
+
for (let o = 0, d = s.length; o < d; o++) {
|
|
1502
|
+
const c = s[o];
|
|
1503
|
+
if (c) {
|
|
1504
|
+
r.push(c);
|
|
1505
|
+
const g = new Le();
|
|
1506
|
+
i !== null && g.fromArray(i.array, 16 * o), b.push(g);
|
|
1507
|
+
} else console.warn('THREE.GLTFLoader: Joint "%s" could not be found.', a.joints[o]);
|
|
1508
|
+
}
|
|
1509
|
+
return new zA(r, b);
|
|
1510
|
+
});
|
|
1511
|
+
}
|
|
1512
|
+
loadAnimation(e) {
|
|
1513
|
+
const a = this.json, A = this, t = a.animations[e], i = t.name ? t.name : "animation_" + e, s = [], r = [], b = [], o = [], d = [];
|
|
1514
|
+
for (let c = 0, g = t.channels.length; c < g; c++) {
|
|
1515
|
+
const l = t.channels[c], h = t.samplers[l.sampler], f = l.target, I = f.node, B = t.parameters !== void 0 ? t.parameters[h.input] : h.input, u = t.parameters !== void 0 ? t.parameters[h.output] : h.output;
|
|
1516
|
+
f.node !== void 0 && (s.push(this.getDependency("node", I)), r.push(this.getDependency("accessor", B)), b.push(this.getDependency("accessor", u)), o.push(h), d.push(f));
|
|
1517
|
+
}
|
|
1518
|
+
return Promise.all([Promise.all(s), Promise.all(r), Promise.all(b), Promise.all(o), Promise.all(d)]).then(function(c) {
|
|
1519
|
+
const g = c[0], l = c[1], h = c[2], f = c[3], I = c[4], B = [];
|
|
1520
|
+
for (let u = 0, E = g.length; u < E; u++) {
|
|
1521
|
+
const C = g[u], D = l[u], y = h[u], w = f[u], p = I[u];
|
|
1522
|
+
if (C === void 0) continue;
|
|
1523
|
+
C.updateMatrix && C.updateMatrix();
|
|
1524
|
+
const Q = A._createAnimationTracks(C, D, y, w, p);
|
|
1525
|
+
if (Q) for (let k = 0; k < Q.length; k++) B.push(Q[k]);
|
|
1526
|
+
}
|
|
1527
|
+
return new YA(i, void 0, B);
|
|
1528
|
+
});
|
|
1529
|
+
}
|
|
1530
|
+
createNodeMesh(e) {
|
|
1531
|
+
const a = this.json, A = this, t = a.nodes[e];
|
|
1532
|
+
return t.mesh === void 0 ? null : A.getDependency("mesh", t.mesh).then(function(i) {
|
|
1533
|
+
const s = A._getNodeRef(A.meshCache, t.mesh, i);
|
|
1534
|
+
return t.weights !== void 0 && s.traverse(function(r) {
|
|
1535
|
+
if (r.isMesh) for (let b = 0, o = t.weights.length; b < o; b++) r.morphTargetInfluences[b] = t.weights[b];
|
|
1536
|
+
}), s;
|
|
1537
|
+
});
|
|
1538
|
+
}
|
|
1539
|
+
loadNode(e) {
|
|
1540
|
+
const a = this, A = this.json.nodes[e], t = a._loadNodeShallow(e), i = [], s = A.children || [];
|
|
1541
|
+
for (let b = 0, o = s.length; b < o; b++) i.push(a.getDependency("node", s[b]));
|
|
1542
|
+
const r = A.skin === void 0 ? Promise.resolve(null) : a.getDependency("skin", A.skin);
|
|
1543
|
+
return Promise.all([t, Promise.all(i), r]).then(function(b) {
|
|
1544
|
+
const o = b[0], d = b[1], c = b[2];
|
|
1545
|
+
c !== null && o.traverse(function(g) {
|
|
1546
|
+
g.isSkinnedMesh && g.bind(c, Ai);
|
|
1547
|
+
});
|
|
1548
|
+
for (let g = 0, l = d.length; g < l; g++) o.add(d[g]);
|
|
1549
|
+
return o;
|
|
1550
|
+
});
|
|
1551
|
+
}
|
|
1552
|
+
_loadNodeShallow(e) {
|
|
1553
|
+
const a = this.json, A = this.extensions, t = this;
|
|
1554
|
+
if (this.nodeCache[e] !== void 0) return this.nodeCache[e];
|
|
1555
|
+
const i = a.nodes[e], s = i.name ? t.createUniqueName(i.name) : "", r = [], b = t._invokeOne(function(o) {
|
|
1556
|
+
return o.createNodeMesh && o.createNodeMesh(e);
|
|
1557
|
+
});
|
|
1558
|
+
return b && r.push(b), i.camera !== void 0 && r.push(t.getDependency("camera", i.camera).then(function(o) {
|
|
1559
|
+
return t._getNodeRef(t.cameraCache, i.camera, o);
|
|
1560
|
+
})), t._invokeAll(function(o) {
|
|
1561
|
+
return o.createNodeAttachment && o.createNodeAttachment(e);
|
|
1562
|
+
}).forEach(function(o) {
|
|
1563
|
+
r.push(o);
|
|
1564
|
+
}), this.nodeCache[e] = Promise.all(r).then(function(o) {
|
|
1565
|
+
let d;
|
|
1566
|
+
if (d = i.isBone === !0 ? new WA() : o.length > 1 ? new Ue() : o.length === 1 ? o[0] : new Va(), d !== o[0]) for (let c = 0, g = o.length; c < g; c++) d.add(o[c]);
|
|
1567
|
+
if (i.name && (d.userData.name = i.name, d.name = s), Z(d, i), i.extensions && re(A, d, i), i.matrix !== void 0) {
|
|
1568
|
+
const c = new Le();
|
|
1569
|
+
c.fromArray(i.matrix), d.applyMatrix4(c);
|
|
1570
|
+
} else i.translation !== void 0 && d.position.fromArray(i.translation), i.rotation !== void 0 && d.quaternion.fromArray(i.rotation), i.scale !== void 0 && d.scale.fromArray(i.scale);
|
|
1571
|
+
return t.associations.has(d) || t.associations.set(d, {}), t.associations.get(d).nodes = e, d;
|
|
1572
|
+
}), this.nodeCache[e];
|
|
1573
|
+
}
|
|
1574
|
+
loadScene(e) {
|
|
1575
|
+
const a = this.extensions, A = this.json.scenes[e], t = this, i = new Ue();
|
|
1576
|
+
A.name && (i.name = t.createUniqueName(A.name)), Z(i, A), A.extensions && re(a, i, A);
|
|
1577
|
+
const s = A.nodes || [], r = [];
|
|
1578
|
+
for (let b = 0, o = s.length; b < o; b++) r.push(t.getDependency("node", s[b]));
|
|
1579
|
+
return Promise.all(r).then(function(b) {
|
|
1580
|
+
for (let o = 0, d = b.length; o < d; o++) i.add(b[o]);
|
|
1581
|
+
return t.associations = ((o) => {
|
|
1582
|
+
const d = /* @__PURE__ */ new Map();
|
|
1583
|
+
for (const [c, g] of t.associations) (c instanceof ve || c instanceof Ba) && d.set(c, g);
|
|
1584
|
+
return o.traverse((c) => {
|
|
1585
|
+
const g = t.associations.get(c);
|
|
1586
|
+
g != null && d.set(c, g);
|
|
1587
|
+
}), d;
|
|
1588
|
+
})(i), i;
|
|
1589
|
+
});
|
|
1590
|
+
}
|
|
1591
|
+
_createAnimationTracks(e, a, A, t, i) {
|
|
1592
|
+
const s = [], r = e.name ? e.name : e.uuid, b = [];
|
|
1593
|
+
let o;
|
|
1594
|
+
switch (ee[i.path] === ee.weights ? e.traverse(function(g) {
|
|
1595
|
+
g.morphTargetInfluences && b.push(g.name ? g.name : g.uuid);
|
|
1596
|
+
}) : b.push(r), ee[i.path]) {
|
|
1597
|
+
case ee.weights:
|
|
1598
|
+
o = Ea;
|
|
1599
|
+
break;
|
|
1600
|
+
case ee.rotation:
|
|
1601
|
+
o = pa;
|
|
1602
|
+
break;
|
|
1603
|
+
case ee.position:
|
|
1604
|
+
case ee.scale:
|
|
1605
|
+
o = Ca;
|
|
1606
|
+
break;
|
|
1607
|
+
default:
|
|
1608
|
+
A.itemSize === 1 ? o = Ea : o = Ca;
|
|
1609
|
+
}
|
|
1610
|
+
const d = t.interpolation !== void 0 ? Wt[t.interpolation] : Ya, c = this._getArrayFromAccessor(A);
|
|
1611
|
+
for (let g = 0, l = b.length; g < l; g++) {
|
|
1612
|
+
const h = new o(b[g] + "." + ee[i.path], a.array, c, d);
|
|
1613
|
+
t.interpolation === "CUBICSPLINE" && this._createCubicSplineTrackInterpolant(h), s.push(h);
|
|
1614
|
+
}
|
|
1615
|
+
return s;
|
|
1616
|
+
}
|
|
1617
|
+
_getArrayFromAccessor(e) {
|
|
1618
|
+
let a = e.array;
|
|
1619
|
+
if (e.normalized) {
|
|
1620
|
+
const A = oa(a.constructor), t = new Float32Array(a.length);
|
|
1621
|
+
for (let i = 0, s = a.length; i < s; i++) t[i] = a[i] * A;
|
|
1622
|
+
a = t;
|
|
1623
|
+
}
|
|
1624
|
+
return a;
|
|
1625
|
+
}
|
|
1626
|
+
_createCubicSplineTrackInterpolant(e) {
|
|
1627
|
+
e.createInterpolant = function(a) {
|
|
1628
|
+
return new (this instanceof pa ? Yt : AA)(this.times, this.values, this.getValueSize() / 3, a);
|
|
1629
|
+
}, e.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = !0;
|
|
1630
|
+
}
|
|
1631
|
+
}
|
|
1632
|
+
function Da(n, e, a) {
|
|
1633
|
+
const A = e.attributes, t = [];
|
|
1634
|
+
function i(s, r) {
|
|
1635
|
+
return a.getDependency("accessor", s).then(function(b) {
|
|
1636
|
+
n.setAttribute(r, b);
|
|
1637
|
+
});
|
|
1638
|
+
}
|
|
1639
|
+
for (const s in A) {
|
|
1640
|
+
const r = na[s] || s.toLowerCase();
|
|
1641
|
+
r in n.attributes || t.push(i(A[s], r));
|
|
1642
|
+
}
|
|
1643
|
+
if (e.indices !== void 0 && !n.index) {
|
|
1644
|
+
const s = a.getDependency("accessor", e.indices).then(function(r) {
|
|
1645
|
+
n.setIndex(r);
|
|
1646
|
+
});
|
|
1647
|
+
t.push(s);
|
|
1648
|
+
}
|
|
1649
|
+
return ra.workingColorSpace !== q && "COLOR_0" in A && console.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${ra.workingColorSpace}" not supported.`), Z(n, e), function(s, r, b) {
|
|
1650
|
+
const o = r.attributes, d = new Ha();
|
|
1651
|
+
if (o.POSITION === void 0) return;
|
|
1652
|
+
{
|
|
1653
|
+
const l = b.json.accessors[o.POSITION], h = l.min, f = l.max;
|
|
1654
|
+
if (h === void 0 || f === void 0) return void console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");
|
|
1655
|
+
if (d.set(new H(h[0], h[1], h[2]), new H(f[0], f[1], f[2])), l.normalized) {
|
|
1656
|
+
const I = oa(ue[l.componentType]);
|
|
1657
|
+
d.min.multiplyScalar(I), d.max.multiplyScalar(I);
|
|
1658
|
+
}
|
|
1659
|
+
}
|
|
1660
|
+
const c = r.targets;
|
|
1661
|
+
if (c !== void 0) {
|
|
1662
|
+
const l = new H(), h = new H();
|
|
1663
|
+
for (let f = 0, I = c.length; f < I; f++) {
|
|
1664
|
+
const B = c[f];
|
|
1665
|
+
if (B.POSITION !== void 0) {
|
|
1666
|
+
const u = b.json.accessors[B.POSITION], E = u.min, C = u.max;
|
|
1667
|
+
if (E !== void 0 && C !== void 0) {
|
|
1668
|
+
if (h.setX(Math.max(Math.abs(E[0]), Math.abs(C[0]))), h.setY(Math.max(Math.abs(E[1]), Math.abs(C[1]))), h.setZ(Math.max(Math.abs(E[2]), Math.abs(C[2]))), u.normalized) {
|
|
1669
|
+
const D = oa(ue[u.componentType]);
|
|
1670
|
+
h.multiplyScalar(D);
|
|
1671
|
+
}
|
|
1672
|
+
l.max(h);
|
|
1673
|
+
} else console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");
|
|
1674
|
+
}
|
|
1675
|
+
}
|
|
1676
|
+
d.expandByVector(l);
|
|
1677
|
+
}
|
|
1678
|
+
s.boundingBox = d;
|
|
1679
|
+
const g = new qa();
|
|
1680
|
+
d.getCenter(g.center), g.radius = d.min.distanceTo(d.max) / 2, s.boundingSphere = g;
|
|
1681
|
+
}(n, e, a), Promise.all(t).then(function() {
|
|
1682
|
+
return e.targets !== void 0 ? function(s, r, b) {
|
|
1683
|
+
let o = !1, d = !1, c = !1;
|
|
1684
|
+
for (let f = 0, I = r.length; f < I; f++) {
|
|
1685
|
+
const B = r[f];
|
|
1686
|
+
if (B.POSITION !== void 0 && (o = !0), B.NORMAL !== void 0 && (d = !0), B.COLOR_0 !== void 0 && (c = !0), o && d && c) break;
|
|
1687
|
+
}
|
|
1688
|
+
if (!o && !d && !c) return Promise.resolve(s);
|
|
1689
|
+
const g = [], l = [], h = [];
|
|
1690
|
+
for (let f = 0, I = r.length; f < I; f++) {
|
|
1691
|
+
const B = r[f];
|
|
1692
|
+
if (o) {
|
|
1693
|
+
const u = B.POSITION !== void 0 ? b.getDependency("accessor", B.POSITION) : s.attributes.position;
|
|
1694
|
+
g.push(u);
|
|
1695
|
+
}
|
|
1696
|
+
if (d) {
|
|
1697
|
+
const u = B.NORMAL !== void 0 ? b.getDependency("accessor", B.NORMAL) : s.attributes.normal;
|
|
1698
|
+
l.push(u);
|
|
1699
|
+
}
|
|
1700
|
+
if (c) {
|
|
1701
|
+
const u = B.COLOR_0 !== void 0 ? b.getDependency("accessor", B.COLOR_0) : s.attributes.color;
|
|
1702
|
+
h.push(u);
|
|
1703
|
+
}
|
|
1704
|
+
}
|
|
1705
|
+
return Promise.all([Promise.all(g), Promise.all(l), Promise.all(h)]).then(function(f) {
|
|
1706
|
+
const I = f[0], B = f[1], u = f[2];
|
|
1707
|
+
return o && (s.morphAttributes.position = I), d && (s.morphAttributes.normal = B), c && (s.morphAttributes.color = u), s.morphTargetsRelative = !0, s;
|
|
1708
|
+
});
|
|
1709
|
+
}(n, e.targets, a) : n;
|
|
1710
|
+
});
|
|
1711
|
+
}
|
|
1712
|
+
const Pe = /* @__PURE__ */ new WeakMap();
|
|
1713
|
+
class tA extends da {
|
|
1714
|
+
constructor(e) {
|
|
1715
|
+
super(e), this.decoderPath = "", this.decoderConfig = {}, this.decoderBinary = null, this.decoderPending = null, this.workerLimit = 4, this.workerPool = [], this.workerNextTaskID = 1, this.workerSourceURL = "", this.defaultAttributeIDs = { position: "POSITION", normal: "NORMAL", color: "COLOR", uv: "TEX_COORD" }, this.defaultAttributeTypes = { position: "Float32Array", normal: "Float32Array", color: "Float32Array", uv: "Float32Array" };
|
|
1716
|
+
}
|
|
1717
|
+
setDecoderPath(e) {
|
|
1718
|
+
return this.decoderPath = e, this;
|
|
1719
|
+
}
|
|
1720
|
+
setDecoderConfig(e) {
|
|
1721
|
+
return this.decoderConfig = e, this;
|
|
1722
|
+
}
|
|
1723
|
+
setWorkerLimit(e) {
|
|
1724
|
+
return this.workerLimit = e, this;
|
|
1725
|
+
}
|
|
1726
|
+
load(e, a, A, t) {
|
|
1727
|
+
const i = new ce(this.manager);
|
|
1728
|
+
i.setPath(this.path), i.setResponseType("arraybuffer"), i.setRequestHeader(this.requestHeader), i.setWithCredentials(this.withCredentials), i.load(e, (s) => {
|
|
1729
|
+
this.parse(s, a, t);
|
|
1730
|
+
}, A, t);
|
|
1731
|
+
}
|
|
1732
|
+
parse(e, a, A = () => {
|
|
1733
|
+
}) {
|
|
1734
|
+
this.decodeDracoFile(e, a, null, null, $, A).catch(A);
|
|
1735
|
+
}
|
|
1736
|
+
decodeDracoFile(e, a, A, t, i = q, s = () => {
|
|
1737
|
+
}) {
|
|
1738
|
+
const r = { attributeIDs: A || this.defaultAttributeIDs, attributeTypes: t || this.defaultAttributeTypes, useUniqueIDs: !!A, vertexColorSpace: i };
|
|
1739
|
+
return this.decodeGeometry(e, r).then(a).catch(s);
|
|
1740
|
+
}
|
|
1741
|
+
decodeGeometry(e, a) {
|
|
1742
|
+
const A = JSON.stringify(a);
|
|
1743
|
+
if (Pe.has(e)) {
|
|
1744
|
+
const b = Pe.get(e);
|
|
1745
|
+
if (b.key === A) return b.promise;
|
|
1746
|
+
if (e.byteLength === 0) throw new Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.");
|
|
1747
|
+
}
|
|
1748
|
+
let t;
|
|
1749
|
+
const i = this.workerNextTaskID++, s = e.byteLength, r = this._getWorker(i, s).then((b) => (t = b, new Promise((o, d) => {
|
|
1750
|
+
t._callbacks[i] = { resolve: o, reject: d }, t.postMessage({ type: "decode", id: i, taskConfig: a, buffer: e }, [e]);
|
|
1751
|
+
}))).then((b) => this._createGeometry(b.geometry));
|
|
1752
|
+
return r.catch(() => !0).then(() => {
|
|
1753
|
+
t && i && this._releaseTask(t, i);
|
|
1754
|
+
}), Pe.set(e, { key: A, promise: r }), r;
|
|
1755
|
+
}
|
|
1756
|
+
_createGeometry(e) {
|
|
1757
|
+
const a = new ba();
|
|
1758
|
+
e.index && a.setIndex(new fe(e.index.array, 1));
|
|
1759
|
+
for (let A = 0; A < e.attributes.length; A++) {
|
|
1760
|
+
const t = e.attributes[A], i = t.name, s = t.array, r = t.itemSize, b = new fe(s, r);
|
|
1761
|
+
i === "color" && (this._assignVertexColorSpace(b, t.vertexColorSpace), b.normalized = !(s instanceof Float32Array)), a.setAttribute(i, b);
|
|
1762
|
+
}
|
|
1763
|
+
return a;
|
|
1764
|
+
}
|
|
1765
|
+
_assignVertexColorSpace(e, a) {
|
|
1766
|
+
if (a !== $) return;
|
|
1767
|
+
const A = new se();
|
|
1768
|
+
for (let t = 0, i = e.count; t < i; t++) A.fromBufferAttribute(e, t), ra.toWorkingColorSpace(A, $), e.setXYZ(t, A.r, A.g, A.b);
|
|
1769
|
+
}
|
|
1770
|
+
_loadLibrary(e, a) {
|
|
1771
|
+
const A = new ce(this.manager);
|
|
1772
|
+
return A.setPath(this.decoderPath), A.setResponseType(a), A.setWithCredentials(this.withCredentials), new Promise((t, i) => {
|
|
1773
|
+
A.load(e, 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 e = typeof WebAssembly != "object" || this.decoderConfig.type === "js", a = [];
|
|
1782
|
+
return e ? a.push(this._loadLibrary("draco_decoder.js", "text")) : (a.push(this._loadLibrary("draco_wasm_wrapper.js", "text")), a.push(this._loadLibrary("draco_decoder.wasm", "arraybuffer"))), this.decoderPending = Promise.all(a).then((A) => {
|
|
1783
|
+
const t = A[0];
|
|
1784
|
+
e || (this.decoderConfig.wasmBinary = A[1]);
|
|
1785
|
+
const i = ii.toString(), s = ["/* draco decoder */", t, "", "/* worker */", i.substring(i.indexOf("{") + 1, i.lastIndexOf("}"))].join(`
|
|
1786
|
+
`);
|
|
1787
|
+
this.workerSourceURL = URL.createObjectURL(new Blob([s]));
|
|
1788
|
+
}), this.decoderPending;
|
|
1789
|
+
}
|
|
1790
|
+
_getWorker(e, a) {
|
|
1791
|
+
return this._initDecoder().then(() => {
|
|
1792
|
+
if (this.workerPool.length < this.workerLimit) {
|
|
1793
|
+
const t = new Worker(this.workerSourceURL);
|
|
1794
|
+
t._callbacks = {}, t._taskCosts = {}, t._taskLoad = 0, t.postMessage({ type: "init", decoderConfig: this.decoderConfig }), t.onmessage = function(i) {
|
|
1795
|
+
const s = i.data;
|
|
1796
|
+
switch (s.type) {
|
|
1797
|
+
case "decode":
|
|
1798
|
+
t._callbacks[s.id].resolve(s);
|
|
1799
|
+
break;
|
|
1800
|
+
case "error":
|
|
1801
|
+
t._callbacks[s.id].reject(s);
|
|
1802
|
+
break;
|
|
1803
|
+
default:
|
|
1804
|
+
console.error('THREE.DRACOLoader: Unexpected message, "' + s.type + '"');
|
|
1805
|
+
}
|
|
1806
|
+
}, this.workerPool.push(t);
|
|
1807
|
+
} else this.workerPool.sort(function(t, i) {
|
|
1808
|
+
return t._taskLoad > i._taskLoad ? -1 : 1;
|
|
1809
|
+
});
|
|
1810
|
+
const A = this.workerPool[this.workerPool.length - 1];
|
|
1811
|
+
return A._taskCosts[e] = a, A._taskLoad += a, A;
|
|
1812
|
+
});
|
|
1813
|
+
}
|
|
1814
|
+
_releaseTask(e, a) {
|
|
1815
|
+
e._taskLoad -= e._taskCosts[a], delete e._callbacks[a], delete e._taskCosts[a];
|
|
1816
|
+
}
|
|
1817
|
+
debug() {
|
|
1818
|
+
console.log("Task load: ", this.workerPool.map((e) => e._taskLoad));
|
|
1819
|
+
}
|
|
1820
|
+
dispose() {
|
|
1821
|
+
for (let e = 0; e < this.workerPool.length; ++e) this.workerPool[e].terminate();
|
|
1822
|
+
return this.workerPool.length = 0, this.workerSourceURL !== "" && URL.revokeObjectURL(this.workerSourceURL), this;
|
|
1823
|
+
}
|
|
1824
|
+
}
|
|
1825
|
+
function ii() {
|
|
1826
|
+
let n, e;
|
|
1827
|
+
function a(A, t, i, s, r, b) {
|
|
1828
|
+
const o = b.num_components(), d = i.num_points() * o, c = d * r.BYTES_PER_ELEMENT, g = function(f, I) {
|
|
1829
|
+
switch (I) {
|
|
1830
|
+
case Float32Array:
|
|
1831
|
+
return f.DT_FLOAT32;
|
|
1832
|
+
case Int8Array:
|
|
1833
|
+
return f.DT_INT8;
|
|
1834
|
+
case Int16Array:
|
|
1835
|
+
return f.DT_INT16;
|
|
1836
|
+
case Int32Array:
|
|
1837
|
+
return f.DT_INT32;
|
|
1838
|
+
case Uint8Array:
|
|
1839
|
+
return f.DT_UINT8;
|
|
1840
|
+
case Uint16Array:
|
|
1841
|
+
return f.DT_UINT16;
|
|
1842
|
+
case Uint32Array:
|
|
1843
|
+
return f.DT_UINT32;
|
|
1844
|
+
}
|
|
1845
|
+
}(A, r), l = A._malloc(c);
|
|
1846
|
+
t.GetAttributeDataArrayForAllPoints(i, b, g, c, l);
|
|
1847
|
+
const h = new r(A.HEAPF32.buffer, l, d).slice();
|
|
1848
|
+
return A._free(l), { name: s, array: h, itemSize: o };
|
|
1849
|
+
}
|
|
1850
|
+
onmessage = function(A) {
|
|
1851
|
+
const t = A.data;
|
|
1852
|
+
switch (t.type) {
|
|
1853
|
+
case "init":
|
|
1854
|
+
n = t.decoderConfig, e = new Promise(function(r) {
|
|
1855
|
+
n.onModuleLoaded = function(b) {
|
|
1856
|
+
r({ draco: b });
|
|
1857
|
+
}, DracoDecoderModule(n);
|
|
1858
|
+
});
|
|
1859
|
+
break;
|
|
1860
|
+
case "decode":
|
|
1861
|
+
const i = t.buffer, s = t.taskConfig;
|
|
1862
|
+
e.then((r) => {
|
|
1863
|
+
const b = r.draco, o = new b.Decoder();
|
|
1864
|
+
try {
|
|
1865
|
+
const d = function(g, l, h, f) {
|
|
1866
|
+
const I = f.attributeIDs, B = f.attributeTypes;
|
|
1867
|
+
let u, E;
|
|
1868
|
+
const C = l.GetEncodedGeometryType(h);
|
|
1869
|
+
if (C === g.TRIANGULAR_MESH) u = new g.Mesh(), E = l.DecodeArrayToMesh(h, h.byteLength, u);
|
|
1870
|
+
else {
|
|
1871
|
+
if (C !== g.POINT_CLOUD) throw new Error("THREE.DRACOLoader: Unexpected geometry type.");
|
|
1872
|
+
u = new g.PointCloud(), E = l.DecodeArrayToPointCloud(h, h.byteLength, u);
|
|
1873
|
+
}
|
|
1874
|
+
if (!E.ok() || u.ptr === 0) throw new Error("THREE.DRACOLoader: Decoding failed: " + E.error_msg());
|
|
1875
|
+
const D = { index: null, attributes: [] };
|
|
1876
|
+
for (const y in I) {
|
|
1877
|
+
const w = self[B[y]];
|
|
1878
|
+
let p, Q;
|
|
1879
|
+
if (f.useUniqueIDs) Q = I[y], p = l.GetAttributeByUniqueId(u, Q);
|
|
1880
|
+
else {
|
|
1881
|
+
if (Q = l.GetAttributeId(u, g[I[y]]), Q === -1) continue;
|
|
1882
|
+
p = l.GetAttribute(u, Q);
|
|
1883
|
+
}
|
|
1884
|
+
const k = a(g, l, u, y, w, p);
|
|
1885
|
+
y === "color" && (k.vertexColorSpace = f.vertexColorSpace), D.attributes.push(k);
|
|
1886
|
+
}
|
|
1887
|
+
return C === g.TRIANGULAR_MESH && (D.index = function(y, w, p) {
|
|
1888
|
+
const Q = p.num_faces(), k = 3 * Q, x = 4 * k, R = y._malloc(x);
|
|
1889
|
+
w.GetTrianglesUInt32Array(p, x, R);
|
|
1890
|
+
const U = new Uint32Array(y.HEAPF32.buffer, R, k).slice();
|
|
1891
|
+
return y._free(R), { array: U, itemSize: 1 };
|
|
1892
|
+
}(g, l, u)), g.destroy(u), D;
|
|
1893
|
+
}(b, o, new Int8Array(i), s), c = d.attributes.map((g) => g.array.buffer);
|
|
1894
|
+
d.index && c.push(d.index.array.buffer), self.postMessage({ type: "decode", id: t.id, geometry: d }, c);
|
|
1895
|
+
} catch (d) {
|
|
1896
|
+
console.error(d), self.postMessage({ type: "error", id: t.id, error: d.message });
|
|
1897
|
+
} finally {
|
|
1898
|
+
b.destroy(o);
|
|
1899
|
+
}
|
|
1900
|
+
});
|
|
1901
|
+
}
|
|
1902
|
+
};
|
|
1903
|
+
}
|
|
1904
|
+
class si {
|
|
1905
|
+
constructor(e = 4) {
|
|
1906
|
+
this.pool = e, this.queue = [], this.workers = [], this.workersResolve = [], this.workerStatus = 0;
|
|
1907
|
+
}
|
|
1908
|
+
_initWorker(e) {
|
|
1909
|
+
if (!this.workers[e]) {
|
|
1910
|
+
const a = this.workerCreator();
|
|
1911
|
+
a.addEventListener("message", this._onMessage.bind(this, e)), this.workers[e] = a;
|
|
1912
|
+
}
|
|
1913
|
+
}
|
|
1914
|
+
_getIdleWorker() {
|
|
1915
|
+
for (let e = 0; e < this.pool; e++) if (!(this.workerStatus & 1 << e)) return e;
|
|
1916
|
+
return -1;
|
|
1917
|
+
}
|
|
1918
|
+
_onMessage(e, a) {
|
|
1919
|
+
const A = this.workersResolve[e];
|
|
1920
|
+
if (A && A(a), this.queue.length) {
|
|
1921
|
+
const { resolve: t, msg: i, transfer: s } = this.queue.shift();
|
|
1922
|
+
this.workersResolve[e] = t, this.workers[e].postMessage(i, s);
|
|
1923
|
+
} else this.workerStatus ^= 1 << e;
|
|
1924
|
+
}
|
|
1925
|
+
setWorkerCreator(e) {
|
|
1926
|
+
this.workerCreator = e;
|
|
1927
|
+
}
|
|
1928
|
+
setWorkerLimit(e) {
|
|
1929
|
+
this.pool = e;
|
|
1930
|
+
}
|
|
1931
|
+
postMessage(e, a) {
|
|
1932
|
+
return new Promise((A) => {
|
|
1933
|
+
const t = this._getIdleWorker();
|
|
1934
|
+
t !== -1 ? (this._initWorker(t), this.workerStatus |= 1 << t, this.workersResolve[t] = A, this.workers[t].postMessage(e, a)) : this.queue.push({ resolve: A, msg: e, transfer: a });
|
|
1935
|
+
});
|
|
1936
|
+
}
|
|
1937
|
+
dispose() {
|
|
1938
|
+
this.workers.forEach((e) => e.terminate()), this.workersResolve.length = 0, this.workers.length = 0, this.queue.length = 0, this.workerStatus = 0;
|
|
1939
|
+
}
|
|
1940
|
+
}
|
|
1941
|
+
const iA = 9, sA = 15, rA = 16, nA = 22, oA = 37, cA = 43, bA = 76, dA = 83, gA = 97, hA = 100, lA = 103, IA = 109, fA = 165, uA = 166, ha = 1000066e3;
|
|
1942
|
+
class ri {
|
|
1943
|
+
constructor() {
|
|
1944
|
+
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;
|
|
1945
|
+
}
|
|
1946
|
+
}
|
|
1947
|
+
class Qe {
|
|
1948
|
+
constructor(e, a, A, t) {
|
|
1949
|
+
this._dataView = void 0, this._littleEndian = void 0, this._offset = void 0, this._dataView = new DataView(e.buffer, e.byteOffset + a, A), this._littleEndian = t, this._offset = 0;
|
|
1950
|
+
}
|
|
1951
|
+
_nextUint8() {
|
|
1952
|
+
const e = this._dataView.getUint8(this._offset);
|
|
1953
|
+
return this._offset += 1, e;
|
|
1954
|
+
}
|
|
1955
|
+
_nextUint16() {
|
|
1956
|
+
const e = this._dataView.getUint16(this._offset, this._littleEndian);
|
|
1957
|
+
return this._offset += 2, e;
|
|
1958
|
+
}
|
|
1959
|
+
_nextUint32() {
|
|
1960
|
+
const e = this._dataView.getUint32(this._offset, this._littleEndian);
|
|
1961
|
+
return this._offset += 4, e;
|
|
1962
|
+
}
|
|
1963
|
+
_nextUint64() {
|
|
1964
|
+
const e = this._dataView.getUint32(this._offset, this._littleEndian) + 4294967296 * this._dataView.getUint32(this._offset + 4, this._littleEndian);
|
|
1965
|
+
return this._offset += 8, e;
|
|
1966
|
+
}
|
|
1967
|
+
_nextInt32() {
|
|
1968
|
+
const e = this._dataView.getInt32(this._offset, this._littleEndian);
|
|
1969
|
+
return this._offset += 4, e;
|
|
1970
|
+
}
|
|
1971
|
+
_nextUint8Array(e) {
|
|
1972
|
+
const a = new Uint8Array(this._dataView.buffer, this._dataView.byteOffset + this._offset, e);
|
|
1973
|
+
return this._offset += e, a;
|
|
1974
|
+
}
|
|
1975
|
+
_skip(e) {
|
|
1976
|
+
return this._offset += e, this;
|
|
1977
|
+
}
|
|
1978
|
+
_scan(e, a) {
|
|
1979
|
+
a === void 0 && (a = 0);
|
|
1980
|
+
const A = this._offset;
|
|
1981
|
+
let t = 0;
|
|
1982
|
+
for (; this._dataView.getUint8(this._offset) !== a && t < e; ) t++, this._offset++;
|
|
1983
|
+
return t < e && this._offset++, new Uint8Array(this._dataView.buffer, this._dataView.byteOffset + A, t);
|
|
1984
|
+
}
|
|
1985
|
+
}
|
|
1986
|
+
const L = [171, 75, 84, 88, 32, 50, 48, 187, 13, 10, 26, 10];
|
|
1987
|
+
function ja(n) {
|
|
1988
|
+
return new TextDecoder().decode(n);
|
|
1989
|
+
}
|
|
1990
|
+
let He, X, ca;
|
|
1991
|
+
const qe = { env: { emscripten_notify_memory_growth: function(n) {
|
|
1992
|
+
ca = new Uint8Array(X.exports.memory.buffer);
|
|
1993
|
+
} } };
|
|
1994
|
+
class ni {
|
|
1995
|
+
init() {
|
|
1996
|
+
return He || (He = typeof fetch < "u" ? fetch("data:application/wasm;base64," + Ma).then((e) => e.arrayBuffer()).then((e) => WebAssembly.instantiate(e, qe)).then(this._init) : WebAssembly.instantiate(Buffer.from(Ma, "base64"), qe).then(this._init), He);
|
|
1997
|
+
}
|
|
1998
|
+
_init(e) {
|
|
1999
|
+
X = e.instance, qe.env.emscripten_notify_memory_growth(0);
|
|
2000
|
+
}
|
|
2001
|
+
decode(e, a = 0) {
|
|
2002
|
+
if (!X) throw new Error("ZSTDDecoder: Await .init() before decoding.");
|
|
2003
|
+
const A = e.byteLength, t = X.exports.malloc(A);
|
|
2004
|
+
ca.set(e, t), a = a || Number(X.exports.ZSTD_findDecompressedSize(t, A));
|
|
2005
|
+
const i = X.exports.malloc(a), s = X.exports.ZSTD_decompress(i, a, t, A), r = ca.slice(i, i + s);
|
|
2006
|
+
return X.exports.free(t), X.exports.free(i), r;
|
|
2007
|
+
}
|
|
2008
|
+
}
|
|
2009
|
+
const Ma = "AGFzbQEAAAABpQEVYAF/AX9gAn9/AGADf39/AX9gBX9/f39/AX9gAX8AYAJ/fwF/YAR/f39/AX9gA39/fwBgBn9/f39/fwF/YAd/f39/f39/AX9gAn9/AX5gAn5+AX5gAABgBX9/f39/AGAGf39/f39/AGAIf39/f39/f38AYAl/f39/f39/f38AYAABf2AIf39/f39/f38Bf2ANf39/f39/f39/f39/fwF/YAF/AX4CJwEDZW52H2Vtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGgABANpaAEFAAAFAgEFCwACAQABAgIFBQcAAwABDgsBAQcAEhMHAAUBDAQEAAANBwQCAgYCBAgDAwMDBgEACQkHBgICAAYGAgQUBwYGAwIGAAMCAQgBBwUGCgoEEQAEBAEIAwgDBQgDEA8IAAcABAUBcAECAgUEAQCAAgYJAX8BQaCgwAILB2AHBm1lbW9yeQIABm1hbGxvYwAoBGZyZWUAJgxaU1REX2lzRXJyb3IAaBlaU1REX2ZpbmREZWNvbXByZXNzZWRTaXplAFQPWlNURF9kZWNvbXByZXNzAEoGX3N0YXJ0ACQJBwEAQQELASQKussBaA8AIAAgACgCBCABajYCBAsZACAAKAIAIAAoAgRBH3F0QQAgAWtBH3F2CwgAIABBiH9LC34BBH9BAyEBIAAoAgQiA0EgTQRAIAAoAggiASAAKAIQTwRAIAAQDQ8LIAAoAgwiAiABRgRAQQFBAiADQSBJGw8LIAAgASABIAJrIANBA3YiBCABIARrIAJJIgEbIgJrIgQ2AgggACADIAJBA3RrNgIEIAAgBCgAADYCAAsgAQsUAQF/IAAgARACIQIgACABEAEgAgv3AQECfyACRQRAIABCADcCACAAQQA2AhAgAEIANwIIQbh/DwsgACABNgIMIAAgAUEEajYCECACQQRPBEAgACABIAJqIgFBfGoiAzYCCCAAIAMoAAA2AgAgAUF/ai0AACIBBEAgAEEIIAEQFGs2AgQgAg8LIABBADYCBEF/DwsgACABNgIIIAAgAS0AACIDNgIAIAJBfmoiBEEBTQRAIARBAWtFBEAgACABLQACQRB0IANyIgM2AgALIAAgAS0AAUEIdCADajYCAAsgASACakF/ai0AACIBRQRAIABBADYCBEFsDwsgAEEoIAEQFCACQQN0ams2AgQgAgsWACAAIAEpAAA3AAAgACABKQAINwAICy8BAX8gAUECdEGgHWooAgAgACgCAEEgIAEgACgCBGprQR9xdnEhAiAAIAEQASACCyEAIAFCz9bTvtLHq9lCfiAAfEIfiUKHla+vmLbem55/fgsdAQF/IAAoAgggACgCDEYEfyAAKAIEQSBGBUEACwuCBAEDfyACQYDAAE8EQCAAIAEgAhBnIAAPCyAAIAJqIQMCQCAAIAFzQQNxRQRAAkAgAkEBSARAIAAhAgwBCyAAQQNxRQRAIAAhAgwBCyAAIQIDQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADTw0BIAJBA3ENAAsLAkAgA0F8cSIEQcAASQ0AIAIgBEFAaiIFSw0AA0AgAiABKAIANgIAIAIgASgCBDYCBCACIAEoAgg2AgggAiABKAIMNgIMIAIgASgCEDYCECACIAEoAhQ2AhQgAiABKAIYNgIYIAIgASgCHDYCHCACIAEoAiA2AiAgAiABKAIkNgIkIAIgASgCKDYCKCACIAEoAiw2AiwgAiABKAIwNgIwIAIgASgCNDYCNCACIAEoAjg2AjggAiABKAI8NgI8IAFBQGshASACQUBrIgIgBU0NAAsLIAIgBE8NAQNAIAIgASgCADYCACABQQRqIQEgAkEEaiICIARJDQALDAELIANBBEkEQCAAIQIMAQsgA0F8aiIEIABJBEAgACECDAELIAAhAgNAIAIgAS0AADoAACACIAEtAAE6AAEgAiABLQACOgACIAIgAS0AAzoAAyABQQRqIQEgAkEEaiICIARNDQALCyACIANJBEADQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADRw0ACwsgAAsMACAAIAEpAAA3AAALQQECfyAAKAIIIgEgACgCEEkEQEEDDwsgACAAKAIEIgJBB3E2AgQgACABIAJBA3ZrIgE2AgggACABKAAANgIAQQALDAAgACABKAIANgAAC/cCAQJ/AkAgACABRg0AAkAgASACaiAASwRAIAAgAmoiBCABSw0BCyAAIAEgAhALDwsgACABc0EDcSEDAkACQCAAIAFJBEAgAwRAIAAhAwwDCyAAQQNxRQRAIAAhAwwCCyAAIQMDQCACRQ0EIAMgAS0AADoAACABQQFqIQEgAkF/aiECIANBAWoiA0EDcQ0ACwwBCwJAIAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigC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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY0AAQMyIFEAMiBg0AIANBHzYCfCADIANB/ABqIANB+ABqIAQgBCAFaiAGGyIEIAEgAmoiAiAEaxAVIgUQAw0AIAMoAnwiBkEfSw0AIAMoAngiB0EJTw0AIABBiCBqIAMgBkGAC0GADCAHEBggA0E0NgJ8IAMgA0H8AGogA0H4AGogBCAFaiIEIAIgBGsQFSIFEAMNACADKAJ8IgZBNEsNACADKAJ4IgdBCk8NACAAQZAwaiADIAZBgA1B4A4gBxAYIANBIzYCfCADIANB/ABqIANB+ABqIAQgBWoiBCACIARrEBUiBRADDQAgAygCfCIGQSNLDQAgAygCeCIHQQpPDQAgACADIAZBwBBB0BEgBxAYIAQgBWoiBEEMaiIFIAJLDQAgAiAFayEFQQAhAgNAIAJBA0cEQCAEKAAAIgZBf2ogBU8NAiAAIAJBAnRqQZzQAWogBjYCACACQQFqIQIgBEEEaiEEDAELCyAEIAFrIQgLIANBgAFqJAAgCAtGAQN/IABBCGohAyAAKAIEIQJBACEAA0AgACACdkUEQCABIAMgAEEDdGotAAJBFktqIQEgAEEBaiEADAELCyABQQggAmt0C4YDAQV/Qbh/IQcCQCADRQ0AIAItAAAiBEUEQCABQQA2AgBBAUG4fyADQQFGGw8LAn8gAkEBaiIFIARBGHRBGHUiBkF/Sg0AGiAGQX9GBEAgA0EDSA0CIAUvAABBgP4BaiEEIAJBA2oMAQsgA0ECSA0BIAItAAEgBEEIdHJBgIB+aiEEIAJBAmoLIQUgASAENgIAIAVBAWoiASACIANqIgNLDQBBbCEHIABBEGogACAFLQAAIgVBBnZBI0EJIAEgAyABa0HAEEHQEUHwEiAAKAKM4QEgACgCnOIBIAQQHyIGEAMiCA0AIABBmCBqIABBCGogBUEEdkEDcUEfQQggASABIAZqIAgbIgEgAyABa0GAC0GADEGAFyAAKAKM4QEgACgCnOIBIAQQHyIGEAMiCA0AIABBoDBqIABBBGogBUECdkEDcUE0QQkgASABIAZqIAgbIgEgAyABa0GADUHgDkGQGSAAKAKM4QEgACgCnOIBIAQQHyIAEAMNACAAIAFqIAJrIQcLIAcLrQMBCn8jAEGABGsiCCQAAn9BUiACQf8BSw0AGkFUIANBDEsNABogAkEBaiELIABBBGohCUGAgAQgA0F/anRBEHUhCkEAIQJBASEEQQEgA3QiB0F/aiIMIQUDQCACIAtGRQRAAkAgASACQQF0Ig1qLwEAIgZB//8DRgRAIAkgBUECdGogAjoAAiAFQX9qIQVBASEGDAELIARBACAKIAZBEHRBEHVKGyEECyAIIA1qIAY7AQAgAkEBaiECDAELCyAAIAQ7AQIgACADOwEAIAdBA3YgB0EBdmpBA2ohBkEAIQRBACECA0AgBCALRkUEQCABIARBAXRqLgEAIQpBACEAA0AgACAKTkUEQCAJIAJBAnRqIAQ6AAIDQCACIAZqIAxxIgIgBUsNAAsgAEEBaiEADAELCyAEQQFqIQQMAQsLQX8gAg0AGkEAIQIDfyACIAdGBH9BAAUgCCAJIAJBAnRqIgAtAAJBAXRqIgEgAS8BACIBQQFqOwEAIAAgAyABEBRrIgU6AAMgACABIAVB/wFxdCAHazsBACACQQFqIQIMAQsLCyEFIAhBgARqJAAgBQvjBgEIf0FsIQcCQCACQQNJDQACQAJAAkACQCABLQAAIgNBA3EiCUEBaw4DAwEAAgsgACgCiOEBDQBBYg8LIAJBBUkNAkEDIQYgASgAACEFAn8CQAJAIANBAnZBA3EiCEF+aiIEQQFNBEAgBEEBaw0BDAILIAVBDnZB/wdxIQQgBUEEdkH/B3EhAyAIRQwCCyAFQRJ2IQRBBCEGIAVBBHZB//8AcSEDQQAMAQsgBUEEdkH//w9xIgNBgIAISw0DIAEtAARBCnQgBUEWdnIhBEEFIQZBAAshBSAEIAZqIgogAksNAgJAIANBgQZJDQAgACgCnOIBRQ0AQQAhAgNAIAJBg4ABSw0BIAJBQGshAgwAAAsACwJ/IAlBA0YEQCABIAZqIQEgAEHw4gFqIQIgACgCDCEGIAUEQCACIAMgASAEIAYQXwwCCyACIAMgASAEIAYQXQwBCyAAQbjQAWohAiABIAZqIQEgAEHw4gFqIQYgAEGo0ABqIQggBQRAIAggBiADIAEgBCACEF4MAQsgCCAGIAMgASAEIAIQXAsQAw0CIAAgAzYCgOIBIABBATYCiOEBIAAgAEHw4gFqNgLw4QEgCUECRgRAIAAgAEGo0ABqNgIMCyAAIANqIgBBiOMBakIANwAAIABBgOMBakIANwAAIABB+OIBakIANwAAIABB8OIBakIANwAAIAoPCwJ/AkACQAJAIANBAnZBA3FBf2oiBEECSw0AIARBAWsOAgACAQtBASEEIANBA3YMAgtBAiEEIAEvAABBBHYMAQtBAyEEIAEQIUEEdgsiAyAEaiIFQSBqIAJLBEAgBSACSw0CIABB8OIBaiABIARqIAMQCyEBIAAgAzYCgOIBIAAgATYC8OEBIAEgA2oiAEIANwAYIABCADcAECAAQgA3AAggAEIANwAAIAUPCyAAIAM2AoDiASAAIAEgBGo2AvDhASAFDwsCfwJAAkACQCADQQJ2QQNxQX9qIgRBAksNACAEQQFrDgIAAgELQQEhByADQQN2DAILQQIhByABLwAAQQR2DAELIAJBBEkgARAhIgJBj4CAAUtyDQFBAyEHIAJBBHYLIQIgAEHw4gFqIAEgB2otAAAgAkEgahAQIQEgACACNgKA4gEgACABNgLw4QEgB0EBaiEHCyAHC0sAIABC+erQ0OfJoeThADcDICAAQgA3AxggAELP1tO+0ser2UI3AxAgAELW64Lu6v2J9eAANwMIIABCADcDACAAQShqQQBBKBAQGgviAgICfwV+IABBKGoiASAAKAJIaiECAn4gACkDACIDQiBaBEAgACkDECIEQgeJIAApAwgiBUIBiXwgACkDGCIGQgyJfCAAKQMgIgdCEol8IAUQGSAEEBkgBhAZIAcQGQwBCyAAKQMYQsXP2bLx5brqJ3wLIAN8IQMDQCABQQhqIgAgAk0EQEIAIAEpAAAQCSADhUIbiUKHla+vmLbem55/fkLj3MqV/M7y9YV/fCEDIAAhAQwBCwsCQCABQQRqIgAgAksEQCABIQAMAQsgASgAAK1Ch5Wvr5i23puef34gA4VCF4lCz9bTvtLHq9lCfkL5893xmfaZqxZ8IQMLA0AgACACSQRAIAAxAABCxc/ZsvHluuonfiADhUILiUKHla+vmLbem55/fiEDIABBAWohAAwBCwsgA0IhiCADhULP1tO+0ser2UJ+IgNCHYggA4VC+fPd8Zn2masWfiIDQiCIIAOFC+8CAgJ/BH4gACAAKQMAIAKtfDcDAAJAAkAgACgCSCIDIAJqIgRBH00EQCABRQ0BIAAgA2pBKGogASACECAgACgCSCACaiEEDAELIAEgAmohAgJ/IAMEQCAAQShqIgQgA2ogAUEgIANrECAgACAAKQMIIAQpAAAQCTcDCCAAIAApAxAgACkAMBAJNwMQIAAgACkDGCAAKQA4EAk3AxggACAAKQMgIABBQGspAAAQCTcDICAAKAJIIQMgAEEANgJIIAEgA2tBIGohAQsgAUEgaiACTQsEQCACQWBqIQMgACkDICEFIAApAxghBiAAKQMQIQcgACkDCCEIA0AgCCABKQAAEAkhCCAHIAEpAAgQCSEHIAYgASkAEBAJIQYgBSABKQAYEAkhBSABQSBqIgEgA00NAAsgACAFNwMgIAAgBjcDGCAAIAc3AxAgACAINwMICyABIAJPDQEgAEEoaiABIAIgAWsiBBAgCyAAIAQ2AkgLCy8BAX8gAEUEQEG2f0EAIAMbDwtBun8hBCADIAFNBH8gACACIAMQEBogAwVBun8LCy8BAX8gAEUEQEG2f0EAIAMbDwtBun8hBCADIAFNBH8gACACIAMQCxogAwVBun8LC6gCAQZ/IwBBEGsiByQAIABB2OABaikDAEKAgIAQViEIQbh/IQUCQCAEQf//B0sNACAAIAMgBBBCIgUQAyIGDQAgACgCnOIBIQkgACAHQQxqIAMgAyAFaiAGGyIKIARBACAFIAYbayIGEEAiAxADBEAgAyEFDAELIAcoAgwhBCABRQRAQbp/IQUgBEEASg0BCyAGIANrIQUgAyAKaiEDAkAgCQRAIABBADYCnOIBDAELAkACQAJAIARBBUgNACAAQdjgAWopAwBCgICACFgNAAwBCyAAQQA2ApziAQwBCyAAKAIIED8hBiAAQQA2ApziASAGQRRPDQELIAAgASACIAMgBSAEIAgQOSEFDAELIAAgASACIAMgBSAEIAgQOiEFCyAHQRBqJAAgBQtnACAAQdDgAWogASACIAAoAuzhARAuIgEQAwRAIAEPC0G4fyECAkAgAQ0AIABB7OABaigCACIBBEBBYCECIAAoApjiASABRw0BC0EAIQIgAEHw4AFqKAIARQ0AIABBkOEBahBDCyACCycBAX8QVyIERQRAQUAPCyAEIAAgASACIAMgBBBLEE8hACAEEFYgAAs/AQF/AkACQAJAIAAoAqDiAUEBaiIBQQJLDQAgAUEBaw4CAAECCyAAEDBBAA8LIABBADYCoOIBCyAAKAKU4gELvAMCB38BfiMAQRBrIgkkAEG4fyEGAkAgBCgCACIIQQVBCSAAKALs4QEiBRtJDQAgAygCACIHQQFBBSAFGyAFEC8iBRADBEAgBSEGDAELIAggBUEDakkNACAAIAcgBRBJIgYQAw0AIAEgAmohCiAAQZDhAWohCyAIIAVrIQIgBSAHaiEHIAEhBQNAIAcgAiAJECwiBhADDQEgAkF9aiICIAZJBEBBuH8hBgwCCyAJKAIAIghBAksEQEFsIQYMAgsgB0EDaiEHAn8CQAJAAkAgCEEBaw4CAgABCyAAIAUgCiAFayAHIAYQSAwCCyAFIAogBWsgByAGEEcMAQsgBSAKIAVrIActAAAgCSgCCBBGCyIIEAMEQCAIIQYMAgsgACgC8OABBEAgCyAFIAgQRQsgAiAGayECIAYgB2ohByAFIAhqIQUgCSgCBEUNAAsgACkD0OABIgxCf1IEQEFsIQYgDCAFIAFrrFINAQsgACgC8OABBEBBaiEGIAJBBEkNASALEEQhDCAHKAAAIAynRw0BIAdBBGohByACQXxqIQILIAMgBzYCACAEIAI2AgAgBSABayEGCyAJQRBqJAAgBgsuACAAECsCf0EAQQAQAw0AGiABRSACRXJFBEBBYiAAIAEgAhA9EAMNARoLQQALCzcAIAEEQCAAIAAoAsTgASABKAIEIAEoAghqRzYCnOIBCyAAECtBABADIAFFckUEQCAAIAEQWwsL0QIBB38jAEEQayIGJAAgBiAENgIIIAYgAzYCDCAFBEAgBSgCBCEKIAUoAgghCQsgASEIAkACQANAIAAoAuzhARAWIQsCQANAIAQgC0kNASADKAAAQXBxQdDUtMIBRgRAIAMgBBAiIgcQAw0EIAQgB2shBCADIAdqIQMMAQsLIAYgAzYCDCAGIAQ2AggCQCAFBEAgACAFEE5BACEHQQAQA0UNAQwFCyAAIAogCRBNIgcQAw0ECyAAIAgQUCAMQQFHQQAgACAIIAIgBkEMaiAGQQhqEEwiByIDa0EAIAMQAxtBCkdyRQRAQbh/IQcMBAsgBxADDQMgAiAHayECIAcgCGohCEEBIQwgBigCDCEDIAYoAgghBAwBCwsgBiADNgIMIAYgBDYCCEG4fyEHIAQNASAIIAFrIQcMAQsgBiADNgIMIAYgBDYCCAsgBkEQaiQAIAcLRgECfyABIAAoArjgASICRwRAIAAgAjYCxOABIAAgATYCuOABIAAoArzgASEDIAAgATYCvOABIAAgASADIAJrajYCwOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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", Je = /* @__PURE__ */ new WeakMap();
|
|
2010
|
+
let Oe, Ke = 0;
|
|
2011
|
+
class v extends da {
|
|
2012
|
+
constructor(e) {
|
|
2013
|
+
super(e), this.transcoderPath = "", this.transcoderBinary = null, this.transcoderPending = null, this.workerPool = new si(), this.workerSourceURL = "", this.workerConfig = null, typeof MSC_TRANSCODER < "u" && console.warn('THREE.KTX2Loader: Please update to latest "basis_transcoder". "msc_basis_transcoder" is no longer supported in three.js r125+.');
|
|
2014
|
+
}
|
|
2015
|
+
setTranscoderPath(e) {
|
|
2016
|
+
return this.transcoderPath = e, this;
|
|
2017
|
+
}
|
|
2018
|
+
setWorkerLimit(e) {
|
|
2019
|
+
return this.workerPool.setWorkerLimit(e), this;
|
|
2020
|
+
}
|
|
2021
|
+
async detectSupportAsync(e) {
|
|
2022
|
+
return this.workerConfig = { astcSupported: await e.hasFeatureAsync("texture-compression-astc"), astcHDRSupported: !1, etc1Supported: await e.hasFeatureAsync("texture-compression-etc1"), etc2Supported: await e.hasFeatureAsync("texture-compression-etc2"), dxtSupported: await e.hasFeatureAsync("texture-compression-bc"), bptcSupported: await e.hasFeatureAsync("texture-compression-bptc"), pvrtcSupported: await e.hasFeatureAsync("texture-compression-pvrtc") }, this;
|
|
2023
|
+
}
|
|
2024
|
+
detectSupport(e) {
|
|
2025
|
+
return e.isWebGPURenderer === !0 ? this.workerConfig = { astcSupported: e.hasFeature("texture-compression-astc"), astcHDRSupported: !1, etc1Supported: e.hasFeature("texture-compression-etc1"), etc2Supported: e.hasFeature("texture-compression-etc2"), dxtSupported: e.hasFeature("texture-compression-bc"), bptcSupported: e.hasFeature("texture-compression-bptc"), pvrtcSupported: e.hasFeature("texture-compression-pvrtc") } : this.workerConfig = { astcSupported: e.extensions.has("WEBGL_compressed_texture_astc"), astcHDRSupported: e.extensions.has("WEBGL_compressed_texture_astc") && e.extensions.get("WEBGL_compressed_texture_astc").getSupportedProfiles().includes("hdr"), etc1Supported: e.extensions.has("WEBGL_compressed_texture_etc1"), etc2Supported: e.extensions.has("WEBGL_compressed_texture_etc"), dxtSupported: e.extensions.has("WEBGL_compressed_texture_s3tc"), bptcSupported: e.extensions.has("EXT_texture_compression_bptc"), pvrtcSupported: e.extensions.has("WEBGL_compressed_texture_pvrtc") || e.extensions.has("WEBKIT_WEBGL_compressed_texture_pvrtc") }, this;
|
|
2026
|
+
}
|
|
2027
|
+
init() {
|
|
2028
|
+
if (!this.transcoderPending) {
|
|
2029
|
+
const e = new ce(this.manager);
|
|
2030
|
+
e.setPath(this.transcoderPath), e.setWithCredentials(this.withCredentials);
|
|
2031
|
+
const a = e.loadAsync("basis_transcoder.js"), A = new ce(this.manager);
|
|
2032
|
+
A.setPath(this.transcoderPath), A.setResponseType("arraybuffer"), A.setWithCredentials(this.withCredentials);
|
|
2033
|
+
const t = A.loadAsync("basis_transcoder.wasm");
|
|
2034
|
+
this.transcoderPending = Promise.all([a, t]).then(([i, s]) => {
|
|
2035
|
+
const r = v.BasisWorker.toString(), b = ["/* constants */", "let _EngineFormat = " + JSON.stringify(v.EngineFormat), "let _EngineType = " + JSON.stringify(v.EngineType), "let _TranscoderFormat = " + JSON.stringify(v.TranscoderFormat), "let _BasisFormat = " + JSON.stringify(v.BasisFormat), "/* basis_transcoder.js */", i, "/* worker */", r.substring(r.indexOf("{") + 1, r.lastIndexOf("}"))].join(`
|
|
2036
|
+
`);
|
|
2037
|
+
this.workerSourceURL = URL.createObjectURL(new Blob([b])), this.transcoderBinary = s, this.workerPool.setWorkerCreator(() => {
|
|
2038
|
+
const o = new Worker(this.workerSourceURL), d = this.transcoderBinary.slice(0);
|
|
2039
|
+
return o.postMessage({ type: "init", config: this.workerConfig, transcoderBinary: d }, [d]), o;
|
|
2040
|
+
});
|
|
2041
|
+
}), Ke > 0 && console.warn("THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances."), Ke++;
|
|
2042
|
+
}
|
|
2043
|
+
return this.transcoderPending;
|
|
2044
|
+
}
|
|
2045
|
+
load(e, a, A, t) {
|
|
2046
|
+
if (this.workerConfig === null) throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");
|
|
2047
|
+
const i = new ce(this.manager);
|
|
2048
|
+
i.setResponseType("arraybuffer"), i.setWithCredentials(this.withCredentials), i.load(e, (s) => {
|
|
2049
|
+
this.parse(s, a, t);
|
|
2050
|
+
}, A, t);
|
|
2051
|
+
}
|
|
2052
|
+
parse(e, a, A) {
|
|
2053
|
+
if (this.workerConfig === null) throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");
|
|
2054
|
+
if (Je.has(e))
|
|
2055
|
+
return Je.get(e).promise.then(a).catch(A);
|
|
2056
|
+
this._createTexture(e).then((t) => a ? a(t) : null).catch(A);
|
|
2057
|
+
}
|
|
2058
|
+
_createTextureFrom(e, a) {
|
|
2059
|
+
const { type: A, error: t, data: { faces: i, width: s, height: r, format: b, type: o, dfdFlags: d } } = e;
|
|
2060
|
+
if (A === "error") return Promise.reject(t);
|
|
2061
|
+
let c;
|
|
2062
|
+
if (a.faceCount === 6) c = new st(i, b, o);
|
|
2063
|
+
else {
|
|
2064
|
+
const g = i[0].mipmaps;
|
|
2065
|
+
c = a.layerCount > 1 ? new rt(g, s, r, a.layerCount, b, o) : new ma(g, s, r, b, o);
|
|
2066
|
+
}
|
|
2067
|
+
return c.minFilter = i[0].mipmaps.length === 1 ? Me : ga, c.magFilter = Me, c.generateMipmaps = !1, c.needsUpdate = !0, c.colorSpace = Ra(a), c.premultiplyAlpha = !!(1 & d), c;
|
|
2068
|
+
}
|
|
2069
|
+
async _createTexture(e, a = {}) {
|
|
2070
|
+
const A = function(r) {
|
|
2071
|
+
const b = new Uint8Array(r.buffer, r.byteOffset, L.length);
|
|
2072
|
+
if (b[0] !== L[0] || b[1] !== L[1] || b[2] !== L[2] || b[3] !== L[3] || b[4] !== L[4] || b[5] !== L[5] || b[6] !== L[6] || b[7] !== L[7] || b[8] !== L[8] || b[9] !== L[9] || b[10] !== L[10] || b[11] !== L[11]) throw new Error("Missing KTX 2.0 identifier.");
|
|
2073
|
+
const o = new ri(), d = 17 * Uint32Array.BYTES_PER_ELEMENT, c = new Qe(r, L.length, d, !0);
|
|
2074
|
+
o.vkFormat = c._nextUint32(), o.typeSize = c._nextUint32(), o.pixelWidth = c._nextUint32(), o.pixelHeight = c._nextUint32(), o.pixelDepth = c._nextUint32(), o.layerCount = c._nextUint32(), o.faceCount = c._nextUint32();
|
|
2075
|
+
const g = c._nextUint32();
|
|
2076
|
+
o.supercompressionScheme = c._nextUint32();
|
|
2077
|
+
const l = c._nextUint32(), h = c._nextUint32(), f = c._nextUint32(), I = c._nextUint32(), B = c._nextUint64(), u = c._nextUint64(), E = new Qe(r, L.length + d, 3 * g * 8, !0);
|
|
2078
|
+
for (let M = 0; M < g; M++) o.levels.push({ levelData: new Uint8Array(r.buffer, r.byteOffset + E._nextUint64(), E._nextUint64()), uncompressedByteLength: E._nextUint64() });
|
|
2079
|
+
const C = new Qe(r, l, h, !0), D = { 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: [] }, y = (D.descriptorBlockSize / 4 - 6) / 4;
|
|
2080
|
+
for (let M = 0; M < y; M++) {
|
|
2081
|
+
const S = { bitOffset: C._nextUint16(), bitLength: C._nextUint8(), channelType: C._nextUint8(), samplePosition: [C._nextUint8(), C._nextUint8(), C._nextUint8(), C._nextUint8()], sampleLower: -1 / 0, sampleUpper: 1 / 0 };
|
|
2082
|
+
64 & S.channelType ? (S.sampleLower = C._nextInt32(), S.sampleUpper = C._nextInt32()) : (S.sampleLower = C._nextUint32(), S.sampleUpper = C._nextUint32()), D.samples[M] = S;
|
|
2083
|
+
}
|
|
2084
|
+
o.dataFormatDescriptor.length = 0, o.dataFormatDescriptor.push(D);
|
|
2085
|
+
const w = new Qe(r, f, I, !0);
|
|
2086
|
+
for (; w._offset < I; ) {
|
|
2087
|
+
const M = w._nextUint32(), S = w._scan(M), _ = ja(S);
|
|
2088
|
+
if (o.keyValue[_] = w._nextUint8Array(M - S.byteLength - 1), _.match(/^ktx/i)) {
|
|
2089
|
+
const O = ja(o.keyValue[_]);
|
|
2090
|
+
o.keyValue[_] = O.substring(0, O.lastIndexOf("\0"));
|
|
2091
|
+
}
|
|
2092
|
+
w._skip(M % 4 ? 4 - M % 4 : 0);
|
|
2093
|
+
}
|
|
2094
|
+
if (u <= 0) return o;
|
|
2095
|
+
const p = new Qe(r, B, u, !0), Q = p._nextUint16(), k = p._nextUint16(), x = p._nextUint32(), R = p._nextUint32(), U = p._nextUint32(), Ge = p._nextUint32(), Ce = [];
|
|
2096
|
+
for (let M = 0; M < g; M++) Ce.push({ imageFlags: p._nextUint32(), rgbSliceByteOffset: p._nextUint32(), rgbSliceByteLength: p._nextUint32(), alphaSliceByteOffset: p._nextUint32(), alphaSliceByteLength: p._nextUint32() });
|
|
2097
|
+
const Re = B + p._offset, Ee = Re + x, pe = Ee + R, me = pe + U, Fe = new Uint8Array(r.buffer, r.byteOffset + Re, x), Se = new Uint8Array(r.buffer, r.byteOffset + Ee, R), J = new Uint8Array(r.buffer, r.byteOffset + pe, U), be = new Uint8Array(r.buffer, r.byteOffset + me, Ge);
|
|
2098
|
+
return o.globalData = { endpointCount: Q, selectorCount: k, imageDescs: Ce, endpointsData: Fe, selectorsData: Se, tablesData: J, extendedData: be }, o;
|
|
2099
|
+
}(new Uint8Array(e)), t = A.vkFormat === ha && A.dataFormatDescriptor[0].colorModel === 167;
|
|
2100
|
+
if (!(A.vkFormat === 0 || t && !this.workerConfig.astcHDRSupported)) return async function(r) {
|
|
2101
|
+
const { vkFormat: b } = r;
|
|
2102
|
+
if (Ve[b] === void 0) throw new Error("THREE.KTX2Loader: Unsupported vkFormat.");
|
|
2103
|
+
let o;
|
|
2104
|
+
r.supercompressionScheme === 2 && (Oe || (Oe = new Promise(async (g) => {
|
|
2105
|
+
const l = new ni();
|
|
2106
|
+
await l.init(), g(l);
|
|
2107
|
+
})), o = await Oe);
|
|
2108
|
+
const d = [];
|
|
2109
|
+
for (let g = 0; g < r.levels.length; g++) {
|
|
2110
|
+
const l = Math.max(1, r.pixelWidth >> g), h = Math.max(1, r.pixelHeight >> g), f = r.pixelDepth ? Math.max(1, r.pixelDepth >> g) : 0, I = r.levels[g];
|
|
2111
|
+
let B, u;
|
|
2112
|
+
if (r.supercompressionScheme === 0) B = I.levelData;
|
|
2113
|
+
else {
|
|
2114
|
+
if (r.supercompressionScheme !== 2) throw new Error("THREE.KTX2Loader: Unsupported supercompressionScheme.");
|
|
2115
|
+
B = o.decode(I.levelData, I.uncompressedByteLength);
|
|
2116
|
+
}
|
|
2117
|
+
u = ze[b] === je ? new Float32Array(B.buffer, B.byteOffset, B.byteLength / Float32Array.BYTES_PER_ELEMENT) : ze[b] === Ie ? new Uint16Array(B.buffer, B.byteOffset, B.byteLength / Uint16Array.BYTES_PER_ELEMENT) : B, d.push({ data: u, width: l, height: h, depth: f });
|
|
2118
|
+
}
|
|
2119
|
+
let c;
|
|
2120
|
+
if (oi.has(Ve[b])) c = r.pixelDepth === 0 ? new ft(d[0].data, r.pixelWidth, r.pixelHeight) : new ut(d[0].data, r.pixelWidth, r.pixelHeight, r.pixelDepth);
|
|
2121
|
+
else {
|
|
2122
|
+
if (r.pixelDepth > 0) throw new Error("THREE.KTX2Loader: Unsupported pixelDepth.");
|
|
2123
|
+
c = new ma(d, r.pixelWidth, r.pixelHeight);
|
|
2124
|
+
}
|
|
2125
|
+
return c.mipmaps = d, c.type = ze[b], c.format = Ve[b], c.colorSpace = Ra(r), c.needsUpdate = !0, Promise.resolve(c);
|
|
2126
|
+
}(A);
|
|
2127
|
+
const i = a, s = this.init().then(() => this.workerPool.postMessage({ type: "transcode", buffer: e, taskConfig: i }, [e])).then((r) => this._createTextureFrom(r.data, A));
|
|
2128
|
+
return Je.set(e, { promise: s }), s;
|
|
2129
|
+
}
|
|
2130
|
+
dispose() {
|
|
2131
|
+
return this.workerPool.dispose(), this.workerSourceURL && URL.revokeObjectURL(this.workerSourceURL), Ke--, this;
|
|
2132
|
+
}
|
|
2133
|
+
}
|
|
2134
|
+
v.BasisFormat = { ETC1S: 0, UASTC: 1, UASTC_HDR: 2 }, v.TranscoderFormat = { ETC1: 0, ETC2: 1, BC1: 2, BC3: 3, BC4: 4, BC5: 5, BC7_M6_OPAQUE_ONLY: 6, BC7_M5: 7, PVRTC1_4_RGB: 8, PVRTC1_4_RGBA: 9, ASTC_4x4: 10, ATC_RGB: 11, ATC_RGBA_INTERPOLATED_ALPHA: 12, RGBA32: 13, RGB565: 14, BGR565: 15, RGBA4444: 16, BC6H: 22, RGB_HALF: 24, RGBA_HALF: 25 }, v.EngineFormat = { RGBAFormat: le, RGBA_ASTC_4x4_Format: Wa, RGB_BPTC_UNSIGNED_Format: nt, RGBA_BPTC_Format: ot, RGBA_ETC2_EAC_Format: ct, RGBA_PVRTC_4BPPV1_Format: bt, RGBA_S3TC_DXT5_Format: dt, RGB_ETC1_Format: gt, RGB_ETC2_Format: ht, RGB_PVRTC_4BPPV1_Format: lt, RGBA_S3TC_DXT1_Format: It }, v.EngineType = { UnsignedByteType: W, HalfFloatType: Ie, FloatType: je }, v.BasisWorker = function() {
|
|
2135
|
+
let n, e, a;
|
|
2136
|
+
const A = _EngineFormat, t = _EngineType, i = _TranscoderFormat, s = _BasisFormat;
|
|
2137
|
+
self.addEventListener("message", function(c) {
|
|
2138
|
+
const g = c.data;
|
|
2139
|
+
switch (g.type) {
|
|
2140
|
+
case "init":
|
|
2141
|
+
n = g.config, l = g.transcoderBinary, e = new Promise((h) => {
|
|
2142
|
+
a = { wasmBinary: l, onRuntimeInitialized: h }, BASIS(a);
|
|
2143
|
+
}).then(() => {
|
|
2144
|
+
a.initializeBasis(), a.KTX2File === void 0 && console.warn("THREE.KTX2Loader: Please update Basis Universal transcoder.");
|
|
2145
|
+
});
|
|
2146
|
+
break;
|
|
2147
|
+
case "transcode":
|
|
2148
|
+
e.then(() => {
|
|
2149
|
+
try {
|
|
2150
|
+
const { faces: h, buffers: f, width: I, height: B, hasAlpha: u, format: E, type: C, dfdFlags: D } = function(y) {
|
|
2151
|
+
const w = new a.KTX2File(new Uint8Array(y));
|
|
2152
|
+
function p() {
|
|
2153
|
+
w.close(), w.delete();
|
|
2154
|
+
}
|
|
2155
|
+
if (!w.isValid()) throw p(), new Error("THREE.KTX2Loader: Invalid or unsupported .ktx2 file");
|
|
2156
|
+
let Q;
|
|
2157
|
+
if (w.isUASTC()) Q = s.UASTC;
|
|
2158
|
+
else if (w.isETC1S()) Q = s.ETC1S;
|
|
2159
|
+
else {
|
|
2160
|
+
if (!w.isHDR()) throw new Error("THREE.KTX2Loader: Unknown Basis encoding");
|
|
2161
|
+
Q = s.UASTC_HDR;
|
|
2162
|
+
}
|
|
2163
|
+
const k = w.getWidth(), x = w.getHeight(), R = w.getLayers() || 1, U = w.getLevels(), Ge = w.getFaces(), Ce = w.getHasAlpha(), Re = w.getDFDFlags(), { transcoderFormat: Ee, engineFormat: pe, engineType: me } = function(J, be, M, S) {
|
|
2164
|
+
const _ = b[J];
|
|
2165
|
+
for (let O = 0; O < _.length; O++) {
|
|
2166
|
+
const P = _[O];
|
|
2167
|
+
if (!(P.if && !n[P.if]) && P.basisFormat.includes(J) && !(S && P.transcoderFormat.length < 2) && !(P.needsPowerOfTwo && (!o(be) || !o(M))))
|
|
2168
|
+
return { transcoderFormat: P.transcoderFormat[S ? 1 : 0], engineFormat: P.engineFormat[S ? 1 : 0], engineType: P.engineType[0] };
|
|
2169
|
+
}
|
|
2170
|
+
throw new Error("THREE.KTX2Loader: Failed to identify transcoding target.");
|
|
2171
|
+
}(Q, k, x, Ce);
|
|
2172
|
+
if (!k || !x || !U) throw p(), new Error("THREE.KTX2Loader: Invalid texture");
|
|
2173
|
+
if (!w.startTranscoding()) throw p(), new Error("THREE.KTX2Loader: .startTranscoding failed");
|
|
2174
|
+
const Fe = [], Se = [];
|
|
2175
|
+
for (let J = 0; J < Ge; J++) {
|
|
2176
|
+
const be = [];
|
|
2177
|
+
for (let M = 0; M < U; M++) {
|
|
2178
|
+
const S = [];
|
|
2179
|
+
let _, O;
|
|
2180
|
+
for (let de = 0; de < R; de++) {
|
|
2181
|
+
const ge = w.getImageLevelInfo(M, de, J);
|
|
2182
|
+
J !== 0 || M !== 0 || de !== 0 || ge.origWidth % 4 == 0 && ge.origHeight % 4 == 0 || console.warn("THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions."), U > 1 ? (_ = ge.origWidth, O = ge.origHeight) : (_ = ge.width, O = ge.height);
|
|
2183
|
+
let he = new Uint8Array(w.getImageTranscodedSizeInBytes(M, de, 0, Ee));
|
|
2184
|
+
const pA = w.transcodeImage(he, M, de, J, Ee, 0, -1, -1);
|
|
2185
|
+
if (me === t.HalfFloatType && (he = new Uint16Array(he.buffer, he.byteOffset, he.byteLength / Uint16Array.BYTES_PER_ELEMENT)), !pA) throw p(), new Error("THREE.KTX2Loader: .transcodeImage failed.");
|
|
2186
|
+
S.push(he);
|
|
2187
|
+
}
|
|
2188
|
+
const P = d(S);
|
|
2189
|
+
be.push({ data: P, width: _, height: O }), Se.push(P.buffer);
|
|
2190
|
+
}
|
|
2191
|
+
Fe.push({ mipmaps: be, width: k, height: x, format: pe, type: me });
|
|
2192
|
+
}
|
|
2193
|
+
return p(), { faces: Fe, buffers: Se, width: k, height: x, hasAlpha: Ce, dfdFlags: Re, format: pe, type: me };
|
|
2194
|
+
}(g.buffer);
|
|
2195
|
+
self.postMessage({ type: "transcode", id: g.id, data: { faces: h, width: I, height: B, hasAlpha: u, format: E, type: C, dfdFlags: D } }, f);
|
|
2196
|
+
} catch (h) {
|
|
2197
|
+
console.error(h), self.postMessage({ type: "error", id: g.id, error: h.message });
|
|
2198
|
+
}
|
|
2199
|
+
});
|
|
2200
|
+
}
|
|
2201
|
+
var l;
|
|
2202
|
+
});
|
|
2203
|
+
const r = [{ if: "astcSupported", basisFormat: [s.UASTC], transcoderFormat: [i.ASTC_4x4, i.ASTC_4x4], engineFormat: [A.RGBA_ASTC_4x4_Format, A.RGBA_ASTC_4x4_Format], engineType: [t.UnsignedByteType], priorityETC1S: 1 / 0, priorityUASTC: 1, needsPowerOfTwo: !1 }, { if: "bptcSupported", basisFormat: [s.ETC1S, s.UASTC], transcoderFormat: [i.BC7_M5, i.BC7_M5], engineFormat: [A.RGBA_BPTC_Format, A.RGBA_BPTC_Format], engineType: [t.UnsignedByteType], priorityETC1S: 3, priorityUASTC: 2, needsPowerOfTwo: !1 }, { if: "dxtSupported", basisFormat: [s.ETC1S, s.UASTC], transcoderFormat: [i.BC1, i.BC3], engineFormat: [A.RGBA_S3TC_DXT1_Format, A.RGBA_S3TC_DXT5_Format], engineType: [t.UnsignedByteType], priorityETC1S: 4, priorityUASTC: 5, needsPowerOfTwo: !1 }, { if: "etc2Supported", basisFormat: [s.ETC1S, s.UASTC], transcoderFormat: [i.ETC1, i.ETC2], engineFormat: [A.RGB_ETC2_Format, A.RGBA_ETC2_EAC_Format], engineType: [t.UnsignedByteType], priorityETC1S: 1, priorityUASTC: 3, needsPowerOfTwo: !1 }, { if: "etc1Supported", basisFormat: [s.ETC1S, s.UASTC], transcoderFormat: [i.ETC1], engineFormat: [A.RGB_ETC1_Format], engineType: [t.UnsignedByteType], priorityETC1S: 2, priorityUASTC: 4, needsPowerOfTwo: !1 }, { if: "pvrtcSupported", basisFormat: [s.ETC1S, s.UASTC], transcoderFormat: [i.PVRTC1_4_RGB, i.PVRTC1_4_RGBA], engineFormat: [A.RGB_PVRTC_4BPPV1_Format, A.RGBA_PVRTC_4BPPV1_Format], engineType: [t.UnsignedByteType], priorityETC1S: 5, priorityUASTC: 6, needsPowerOfTwo: !0 }, { if: "bptcSupported", basisFormat: [s.UASTC_HDR], transcoderFormat: [i.BC6H], engineFormat: [A.RGB_BPTC_UNSIGNED_Format], engineType: [t.HalfFloatType], priorityHDR: 1, needsPowerOfTwo: !1 }, { basisFormat: [s.ETC1S, s.UASTC], transcoderFormat: [i.RGBA32, i.RGBA32], engineFormat: [A.RGBAFormat, A.RGBAFormat], engineType: [t.UnsignedByteType, t.UnsignedByteType], priorityETC1S: 100, priorityUASTC: 100, needsPowerOfTwo: !1 }, { basisFormat: [s.UASTC_HDR], transcoderFormat: [i.RGBA_HALF], engineFormat: [A.RGBAFormat], engineType: [t.HalfFloatType], priorityHDR: 100, needsPowerOfTwo: !1 }], b = { [s.ETC1S]: r.filter((c) => c.basisFormat.includes(s.ETC1S)).sort((c, g) => c.priorityUASTC - g.priorityUASTC), [s.UASTC]: r.filter((c) => c.basisFormat.includes(s.UASTC)).sort((c, g) => c.priorityUASTC - g.priorityUASTC), [s.UASTC_HDR]: r.filter((c) => c.basisFormat.includes(s.UASTC_HDR)).sort((c, g) => c.priorityHDR - g.priorityHDR) };
|
|
2204
|
+
function o(c) {
|
|
2205
|
+
return c <= 2 || !(c & c - 1) && c !== 0;
|
|
2206
|
+
}
|
|
2207
|
+
function d(c) {
|
|
2208
|
+
if (c.length === 1) return c[0];
|
|
2209
|
+
let g = 0;
|
|
2210
|
+
for (let f = 0; f < c.length; f++)
|
|
2211
|
+
g += c[f].byteLength;
|
|
2212
|
+
const l = new Uint8Array(g);
|
|
2213
|
+
let h = 0;
|
|
2214
|
+
for (let f = 0; f < c.length; f++) {
|
|
2215
|
+
const I = c[f];
|
|
2216
|
+
l.set(I, h), h += I.byteLength;
|
|
2217
|
+
}
|
|
2218
|
+
return l;
|
|
2219
|
+
}
|
|
2220
|
+
};
|
|
2221
|
+
const oi = /* @__PURE__ */ new Set([le, ke, xe]), Ve = { [IA]: le, [gA]: le, [oA]: le, [cA]: le, [lA]: ke, [dA]: ke, [rA]: ke, [nA]: ke, [hA]: xe, [bA]: xe, [sA]: xe, [iA]: xe, [ha]: Wa, [uA]: Qa, [fA]: Qa }, ze = { [IA]: je, [gA]: Ie, [oA]: W, [cA]: W, [lA]: je, [dA]: Ie, [rA]: W, [nA]: W, [hA]: je, [bA]: Ie, [sA]: W, [iA]: W, [ha]: Ie, [uA]: W, [fA]: W };
|
|
2222
|
+
function Ra(n) {
|
|
2223
|
+
const e = n.dataFormatDescriptor[0];
|
|
2224
|
+
return e.colorPrimaries === 1 ? e.transferFunction === 2 ? $ : q : e.colorPrimaries === 10 ? e.transferFunction === 2 ? "display-p3" : "display-p3-linear" : (e.colorPrimaries === 0 || console.warn(`THREE.KTX2Loader: Unsupported color primaries, "${e.colorPrimaries}"`), Bt);
|
|
2225
|
+
}
|
|
2226
|
+
async function Fa(n) {
|
|
2227
|
+
const e = n.split("?")[0].split(".").pop(), a = await fetch(n);
|
|
2228
|
+
if (!a.ok) throw new Error(`Failed to fetch ${n}: ${a.statusText}`);
|
|
2229
|
+
if (e === "json") {
|
|
2230
|
+
const A = await a.json();
|
|
2231
|
+
return handleJSONSubtree(A, Sa(n));
|
|
2232
|
+
}
|
|
2233
|
+
if (e === "subtree")
|
|
2234
|
+
return async function(A, t) {
|
|
2235
|
+
const i = new DataView(A), s = i.getBigUint64(8, !0), r = i.getBigUint64(16, !0), b = 24, o = b + Number(s), d = o + (8 - o % 8) % 8, c = d + Number(r), g = A.slice(b, o), l = new TextDecoder().decode(g).trim(), h = JSON.parse(l);
|
|
2236
|
+
if (!h.buffers) throw new Error("subtree has no buffers");
|
|
2237
|
+
const f = h.buffers.map(async (B) => {
|
|
2238
|
+
if (B.uri) {
|
|
2239
|
+
const u = new URL(B.uri, t).href, E = await fetch(u);
|
|
2240
|
+
if (!E.ok) throw new Error(`Failed to fetch binary file ${u}: ${E.statusText}`);
|
|
2241
|
+
return new Uint8Array(await E.arrayBuffer());
|
|
2242
|
+
}
|
|
2243
|
+
return new Uint8Array(A.slice(d, c));
|
|
2244
|
+
}), I = await Promise.all(f);
|
|
2245
|
+
return /* @__PURE__ */ function(B, u) {
|
|
2246
|
+
function E(p, Q) {
|
|
2247
|
+
if (!p) throw new Error("incomplete json subtree");
|
|
2248
|
+
if (p.constant) {
|
|
2249
|
+
if (p.constant == 0) return !1;
|
|
2250
|
+
if (p.constant == 1) return !0;
|
|
2251
|
+
}
|
|
2252
|
+
if (p.bitstream == null) throw new Error('json subtree "tileAvailability" does not specify a bitstream');
|
|
2253
|
+
if (!B.bufferViews || !B.bufferViews[p.bitstream]) throw new Error('json subtree "bufferViews" does not specify a bitstream');
|
|
2254
|
+
const k = B.bufferViews[p.bitstream];
|
|
2255
|
+
return C(u[k.buffer], k.byteOffset, Q);
|
|
2256
|
+
}
|
|
2257
|
+
function C(p, Q, k) {
|
|
2258
|
+
const x = k % 8;
|
|
2259
|
+
return p[Q + Math.floor(k / 8)] >> x & !0;
|
|
2260
|
+
}
|
|
2261
|
+
function D(p) {
|
|
2262
|
+
let Q = 0;
|
|
2263
|
+
return Q = p.z == null ? Ye(p.x, p.y, p.level) : Xe(p.x, p.y, p.z, p.level), E(B.tileAvailability, Q);
|
|
2264
|
+
}
|
|
2265
|
+
function y(p) {
|
|
2266
|
+
let Q = 0;
|
|
2267
|
+
Q = p.z == null ? Ye(p.x, p.y, p.level) : Xe(p.x, p.y, p.z, p.level);
|
|
2268
|
+
const k = [];
|
|
2269
|
+
return B.contentAvailability.forEach((x) => {
|
|
2270
|
+
k.push(E(x, Q));
|
|
2271
|
+
}), k;
|
|
2272
|
+
}
|
|
2273
|
+
function w(p) {
|
|
2274
|
+
let Q = 0;
|
|
2275
|
+
return Q = p.z == null ? Ye(p.x, p.y) : Xe(p.x, p.y, p.z), E(B.childSubtreeAvailability, Q);
|
|
2276
|
+
}
|
|
2277
|
+
return { isTileAvailable: D, isContentAvailable: y, isChildSubtreeAvailable: w };
|
|
2278
|
+
}(h, I);
|
|
2279
|
+
}(await a.arrayBuffer(), Sa(n));
|
|
2280
|
+
throw new Error(`Unsupported file extension: ${e}`);
|
|
2281
|
+
}
|
|
2282
|
+
function Sa(n) {
|
|
2283
|
+
const e = n.split("?")[0];
|
|
2284
|
+
return e.substring(0, e.lastIndexOf("/") + 1);
|
|
2285
|
+
}
|
|
2286
|
+
function Ta(n) {
|
|
2287
|
+
return n = 1431655765 & ((n = 858993459 & ((n = 252645135 & ((n = 16711935 & ((n &= 65535) ^ n << 8)) ^ n << 4)) ^ n << 2)) ^ n << 1);
|
|
2288
|
+
}
|
|
2289
|
+
function Ye(n, e, a) {
|
|
2290
|
+
let A = 0;
|
|
2291
|
+
return a && (A = (Math.pow(4, a) - 1) / 3), A + (Ta(n) | Ta(e) << 1);
|
|
2292
|
+
}
|
|
2293
|
+
function We(n) {
|
|
2294
|
+
return n = 153391689 & ((n = 51130563 & ((n = 50393103 & ((n = 4278190335 & ((n &= 1023) ^ n << 16)) ^ n << 8)) ^ n << 4)) ^ n << 2);
|
|
2295
|
+
}
|
|
2296
|
+
function Xe(n, e, a, A) {
|
|
2297
|
+
let t = 0;
|
|
2298
|
+
return A && (t = (Math.pow(8, A) - 1) / 7), t + (We(n) | We(e) << 1 | We(a) << 2);
|
|
2299
|
+
}
|
|
2300
|
+
const we = /* @__PURE__ */ new Map();
|
|
2301
|
+
async function la(n, e) {
|
|
2302
|
+
if (!n.root || !n.root.implicitTiling) return n;
|
|
2303
|
+
if (!n.root.content && !n.root.contents) throw new Error("implicit tiling requires a Template URI");
|
|
2304
|
+
let a = !0;
|
|
2305
|
+
n.root.implicitTiling.subdivisionScheme && (a = n.root.implicitTiling.subdivisionScheme.toUpperCase() === "QUADTREE");
|
|
2306
|
+
let A = "";
|
|
2307
|
+
n.root.implicitTiling.subtrees && (n.root.implicitTiling.subtrees.uri ? A = n.root.implicitTiling.subtrees.uri : n.root.implicitTiling.subtrees.url && (A = n.root.implicitTiling.subtrees.url));
|
|
2308
|
+
let t = [];
|
|
2309
|
+
n.root.content ? n.root.content.uri ? t.push(n.root.content.uri) : n.root.content.url && t.push(n.root.content.url) : n.root.contents && n.root.contents.forEach((l) => {
|
|
2310
|
+
l.uri ? t.push(l.uri) : l.url && t.push(l.url);
|
|
2311
|
+
});
|
|
2312
|
+
const i = function(l) {
|
|
2313
|
+
const h = l.split("?")[0];
|
|
2314
|
+
return h.substring(0, h.lastIndexOf("/") + 1);
|
|
2315
|
+
}(e);
|
|
2316
|
+
let s;
|
|
2317
|
+
a && (s = A.replace("{level}", 0).replace("{x}", 0).replace("{y}", 0)), a || (s = A.replace("{level}", 0).replace("{x}", 0).replace("{y}", 0).replace("{z}", 0));
|
|
2318
|
+
const r = { level: 0, x: 0, y: 0 }, b = { level: 0, x: 0, y: 0 };
|
|
2319
|
+
a || (r.z = 0, b.z = 0), we.set(s, await Fa(i + s));
|
|
2320
|
+
const o = we.get(s), d = [];
|
|
2321
|
+
o.isContentAvailable(b) && t.forEach((l) => {
|
|
2322
|
+
let h;
|
|
2323
|
+
a && (h = l.replace("{level}", r.level).replace("{x}", r.x).replace("{y}", r.y)), a || (h = l.replace("{level}", r.level).replace("{x}", r.x).replace("{y}", r.y).replace("{z}", r.z)), d.push({ uri: h });
|
|
2324
|
+
});
|
|
2325
|
+
const c = { geometricError: n.root.geometricError, boundingVolume: n.root.boundingVolume, refine: n.root.refine, globalAddress: r, localAddress: b, subtree: o, contents: d, getChildren: async () => g(c) };
|
|
2326
|
+
return { root: c };
|
|
2327
|
+
async function g(l) {
|
|
2328
|
+
const h = [];
|
|
2329
|
+
if (l.localAddress.level == n.root.implicitTiling.availableLevels - 1) return h;
|
|
2330
|
+
if ((l.localAddress.level + 1) % n.root.implicitTiling.subtreeLevels == 0) {
|
|
2331
|
+
const f = Te(l.localAddress), I = Te(l.globalAddress), B = La(a, n.root.boundingVolume, I);
|
|
2332
|
+
for (let u = 0; u < f.length; u++) {
|
|
2333
|
+
const E = f[u], C = I[u];
|
|
2334
|
+
l.subtree.isChildSubtreeAvailable(E) && (a && A.replace("{level}", C.level).replace("{x}", C.x).replace("{y}", C.y), a || A.replace("{level}", C.level).replace("{x}", C.x).replace("{y}", C.y).replace("{z}", C.z)), we.has(s) || we.set(s, await Fa(i + s));
|
|
2335
|
+
const D = we.get(s), y = { level: 0, x: 0, y: 0 };
|
|
2336
|
+
a || (y.z = 0);
|
|
2337
|
+
const w = [];
|
|
2338
|
+
D.isContentAvailable(y) && t.forEach((Q) => {
|
|
2339
|
+
let k;
|
|
2340
|
+
a && (k = Q.replace("{level}", C.level).replace("{x}", C.x).replace("{y}", C.y)), a || (k = Q.replace("{level}", C.level).replace("{x}", C.x).replace("{y}", C.y).replace("{z}", C.z)), w.push({ uri: k });
|
|
2341
|
+
});
|
|
2342
|
+
const p = { geometricError: l.geometricError / 2, boundingVolume: B[u], refine: n.root.refine, globalAddress: C, localAddress: y, subtree: D, contents: w, getChildren: async () => g(p) };
|
|
2343
|
+
h.push(p);
|
|
2344
|
+
}
|
|
2345
|
+
} else {
|
|
2346
|
+
const f = Te(l.localAddress), I = Te(l.globalAddress), B = La(a, n.root.boundingVolume, I);
|
|
2347
|
+
for (let u = 0; u < f.length; u++) {
|
|
2348
|
+
const E = f[u], C = I[u];
|
|
2349
|
+
if (!l.subtree.isTileAvailable(E)) continue;
|
|
2350
|
+
const D = [], y = l.subtree.isContentAvailable(E);
|
|
2351
|
+
for (let p = 0; p < t.length; p++) {
|
|
2352
|
+
if (!y[p]) continue;
|
|
2353
|
+
const Q = t[p];
|
|
2354
|
+
let k;
|
|
2355
|
+
a && (k = Q.replace("{level}", C.level).replace("{x}", C.x).replace("{y}", C.y)), a || (k = Q.replace("{level}", C.level).replace("{x}", C.x).replace("{y}", C.y).replace("{z}", C.z)), D.push({ uri: k });
|
|
2356
|
+
}
|
|
2357
|
+
const w = { geometricError: l.geometricError / 2, boundingVolume: B[u], refine: n.root.refine, globalAddress: C, localAddress: E, subtree: l.subtree, contents: D, getChildren: async () => g(w) };
|
|
2358
|
+
h.push(w);
|
|
2359
|
+
}
|
|
2360
|
+
}
|
|
2361
|
+
return h.length > 0 ? h : void 0;
|
|
2362
|
+
}
|
|
2363
|
+
}
|
|
2364
|
+
function Te(n) {
|
|
2365
|
+
const { level: e, x: a, y: A, z: t } = n, i = e + 1;
|
|
2366
|
+
let s = [];
|
|
2367
|
+
return s = t === void 0 ? [{ level: i, x: 2 * a, y: 2 * A }, { level: i, x: 2 * a + 1, y: 2 * A }, { level: i, x: 2 * a, y: 2 * A + 1 }, { level: i, x: 2 * a + 1, y: 2 * A + 1 }] : [{ level: i, x: 2 * a, y: 2 * A, z: 2 * t }, { level: i, x: 2 * a + 1, y: 2 * A, z: 2 * t }, { level: i, x: 2 * a, y: 2 * A + 1, z: 2 * t }, { level: i, x: 2 * a + 1, y: 2 * A + 1, z: 2 * t }, { level: i, x: 2 * a, y: 2 * A, z: 2 * t + 1 }, { level: i, x: 2 * a + 1, y: 2 * A, z: 2 * t + 1 }, { level: i, x: 2 * a, y: 2 * A + 1, z: 2 * t + 1 }, { level: i, x: 2 * a + 1, y: 2 * A + 1, z: 2 * t + 1 }], s;
|
|
2368
|
+
}
|
|
2369
|
+
function La(n, e, a) {
|
|
2370
|
+
const A = [];
|
|
2371
|
+
for (let t = 0; t < a.length; t++) A.push(ci(n, e, a[t]));
|
|
2372
|
+
return A;
|
|
2373
|
+
}
|
|
2374
|
+
function ci(n, e, a) {
|
|
2375
|
+
if (e.region) return function(A, t, i) {
|
|
2376
|
+
const [s, r, b, o, d, c] = t, g = (b - s) / 2 ** i.level, l = (o - r) / 2 ** i.level, h = A ? 0 : (c - d) / 2 ** i.level, f = s + g * i.x, I = r + l * i.y, B = f + g, u = I + l, E = A ? d : d + h * i.z, C = A ? c : E + h;
|
|
2377
|
+
return { region: [f, I, B, u, E, C] };
|
|
2378
|
+
}(n, e.region, a);
|
|
2379
|
+
if (e.box) return function(A, t, i) {
|
|
2380
|
+
const s = t.slice(0, 3), r = [t.slice(3, 6), t.slice(6, 9), t.slice(9, 12)], b = 1 / Math.pow(2, i.level), o = [b, b, A ? 1 : b], d = r.map((l, h) => l.map((f) => f * o[h])), c = [s[0] - r[0][0] - r[1][0] - r[2][0], s[1] - r[0][1] - r[1][1] - r[2][1], s[2] - r[0][2] - r[1][2] - r[2][2]];
|
|
2381
|
+
return { box: [c[0] + (2 * i.x + 1) * (d[0][0] + d[1][0] + d[2][0]), c[1] + (2 * i.y + 1) * (d[0][1] + d[1][1] + d[2][1]), A ? s[2] : c[2] + (2 * i.z + 1) * (d[0][2] + d[1][2] + d[2][2])].concat(...d) };
|
|
2382
|
+
}(n, e.box, a);
|
|
2383
|
+
throw new Error("Unsupported bounding volume type");
|
|
2384
|
+
}
|
|
2385
|
+
(function() {
|
|
2386
|
+
var n, e = 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]);
|
|
2387
|
+
if (typeof WebAssembly != "object") return { supported: !1 };
|
|
2388
|
+
var a = WebAssembly.instantiate(function(o) {
|
|
2389
|
+
for (var d = new Uint8Array(o.length), c = 0; c < o.length; ++c) {
|
|
2390
|
+
var g = o.charCodeAt(c);
|
|
2391
|
+
d[c] = g > 96 ? g - 97 : g > 64 ? g - 39 : g + 4;
|
|
2392
|
+
}
|
|
2393
|
+
var l = 0;
|
|
2394
|
+
for (c = 0; c < o.length; ++c) d[l++] = d[c] < 60 ? e[d[c]] : 64 * (d[c] - 60) + d[++c];
|
|
2395
|
+
return d.buffer.slice(0, l);
|
|
2396
|
+
}("b9H79TebbbeJq9Geueu9Geub9Gbb9Gvuuuuueu9Gduueu9Gluuuueu9Gvuuuuub9Gouuuuuub9Gluuuub9GiuuueuiKLdilevlevlooroowwvwbDDbelve9Weiiviebeoweuec:W;kekr;RiOo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9FW9U9J9V9KW9wWVtW949c919M9MWVbe8F9TW79O9V9Wt9FW9U9J9V9KW9wWVtW949c919M9MWV9c9V919U9KbdE9TW79O9V9Wt9FW9U9J9V9KW9wWVtW949wWV79P9V9UbiY9TW79O9V9Wt9FW9U9J9V9KW69U9KW949c919M9MWVbl8E9TW79O9V9Wt9FW9U9J9V9KW69U9KW949c919M9MWV9c9V919U9Kbv8A9TW79O9V9Wt9FW9U9J9V9KW69U9KW949wWV79P9V9UboE9TW79O9V9Wt9FW9U9J9V9KW69U9KW949tWG91W9U9JWbra9TW79O9V9Wt9FW9U9J9V9KW69U9KW949tWG91W9U9JW9c9V919U9KbwL9TW79O9V9Wt9FW9U9J9V9KWS9P2tWV9p9JtbDK9TW79O9V9Wt9FW9U9J9V9KWS9P2tWV9r919HtbqL9TW79O9V9Wt9FW9U9J9V9KWS9P2tWVT949WbkE9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94J9H9J9OWbPa9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94J9H9J9OW9ttV9P9Wbsa9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94SWt9J9O9sW9T9H9WbzK9TW79O9V9Wt9F79W9Ht9P9H29t9VVt9sW9T9H9WbHl79IV9RbODwebcekdQXq:g9sLdbk;3keYu8Jjjjjbcjo9Rgv8Kjjjjbcbhodnalcefae0mbabcbRb:S:kjjbc:GeV86bbavcjdfcbcjdzNjjjb8AdnaiTmbavcjdfadalz:tjjjb8Akabaefhrabcefhwavalfcbcbcjdal9RalcFe0EzNjjjb8Aavavcjdfalz:tjjjbhDcj;abal9UhodndndndndnalTmbaoc;WFbGgecjdaecjd6Ehqcbhkdninakai9pmiaDcjlfcbcjdzNjjjb8Aaqaiak9Rakaqfai6Egxcsfgecl4cifcd4hmadakal2fhPdndndndndnaec9WGgsTmbcbhzcehHaPhOawhAxekdnaxTmbcbhAcehHaPhCinaDaAfRbbhXaDcjlfheaChoaxhQinaeaoRbbgLaX9RgXcetaX;acr4786bbaoalfhoaecefheaLhXaQcufgQmbkaraw9Ram6miawcbamzNjjjbgeTmiaCcefhCaeamfhwaAcefgAal6hHaAal9hmbxvkkaraw9Ram6mvawcbamzNjjjb8AceheinawgXamfhwalaegoSmldnaraw9Ram6mbaocefheawcbamzNjjjb8AaXmekkaoal6hHxekindnaxTmbaDazfRbbhXaDcjlfheaOhoaxhQinaeaoRbbgLaX9RgXcetaX;acr4786bbaoalfhoaecefheaLhXaQcufgQmbkkaraA9Ram6mearaAcbamzNjjjbgKamfgw9RcK6mdcbhYaDcjlfhAinaDcjlfaYfh8AcwhCczhLcehQindndnaQce9hmbcuhoa8ARbbmecbhodninaogecsSmeaecefhoaAaefcefRbbTmbkkcucbaecs6EhoxekaQcetc;:FFFeGhocuaQtcu7cFeGhXcbheinaoaXaAaefRbb9nfhoaecefgecz9hmbkkaoaLaoaL6geEhLaQaCaeEhCaQcetgQcw6mbkdndndndnaCcufPdiebkaKaYco4fgeaeRbbcdciaCclSEaYci4coGtV86bbaCcw9hmeawa8A8Pbb83bbawcwfa8Acwf8Pbb83bbawczfhwxdkaKaYco4fgeaeRbbceaYci4coGtV86bbkdncwaC9TgEmbinawcb86bbawcefhwxbkkcuaCtcu7h8Acbh3aAh5ina5heaEhQcbhoinaeRbbgLa8AcFeGgXaLaX6EaoaCtVhoaecefheaQcufgQmbkawao86bba5aEfh5awcefhwa3aEfg3cz6mbkcbheindnaAaefRbbgoaX6mbawao86bbawcefhwkaecefgecz9hmbkkdnaYczfgYas9pmbaAczfhAaraw9RcL0mekkaYas6meawTmeaOcefhOazcefgzal6hHawhAazalSmixbkkcbhwaHceGTmexikcbhwaHceGmdkaDaPaxcufal2falz:tjjjb8AaxakfhkawmbkcbhoxokcbhoxvkaiTmekcbhoaraw9Ralcaalca0E6mialc8F9nmexdkcbhoaecufca6mdkawcbcaal9RgezNjjjbaefhwkawaDcjdfalz:tjjjbalfab9Rhokavcjof8Kjjjjbaok9heeuaecaaeca0Eabcj;abae9Uc;WFbGgdcjdadcjd6Egdfcufad9Uae2adcl4cifcd4adV2fcefkmbcbabBd:S:kjjbk;rse3u8Jjjjjbc;ae9Rgl8Kjjjjbcbhvdnaici9UgocHfae0mbabcbyd:C:kjjbgrc;GeV86bbalc;abfcFecjezNjjjb8AalcUfgw9cu83ibalc8WfgD9cu83ibalcyfgq9cu83ibalcafgk9cu83ibalcKfgx9cu83ibalczfgm9cu83ibal9cu83iwal9cu83ibabaefc9WfhPabcefgsaofhednaiTmbcmcsarcb9kgzEhHcbhOcbhAcbhCcbhXcbhQindnaeaP9nmbcbhvxikaQcufhvadaCcdtfgoydbhLaocwfydbhKaoclfydbhYcbh8Adndninalc;abfavcsGcitfgoydlhEdndndnaoydbgoaL9hmbaEaYSmekdnaoaY9hmbaEaK9hmba8Acefh8AxekaoaK9hmeaEaL9hmea8Acdfh8Aka8Ac870mdaXcufhvada8AciGcx2goc:y1jjbfydbaCfcdtfydbhEadaocN1jjbfydbaCfcdtfydbhKadaoc:q1jjbfydbaCfcdtfydbhLcbhodnindnalavcsGcdtfydbaE9hmbaohYxdkcuhYavcufhvaocefgocz9hmbkkaEaOSgvaYce9iaYaH9oVgoGh3dndndndndncbcsavEaYaoEgvcs9hmbarce9imbaEaEaAaEcefaASgvEgAcefSmecmcsavEhvkasava8Acdtc;WeGV86bbavcs9hmeaEaA9Rgvcetavc8F917hvinaeavcFb0crtavcFbGV86bbaecefheavcje6hoavcr4hvaoTmbkaEhAxdkcPhvasa8AcdtcPV86bbaEhAkavTmbavaH9imekalaXcdtfaEBdbaXcefcsGhXkaOa3fhOalc;abfaQcitfgvaKBdlavaEBdbalc;abfaQcefcsGgvcitfgoaEBdlaoaLBdbavcefhoxikavcufhva8Aclfg8Ac;ab9hmbkkdnadceaKaOScetaYaOSEcx2gvc:q1jjbfydbaCfcdtfydbgLTadavcN1jjbfydbaCfcdtfydbg8AceSGadavc:y1jjbfydbaCfcdtfydbgYcdSGaOcb9hGazGg5ce9hmbaw9cu83ibaD9cu83ibaq9cu83ibak9cu83ibax9cu83ibam9cu83ibal9cu83iwal9cu83ibcbhOkcbhEaXcufgvhodnindnalaocsGcdtfydba8A9hmbaEhKxdkcuhKaocufhoaEcefgEcz9hmbkkcbhodnindnalavcsGcdtfydbaY9hmbaohExdkcuhEavcufhvaocefgocz9hmbkkaOaLaOSg8Efh3dndnaKcm0mbaKcefhKxekcbcsa8Aa3SgvEhKa3avfh3kdndnaEcm0mbaEcefhExekcbcsaYa3SgvEhEa3avfh3kc9:cua8EEh8FaEaKcltVhocbhvdndndninavcj1jjbfRbbaocFeGSmeavcefgvcz9hmbxdkka5aLaO9havcm0VVmbasavc;WeV86bbxekasa8F86bbaeao86bbaecefhekdna8EmbaLaA9Rgvcetavc8F917hvinaeavcFb0gocrtavcFbGV86bbavcr4hvaecefheaombkaLhAkdnaKcs9hmba8AaA9Rgvcetavc8F917hvinaeavcFb0gocrtavcFbGV86bbavcr4hvaecefheaombka8AhAkdnaEcs9hmbaYaA9Rgvcetavc8F917hvinaeavcFb0gocrtavcFbGV86bbavcr4hvaecefheaombkaYhAkalaXcdtfaLBdbaXcefcsGhvdndnaKPzbeeeeeeeeeeeeeebekalavcdtfa8ABdbaXcdfcsGhvkdndnaEPzbeeeeeeeeeeeeeebekalavcdtfaYBdbavcefcsGhvkalc;abfaQcitfgoaLBdlaoa8ABdbalc;abfaQcefcsGcitfgoa8ABdlaoaYBdbalc;abfaQcdfcsGcitfgoaYBdlaoaLBdbaQcifhoavhXa3hOkascefhsaocsGhQaCcifgCai6mbkkcbhvaeaP0mbcbhvinaeavfavcj1jjbfRbb86bbavcefgvcz9hmbkaeab9Ravfhvkalc;aef8KjjjjbavkZeeucbhddninadcefgdc8F0meceadtae6mbkkadcrfcFeGcr9Uci2cdfabci9U2cHfkmbcbabBd:C:kjjbk:ydewu8Jjjjjbcz9Rhlcbhvdnaicvfae0mbcbhvabcbRb:C:kjjbc;qeV86bbal9cb83iwabcefhoabaefc98fhrdnaiTmbcbhwcbhDindnaoar6mbcbskadaDcdtfydbgqalcwfawaqav9Rgvavc8F91gv7av9Rc507gwcdtfgkydb9Rgvc8E91c9:Gavcdt7awVhvinaoavcFb0gecrtavcFbGV86bbavcr4hvaocefhoaembkakaqBdbaqhvaDcefgDai9hmbkkcbhvaoar0mbaocbBbbaoab9RclfhvkavkBeeucbhddninadcefgdc8F0meceadtae6mbkkadcwfcFeGcr9Uab2cvfk:dvli99dui99ludnaeTmbcuadcetcuftcu7:Yhvdndncuaicuftcu7:YgoJbbbZMgr:lJbbb9p9DTmbar:Ohwxekcjjjj94hwkcbhicbhDinalclfIdbgrJbbbbJbbjZalIdbgq:lar:lMalcwfIdbgk:lMgr:varJbbbb9BEgrNhxaqarNhralcxfIdbhqdndnakJbbbb9GTmbaxhkxekJbbjZar:l:tgkak:maxJbbbb9GEhkJbbjZax:l:tgxax:marJbbbb9GEhrkdndnaqJbbj:;aqJbbj:;9GEgxJbbjZaxJbbjZ9FEavNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohmxekcjjjj94hmkdndnakJbbj:;akJbbj:;9GEgqJbbjZaqJbbjZ9FEaoNJbbbZJbbb:;akJbbbb9GEMgq:lJbbb9p9DTmbaq:OhPxekcjjjj94hPkdndnarJbbj:;arJbbj:;9GEgqJbbjZaqJbbjZ9FEaoNJbbbZJbbb:;arJbbbb9GEMgr:lJbbb9p9DTmbar:Ohsxekcjjjj94hskdndnadcl9hmbabaifgzas86bbazcifam86bbazcdfaw86bbazcefaP86bbxekabaDfgzas87ebazcofam87ebazclfaw87ebazcdfaP87ebkalczfhlaiclfhiaDcwfhDaecufgembkkk;klld99eud99eudnaeTmbdndncuaicuftcu7:YgvJbbbZMgo:lJbbb9p9DTmbao:Ohixekcjjjj94hikaic;8FiGhrinabcofcicdalclfIdb:lalIdb:l9EgialcwfIdb:lalaicdtfIdb:l9EEgialcxfIdb:lalaicdtfIdb:l9EEgiarV87ebdndnalaicefciGcdtfIdbJ;Zl:1ZNJbbj:;JbbjZalaicdtfIdbJbbbb9DEgoNgwJbbj:;awJbbj:;9GEgDJbbjZaDJbbjZ9FEavNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohqxekcjjjj94hqkabaq87ebdndnaoalaicdfciGcdtfIdbJ;Zl:1ZNNgwJbbj:;awJbbj:;9GEgDJbbjZaDJbbjZ9FEavNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohqxekcjjjj94hqkabcdfaq87ebdndnaoalaicufciGcdtfIdbJ;Zl:1ZNNgoJbbj:;aoJbbj:;9GEgwJbbjZawJbbjZ9FEavNJbbbZJbbb:;aoJbbbb9GEMgo:lJbbb9p9DTmbao:Ohixekcjjjj94hikabclfai87ebabcwfhbalczfhlaecufgembkkk:Hvdxue998Jjjjjbcjd9Rgo8Kjjjjbadcd4hrdndndndnavcd9hmbadcl6mearcearce0EhwaohDinaDc:CuBdbaDclfhDawcufgwmbkaeTmiadcl6mdarcearce0EhqarcdthkalhxcbhminaohDaxhwaqhPinaDaDydbgsawydbgzcL4cFeGc:cufcbazEgzasaz9kEBdbawclfhwaDclfhDaPcufgPmbkaxakfhxamcefgmae9hmbkkaeTmdxekaeTmekavcb9hadcl6gqVhHarcearce0Ehkarcdthrceai9Rhmcbhdindndndnavce9hmbaqmdc:CuhwalhDakhPinawaDydbgscL4cFeGc:cufcbasEgsawas9kEhwaDclfhDaPcufgPmbxdkkc:CuhwaHmbaohDalhPakhsinaDaPydbgzcL4cFeGgxc8Aaxc8A9kEc:cufcbazEBdbaPclfhPaDclfhDascufgsmbkkaqmbcbhDakhsinawhPdnavceSmbaoaDfydbhPkdndnalaDfIdbgOcjjj;8iamaPfgPcLt9R::NJbbbZJbbb:;aOJbbbb9GEMgO:lJbbb9p9DTmbaO:Ohzxekcjjjj94hzkabaDfazcFFFrGaPcKtVBdbaDclfhDascufgsmbkkabarfhbalarfhladcefgdae9hmbkkaocjdf8KjjjjbkFkdCui998Jjjjjbc:Gd9Rgv8Kjjjjbavc:4efcbc;KbzNjjjb8AcbhodnadTmbcbhoaiTmbdnabae9hmbavcuadcdtgoadcFFFFi0Ecbyd:K:kjjbHjjjjbbgeBd:4eavceBd:ydaeabaoz:tjjjb8Akavc:OefcwfcbBdbav9cb83i:Oeavc:Oefaeadaiavc:4efz:njjjbcuaicdtgraicFFFFi0Egwcbyd:K:kjjbHjjjjbbhoavc:4efavyd:ydgDcdtfaoBdbavaDcefgqBd:ydaoavyd:Oegkarz:tjjjbhxavc:4efaqcdtfadci9Ugmcbyd:K:kjjbHjjjjbbgoBdbavaDcdfgrBd:ydaocbamzNjjjbhPavc:4efarcdtfawcbyd:K:kjjbHjjjjbbgsBdbavaDcifgqBd:ydaxhoashrinaralIdbalaoydbgwcwawcw6Ecdtfc;ebfIdbMUdbaoclfhoarclfhraicufgimbkavc:4efaqcdtfcuamcdtadcFFFF970Ecbyd:K:kjjbHjjjjbbgqBdbavaDclfBd:yddnadci6mbamceamce0EhiaehoaqhrinarasaoydbcdtfIdbasaoclfydbcdtfIdbMasaocwfydbcdtfIdbMUdbaocxfhoarclfhraicufgimbkkavc;qbfhzavhoavyd:SehHavyd:WehOcbhwcbhrcbhAcehCinaohXcihQaearci2gLcdtfgocwfydbhdaoydbhDabaAcx2fgiclfaoclfydbgKBdbaiaDBdbaicwfadBdbaParfce86bbazadBdwazaKBdlazaDBdbaqarcdtfcbBdbdnawTmbcihQaXhiinazaQcdtfaiydbgoBdbaQaoaD9haoaK9hGaoad9hGfhQaiclfhiawcufgwmbkkaAcefhAaxaDcdtfgoaoydbcufBdbaxaKcdtfgoaoydbcufBdbaxadcdtfgoaoydbcufBdbcbhwinaOaHaeawaLfcdtfydbcdtgifydbcdtfgKhoakaifgDydbgdhidnadTmbdninaoydbarSmeaoclfhoaicufgiTmdxbkkaoadcdtaKfc98fydbBdbaDaDydbcufBdbkawcefgwci9hmbkdndndnaQTmbcuhrJbbbbhYcbhDavyd:SehKavyd:WehLindndnakazaDcdtfydbcdtgofydbgimbaDcefhDxekaDcs0hwasaofgdIdbh8AadalcbaDcefgDawEcdtfIdbalaxaofydbgwcwawcw6Ecdtfc;ebfIdbMgEUdbaEa8A:thEaicdthiaLaKaofydbcdtfhoinaqaoydbgwcdtfgdaEadIdbMg8AUdba8AaYaYa8A9DgdEhYawaradEhraoclfhoaic98fgimbkkaDaQ9hmbkarcu9hmekaCam9pmeindnaPaCfRbbmbaChrxdkamaCcefgC9hmbxdkkaQczaQcz6EhwazhoaXhzarcu9hmekkavyd:ydhokaocdtavc:4effc98fhrdninaoTmearydbcbyd:G:kjjbH:bjjjbbarc98fhraocufhoxbkkavc:Gdf8Kjjjjbk;UlevucuaicdtgvaicFFFFi0Egocbyd:K:kjjbHjjjjbbhralalyd9GgwcdtfarBdbalawcefBd9GabarBdbaocbyd:K:kjjbHjjjjbbhralalyd9GgocdtfarBdbalaocefBd9GabarBdlcuadcdtadcFFFFi0Ecbyd:K:kjjbHjjjjbbhralalyd9GgocdtfarBdbalaocefBd9GabarBdwabydbcbavzNjjjb8Aadci9UhwdnadTmbabydbhoaehladhrinaoalydbcdtfgvavydbcefBdbalclfhlarcufgrmbkkdnaiTmbabydbhlabydlhrcbhvaihoinaravBdbarclfhralydbavfhvalclfhlaocufgombkkdnadci6mbawceawce0EhDabydlhrabydwhvcbhlinaecwfydbhoaeclfydbhdaraeydbcdtfgwawydbgwcefBdbavawcdtfalBdbaradcdtfgdadydbgdcefBdbavadcdtfalBdbaraocdtfgoaoydbgocefBdbavaocdtfalBdbaecxfheaDalcefgl9hmbkkdnaiTmbabydlheabydbhlinaeaeydbalydb9RBdbalclfhlaeclfheaicufgimbkkkQbabaeadaic:01jjbz:mjjjbkQbabaeadaic:C:jjjbz:mjjjbk9DeeuabcFeaicdtzNjjjbhlcbhbdnadTmbindnalaeydbcdtfgiydbcu9hmbaiabBdbabcefhbkaeclfheadcufgdmbkkabk;:kivuo99lu8Jjjjjbcj;Hb9Rgl8Kjjjjbcbhvalc1;Gbfcbc;KbzNjjjb8AalcuadcdtadcFFFFi0Egocbyd:K:kjjbHjjjjbbgrBd19GalceBd;O9Galcwfcbyd:m:kjjbBdbalcb8Pd:e:kjjb83ibalc;W;Gbfcwfcbyd:y:kjjbBdbalcb8Pd:q:kjjb83i;W9Gaicd4hwdndnadmbJFFuFhDJFFuuhqJFFuuhkJFFuFhxJFFuuhmJFFuFhPxekawcdthsaehzincbhiinalaifgHazaifIdbgDaHIdbgxaxaD9EEUdbalc;W;GbfaifgHaDaHIdbgxaxaD9DEUdbaiclfgicx9hmbkazasfhzavcefgvad9hmbkalIdwhqalId;49GhDalIdlhkalId;09GhxalIdbhmalId;W9GhPkdndnadTmbJbbbbJbbjZaPam:tJbbbb:xgPaxak:tgxaxaP9DEgxaDaq:tgDaDax9DEgD:vaDJbbbb9BEhDawcdthsarhHadhzindndnaDaeIdbam:tNJb;au9eNJbbbZMgx:lJbbb9p9DTmbax:Ohixekcjjjj94hikaicztaicwtcj;GiGVaicsGVc:p;G:dKGcH2c;d;H:WKGcv2c;j:KM;jbGhvdndnaDaeclfIdbak:tNJb;au9eNJbbbZMgx:lJbbb9p9DTmbax:Ohixekcjjjj94hikaicztaicwtcj;GiGVaicsGVc:p;G:dKGcH2c;d;H:WKGcq2cM;j:KMeGavVhvdndnaDaecwfIdbaq:tNJb;au9eNJbbbZMgx:lJbbb9p9DTmbax:Ohixekcjjjj94hikaHavaicztaicwtcj;GiGVaicsGVc:p;G:dKGcH2c;d;H:WKGcC2c:KM;j:KdGVBdbaeasfheaHclfhHazcufgzmbkalcbcj;GbzNjjjbhiarhHadheinaiaHydbgzcFrGcx2fgvavydbcefBdbaiazcq4cFrGcx2fgvavydlcefBdlaiazcC4cFrGcx2fgzazydwcefBdwaHclfhHaecufgembxdkkalcbcj;GbzNjjjb8AkcbhHcbhzcbhecbhvinalaHfgiydbhsaiazBdbaicwfgwydbhOawavBdbaiclfgiydbhwaiaeBdbasazfhzaOavfhvawaefheaHcxfgHcj;Gb9hmbkcbhialaocbyd:K:kjjbHjjjjbbgzBd:m9GdnadTmbabhHinaHaiBdbaHclfhHadaicefgi9hmbkadTmbabhiadhHinalaraiydbgecdtfydbcFrGcx2fgvavydbgvcefBdbazavcdtfaeBdbaiclfhiaHcufgHmbkazhiadhHinalaraiydbgecdtfydbcq4cFrGcx2fgvavydlgvcefBdlabavcdtfaeBdbaiclfhiaHcufgHmbkabhiadhHinalaraiydbgecdtfydbcC4cFrGcx2fgvavydwgvcefBdwazavcdtfaeBdbaiclfhiaHcufgHmbkadTmbcbhiinabazydbcdtfaiBdbazclfhzadaicefgi9hmbkkclhidninaic98Smealc1;Gbfaifydbcbyd:G:kjjbH:bjjjbbaic98fhixbkkalcj;Hbf8Kjjjjbk9teiucbcbyd:O:kjjbgeabcifc98GfgbBd:O:kjjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabk9teiucbcbyd:O:kjjbgeabcrfc94GfgbBd:O:kjjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik9:eiuZbhedndncbyd:O:kjjbgdaecztgi9nmbcuheadai9RcFFifcz4nbcuSmekadhekcbabae9Rcifc98Gcbyd:O:kjjbfgdBd:O:kjjbdnadZbcztge9nmbadae9RcFFifcz4nb8Akkk:6ddbcjwk:Cdb4:h9w9N94:P:gW:j9O:ye9Pbbbbbbebbbdbbbebbbdbbbbbbbdbbbbbbbebbbbbbb:l29hZ;69:9kZ;N;76Z;rg97Z;z;o9xZ8J;B85Z;:;u9yZ;b;k9HZ:2;Z9DZ9e:l9mZ59A8KZ:r;T3Z:A:zYZ79OHZ;j4::8::Y:D9V8:bbbb9s:49:Z8R:hBZ9M9M;M8:L;z;o8:;8:PG89q;x:J878R:hQ8::M:B;e87bbbbbbjZbbjZbbjZ:E;V;N8::Y:DsZ9i;H;68:xd;R8:;h0838:;W:NoZbbbb:WV9O8:uf888:9i;H;68:9c9G;L89;n;m9m89;D8Ko8:bbbbf:8tZ9m836ZS:2AZL;zPZZ818EZ9e:lxZ;U98F8:819E;68:FFuuFFuuFFuuFFuFFFuFFFuFbc:Cqkzebbbebbbdbbb8WWbb"), {}).then(function(o) {
|
|
2397
|
+
(n = o.instance).exports.__wasm_call_ctors(), n.exports.meshopt_encodeVertexVersion(0), n.exports.meshopt_encodeIndexVersion(1);
|
|
2398
|
+
});
|
|
2399
|
+
function A(o) {
|
|
2400
|
+
if (!o) throw new Error("Assertion failed");
|
|
2401
|
+
}
|
|
2402
|
+
function t(o) {
|
|
2403
|
+
return new Uint8Array(o.buffer, o.byteOffset, o.byteLength);
|
|
2404
|
+
}
|
|
2405
|
+
function i(o, d, c, g, l) {
|
|
2406
|
+
var h = n.exports.sbrk, f = h(d), I = h(g * l), B = new Uint8Array(n.exports.memory.buffer);
|
|
2407
|
+
B.set(t(c), I);
|
|
2408
|
+
var u = o(f, d, I, g, l), E = new Uint8Array(u);
|
|
2409
|
+
return E.set(B.subarray(f, f + u)), h(f - h(0)), E;
|
|
2410
|
+
}
|
|
2411
|
+
function s(o) {
|
|
2412
|
+
for (var d = 0, c = 0; c < o.length; ++c)
|
|
2413
|
+
var g = o[c];
|
|
2414
|
+
return d;
|
|
2415
|
+
}
|
|
2416
|
+
function r(o, d) {
|
|
2417
|
+
if (A(d == 2 || d == 4), d == 4) return new Uint32Array(o.buffer, o.byteOffset, o.byteLength / 4);
|
|
2418
|
+
var c = new Uint16Array(o.buffer, o.byteOffset, o.byteLength / 2);
|
|
2419
|
+
return new Uint32Array(c);
|
|
2420
|
+
}
|
|
2421
|
+
function b(o, d, c, g, l, h, f) {
|
|
2422
|
+
var I = n.exports.sbrk, B = I(c * g), u = I(c * h), E = new Uint8Array(n.exports.memory.buffer);
|
|
2423
|
+
E.set(t(d), u), o(B, c, g, l, u, f);
|
|
2424
|
+
var C = new Uint8Array(c * g);
|
|
2425
|
+
return C.set(E.subarray(B, B + c * g)), I(B - I(0)), C;
|
|
2426
|
+
}
|
|
2427
|
+
})();
|
|
2428
|
+
var BA = function() {
|
|
2429
|
+
var n = 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]), e = 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") return { supported: !1 };
|
|
2431
|
+
var a, A = WebAssembly.validate(n) ? "b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuikqbbebeedddilve9Weeeviebeoweuec:q;Aekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbwl79IV9RbDq;b9tqlbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk;e8JlHud97euo978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Rad;8qbbcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhwcbhDinaDae9pmeawaeaD9RaDawfae6Egqcsfgoc9WGgkci2hxakcethmaocl4cifcd4hPabaDad2fhscbhzdnincbhHalhOcbhAdninaraO9RaP6miavcj;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:yjjbfRbbfhlxekaXalpbbbpklbalczfhlkaocdfhoaiczfgiak6mbkkalTmbaAcd0hHalhOaAcefgAclSmdxekkcbhlaHceGTmdkdnakTmbavcjdfazfhiavazfpbdbhYcbhXinaiavcj;cbfaXfgopblbgLcep9TaLpxeeeeeeeeeeeeeeeegQp9op9Hp9rgLaoakfpblbg8Acep9Ta8AaQp9op9Hp9rg8ApmbzeHdOiAlCvXoQrLgEaoamfpblbg3cep9Ta3aQp9op9Hp9rg3aoaxfpblbg5cep9Ta5aQp9op9Hp9rg5pmbzeHdOiAlCvXoQrLg8EpmbezHdiOAlvCXorQLgQaQpmbedibedibedibediaYp9UgYp9AdbbaiadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaEa8EpmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwKDYq8AkEx3m5P8Es8FgLa3a5pmwKDYq8AkEx3m5P8Es8Fg8ApmbezHdiOAlvCXorQLgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfhiaXczfgXak6mbkkazclfgzad6mbkasavcjdfaqad2;8qbbavavcjdfaqcufad2fad;8qbbaqaDfhDc9:hoalmexikkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;kbf8Kjjjjbaokwbz:bjjjbk;tzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecje;8kbavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhrcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgDc;Ve0mbavc;abfalaDcu7gPcl4fcsGcitfgsydlhzasydbhHdnaDcsGgDak9pmbavaiaPfcsGcdtfydbaxaDEhsaDThDdndnadcd9hmbabarcetfgPaH87ebaPcdfaz87ebaPclfas87ebxekabarcdtfgPaHBdbaPclfazBdbaPcwfasBdbkaxaDfhxavc;abfalcitfgPasBdbaPazBdlavaicdtfasBdbavc;abfalcefcsGglcitfgPaHBdbaPasBdlaiaDfhialcefhlxdkdndnaDcsSmbamaDfaDc987fcefhmxekaocefhDao8SbbgscFeGhPdndnascu9mmbaDhoxekaocvfhoaPcFbGhPcrhsdninaD8SbbgOcFbGastaPVhPaOcu9kmeaDcefhDascrfgsc8J9hmbxdkkaDcefhokaPce4cbaPceG9R7amfhmkdndnadcd9hmbabarcetfgDaH87ebaDcdfaz87ebaDclfam87ebxekabarcdtfgDaHBdbaDclfazBdbaDcwfamBdbkavc;abfalcitfgDamBdbaDazBdlavaicdtfamBdbavc;abfalcefcsGglcitfgDaHBdbaDamBdlaicefhialcefhlxekdnaDcpe0mbaxcefgOavaiaqaDcsGfRbbgscl49RcsGcdtfydbascz6gPEhDavaias9RcsGcdtfydbaOaPfgzascsGgOEhsaOThOdndnadcd9hmbabarcetfgHax87ebaHcdfaD87ebaHclfas87ebxekabarcdtfgHaxBdbaHclfaDBdbaHcwfasBdbkavaicdtfaxBdbavc;abfalcitfgHaDBdbaHaxBdlavaicefgicsGcdtfaDBdbavc;abfalcefcsGcitfgHasBdbaHaDBdlavaiaPfcsGgicdtfasBdbavc;abfalcdfcsGglcitfgDaxBdbaDasBdlalcefhlaiaOfhiazaOfhxxekaxcbaoRbbgHEgAaDc;:eSgDfhzaHcsGhCaHcl4hXdndnaHcs0mbazcefhOxekazhOavaiaX9RcsGcdtfydbhzkdndnaCmbaOcefhxxekaOhxavaiaH9RcsGcdtfydbhOkdndnaDTmbaocefhDxekaocdfhDao8SbegPcFeGhsdnaPcu9kmbaocofhAascFbGhscrhodninaD8SbbgPcFbGaotasVhsaPcu9kmeaDcefhDaocrfgoc8J9hmbkaAhDxekaDcefhDkasce4cbasceG9R7amfgmhAkdndnaXcsSmbaDhsxekaDcefhsaD8SbbgocFeGhPdnaocu9kmbaDcvfhzaPcFbGhPcrhodninas8SbbgDcFbGaotaPVhPaDcu9kmeascefhsaocrfgoc8J9hmbkazhsxekascefhskaPce4cbaPceG9R7amfgmhzkdndnaCcsSmbashoxekascefhoas8SbbgDcFeGhPdnaDcu9kmbascvfhOaPcFbGhPcrhDdninao8SbbgscFbGaDtaPVhPascu9kmeaocefhoaDcrfgDc8J9hmbkaOhoxekaocefhokaPce4cbaPceG9R7amfgmhOkdndnadcd9hmbabarcetfgDaA87ebaDcdfaz87ebaDclfaO87ebxekabarcdtfgDaABdbaDclfazBdbaDcwfaOBdbkavc;abfalcitfgDazBdbaDaABdlavaicdtfaABdbavc;abfalcefcsGcitfgDaOBdbaDazBdlavaicefgicsGcdtfazBdbavc;abfalcdfcsGcitfgDaABdbaDaOBdlavaiaHcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiarcifgrae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:flevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:wPliuo97eue978Jjjjjbca9Rhiaec98Ghldndnadcl9hmbdnalTmbcbhvabhdinadadpbbbgocKp: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:RepxbbFbbbFbbbFbbbFbp9op9qpkbbadczfhdavclfgval6mbkkalae9pmeaipxbbbbbbbbbbbbbbbbgqpklbaiabalcdtfgdaeciGglcdtgv;8qbbdnalTmbaiaipblbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDaqp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpklbkadaiav;8qbbskdnalTmbcbhvabhdinadczfgxaxpbbbgopxbbbbbbFFbbbbbbFFgkp9oadpbbbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;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;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpkbbadaDakp9oawaopmbezHdiOAlvCXorQLp9qpkbbadcafhdavclfgval6mbkkalae9pmbaiaeciGgvcitgdfcbcaad9R;8kbaiabalcitfglad;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;ab9Rhidnadcd4ae2glc98GgvTmbcbheabhdinadadpbbbgocwp:Recwp:Sep;6eaocep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepkbbadczfhdaeclfgeav6mbkkdnaval9pmbaialciGgecdtgdVcbc;abad9R;8kbaiabavcdtfgvad;8qbbdnaeTmbaiaipblbgocwp:Recwp:Sep;6eaocep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepklbkavaiad;8qbbkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkkebcjwklz9Tbb" : "b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuikqbeeedddillviebeoweuec:q;iekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbol79IV9Rbrq;d8Yqdbk:yzeHu8Jjjjjbcj;eb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Radz1jjjbhwcj;abad9UhlaicefhodnadTmbalc;WFbGglcjdalcjd6EhDcbhqinaqae9pmeaDaeaq9RaqaDfae6Egkcsfglcl4cifcd4hxdndndndnalc9WGgmTmbcbhPcehsawcjdfhzaohHinaraH9Rax6midnaraHaxfgo9RcK6mbczhlcbhOinalgic9WfgAawcj;cbffhldndndndndnaHaAco4fRbbaOcoG4ciGPlbedibkal9cb83ibalcwf9cb83ibxikalaoRblaoRbbgAco4gCaCciSgCE86bbawcj;cbfaifglcGfaoclfaCfgCRbbaAcl4ciGgXaXciSgXE86bbalcVfaCaXfgCRbbaAcd4ciGgXaXciSgXE86bbalc7faCaXfgCRbbaAciGgAaAciSgAE86bbalctfaCaAfgCRbbaoRbegAco4gXaXciSgXE86bbalc91faCaXfgCRbbaAcl4ciGgXaXciSgXE86bbalc4faCaXfgCRbbaAcd4ciGgXaXciSgXE86bbalc93faCaXfgCRbbaAciGgAaAciSgAE86bbalc94faCaAfgCRbbaoRbdgAco4gXaXciSgXE86bbalc95faCaXfgCRbbaAcl4ciGgXaXciSgXE86bbalc96faCaXfgCRbbaAcd4ciGgXaXciSgXE86bbalc97faCaXfgCRbbaAciGgAaAciSgAE86bbalc98faCaAfgARbbaoRbigoco4gCaCciSgCE86bbalc99faAaCfgARbbaocl4ciGgCaCciSgCE86bbalc9:faAaCfgARbbaocd4ciGgCaCciSgCE86bbalcufaAaCfglRbbaociGgoaociSgoE86bbalaofhoxdkalaoRbwaoRbbgAcl4gCaCcsSgCE86bbawcj;cbfaifglcGfaocwfaCfgCRbbaAcsGgAaAcsSgAE86bbalcVfaCaAfgARbbaoRbegCcl4gXaXcsSgXE86bbalc7faAaXfgARbbaCcsGgCaCcsSgCE86bbalctfaAaCfgARbbaoRbdgCcl4gXaXcsSgXE86bbalc91faAaXfgARbbaCcsGgCaCcsSgCE86bbalc4faAaCfgARbbaoRbigCcl4gXaXcsSgXE86bbalc93faAaXfgARbbaCcsGgCaCcsSgCE86bbalc94faAaCfgARbbaoRblgCcl4gXaXcsSgXE86bbalc95faAaXfgARbbaCcsGgCaCcsSgCE86bbalc96faAaCfgARbbaoRbvgCcl4gXaXcsSgXE86bbalc97faAaXfgARbbaCcsGgCaCcsSgCE86bbalc98faAaCfgARbbaoRbogCcl4gXaXcsSgXE86bbalc99faAaXfgARbbaCcsGgCaCcsSgCE86bbalc9:faAaCfgARbbaoRbrgocl4gCaCcsSgCE86bbalcufaAaCfglRbbaocsGgoaocsSgoE86bbalaofhoxekalao8Pbb83bbalcwfaocwf8Pbb83bbaoczfhokdnaiam9pmbaOcdfhOaiczfhlarao9RcL0mekkaiam6miaoTmidnakTmbawaPfRbbhOawcj;cbfhlazhiakhAinaialRbbgHce4cbaHceG9R7aOfgO86bbaiadfhialcefhlaAcufgAmbkkazcefhzaPcefgPad6hsaohHaPad9hmexvkkcbhoasceGmdxikaoaxad2fhXdnakTmbcbhmcehsawcjdfhCinarao9Rax6miaoTmdaoaxfhoawamfRbbhOawcj;cbfhlaChiakhAinaialRbbgHce4cbaHceG9R7aOfgO86bbaiadfhialcefhlaAcufgAmbkaCcefhCamcefgmad6hsamad9hmbkaXhoxikcbhlcehsinarao9Rax6mdaoTmeaoaxfhoalcefglad6hsadal9hmbkaXhoxdkcbhoasceGTmekc9:hoxikabaqad2fawcjdfakad2z1jjjb8Aawawcjdfakcufad2fadz1jjjb8Aakaqfhqaombkc9:hoxekcbc99arao9Radcaadca0ESEhokavcj;ebf8Kjjjjbaok;xzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecjez:jjjjb8AavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhrcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgDc;Ve0mbavc;abfalaDcu7gPcl4fcsGcitfgsydlhzasydbhHdnaDcsGgDak9pmbavaiaPfcsGcdtfydbaxaDEhsaDThDdndnadcd9hmbabarcetfgPaH87ebaPcdfaz87ebaPclfas87ebxekabarcdtfgPaHBdbaPclfazBdbaPcwfasBdbkaxaDfhxavc;abfalcitfgPasBdbaPazBdlavaicdtfasBdbavc;abfalcefcsGglcitfgPaHBdbaPasBdlaiaDfhialcefhlxdkdndnaDcsSmbamaDfaDc987fcefhmxekaocefhDao8SbbgscFeGhPdndnascu9mmbaDhoxekaocvfhoaPcFbGhPcrhsdninaD8SbbgOcFbGastaPVhPaOcu9kmeaDcefhDascrfgsc8J9hmbxdkkaDcefhokaPce4cbaPceG9R7amfhmkdndnadcd9hmbabarcetfgDaH87ebaDcdfaz87ebaDclfam87ebxekabarcdtfgDaHBdbaDclfazBdbaDcwfamBdbkavc;abfalcitfgDamBdbaDazBdlavaicdtfamBdbavc;abfalcefcsGglcitfgDaHBdbaDamBdlaicefhialcefhlxekdnaDcpe0mbaxcefgOavaiaqaDcsGfRbbgscl49RcsGcdtfydbascz6gPEhDavaias9RcsGcdtfydbaOaPfgzascsGgOEhsaOThOdndnadcd9hmbabarcetfgHax87ebaHcdfaD87ebaHclfas87ebxekabarcdtfgHaxBdbaHclfaDBdbaHcwfasBdbkavaicdtfaxBdbavc;abfalcitfgHaDBdbaHaxBdlavaicefgicsGcdtfaDBdbavc;abfalcefcsGcitfgHasBdbaHaDBdlavaiaPfcsGgicdtfasBdbavc;abfalcdfcsGglcitfgDaxBdbaDasBdlalcefhlaiaOfhiazaOfhxxekaxcbaoRbbgHEgAaDc;:eSgDfhzaHcsGhCaHcl4hXdndnaHcs0mbazcefhOxekazhOavaiaX9RcsGcdtfydbhzkdndnaCmbaOcefhxxekaOhxavaiaH9RcsGcdtfydbhOkdndnaDTmbaocefhDxekaocdfhDao8SbegPcFeGhsdnaPcu9kmbaocofhAascFbGhscrhodninaD8SbbgPcFbGaotasVhsaPcu9kmeaDcefhDaocrfgoc8J9hmbkaAhDxekaDcefhDkasce4cbasceG9R7amfgmhAkdndnaXcsSmbaDhsxekaDcefhsaD8SbbgocFeGhPdnaocu9kmbaDcvfhzaPcFbGhPcrhodninas8SbbgDcFbGaotaPVhPaDcu9kmeascefhsaocrfgoc8J9hmbkazhsxekascefhskaPce4cbaPceG9R7amfgmhzkdndnaCcsSmbashoxekascefhoas8SbbgDcFeGhPdnaDcu9kmbascvfhOaPcFbGhPcrhDdninao8SbbgscFbGaDtaPVhPascu9kmeaocefhoaDcrfgDc8J9hmbkaOhoxekaocefhokaPce4cbaPceG9R7amfgmhOkdndnadcd9hmbabarcetfgDaA87ebaDcdfaz87ebaDclfaO87ebxekabarcdtfgDaABdbaDclfazBdbaDcwfaOBdbkavc;abfalcitfgDazBdbaDaABdlavaicdtfaABdbavc;abfalcefcsGcitfgDaOBdbaDazBdlavaicefgicsGcdtfazBdbavc;abfalcdfcsGcitfgDaABdbaDaOBdlavaiaHcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiarcifgrae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:flevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok: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:OhDxekcjjjj94hDkalclf8Uebhqalcdf8UebhkabaiavcefciGfcetfaD87ebdndnaoak:YNgwJb;:FSNJbbbZJbbb:;awJbbbb9GEMgx:lJbbb9p9DTmbax:Ohkxekcjjjj94hkkabaiavcdfciGfcetfak87ebdndnaoaq:YNgoJb;:FSNJbbbZJbbb:;aoJbbbb9GEMgx:lJbbb9p9DTmbax:Ohqxekcjjjj94hqkabaiavcufciGfcetfaq87ebdndnJbbjZararN:tawawN:taoaoN:tgrJbbbbarJbbbb9GE:rJb;:FSNJbbbZMgr:lJbbb9p9DTmbar:Ohqxekcjjjj94hqkabaiavciGfcetfaq87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2gdTmbinababydbgecwtcw91:Yaece91cjjj98Gcjjj;8if::NUdbabclfhbadcufgdmbkkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkkkebcjwklz9Kbb", t = WebAssembly.instantiate(i(A), {}).then(function(l) {
|
|
2432
|
+
(a = l.instance).exports.__wasm_call_ctors();
|
|
2433
|
+
});
|
|
2434
|
+
function i(l) {
|
|
2435
|
+
for (var h = new Uint8Array(l.length), f = 0; f < l.length; ++f) {
|
|
2436
|
+
var I = l.charCodeAt(f);
|
|
2437
|
+
h[f] = I > 96 ? I - 97 : I > 64 ? I - 39 : I + 4;
|
|
2438
|
+
}
|
|
2439
|
+
var B = 0;
|
|
2440
|
+
for (f = 0; f < l.length; ++f) h[B++] = h[f] < 60 ? e[h[f]] : 64 * (h[f] - 60) + h[++f];
|
|
2441
|
+
return h.buffer.slice(0, B);
|
|
2442
|
+
}
|
|
2443
|
+
function s(l, h, f, I, B, u, E) {
|
|
2444
|
+
var C = l.exports.sbrk, D = I + 3 & -4, y = C(D * B), w = C(u.length), p = new Uint8Array(l.exports.memory.buffer);
|
|
2445
|
+
p.set(u, w);
|
|
2446
|
+
var Q = h(y, I, B, w, u.length);
|
|
2447
|
+
if (Q == 0 && E && E(y, D, B), f.set(p.subarray(y, y + I * B)), C(y - C(0)), Q != 0) throw new Error("Malformed buffer data: " + Q);
|
|
2448
|
+
}
|
|
2449
|
+
var r = { NONE: "", OCTAHEDRAL: "meshopt_decodeFilterOct", QUATERNION: "meshopt_decodeFilterQuat", EXPONENTIAL: "meshopt_decodeFilterExp" }, b = { ATTRIBUTES: "meshopt_decodeVertexBuffer", TRIANGLES: "meshopt_decodeIndexBuffer", INDICES: "meshopt_decodeIndexSequence" }, o = [], d = 0;
|
|
2450
|
+
function c(l) {
|
|
2451
|
+
var h = { object: new Worker(l), pending: 0, requests: {} };
|
|
2452
|
+
return h.object.onmessage = function(f) {
|
|
2453
|
+
var I = f.data;
|
|
2454
|
+
h.pending -= I.count, h.requests[I.id][I.action](I.value), delete h.requests[I.id];
|
|
2455
|
+
}, h;
|
|
2456
|
+
}
|
|
2457
|
+
function g(l) {
|
|
2458
|
+
var h = l.data;
|
|
2459
|
+
if (!h.id) return self.close();
|
|
2460
|
+
self.ready.then(function(f) {
|
|
2461
|
+
try {
|
|
2462
|
+
var I = new Uint8Array(h.count * h.size);
|
|
2463
|
+
s(f, f.exports[h.mode], I, h.count, h.size, h.source, f.exports[h.filter]), self.postMessage({ id: h.id, count: h.count, action: "resolve", value: I }, [I.buffer]);
|
|
2464
|
+
} catch (B) {
|
|
2465
|
+
self.postMessage({ id: h.id, count: h.count, action: "reject", value: B });
|
|
2466
|
+
}
|
|
2467
|
+
});
|
|
2468
|
+
}
|
|
2469
|
+
return { ready: t, supported: !0, useWorkers: function(l) {
|
|
2470
|
+
(function(h) {
|
|
2471
|
+
for (var f = "self.ready = WebAssembly.instantiate(new Uint8Array([" + new Uint8Array(i(A)) + "]), {}).then(function(result) { result.instance.exports.__wasm_call_ctors(); return result.instance; });self.onmessage = " + g.name + ";" + s.toString() + g.toString(), I = new Blob([f], { type: "text/javascript" }), B = URL.createObjectURL(I), u = o.length; u < h; ++u) o[u] = c(B);
|
|
2472
|
+
for (u = h; u < o.length; ++u) o[u].object.postMessage({});
|
|
2473
|
+
o.length = h, URL.revokeObjectURL(B);
|
|
2474
|
+
})(l);
|
|
2475
|
+
}, decodeVertexBuffer: function(l, h, f, I, B) {
|
|
2476
|
+
s(a, a.exports.meshopt_decodeVertexBuffer, l, h, f, I, a.exports[r[B]]);
|
|
2477
|
+
}, decodeIndexBuffer: function(l, h, f, I) {
|
|
2478
|
+
s(a, a.exports.meshopt_decodeIndexBuffer, l, h, f, I);
|
|
2479
|
+
}, decodeIndexSequence: function(l, h, f, I) {
|
|
2480
|
+
s(a, a.exports.meshopt_decodeIndexSequence, l, h, f, I);
|
|
2481
|
+
}, decodeGltfBuffer: function(l, h, f, I, B, u) {
|
|
2482
|
+
s(a, a.exports[b[B]], l, h, f, I, a.exports[r[u]]);
|
|
2483
|
+
}, decodeGltfBufferAsync: function(l, h, f, I, B) {
|
|
2484
|
+
return o.length > 0 ? function(u, E, C, D, y) {
|
|
2485
|
+
for (var w = o[0], p = 1; p < o.length; ++p) o[p].pending < w.pending && (w = o[p]);
|
|
2486
|
+
return new Promise(function(Q, k) {
|
|
2487
|
+
var x = new Uint8Array(C), R = ++d;
|
|
2488
|
+
w.pending += u, w.requests[R] = { resolve: Q, reject: k }, w.object.postMessage({ id: R, count: u, size: E, source: x, mode: D, filter: y }, [x.buffer]);
|
|
2489
|
+
});
|
|
2490
|
+
}(l, h, f, b[I], r[B]) : t.then(function() {
|
|
2491
|
+
var u = new Uint8Array(l * h);
|
|
2492
|
+
return s(a, a.exports[b[I]], u, l, h, f, a.exports[r[B]]), u;
|
|
2493
|
+
});
|
|
2494
|
+
} };
|
|
2495
|
+
}();
|
|
2496
|
+
(function() {
|
|
2497
|
+
var n, e = 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]);
|
|
2498
|
+
if (typeof WebAssembly != "object") return { supported: !1 };
|
|
2499
|
+
var a = WebAssembly.instantiate(function(r) {
|
|
2500
|
+
for (var b = new Uint8Array(r.length), o = 0; o < r.length; ++o) {
|
|
2501
|
+
var d = r.charCodeAt(o);
|
|
2502
|
+
b[o] = d > 96 ? d - 97 : d > 64 ? d - 39 : d + 4;
|
|
2503
|
+
}
|
|
2504
|
+
var c = 0;
|
|
2505
|
+
for (o = 0; o < r.length; ++o) b[c++] = b[o] < 60 ? e[b[o]] : 64 * (b[o] - 60) + b[++o];
|
|
2506
|
+
return b.buffer.slice(0, c);
|
|
2507
|
+
}("b9H79Tebbbe9Ek9Geueu9Geub9Gbb9GPuuuuuuuuuuu99uueu9Gvuuuuub9Gluuuub9Gquuuuuuu99uueu9Gwuuuuuu99ueu9Giuuue999Gluuuueu9GiuuueuizsdilvoirwDbqqbeqlve9Weiiviebeoweuec:G;jekr:Tewo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bbz9TW79O9V9Wt9F79P9T9W29P9M95bl8E9TW79O9V9Wt9F79P9T9W29P9M959x9Pt9OcttV9P9I91tW7bvQ9TW79O9V9Wt9F79P9T9W29P9M959q9V9P9Ut7boX9TW79O9V9Wt9F79P9T9W29P9M959t9J9H2Wbra9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94SWt9J9O9sW9T9H9Wbwl79IV9RbDDwebcekdxmq::9Usdbk;i6iKuY99Ou8Jjjjjbc;W;ab9RgP8KjjjjbaPcwfcbc;Kbz:ljjjb8AaPcualcefgscdtascFFFFi0Ecbyd1:jjjbHjjjjbbgzBdwaPceBd9OaPazBdbaPcuadcitadcFFFFe0Ecbyd1:jjjbHjjjjbbgHBdxaPcdBd9OaPaHBdlaPaeadalcbz:cjjjbaPcualcdtgOalcFFFFi0EgAcbyd1:jjjbHjjjjbbgCBdzaPciBd9OaPaAcbyd1:jjjbHjjjjbbgXBdCaPclBd9Oalcd4alfhQcehLinaLgscethLasaQ6mbkcbhKaPcuascdtgLascFFFFi0Ecbyd1:jjjbHjjjjbbgQBdKaPcvBd9OaQcFeaLz:ljjjbhYdnalTmbavcd4h8AascufhEinaiaKa8A2cdtfg3ydlgscH4as7c:F:b:DD2a3ydbgscH4as7c;D;O:B8J27a3ydwgscH4as7c:3F;N8N27hQcbhsdndninaYaQaEGgQcdtfg5ydbgLcuSmeaiaLa8A2cdtfa3cxz:ojjjbTmdascefgsaQfhQasaE9nmbxdkka5aKBdbaKhLkaCaKcdtfaLBdbaKcefgKal9hmbkcbhsaXhLinaLasBdbaLclfhLalascefgs9hmbkcbhsaChLaXhQindnasaLydbgESmbaQaXaEcdtfgEydbBdbaEasBdbkaLclfhLaQclfhQalascefgs9hmbkkcbh8EaYcbyd:m:jjjbH:bjjjbbaPclBd9OaPalcbyd1:jjjbHjjjjbbgEBdKaPcvBd9OaPaAcbyd1:jjjbHjjjjbbgsBd3aPcoBd9OaPaAcbyd1:jjjbHjjjjbbgLBdaaPcrBd9OascFeaOz:ljjjbh8FaLcFeaOz:ljjjbhadnalTmbaHcwfhhindnaza8EgQcefg8Ecdtfydbg3azaQcdtgsfydbgLSmba3aL9RhOaHaLcitfhgaaasfh8Ja8FasfhKcbh8Aindndnaga8Acitfydbg5aQ9hmbaKaQBdba8JaQBdbxekdnaza5cdtg8KfgsclfydbgLasydbgsSmbaHascitg3fydbaQSmeaLas9Rh8Lascu7aLfhYaha3fhLcbhsinaYasSmeascefhsaLydbh3aLcwfhLa3aQ9hmbkasa8L6mekaaa8KfgsaQa5asydbcuSEBdbaKa5aQaKydbcuSEBdbka8Acefg8AaO9hmbkka8Eal9hmbkaChLaXhQaah3a8Fh8AcbhsindndnasaLydbg59hmbdnasaQydbg59hmba8Aydbh5dna3ydbgYcu9hmba5cu9hmbaEasfcb86bbxikaEasfhKdnasaYSmbasa5SmbaKce86bbxikaKcl86bbxdkdnasaXa5cdtgYfydb9hmbdna3ydbgKcuSmbasaKSmba8AydbgOcuSmbasaOSmbaaaYfydbggcuSmbaga5Smba8FaYfydbgYcuSmbaYa5SmbdnaCaKcdtfydbaCaYcdtfydb9hmbaCaOcdtfydbaCagcdtfydb9hmbaEasfcd86bbxlkaEasfcl86bbxikaEasfcl86bbxdkaEasfcl86bbxekaEasfaEa5fRbb86bbkaLclfhLaQclfhQa3clfh3a8Aclfh8Aalascefgs9hmbkaxceGTmbaEhsalhLindnasRbbce9hmbascl86bbkascefhsaLcufgLmbkkcualcx2alc;v:Q;v:Qe0Ecbyd1:jjjbHjjjjbbh8JaPcwfaPyd9Ogscdtfa8JBdbaPascefgOBd9Oa8Jaialavz:djjjbdndnaDmbcbhvxekcbh5aPcwfaOcdtfcuaDal2gLcdtaLcFFFFi0Ecbyd1:jjjbHjjjjbbgvBdbaPascdfgOBd9OalTmbarcd4cdthYaDcdthKavh8AinaohsawhLa8AhQaDh3inaQasIdbaLIdbNUdbasclfhsaLclfhLaQclfhQa3cufg3mbkaoaYfhoa8AaKfh8Aa5cefg5al9hmbkkaPcwfaOcdtfcualc8S2gsalc;D;O;f8U0EgQcbyd1:jjjbHjjjjbbgLBdbaPaOcefg3Bd9OaLcbasz:ljjjbh8EdndndnaDTmbaPcwfa3cdtfaQcbyd1:jjjbHjjjjbbgoBdbaPaOcdfgLBd9Oaocbasz:ljjjb8AaPcwfaLcdtfcuaDal2gscltgLascFFFFb0Ecbyd1:jjjbHjjjjbbgwBdbaPaOcifBd9OawcbaLz:ljjjb8AadmexdkcbhocbhwadTmekcbh8AaehLindna8JaLclfydbg5cx2fgsIdba8JaLydbgYcx2fgQIdbg8M:tg8Na8JaLcwfydbgKcx2fg3IdlaQIdlgy:tg8PNa3Idba8M:tgIasIdlay:tg8RN:tg8Sa8SNa8Ra3IdwaQIdwgR:tg8UNa8PasIdwaR:tg8RN:tg8Pa8PNa8RaINa8Ua8NN:tg8Na8NNMM:rgIJbbbb9ETmba8SaI:vh8Sa8NaI:vh8Na8PaI:vh8Pka8EaCaYcdtfydbc8S2fgsa8PaI:rgIa8PNNg8RasIdbMUdbasa8NaIa8NNg8VNg8UasIdlMUdlasa8SaIa8SNg8WNg8XasIdwMUdwasa8Va8PNg8VasIdxMUdxasa8Wa8PNg8YasIdzMUdzasa8Wa8NNg8WasIdCMUdCasa8PaIa8SaRNa8Pa8MNaya8NNMM:mgyNg8MNg8PasIdKMUdKasa8Na8MNg8NasId3MUd3asa8Sa8MNg8SasIdaMUdaasa8MayNg8MasId8KMUd8KasaIasIdyMUdya8EaCa5cdtfydbc8S2fgsa8RasIdbMUdbasa8UasIdlMUdlasa8XasIdwMUdwasa8VasIdxMUdxasa8YasIdzMUdzasa8WasIdCMUdCasa8PasIdKMUdKasa8NasId3MUd3asa8SasIdaMUdaasa8MasId8KMUd8KasaIasIdyMUdya8EaCaKcdtfydbc8S2fgsa8RasIdbMUdbasa8UasIdlMUdlasa8XasIdwMUdwasa8VasIdxMUdxasa8YasIdzMUdzasa8WasIdCMUdCasa8PasIdKMUdKasa8NasId3MUd3asa8SasIdaMUdaasa8MasId8KMUd8KasaIasIdyMUdyaLcxfhLa8Acifg8Aad6mbkcbh5aehYincbhLinaEaeaLc:G1jjbfydba5fcdtfydbgQfRbbhsdndnaEaYaLfydbg3fRbbg8Ac99fcFeGcpe0mbasceSmbascd9hmekdna8AcufcFeGce0mba8Fa3cdtfydbaQ9hmekdnascufcFeGce0mbaaaQcdtfydba39hmekdna8Acv2asfc:W1jjbfRbbTmbaCaQcdtfydbaCa3cdtfydb0mekJbbacJbbjZasceSEhIa8AceShOa8JaeaLc:K1jjbfydba5fcdtfydbcx2fhsdna8JaQcx2fg8AIdwa8Ja3cx2fgKIdwgy:tg8Pa8PNa8AIdbaKIdbgR:tg8Na8NNa8AIdlaKIdlg8R:tg8Sa8SNMM:rg8MJbbbb9ETmba8Pa8M:vh8Pa8Sa8M:vh8Sa8Na8M:vh8NkJbbacaIaOEh8WdnasIdway:tgIa8PaIa8PNasIdbaR:tg8Xa8NNa8SasIdla8R:tg8VNMMg8UN:tgIaINa8Xa8Na8UN:tg8Pa8PNa8Va8Sa8UN:tg8Na8NNMM:rg8SJbbbb9ETmbaIa8S:vhIa8Na8S:vh8Na8Pa8S:vh8Pka8EaCa3cdtfydbc8S2fgsa8Pa8Wa8MNg8Sa8PNNg8UasIdbMUdbasa8Na8Sa8NNg8WNg8XasIdlMUdlasaIa8SaINg8MNg8VasIdwMUdwasa8Wa8PNg8WasIdxMUdxasa8Ma8PNg8YasIdzMUdzasa8Ma8NNg8ZasIdCMUdCasa8Pa8SaIayNa8PaRNa8Ra8NNMM:mgyNg8MNg8PasIdKMUdKasa8Na8MNg8NasId3MUd3asaIa8MNgIasIdaMUdaasa8MayNg8MasId8KMUd8Kasa8SasIdyMUdya8EaCaQcdtfydbc8S2fgsa8UasIdbMUdbasa8XasIdlMUdlasa8VasIdwMUdwasa8WasIdxMUdxasa8YasIdzMUdzasa8ZasIdCMUdCasa8PasIdKMUdKasa8NasId3MUd3asaIasIdaMUdaasa8MasId8KMUd8Kasa8SasIdyMUdykaLclfgLcx9hmbkaYcxfhYa5cifg5ad6mbkaDTmbcbhYinJbbbbhRa8JaeaYcdtfgsclfydbgKcx2fgLIdwa8JasydbgOcx2fgQIdwg8V:tg8Na8NNaLIdbaQIdbg8Y:tgIaINaLIdlaQIdlg8Z:tg8Sa8SNMMg8Wa8Jascwfydbggcx2fgsIdwa8V:tg8MNa8Na8Na8MNaIasIdba8Y:tgyNa8SasIdla8Z:tg8RNMMg8PN:tJbbbbJbbjZa8Wa8Ma8MNayayNa8Ra8RNMMg8XNa8Pa8PN:tg8U:va8UJbbbb9BEg8UNh80a8Xa8NNa8Ma8PN:ta8UNh81a8Wa8RNa8Sa8PN:ta8UNhBa8Xa8SNa8Ra8PN:ta8UNh83a8WayNaIa8PN:ta8UNhUa8XaINaya8PN:ta8UNh85aIa8RNaya8SN:tg8Pa8PNa8Sa8MNa8Ra8NN:tg8Pa8PNa8NayNa8MaIN:tg8Pa8PNMM:r:rh8PavaOaD2cdtfhLavagaD2cdtfhQavaKaD2cdtfh3a8V:mh86a8Z:mh87a8Y:mh88cbh8AaDh5Jbbbbh8RJbbbbh8UJbbbbh8WJbbbbh8XJbbbbh8VJbbbbh8YJbbbbh8ZJbbbbh89Jbbbbh8:inaPc;Wbfa8Afgscwfa8Pa81a3IdbaLIdbg8M:tg8SNa80aQIdba8M:tgyNMg8NNUdbasclfa8Pa83a8SNaBayNMgINUdbasa8Pa85a8SNaUayNMg8SNUdbascxfa8Pa86a8NNa87aINa8Ma88a8SNMMMg8MNUdba8Pa8NaINNa8XMh8Xa8Pa8Na8SNNa8VMh8Va8PaIa8SNNa8YMh8Ya8Pa8Ma8MNNaRMhRa8Pa8Na8MNNa8RMh8Ra8PaIa8MNNa8UMh8Ua8Pa8Sa8MNNa8WMh8Wa8Pa8Na8NNNa8ZMh8Za8PaIaINNa89Mh89a8Pa8Sa8SNNa8:Mh8:aLclfhLa3clfh3aQclfhQa8Aczfh8Aa5cufg5mbkaoaCaOcdtfydbgLc8S2fgsa8:asIdbMUdbasa89asIdlMUdlasa8ZasIdwMUdwasa8YasIdxMUdxasa8VasIdzMUdzasa8XasIdCMUdCasa8WasIdKMUdKasa8UasId3MUd3asa8RasIdaMUdaasaRasId8KMUd8Kasa8PasIdyMUdyaoaCaKcdtfydbgKc8S2fgsa8:asIdbMUdbasa89asIdlMUdlasa8ZasIdwMUdwasa8YasIdxMUdxasa8VasIdzMUdzasa8XasIdCMUdCasa8WasIdKMUdKasa8UasId3MUd3asa8RasIdaMUdaasaRasId8KMUd8Kasa8PasIdyMUdyaoaCagcdtfydbgOc8S2fgsa8:asIdbMUdbasa89asIdlMUdlasa8ZasIdwMUdwasa8YasIdxMUdxasa8VasIdzMUdzasa8XasIdCMUdCasa8WasIdKMUdKasa8UasId3MUd3asa8RasIdaMUdaasaRasId8KMUd8Kasa8PasIdyMUdyawaLaD2cltfh5cbhLaDh3ina5aLfgsaPc;WbfaLfgQIdbasIdbMUdbasclfg8AaQclfIdba8AIdbMUdbascwfg8AaQcwfIdba8AIdbMUdbascxfgsaQcxfIdbasIdbMUdbaLczfhLa3cufg3mbkawaKaD2cltfh5cbhLaDh3ina5aLfgsaPc;WbfaLfgQIdbasIdbMUdbasclfg8AaQclfIdba8AIdbMUdbascwfg8AaQcwfIdba8AIdbMUdbascxfgsaQcxfIdbasIdbMUdbaLczfhLa3cufg3mbkawaOaD2cltfh5cbhLaDh3ina5aLfgsaPc;WbfaLfgQIdbasIdbMUdbasclfg8AaQclfIdba8AIdbMUdbascwfg8AaQcwfIdba8AIdbMUdbascxfgsaQcxfIdbasIdbMUdbaLczfhLa3cufg3mbkaYcifgYad6mbkkdnabaeSmbabaeadcdtz:kjjjb8AkaPydbhZcbhsdnalTmbaZclfhsaZydbh3aEhLalh8AcbhQincbasydbg5a39RaLRbbcpeGEaQfhQaLcefhLasclfhsa5h3a8Acufg8AmbkaQce4hskcuadas9Rcifgrcx2arc;v:Q;v:Qe0Ecbyd1:jjjbHjjjjbbh8LaPcwfaPyd9Ogscdtfa8LBdbaPascefgLBd9OaPcwfaLcdtfcuarcdtarcFFFFi0Ecbyd1:jjjbHjjjjbbgxBdbaPascdfgLBd9OaPcwfaLcdtfaAcbyd1:jjjbHjjjjbbgHBdbaPascifgLBd9OaPcwfaLcdtfalcbyd1:jjjbHjjjjbbgnBdbaPasclfBd9OJbbbbh8Ydnadaq9nmbdnarci6mbakakNh8VaDclthca8Lcwfh9cJbbbbh8YinaPabadghalaCz:cjjjbabhOcbhzcbhKincbhsindnaCaOasfydbgQcdtgYfydbg8AaCabasc;m1jjbfydbaKfcdtfydbgLcdtfydbg5SmbaEaLfRbbgecv2aEaQfRbbg3fc;G1jjbfRbbg8Ka3cv2aefggc;G1jjbfRbbgiVcFeGTmbdnagc:W1jjbfRbbTmba5a8A0mekdna3ae9hmba3cufcFeGce0mba8FaYfydbaL9hmeka8Lazcx2fg3aLaQaicFeGg8AEBdla3aQaLa8AEBdba3a8Aa8KGcb9hBdwazcefhzkasclfgscx9hmbkdnaKcifgKah9pmbaOcxfhOazcifar9nmekkdnazmbahhdxikcbheinJbbbbJbbjZa8EaCa8Laecx2fg3ydlg8Aa3ydbg5a3ydwgLEgKcdtfydbg8Kc8S2gifgsIdyg8P:va8PJbbbb9BEasIdwa8Ja5a8AaLEgYcx2fgLIdwg8SNasIdzaLIdbg8MNasIdaMg8Pa8PMMa8SNasIdlaLIdlgyNasIdCa8SNasId3Mg8Pa8PMMayNasIdba8MNasIdxayNasIdKMg8Pa8PMMa8MNasId8KMMM:lNh8WJbbbbJbbjZa8EaCa5cdtfydbgdc8S2gQfgsIdyg8P:va8PJbbbb9BEasIdwa8Ja8Acx2fgLIdwgINasIdzaLIdbgRNasIdaMg8Pa8PMMaINasIdlaLIdlg8RNasIdCaINasId3Mg8Pa8PMMa8RNasIdbaRNasIdxa8RNasIdKMg8Pa8PMMaRNasId8KMMM:lNh8Xa3cwfhOa3clfhgdnaDTmbaoaQfgQIdwaINaQIdzaRNaQIdaMg8Pa8PMMaINaQIdla8RNaQIdCaINaQId3Mg8Pa8PMMa8RNaQIdbaRNaQIdxa8RNaQIdKMg8Pa8PMMaRNaQId8KMMMh8Nava8AaD2cdtfhLawadaD2cltfhsaQIdyh8UaDhQinaLIdbg8PJbbb;aNascxfIdbaIascwfIdbNaRasIdbNa8RasclfIdbNMMMNa8Pa8PNa8UNa8NMMh8NaLclfhLasczfhsaQcufgQmbkaoaifgQIdwa8SNaQIdza8MNaQIdaMg8Pa8PMMa8SNaQIdlayNaQIdCa8SNaQId3Mg8Pa8PMMayNaQIdba8MNaQIdxayNaQIdKMg8Pa8PMMa8MNaQId8KMMMhIavaYaD2cdtfhLawa8KaD2cltfhsaQIdyhRaDhQinaLIdbg8PJbbb;aNascxfIdba8SascwfIdbNa8MasIdbNayasclfIdbNMMMNa8Pa8PNaRNaIMMhIaLclfhLasczfhsaQcufgQmbka8WaI:lMh8Wa8Xa8N:lMh8Xkaga8AaYa8Xa8W9FgsEBdba3a5aKasEBdbaOa8Xa8WasEUdbaecefgeaz9hmbkaPc;Wbfcbcj;abz:ljjjb8Aa9chsazhLinaPc;WbfasydbcO4c;8ZGfgQaQydbcefBdbascxfhsaLcufgLmbkcbhscbhLinaPc;WbfasfgQydbh3aQaLBdba3aLfhLasclfgscj;ab9hmbkcbhsa9chLinaPc;WbfaLydbcO4c;8ZGfgQaQydbgQcefBdbaxaQcdtfasBdbaLcxfhLazascefgs9hmbkahaq9RgQci9UhJdnalTmbcbhsaHhLinaLasBdbaLclfhLalascefgs9hmbkkcbh9eancbalz:ljjjbhTaQcO9UhSaJce4h9haPydlh9icbhicbhgdnina8Laxagcdtfydbcx2fgOIdwg8Na8V9EmeaiaJ9pmeJFFuuh8Pdna9haz9pmba8Laxa9hcdtfydbcx2fIdwJbb;aZNh8Pkdna8Na8P9ETmbaiaS0mdkdnaTaCaOydlg6cdtg9kfydbg3fg0RbbaTaCaOydbgKcdtg9mfydbg9nfg9oRbbVmbdnaZa9ncdtfgsclfydbgLasydbgsSmbaLas9Rh5a9iascitfhsa8Ja3cx2fgYcwfhdaYclfhAa8Ja9ncx2fg8Kcwfh9pa8Kclfh9qcbhLcehednindnaHasydbcdtfydbgQa3SmbaHasclfydbcdtfydbg8Aa3SmbaQa8ASmba8Ja8Acx2fg8AIdba8JaQcx2fgQIdbgI:tg8Pa9qIdbaQIdlg8S:tg8MNa8KIdbaI:tgya8AIdla8S:tg8NN:ta8PaAIdba8S:tgRNaYIdbaI:tg8Ra8NN:tNa8Na9pIdbaQIdwg8S:tg8UNa8Ma8AIdwa8S:tgIN:ta8NadIdba8S:tg8SNaRaIN:tNaIayNa8Ua8PN:taIa8RNa8Sa8PN:tNMMJbbbb9FmdkascwfhsaLcefgLa56hea5aL9hmbkkaeceGTmba9hcefh9hxeka8Ea3c8S2gQfgsa8Ea9nc8S2g8AfgLIdbasIdbMUdbasaLIdlasIdlMUdlasaLIdwasIdwMUdwasaLIdxasIdxMUdxasaLIdzasIdzMUdzasaLIdCasIdCMUdCasaLIdKasIdKMUdKasaLId3asId3MUd3asaLIdaasIdaMUdaasaLId8KasId8KMUd8KasaLIdyasIdyMUdydnaDTmbaoaQfgsaoa8AfgLIdbasIdbMUdbasaLIdlasIdlMUdlasaLIdwasIdwMUdwasaLIdxasIdxMUdxasaLIdzasIdzMUdzasaLIdCasIdCMUdCasaLIdKasIdKMUdKasaLId3asId3MUd3asaLIdaasIdaMUdaasaLId8KasId8KMUd8KasaLIdyasIdyMUdyaca9n2heaca32hYawhLaDh8AinaLaYfgsaLaefgQIdbasIdbMUdbasclfg5aQclfIdba5IdbMUdbascwfg5aQcwfIdba5IdbMUdbascxfgsaQcxfIdbasIdbMUdbaLczfhLa8Acufg8AmbkkaOcwfhLdndndndnaEaKfgQRbbc9:fPdebdkaKhsinaHascdtgsfa3BdbaXasfydbgsaK9hmbxikkaXa9kfydbhsaXa9mfydbhKaHa9mfa6Bdbash6kaHaKcdtfa6Bdbka9oce86bba0ce86bbaLIdbg8Pa8Ya8Ya8P9DEh8Ya9ecefh9ececdaQRbbceSEaifhikagcefggaz9hmbkkdna9embahhdxikdnalTmbcbhLa8FhsindnasydbgQcuSmbdnaLaHaQcdtg3fydbgQ9hmba8Fa3fydbhQkasaQBdbkasclfhsalaLcefgL9hmbkcbhLaahsindnasydbgQcuSmbdnaLaHaQcdtg3fydbgQ9hmbaaa3fydbhQkasaQBdbkasclfhsalaLcefgL9hmbkkcbhdabhscbh8AindnaHasydbcdtfydbgLaHasclfydbcdtfydbgQSmbaLaHascwfydbcdtfydbg3SmbaQa3Smbabadcdtfg5aLBdba5clfaQBdba5cwfa3Bdbadcifhdkascxfhsa8Acifg8Aah6mbkadaq9nmdxbkkaPabadalaCz:cjjjbkdnamTmbama8Y:rUdbkaPyd9OgscdtaPcwffc98fhCdninasTmeaCydbcbyd:m:jjjbH:bjjjbbaCc98fhCascufhsxbkkaPc;W;abf8Kjjjjbadk;:ieouabydlhvabydbclfcbaicdtz:ljjjbhoadci9UhrdnadTmbdnalTmbaehwadhDinaoalawydbcdtfydbcdtfgqaqydbcefBdbawclfhwaDcufgDmbxdkkaehwadhDinaoawydbcdtfgqaqydbcefBdbawclfhwaDcufgDmbkkdnaiTmbcbhDaohwinawydbhqawaDBdbawclfhwaqaDfhDaicufgimbkkdnadci6mbarcearce0EhdinaecwfydbhwaeclfydbhDaeydbhidnalTmbalawcdtfydbhwalaDcdtfydbhDalaicdtfydbhikavaoaicdtfgqydbcitfaDBdbavaqydbcitfawBdlaqaqydbcefBdbavaoaDcdtfgqydbcitfawBdbavaqydbcitfaiBdlaqaqydbcefBdbavaoawcdtfgwydbcitfaiBdbavawydbcitfaDBdlawawydbcefBdbaecxfheadcufgdmbkkabydbcbBdbk:Zldouv998Jjjjjbca9Rglczfcwfcbyd11jjbBdbalcb8Pdj1jjb83izalcwfcbydN1jjbBdbalcb8Pd:m1jjb83ibdnadTmbaicd4hvdnabTmbavcdthocbhraehwinabarcx2fgiaearav2cdtfgDIdbUdbaiaDIdlUdlaiaDIdwUdwcbhiinalczfaifgDawaifIdbgqaDIdbgkakaq9EEUdbalaifgDaqaDIdbgkakaq9DEUdbaiclfgicx9hmbkawaofhwarcefgrad9hmbxdkkavcdthrcbhwincbhiinalczfaifgDaeaifIdbgqaDIdbgkakaq9EEUdbalaifgDaqaDIdbgkakaq9DEUdbaiclfgicx9hmbkaearfheawcefgwad9hmbkkdnabTmbadTmbJbbbbJbbjZalIdbalIdzgk:tJbbbb:xgqalIdlalIdCgx:tgmamaq9DEgqalIdwalIdKgm:tgPaPaq9DEgq:vaqJbbbb9BEhqinabaqabIdbak:tNUdbabclfgiaqaiIdbax:tNUdbabcwfgiaqaiIdbam:tNUdbabcxfhbadcufgdmbkkk8KbabaeadaialavcbcbcbcbaoarawaDz:bjjjbk8KbabaeadaialavaoarawaDaqakaxamz:bjjjbk;lOowud99wue99iul998Jjjjjbc;Wb9Rgw8KjjjjbdndnarmbcbhDxekawcwfcbc;Kbz:ljjjb8Aawcuadcx2adc;v:Q;v:Qe0Ecbyd1:jjjbHjjjjbbgqBdwawceBd9Oaqaeadaiz:djjjbawcuadcdtadcFFFFi0Egkcbyd1:jjjbHjjjjbbgxBdxawcdBd9Oadcd4adfhmceheinaegicetheaiam6mbkcbhmawcuaicdtgPaicFFFFi0Ecbyd1:jjjbHjjjjbbgsBdzawciBd9Odndnar:Zgz:rJbbbZMgH:lJbbb9p9DTmbaH:Ohexekcjjjj94hekaicufhOc:bwhAcbhCcbhXadhQinaChLaeaAgKcufaeaK9iEamgDcefaeaD9kEhYdndnadTmbaYcuf:YhHaqhiaxheadhmindndnaiIdbaHNJbbbZMg8A:lJbbb9p9DTmba8A:OhAxekcjjjj94hAkaAcCthAdndnaiclfIdbaHNJbbbZMg8A:lJbbb9p9DTmba8A:OhCxekcjjjj94hCkaCcqtaAVhAdndnaicwfIdbaHNJbbbZMg8A:lJbbb9p9DTmba8A:OhCxekcjjjj94hCkaeaAaCVBdbaicxfhiaeclfheamcufgmmbkascFeaPz:ljjjbhEcbh3cbh5indnaEaxa5cdtfydbgAcm4aA7c:v;t;h;Ev2gics4ai7aOGgmcdtfgCydbgecuSmbaeaASmbcehiinaEamaifaOGgmcdtfgCydbgecuSmeaicefhiaeaA9hmbkkaCaABdba3aecuSfh3a5cefg5ad9hmbxdkkascFeaPz:ljjjb8Acbh3kaDaYa3ar0giEhmaLa3aiEhCdna3arSmbaYaKaiEgAam9Rcd9imbdndnaXcl0mbdnaQ:ZgHaL:Zg8A:taY:Yg8EaD:Y:tg8Fa8EaK:Y:tgaa3:Zghaz:tNNNaHaz:taaNa8Aah:tNa8Aaz:ta8FNahaH:tNM:va8EMJbbbZMgH:lJbbb9p9DTmbaH:Ohexdkcjjjj94hexekamaAfcd9Theka3aQaiEhQaXcefgXcs9hmekkdndnaCmbcihicbhDxekcbhiawakcbyd1:jjjbHjjjjbbg5BdCawclBd9OdndnadTmbamcuf:YhHaqhiaxheadhmindndnaiIdbaHNJbbbZMg8A:lJbbb9p9DTmba8A:OhAxekcjjjj94hAkaAcCthAdndnaiclfIdbaHNJbbbZMg8A:lJbbb9p9DTmba8A:OhCxekcjjjj94hCkaCcqtaAVhAdndnaicwfIdbaHNJbbbZMg8A:lJbbb9p9DTmba8A:OhCxekcjjjj94hCkaeaAaCVBdbaicxfhiaeclfheamcufgmmbkascFeaPz:ljjjbhEcbhDcbh3inaxa3cdtgYfydbgAcm4aA7c:v;t;h;Ev2gics4ai7hecbhidndninaEaeaOGgmcdtfgCydbgecuSmednaxaecdtgCfydbaASmbaicefgiamfheaiaO9nmekka5aCfydbhixekaCa3BdbaDhiaDcefhDka5aYfaiBdba3cefg3ad9hmbkcuaDc32giaDc;j:KM;jb0EhexekascFeaPz:ljjjb8AcbhDcbhekawaecbyd1:jjjbHjjjjbbgeBdKawcvBd9Oaecbaiz:ljjjbhOavcd4hxdnadTmbaxcdth3a5hmalhAaqheadhEinaOamydbc32fgiaeIdbaiIdbMUdbaiaeclfIdbaiIdlMUdlaiaecwfIdbaiIdwMUdwaiaAc;81jjbalEgCIdbaiIdxMUdxaiaCIdlaiIdzMUdzaiaCIdwaiIdCMUdCaiaiIdKJbbjZMUdKamclfhmaAa3fhAaecxfheaEcufgEmbkkdnaDTmbaOcxfhiaDheinaictfgmamIdbJbbbbJbbjZaicxfIdbgH:vaHJbbbb9BEgHNUdbaic94fgmaHamIdbNUdbaic98fgmaHamIdbNUdbaiaHaiIdbNUdbaiclfgmaHamIdbNUdbaicwfgmaHamIdbNUdbaic3fhiaecufgembkkcbhAawcuaDcdtgYaDcFFFFi0Egicbyd1:jjjbHjjjjbbgeBd3awcoBd9Oawaicbyd1:jjjbHjjjjbbgEBdaaecFeaYz:ljjjbh3dnadTmbaoaoNh8Aaxcdthxalheina8Aaec;81jjbalEgmIdwaOa5ydbgCc32fgiIdC:tgHaHNamIdbaiIdx:tgHaHNamIdlaiIdz:tgHaHNMMNaqcwfIdbaiIdw:tgHaHNaqIdbaiIdb:tgHaHNaqclfIdbaiIdl:tgHaHNMMMhHdndna3aCcdtgifgmydbcuSmbaEaifIdbaH9ETmekamaABdbaEaifaHUdbka5clfh5aeaxfheaqcxfhqadaAcefgA9hmbkkaba3aYz:kjjjb8AcrhikaicdthiinaiTmeaic98fgiawcwffydbcbyd:m:jjjbH:bjjjbbxbkkawc;Wbf8KjjjjbaDk:Qdidui99ducbhi8Jjjjjbca9Rglczfcwfcbyd11jjbBdbalcb8Pdj1jjb83izalcwfcbydN1jjbBdbalcb8Pd:m1jjb83ibdndnaembJbbjFhvJbbjFhoJbbjFhrxekadcd4cdthwincbhdinalczfadfgDabadfIdbgoaDIdbgrarao9EEUdbaladfgDaoaDIdbgrarao9DEUdbadclfgdcx9hmbkabawfhbaicefgiae9hmbkalIdwalIdK:thralIdlalIdC:thoalIdbalIdz:thvkavJbbbb:xgvaoaoav9DEgoararao9DEk9DeeuabcFeaicdtz:ljjjbhlcbhbdnadTmbindnalaeydbcdtfgiydbcu9hmbaiabBdbabcefhbkaeclfheadcufgdmbkkabk9teiucbcbyd:q:jjjbgeabcifc98GfgbBd:q:jjjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabk9teiucbcbyd:q:jjjbgeabcrfc94GfgbBd:q:jjjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik9:eiuZbhedndncbyd:q:jjjbgdaecztgi9nmbcuheadai9RcFFifcz4nbcuSmekadhekcbabae9Rcifc98Gcbyd:q:jjjbfgdBd:q:jjjbdnadZbcztge9nmbadae9RcFFifcz4nb8Akk6eiucbhidnadTmbdninabRbbglaeRbbgv9hmeaecefheabcefhbadcufgdmbxdkkalav9Rhikaikk:Iedbcjwk1eFFuuFFuuFFuuFFuFFFuFFFuFbbbbbbbbebbbdbbbbbbbebbbeeebeebebbeeebebbbbbebebbbbbebbbdbbbbbbbbbbbbbbbeeeeebebbbbbebbbbbeebbbbbbbbbbbbbbbbbbbbbc1Dkxebbbdbbb:G9Kbb"), {}).then(function(r) {
|
|
2508
|
+
(n = r.instance).exports.__wasm_call_ctors();
|
|
2509
|
+
});
|
|
2510
|
+
function A(r) {
|
|
2511
|
+
if (!r) throw new Error("Assertion failed");
|
|
2512
|
+
}
|
|
2513
|
+
function t(r) {
|
|
2514
|
+
return new Uint8Array(r.buffer, r.byteOffset, r.byteLength);
|
|
2515
|
+
}
|
|
2516
|
+
function i(r, b, o, d, c, g, l, h) {
|
|
2517
|
+
var f = n.exports.sbrk, I = f(4 * h), B = f(o * d), u = f(o * g), E = new Uint8Array(n.exports.memory.buffer);
|
|
2518
|
+
E.set(t(b), B), c && E.set(t(c), u);
|
|
2519
|
+
var C = r(I, B, o, d, u, g, l, h);
|
|
2520
|
+
new Uint8Array(n.exports.memory.buffer);
|
|
2521
|
+
var D = new Uint32Array(C);
|
|
2522
|
+
return t(D).set(E.subarray(I, I + 4 * C)), f(I - f(0)), D;
|
|
2523
|
+
}
|
|
2524
|
+
var s = { LockBorder: 1 };
|
|
2525
|
+
})();
|
|
2526
|
+
let ne = 0;
|
|
2527
|
+
class bi {
|
|
2528
|
+
constructor(e) {
|
|
2529
|
+
if (this.zUpToYUpMatrix = new m.Matrix4(), this.zUpToYUpMatrix.set(1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1), this.maxCachedItems = 100, this.proxy = e.proxy, e && (this.meshCallback = e.meshCallback, this.pointsCallback = e.pointsCallback, e.maxCachedItems && (this.maxCachedItems = e.maxCachedItems)), this.gltfLoader = new eA(), e && e.dracoLoader) this.gltfLoader.setDRACOLoader(e.dracoLoader), this.hasDracoLoader = !0;
|
|
2530
|
+
else {
|
|
2531
|
+
const a = new tA();
|
|
2532
|
+
a.setDecoderPath("https://storage.googleapis.com/ogc-3d-tiles/draco/"), this.gltfLoader.setDRACOLoader(a), this.gltfLoader.hasDracoLoader = !0;
|
|
2533
|
+
}
|
|
2534
|
+
if (e && e.ktx2Loader) this.gltfLoader.setKTX2Loader(e.ktx2Loader), this.hasKTX2Loader = !0;
|
|
2535
|
+
else if (e && e.renderer) {
|
|
2536
|
+
const a = new v();
|
|
2537
|
+
a.setTranscoderPath("https://storage.googleapis.com/ogc-3d-tiles/basis/").detectSupport(e.renderer), this.gltfLoader.setKTX2Loader(a), this.gltfLoader.hasKTX2Loader = !0;
|
|
2538
|
+
}
|
|
2539
|
+
this.gltfLoader.setMeshoptDecoder(BA), this.hasMeshOptDecoder = !0, this.b3dmDecoder = new $a(this.gltfLoader), this.cache = new Xa.LinkedHashMap(), this.register = {}, this.ready = [], this.downloads = [], this.nextReady = [], this.nextDownloads = [];
|
|
2540
|
+
}
|
|
2541
|
+
update() {
|
|
2542
|
+
const e = this;
|
|
2543
|
+
ne < 8 && e._download(), e._loadBatch();
|
|
2544
|
+
}
|
|
2545
|
+
_scheduleDownload(e) {
|
|
2546
|
+
this.downloads.unshift(e);
|
|
2547
|
+
}
|
|
2548
|
+
_download() {
|
|
2549
|
+
if (this.nextDownloads.length != 0 || (this._getNextDownloads(), this.nextDownloads.length != 0)) for (; this.nextDownloads.length > 0; ) {
|
|
2550
|
+
const e = this.nextDownloads.shift();
|
|
2551
|
+
e && e.shouldDoDownload() && e.doDownload();
|
|
2552
|
+
}
|
|
2553
|
+
}
|
|
2554
|
+
_meshReceived(e, a, A, t, i, s, r) {
|
|
2555
|
+
this.ready.unshift([e, a, A, t, i, s, r]);
|
|
2556
|
+
}
|
|
2557
|
+
_loadBatch() {
|
|
2558
|
+
for (this.nextReady.length == 0 && this._getNextReady(); this.nextReady.length > 0; ) {
|
|
2559
|
+
const e = this.nextReady.shift();
|
|
2560
|
+
if (!e) return;
|
|
2561
|
+
const a = e[0], A = e[1], t = e[2], i = a.get(t);
|
|
2562
|
+
i && A[t] && Object.keys(A[t]).forEach((s) => {
|
|
2563
|
+
const r = A[t][s];
|
|
2564
|
+
r && (r(i), A[t][s] = null);
|
|
2565
|
+
}), this.nextReady.length == 0 && this._getNextReady();
|
|
2566
|
+
}
|
|
2567
|
+
}
|
|
2568
|
+
_getNextDownloads() {
|
|
2569
|
+
let e = Number.POSITIVE_INFINITY, a = -1;
|
|
2570
|
+
for (let A = this.downloads.length - 1; A >= 0; A--) this.downloads[A].distanceFunction || this.nextDownloads.push(this.downloads.splice(A, 1)[0]);
|
|
2571
|
+
if (!(this.nextDownloads.length > 0)) {
|
|
2572
|
+
for (let A = this.downloads.length - 1; A >= 0; A--) {
|
|
2573
|
+
const t = this.downloads[A].distanceFunction();
|
|
2574
|
+
t <= e && (e = t, a = A);
|
|
2575
|
+
}
|
|
2576
|
+
if (a >= 0) {
|
|
2577
|
+
const A = this.downloads.splice(a, 1).pop();
|
|
2578
|
+
this.nextDownloads.push(A);
|
|
2579
|
+
const t = A.getSiblings();
|
|
2580
|
+
for (let i = this.downloads.length - 1; i >= 0; i--) t.map((s) => s.uuid).includes(this.downloads[i].uuid) && this.nextDownloads.push(this.downloads.splice(i, 1).pop());
|
|
2581
|
+
}
|
|
2582
|
+
}
|
|
2583
|
+
}
|
|
2584
|
+
_getNextReady() {
|
|
2585
|
+
let e = Number.POSITIVE_INFINITY, a = -1;
|
|
2586
|
+
for (let A = this.ready.length - 1; A >= 0; A--) this.ready[A][3] || this.nextReady.push(this.ready.splice(A, 1)[0]);
|
|
2587
|
+
if (!(this.nextReady.length > 0)) {
|
|
2588
|
+
for (let A = this.ready.length - 1; A >= 0; A--) {
|
|
2589
|
+
const t = this.ready[A][3]() * this.ready[A][5];
|
|
2590
|
+
t <= e && (e = t, a = A);
|
|
2591
|
+
}
|
|
2592
|
+
if (a >= 0) {
|
|
2593
|
+
const A = this.ready.splice(a, 1).pop();
|
|
2594
|
+
this.nextReady.push(A);
|
|
2595
|
+
const t = A[4]();
|
|
2596
|
+
for (let i = this.ready.length - 1; i >= 0; i--) t.map((s) => s.uuid).includes(this.ready[i][6]) && this.nextReady.push(this.ready.splice(i, 1).pop());
|
|
2597
|
+
}
|
|
2598
|
+
}
|
|
2599
|
+
}
|
|
2600
|
+
get(e, a, A, t, i, s, r, b, o, d) {
|
|
2601
|
+
const c = this, g = Ga(A), l = new AbortController();
|
|
2602
|
+
if (e.signal.addEventListener("abort", () => {
|
|
2603
|
+
c.register[g] && Object.keys(c.register[g]).length != 0 || l.abort("user abort");
|
|
2604
|
+
}), !(A.includes(".b3dm") || A.includes(".json") || A.includes(".gltf") || A.includes(".glb"))) return void console.error("the 3DTiles cache can only be used to load B3DM, gltf and json data");
|
|
2605
|
+
if (c.register[g] || (c.register[g] = {}), c.register[g][a] && console.error(" a tile should only be loaded once"), c.register[g][a] = t, c.cache.get(g)) this._meshReceived(c.cache, c.register, g, i, s, r, a);
|
|
2606
|
+
else if (Object.keys(c.register[g]).length == 1) {
|
|
2607
|
+
let h;
|
|
2608
|
+
A.includes(".b3dm") ? h = () => {
|
|
2609
|
+
var f;
|
|
2610
|
+
f = c.proxy ? () => fetch(c.proxy, { method: "POST", body: A, signal: l.signal }) : () => fetch(A, { signal: l.signal }), ne++, f().then((I) => {
|
|
2611
|
+
if (!I.ok) throw console.error("could not load tile with path : " + A), new Error(`couldn't load "${A}". Request failed with status ${I.status} : ${I.statusText}`);
|
|
2612
|
+
return I.arrayBuffer();
|
|
2613
|
+
}).then((I) => this.b3dmDecoder.parseB3DM(I, (B) => {
|
|
2614
|
+
c.meshCallback(B, d);
|
|
2615
|
+
}, b, o)).then((I) => {
|
|
2616
|
+
c.cache.put(g, I), c._checkSize(), this._meshReceived(c.cache, c.register, g, i, s, r, a);
|
|
2617
|
+
}).catch((I) => {
|
|
2618
|
+
console.error(I);
|
|
2619
|
+
}).finally(() => {
|
|
2620
|
+
ne--;
|
|
2621
|
+
});
|
|
2622
|
+
} : A.includes(".glb") || A.includes(".gltf") ? h = () => {
|
|
2623
|
+
var f;
|
|
2624
|
+
f = c.proxy ? () => fetch(c.proxy, { method: "POST", body: A, signal: l.signal }) : () => fetch(A, { signal: l.signal }), ne++, f().then((I) => {
|
|
2625
|
+
if (!I.ok) throw console.error("could not load tile with path : " + A), new Error(`couldn't load "${A}". Request failed with status ${I.status} : ${I.statusText}`);
|
|
2626
|
+
return I.arrayBuffer();
|
|
2627
|
+
}).then(async (I) => {
|
|
2628
|
+
await async function(B) {
|
|
2629
|
+
return new Promise((u) => {
|
|
2630
|
+
const E = setInterval(() => {
|
|
2631
|
+
B.hasDracoLoader && !B.dracoLoader || B.hasKTX2Loader && !B.ktx2Loader || (clearInterval(E), u());
|
|
2632
|
+
}, 10);
|
|
2633
|
+
});
|
|
2634
|
+
}(this.gltfLoader), this.gltfLoader.parse(I, null, (B) => {
|
|
2635
|
+
B.scene.asset = B.asset, b && B.scene.applyMatrix4(this.zUpToYUpMatrix), B.scene.traverse((u) => {
|
|
2636
|
+
u.isMesh && (o && u.applyMatrix4(this.zUpToYUpMatrix), c.meshCallback && c.meshCallback(u, d)), u.isPoints && c.pointsCallback && c.pointsCallback(u, d);
|
|
2637
|
+
}), c.cache.put(g, B.scene), c._checkSize(), c._meshReceived(c.cache, c.register, g, i, s, r, a);
|
|
2638
|
+
});
|
|
2639
|
+
}).catch((I) => {
|
|
2640
|
+
I !== "user abort" && I.code !== 20 && console.error(I);
|
|
2641
|
+
}).finally(() => {
|
|
2642
|
+
ne--;
|
|
2643
|
+
});
|
|
2644
|
+
} : A.includes(".json") && (h = () => {
|
|
2645
|
+
var f;
|
|
2646
|
+
f = c.proxy ? () => fetch(c.proxy, { method: "POST", body: A, signal: l.signal }) : () => fetch(A, { signal: l.signal }), ne++, f().then((I) => {
|
|
2647
|
+
if (!I.ok) throw console.error("could not load tile with path : " + A), new Error(`couldn't load "${A}". Request failed with status ${I.status} : ${I.statusText}`);
|
|
2648
|
+
return I.json();
|
|
2649
|
+
}).then((I) => la(I, A)).then((I) => {
|
|
2650
|
+
c.cache.put(g, I), c._checkSize(), c._meshReceived(c.cache, c.register, g);
|
|
2651
|
+
}).catch((I) => {
|
|
2652
|
+
console.error(I);
|
|
2653
|
+
}).finally(() => {
|
|
2654
|
+
ne--;
|
|
2655
|
+
});
|
|
2656
|
+
}), this._scheduleDownload({ shouldDoDownload: () => !e.signal.aborted && !!c.register[g] && Object.keys(c.register[g]).length > 0, doDownload: h, distanceFunction: i, getSiblings: s, level: r, uuid: a });
|
|
2657
|
+
}
|
|
2658
|
+
}
|
|
2659
|
+
clear() {
|
|
2660
|
+
const e = this.maxCachedItems;
|
|
2661
|
+
this.maxCachedItems = 0, this._checkSize(), this.maxCachedItems = e;
|
|
2662
|
+
}
|
|
2663
|
+
invalidate(e, a) {
|
|
2664
|
+
const A = Ga(e);
|
|
2665
|
+
this.register[A] && delete this.register[A][a];
|
|
2666
|
+
}
|
|
2667
|
+
_checkSize() {
|
|
2668
|
+
const e = this;
|
|
2669
|
+
let a = 0;
|
|
2670
|
+
for (; e.cache.size() > e.maxCachedItems && a < e.cache.size(); ) {
|
|
2671
|
+
a++;
|
|
2672
|
+
const A = e.cache.head(), t = e.register[A.key];
|
|
2673
|
+
t && (Object.keys(t).length > 0 ? (e.cache.remove(A.key), e.cache.put(A.key, A.value)) : (e.cache.remove(A.key), delete e.register[A.key], A.value.traverse((i) => {
|
|
2674
|
+
if (i.material) if (i.material.length) for (let s = 0; s < i.material.length; ++s) i.material[s].dispose();
|
|
2675
|
+
else i.material.dispose();
|
|
2676
|
+
i.geometry && i.geometry.dispose();
|
|
2677
|
+
})));
|
|
2678
|
+
}
|
|
2679
|
+
}
|
|
2680
|
+
}
|
|
2681
|
+
function Ga(n) {
|
|
2682
|
+
for (var e = n.split("/"), a = [], A = 0, t = 0; t < e.length; t++) {
|
|
2683
|
+
var i = e[t];
|
|
2684
|
+
i !== "." && i !== "" && i !== ".." ? a[A++] = i : i === ".." && A > 0 && A--;
|
|
2685
|
+
}
|
|
2686
|
+
if (A === 0) return "/";
|
|
2687
|
+
var s = "";
|
|
2688
|
+
for (t = 0; t < A; t++) s += "/" + a[t];
|
|
2689
|
+
return s;
|
|
2690
|
+
}
|
|
2691
|
+
var Ze, di = new Uint8Array(16);
|
|
2692
|
+
function gi() {
|
|
2693
|
+
if (!Ze && !(Ze = typeof crypto < "u" && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto < "u" && typeof msCrypto.getRandomValues == "function" && msCrypto.getRandomValues.bind(msCrypto))) throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");
|
|
2694
|
+
return Ze(di);
|
|
2695
|
+
}
|
|
2696
|
+
const hi = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;
|
|
2697
|
+
for (var F = [], $e = 0; $e < 256; ++$e) F.push(($e + 256).toString(16).substr(1));
|
|
2698
|
+
function li(n) {
|
|
2699
|
+
var e = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0, a = (F[n[e + 0]] + F[n[e + 1]] + F[n[e + 2]] + F[n[e + 3]] + "-" + F[n[e + 4]] + F[n[e + 5]] + "-" + F[n[e + 6]] + F[n[e + 7]] + "-" + F[n[e + 8]] + F[n[e + 9]] + "-" + F[n[e + 10]] + F[n[e + 11]] + F[n[e + 12]] + F[n[e + 13]] + F[n[e + 14]] + F[n[e + 15]]).toLowerCase();
|
|
2700
|
+
if (!function(A) {
|
|
2701
|
+
return typeof A == "string" && hi.test(A);
|
|
2702
|
+
}(a)) throw TypeError("Stringified UUID is invalid");
|
|
2703
|
+
return a;
|
|
2704
|
+
}
|
|
2705
|
+
function CA(n, e, a) {
|
|
2706
|
+
var A = (n = n || {}).random || (n.rng || gi)();
|
|
2707
|
+
return A[6] = 15 & A[6] | 64, A[8] = 63 & A[8] | 128, li(A);
|
|
2708
|
+
}
|
|
2709
|
+
function K(n) {
|
|
2710
|
+
if (typeof n != "string") throw new TypeError("Path must be a string. Received " + JSON.stringify(n));
|
|
2711
|
+
}
|
|
2712
|
+
function va(n, e) {
|
|
2713
|
+
for (var a, A = "", t = 0, i = -1, s = 0, r = 0; r <= n.length; ++r) {
|
|
2714
|
+
if (r < n.length) a = n.charCodeAt(r);
|
|
2715
|
+
else {
|
|
2716
|
+
if (a === 47) break;
|
|
2717
|
+
a = 47;
|
|
2718
|
+
}
|
|
2719
|
+
if (a === 47) {
|
|
2720
|
+
if (!(i === r - 1 || s === 1)) if (i !== r - 1 && s === 2) {
|
|
2721
|
+
if (A.length < 2 || t !== 2 || A.charCodeAt(A.length - 1) !== 46 || A.charCodeAt(A.length - 2) !== 46) {
|
|
2722
|
+
if (A.length > 2) {
|
|
2723
|
+
var b = A.lastIndexOf("/");
|
|
2724
|
+
if (b !== A.length - 1) {
|
|
2725
|
+
b === -1 ? (A = "", t = 0) : t = (A = A.slice(0, b)).length - 1 - A.lastIndexOf("/"), i = r, s = 0;
|
|
2726
|
+
continue;
|
|
2727
|
+
}
|
|
2728
|
+
} else if (A.length === 2 || A.length === 1) {
|
|
2729
|
+
A = "", t = 0, i = r, s = 0;
|
|
2730
|
+
continue;
|
|
2731
|
+
}
|
|
2732
|
+
}
|
|
2733
|
+
e && (A.length > 0 ? A += "/.." : A = "..", t = 2);
|
|
2734
|
+
} else A.length > 0 ? A += "/" + n.slice(i + 1, r) : A = n.slice(i + 1, r), t = r - i - 1;
|
|
2735
|
+
i = r, s = 0;
|
|
2736
|
+
} else a === 46 && s !== -1 ? ++s : s = -1;
|
|
2737
|
+
}
|
|
2738
|
+
return A;
|
|
2739
|
+
}
|
|
2740
|
+
var Be = { resolve: function() {
|
|
2741
|
+
for (var n, e = "", a = !1, A = arguments.length - 1; A >= -1 && !a; A--) {
|
|
2742
|
+
var t;
|
|
2743
|
+
A >= 0 ? t = arguments[A] : (n === void 0 && (n = process.cwd()), t = n), K(t), t.length !== 0 && (e = t + "/" + e, a = t.charCodeAt(0) === 47);
|
|
2744
|
+
}
|
|
2745
|
+
return e = va(e, !a), a ? e.length > 0 ? "/" + e : "/" : e.length > 0 ? e : ".";
|
|
2746
|
+
}, normalize: function(n) {
|
|
2747
|
+
if (K(n), n.length === 0) return ".";
|
|
2748
|
+
var e = n.charCodeAt(0) === 47, a = n.charCodeAt(n.length - 1) === 47;
|
|
2749
|
+
return (n = va(n, !e)).length !== 0 || e || (n = "."), n.length > 0 && a && (n += "/"), e ? "/" + n : n;
|
|
2750
|
+
}, isAbsolute: function(n) {
|
|
2751
|
+
return K(n), n.length > 0 && n.charCodeAt(0) === 47;
|
|
2752
|
+
}, join: function() {
|
|
2753
|
+
if (arguments.length === 0) return ".";
|
|
2754
|
+
for (var n, e = 0; e < arguments.length; ++e) {
|
|
2755
|
+
var a = arguments[e];
|
|
2756
|
+
K(a), a.length > 0 && (n === void 0 ? n = a : n += "/" + a);
|
|
2757
|
+
}
|
|
2758
|
+
return n === void 0 ? "." : Be.normalize(n);
|
|
2759
|
+
}, relative: function(n, e) {
|
|
2760
|
+
if (K(n), K(e), n === e || (n = Be.resolve(n)) === (e = Be.resolve(e))) return "";
|
|
2761
|
+
for (var a = 1; a < n.length && n.charCodeAt(a) === 47; ++a) ;
|
|
2762
|
+
for (var A = n.length, t = A - a, i = 1; i < e.length && e.charCodeAt(i) === 47; ++i) ;
|
|
2763
|
+
for (var s = e.length - i, r = t < s ? t : s, b = -1, o = 0; o <= r; ++o) {
|
|
2764
|
+
if (o === r) {
|
|
2765
|
+
if (s > r) {
|
|
2766
|
+
if (e.charCodeAt(i + o) === 47) return e.slice(i + o + 1);
|
|
2767
|
+
if (o === 0) return e.slice(i + o);
|
|
2768
|
+
} else t > r && (n.charCodeAt(a + o) === 47 ? b = o : o === 0 && (b = 0));
|
|
2769
|
+
break;
|
|
2770
|
+
}
|
|
2771
|
+
var d = n.charCodeAt(a + o);
|
|
2772
|
+
if (d !== e.charCodeAt(i + o)) break;
|
|
2773
|
+
d === 47 && (b = o);
|
|
2774
|
+
}
|
|
2775
|
+
var c = "";
|
|
2776
|
+
for (o = a + b + 1; o <= A; ++o) o !== A && n.charCodeAt(o) !== 47 || (c.length === 0 ? c += ".." : c += "/..");
|
|
2777
|
+
return c.length > 0 ? c + e.slice(i + b) : (i += b, e.charCodeAt(i) === 47 && ++i, e.slice(i));
|
|
2778
|
+
}, _makeLong: function(n) {
|
|
2779
|
+
return n;
|
|
2780
|
+
}, dirname: function(n) {
|
|
2781
|
+
if (K(n), n.length === 0) return ".";
|
|
2782
|
+
for (var e = n.charCodeAt(0), a = e === 47, A = -1, t = !0, i = n.length - 1; i >= 1; --i) if ((e = n.charCodeAt(i)) === 47) {
|
|
2783
|
+
if (!t) {
|
|
2784
|
+
A = i;
|
|
2785
|
+
break;
|
|
2786
|
+
}
|
|
2787
|
+
} else t = !1;
|
|
2788
|
+
return A === -1 ? a ? "/" : "." : a && A === 1 ? "//" : n.slice(0, A);
|
|
2789
|
+
}, basename: function(n, e) {
|
|
2790
|
+
if (e !== void 0 && typeof e != "string") throw new TypeError('"ext" argument must be a string');
|
|
2791
|
+
K(n);
|
|
2792
|
+
var a, A = 0, t = -1, i = !0;
|
|
2793
|
+
if (e !== void 0 && e.length > 0 && e.length <= n.length) {
|
|
2794
|
+
if (e.length === n.length && e === n) return "";
|
|
2795
|
+
var s = e.length - 1, r = -1;
|
|
2796
|
+
for (a = n.length - 1; a >= 0; --a) {
|
|
2797
|
+
var b = n.charCodeAt(a);
|
|
2798
|
+
if (b === 47) {
|
|
2799
|
+
if (!i) {
|
|
2800
|
+
A = a + 1;
|
|
2801
|
+
break;
|
|
2802
|
+
}
|
|
2803
|
+
} else r === -1 && (i = !1, r = a + 1), s >= 0 && (b === e.charCodeAt(s) ? --s == -1 && (t = a) : (s = -1, t = r));
|
|
2804
|
+
}
|
|
2805
|
+
return A === t ? t = r : t === -1 && (t = n.length), n.slice(A, t);
|
|
2806
|
+
}
|
|
2807
|
+
for (a = n.length - 1; a >= 0; --a) if (n.charCodeAt(a) === 47) {
|
|
2808
|
+
if (!i) {
|
|
2809
|
+
A = a + 1;
|
|
2810
|
+
break;
|
|
2811
|
+
}
|
|
2812
|
+
} else t === -1 && (i = !1, t = a + 1);
|
|
2813
|
+
return t === -1 ? "" : n.slice(A, t);
|
|
2814
|
+
}, extname: function(n) {
|
|
2815
|
+
K(n);
|
|
2816
|
+
for (var e = -1, a = 0, A = -1, t = !0, i = 0, s = n.length - 1; s >= 0; --s) {
|
|
2817
|
+
var r = n.charCodeAt(s);
|
|
2818
|
+
if (r !== 47) A === -1 && (t = !1, A = s + 1), r === 46 ? e === -1 ? e = s : i !== 1 && (i = 1) : e !== -1 && (i = -1);
|
|
2819
|
+
else if (!t) {
|
|
2820
|
+
a = s + 1;
|
|
2821
|
+
break;
|
|
2822
|
+
}
|
|
2823
|
+
}
|
|
2824
|
+
return e === -1 || A === -1 || i === 0 || i === 1 && e === A - 1 && e === a + 1 ? "" : n.slice(e, A);
|
|
2825
|
+
}, format: function(n) {
|
|
2826
|
+
if (n === null || typeof n != "object") throw new TypeError('The "pathObject" argument must be of type Object. Received type ' + typeof n);
|
|
2827
|
+
return function(e, a) {
|
|
2828
|
+
var A = a.dir || a.root, t = a.base || (a.name || "") + (a.ext || "");
|
|
2829
|
+
return A ? A === a.root ? A + t : A + e + t : t;
|
|
2830
|
+
}("/", n);
|
|
2831
|
+
}, parse: function(n) {
|
|
2832
|
+
K(n);
|
|
2833
|
+
var e = { root: "", dir: "", base: "", ext: "", name: "" };
|
|
2834
|
+
if (n.length === 0) return e;
|
|
2835
|
+
var a, A = n.charCodeAt(0), t = A === 47;
|
|
2836
|
+
t ? (e.root = "/", a = 1) : a = 0;
|
|
2837
|
+
for (var i = -1, s = 0, r = -1, b = !0, o = n.length - 1, d = 0; o >= a; --o) if ((A = n.charCodeAt(o)) !== 47) r === -1 && (b = !1, r = o + 1), A === 46 ? i === -1 ? i = o : d !== 1 && (d = 1) : i !== -1 && (d = -1);
|
|
2838
|
+
else if (!b) {
|
|
2839
|
+
s = o + 1;
|
|
2840
|
+
break;
|
|
2841
|
+
}
|
|
2842
|
+
return i === -1 || r === -1 || d === 0 || d === 1 && i === r - 1 && i === s + 1 ? r !== -1 && (e.base = e.name = s === 0 && t ? n.slice(1, r) : n.slice(s, r)) : (s === 0 && t ? (e.name = n.slice(1, i), e.base = n.slice(1, r)) : (e.name = n.slice(s, i), e.base = n.slice(s, r)), e.ext = n.slice(i, r)), s > 0 ? e.dir = n.slice(0, s - 1) : t && (e.dir = "/"), e;
|
|
2843
|
+
}, sep: "/", delimiter: ":", win32: null, posix: null };
|
|
2844
|
+
Be.posix = Be;
|
|
2845
|
+
var V, ie = Be;
|
|
2846
|
+
const T = new m.Sphere(new m.Vector3(0, 0, 0), 1);
|
|
2847
|
+
new m.Box3();
|
|
2848
|
+
const ae = new m.Vector3(0, 0, 0), ea = new m.Vector3(0, 0, 0), Ii = new m.Vector3(0, 1, 0), Ua = new m.Quaternion(), z = {};
|
|
2849
|
+
function fi() {
|
|
2850
|
+
var n = [];
|
|
2851
|
+
for (let e in z) z.hasOwnProperty(e) && z[e] > 0 && n.push(e);
|
|
2852
|
+
return n;
|
|
2853
|
+
}
|
|
2854
|
+
class EA extends m.Object3D {
|
|
2855
|
+
constructor(e) {
|
|
2856
|
+
super();
|
|
2857
|
+
const a = this;
|
|
2858
|
+
if (this.contentURL = [], e.domWidth && e.domHeight ? this.rendererSize = new m.Vector2(e.domWidth, e.domHeight) : this.rendererSize = new m.Vector2(1e3, 1e3), this.loadingStrategy = e.loadingStrategy ? e.loadingStrategy.toUpperCase() : "INCREMENTAL", this.distanceBias = Math.max(1e-4, e.distanceBias ? e.distanceBias : 1), this.proxy = e.proxy, this.drawBoundingVolume = !!e.drawBoundingVolume && e.drawBoundingVolume, this.displayErrors = e.displayErrors, this.displayCopyright = e.displayCopyright, e.queryParams && (this.queryParams = { ...e.queryParams }), this.uuid = CA(), e.tileLoader) this.tileLoader = e.tileLoader;
|
|
2859
|
+
else {
|
|
2860
|
+
const i = {};
|
|
2861
|
+
i.meshCallback = e.meshCallback ? e.meshCallback : (s, r) => {
|
|
2862
|
+
s.material.wireframe = !1, s.material.side = m.DoubleSide;
|
|
2863
|
+
}, i.pointsCallback = e.pointsCallback ? e.pointsCallback : (s, r) => {
|
|
2864
|
+
s.material.size = Math.pow(r, 0.33), s.material.sizeAttenuation = !0;
|
|
2865
|
+
}, i.proxy = this.proxy, i.renderer = e.renderer, i.dracoLoader = e.dracoLoader, i.ktx2Loader = e.ktx2Loader, this.tileLoader = new bi(i), this.update = (s) => {
|
|
2866
|
+
this.update(s), this.tileLoader.update();
|
|
2867
|
+
};
|
|
2868
|
+
}
|
|
2869
|
+
if (this.displayCopyright = !!e.displayCopyright, this.geometricErrorMultiplier = e.geometricErrorMultiplier ? e.geometricErrorMultiplier : 1, this.renderer = e.renderer, this.meshCallback = e.meshCallback, this.loadOutsideView = e.loadOutsideView, this.cameraOnLoad = e.cameraOnLoad, this.parentTile = e.parentTile, this.occlusionCullingService = e.occlusionCullingService, this.static = e.static, this.occlusionCullingService && (this.color = new m.Color(), this.color.setHex(16777215 * Math.random()), this.colorID = m.MathUtils.clamp(255 * a.color.r, 0, 255) << 16 ^ m.MathUtils.clamp(255 * a.color.g, 0, 255) << 8 ^ m.MathUtils.clamp(255 * a.color.b, 0, 255)), this.static && (this.matrixAutoUpdate = !1, this.matrixWorldAutoUpdate = !1), this.childrenTiles = [], this.meshContent = [], this.tileContent, this.refine, this.rootPath, this.geometricError, this.boundingVolume, this.json, this.materialVisibility = !1, this.level = e.level ? e.level : 0, this.hasMeshContent = 0, this.hasUnloadedJSONContent = 0, this.centerModel = e.centerModel, this.abortController = new AbortController(), this.onLoadCallback = e.onLoadCallback, e.json) a._setup(e);
|
|
2870
|
+
else if (e.url) {
|
|
2871
|
+
var A = e.url;
|
|
2872
|
+
if (a.queryParams) {
|
|
2873
|
+
var t = "";
|
|
2874
|
+
for (let i in a.queryParams) a.queryParams.hasOwnProperty(i) && (t += "&" + i + "=" + a.queryParams[i]);
|
|
2875
|
+
A.includes("?") ? A += t : A += "?" + t.substring(1);
|
|
2876
|
+
}
|
|
2877
|
+
(a.proxy ? () => fetch(a.proxy, { method: "POST", body: A, signal: a.abortController.signal }) : () => fetch(A, { signal: a.abortController.signal }))().then((i) => {
|
|
2878
|
+
if (!i.ok) throw new Error(`couldn't load "${e.url}". Request failed with status ${i.status} : ${i.statusText}`);
|
|
2879
|
+
i.json().then((s) => la(s, A)).then((s) => {
|
|
2880
|
+
a._setup({ rootPath: ie.dirname(e.url), json: s });
|
|
2881
|
+
});
|
|
2882
|
+
}).catch((i) => {
|
|
2883
|
+
a.displayErrors && Na(i);
|
|
2884
|
+
});
|
|
2885
|
+
}
|
|
2886
|
+
}
|
|
2887
|
+
updateMatrices() {
|
|
2888
|
+
this.updateMatrix(), this.static && this.traverse((e) => {
|
|
2889
|
+
e.isObject3D && (e.matrixWorldAutoUpdate = !0);
|
|
2890
|
+
}), this.updateMatrixWorld(!0), this.static && this.traverse((e) => {
|
|
2891
|
+
e.isObject3D && (e.matrixWorldAutoUpdate = !1);
|
|
2892
|
+
});
|
|
2893
|
+
}
|
|
2894
|
+
setCanvasSize(e, a) {
|
|
2895
|
+
this.rendererSize.set(e, a);
|
|
2896
|
+
}
|
|
2897
|
+
async _setup(e) {
|
|
2898
|
+
const a = this;
|
|
2899
|
+
if (e.json.root ? (a.json = e.json.root, a.json.refine || (a.json.refine = e.json.refine), a.json.geometricError || (a.json.geometricError = e.json.geometricError), a.json.transform || (a.json.transform = e.json.transform), a.json.boundingVolume || (a.json.boundingVolume = e.json.boundingVolume)) : a.json = e.json, a.json.children || (a.json.getChildren ? a.json.children = await a.json.getChildren() : a.json.children = []), a.rootPath = e.json.rootPath ? e.json.rootPath : e.rootPath, a.json.refine ? a.refine = a.json.refine : a.refine = e.parentRefine, a.json.geometricError ? a.geometricError = a.json.geometricError : a.geometricError = e.parentGeometricError, a.json.transform) {
|
|
2900
|
+
let t = new m.Matrix4();
|
|
2901
|
+
t.elements = a.json.transform, a.applyMatrix4(t);
|
|
2902
|
+
}
|
|
2903
|
+
if (a.json.boundingVolume) if (a.json.boundingVolume.box) a.boundingVolume = new te(a.json.boundingVolume.box);
|
|
2904
|
+
else if (a.json.boundingVolume.region) {
|
|
2905
|
+
const t = a.json.boundingVolume.region;
|
|
2906
|
+
a._transformWGS84ToCartesian(t[0], t[1], t[4], ae), a._transformWGS84ToCartesian(t[2], t[3], t[5], ea), ae.lerp(ea, 0.5), a.boundingVolume = new m.Sphere(new m.Vector3(ae.x, ae.y, ae.z), ae.distanceTo(ea));
|
|
2907
|
+
} else if (a.json.boundingVolume.sphere) {
|
|
2908
|
+
const t = a.json.boundingVolume.sphere;
|
|
2909
|
+
a.boundingVolume = new m.Sphere(new m.Vector3(t[0], t[1], t[2]), t[3]);
|
|
2910
|
+
} else a.boundingVolume = e.parentBoundingVolume;
|
|
2911
|
+
else a.boundingVolume = e.parentBoundingVolume;
|
|
2912
|
+
function A(t) {
|
|
2913
|
+
t.uri && t.uri.includes("json") || t.url && t.url.includes("json") ? a.hasUnloadedJSONContent++ : a.hasMeshContent++;
|
|
2914
|
+
}
|
|
2915
|
+
if (a.json.content ? (A(a.json.content), a.hasMeshContent == 0 && (a.level = Math.max(0, a.parentTile ? a.parentTile.level + 0.01 : 0)), a.loadingStrategy === "IMMEDIATE" ? a._load(!0, !1) : a._load()) : a.json.contents && (a.json.contents.forEach((t) => A(t)), a.hasMeshContent == 0 && (a.level = Math.max(0, a.parentTile ? a.parentTile.level + 0.01 : 0)), a.loadingStrategy === "IMMEDIATE" ? a._load(!0, !1) : a._load()), a.centerModel) {
|
|
2916
|
+
const t = new m.Sphere();
|
|
2917
|
+
a.boundingVolume instanceof te ? t.copy(a.boundingVolume.sphere) : a.boundingVolume instanceof m.Sphere && t.copy(a.boundingVolume), this.json.boundingVolume.region && (this._transformWGS84ToCartesian(0.5 * (this.json.boundingVolume.region[0] + this.json.boundingVolume.region[2]), 0.5 * (this.json.boundingVolume.region[1] + this.json.boundingVolume.region[3]), 0.5 * (this.json.boundingVolume.region[4] + this.json.boundingVolume.region[5]), ae), Ua.setFromUnitVectors(ae.normalize(), Ii.normalize()), a.applyQuaternion(Ua)), t.center.applyMatrix4(a.matrix), a.position.sub(t.center), a.updateMatrices();
|
|
2918
|
+
}
|
|
2919
|
+
if (e.onLoadCallback && a.onLoadCallback(a), a.isSetup = !0, a.level > 0 && a.drawBoundingVolume && (a.bbox && console.log("double setup"), this.boundingVolume.aabb)) {
|
|
2920
|
+
let t = this.boundingVolume.aabb.clone();
|
|
2921
|
+
t.applyMatrix4(this.matrixWorld), a.bbox = new m.Box3Helper(t, 16776960), a.add(a.bbox), a.bbox.material.visible = !1;
|
|
2922
|
+
}
|
|
2923
|
+
}
|
|
2924
|
+
_assembleURL(e, a) {
|
|
2925
|
+
e.endsWith("/") || (e += "/");
|
|
2926
|
+
const A = new URL(e);
|
|
2927
|
+
let t = A.pathname.split("/").filter((s) => s !== ""), i = a.split("/").filter((s) => s !== "");
|
|
2928
|
+
for (let s = 1; s <= t.length && !(s >= i.length); s++)
|
|
2929
|
+
if (t.slice(t.length - s, t.length).join("/") === i.slice(0, s).join("/")) {
|
|
2930
|
+
for (let r = 0; r < s; r++) t.pop();
|
|
2931
|
+
break;
|
|
2932
|
+
}
|
|
2933
|
+
for (; i.length > 0 && i[0] === ".."; ) t.pop(), i.shift();
|
|
2934
|
+
return `${A.protocol}//${A.host}/${[...t, ...i].join("/")}`;
|
|
2935
|
+
}
|
|
2936
|
+
_extractQueryParams(e, a) {
|
|
2937
|
+
const A = new URL(e);
|
|
2938
|
+
for (let [t, i] of A.searchParams) a[t] = i;
|
|
2939
|
+
return A.search = "", A.toString();
|
|
2940
|
+
}
|
|
2941
|
+
async _load(e = !0, a = !0) {
|
|
2942
|
+
var A = this;
|
|
2943
|
+
if (!A.deleted) {
|
|
2944
|
+
if (A.json.content) await t(A.json.content, null, e, a);
|
|
2945
|
+
else if (A.json.contents) {
|
|
2946
|
+
let i = A.json.contents.map((s, r) => t(s, r, e, a));
|
|
2947
|
+
Promise.all(i);
|
|
2948
|
+
}
|
|
2949
|
+
}
|
|
2950
|
+
async function t(i, s, r, b) {
|
|
2951
|
+
let o;
|
|
2952
|
+
i.uri ? o = i.uri : i.url && (o = i.url);
|
|
2953
|
+
const d = /^(?:http|https|ftp|tcp|udp):\/\/\S+/;
|
|
2954
|
+
if (d.test(A.rootPath) ? d.test(o) || (o = A._assembleURL(A.rootPath, o)) : ie.isAbsolute(A.rootPath) && (o = A.rootPath + ie.sep + o), o = A._extractQueryParams(o, A.queryParams), A.queryParams) {
|
|
2955
|
+
var c = "";
|
|
2956
|
+
for (let g in A.queryParams) A.queryParams.hasOwnProperty(g) && (c += "&" + g + "=" + A.queryParams[g]);
|
|
2957
|
+
o.includes("?") ? o += c : o += "?" + c.substring(1);
|
|
2958
|
+
}
|
|
2959
|
+
if (o) if (b && (o.includes(".b3dm") || o.includes(".glb") || o.includes(".gltf"))) {
|
|
2960
|
+
A.contentURL.push(o);
|
|
2961
|
+
try {
|
|
2962
|
+
A.tileLoader.get(A.abortController, A.uuid, o, (g) => {
|
|
2963
|
+
A.deleted || (g.asset && g.asset.copyright && (g.asset.copyright.split(";").forEach((l) => {
|
|
2964
|
+
z[l] ? z[l]++ : z[l] = 1;
|
|
2965
|
+
}), A.displayCopyright && aa()), g.traverse((l) => {
|
|
2966
|
+
if ((l.isMesh || l.isPoints) && l.layers.disable(0), l.isMesh && A.occlusionCullingService) {
|
|
2967
|
+
const h = l.geometry.attributes.position, f = [];
|
|
2968
|
+
for (let I = 0; I < h.count; I++) f.push(A.color.r, A.color.g, A.color.b);
|
|
2969
|
+
l.geometry.setAttribute("color", new m.Float32BufferAttribute(f, 3));
|
|
2970
|
+
}
|
|
2971
|
+
}), A.add(g), A.updateMatrices(), A.meshContent.push(g));
|
|
2972
|
+
}, A.cameraOnLoad ? () => {
|
|
2973
|
+
let g = 1;
|
|
2974
|
+
return (A.metric && A.metric < 0 || A.deleted) && (g = 2), A.parentTile ? A.parentTile._calculateDistanceToCamera(A.cameraOnLoad) * g * A.level : A._calculateDistanceToCamera(A.cameraOnLoad) * g * A.level;
|
|
2975
|
+
} : () => 0, () => A._getSiblings(), A.level, !A.json.boundingVolume.region, !!A.json.boundingVolume.region, A.geometricError);
|
|
2976
|
+
} catch (g) {
|
|
2977
|
+
A.displayErrors && Na(g);
|
|
2978
|
+
}
|
|
2979
|
+
} else r && o.includes(".json") && (A.jsonRequested = o, A.tileLoader.get(A.abortController, A.uuid, o, async (g) => {
|
|
2980
|
+
A.deleted || (g.rootPath = ie.dirname(o), A.json.children.push(g), s == null ? delete A.json.content : A.json.contents.splice(s, 1), A.hasUnloadedJSONContent--);
|
|
2981
|
+
}));
|
|
2982
|
+
}
|
|
2983
|
+
}
|
|
2984
|
+
dispose() {
|
|
2985
|
+
const e = this;
|
|
2986
|
+
e.meshContent.forEach((a) => {
|
|
2987
|
+
a && a.asset && a.asset.copyright && (a.asset.copyright.split(";").forEach((A) => {
|
|
2988
|
+
z[A] && z[A]--;
|
|
2989
|
+
}), e.displayCopyright && aa());
|
|
2990
|
+
}), e.bbox && e.bbox.dispose(), e.childrenTiles.forEach((a) => a.dispose()), e.deleted = !0, e.contentURL && (e.contentURL.forEach((a) => {
|
|
2991
|
+
e.tileLoader.invalidate(a, e.uuid);
|
|
2992
|
+
}), e.contentURL = []), e.abortController && e.abortController.abort("tile not needed"), this.parent = null, this.parentTile = null, this.dispatchEvent({ type: "removed" });
|
|
2993
|
+
}
|
|
2994
|
+
_disposeMeshContent() {
|
|
2995
|
+
const e = this;
|
|
2996
|
+
if (!e.deleted) {
|
|
2997
|
+
e.deleted = !0, e.abortController && (e.abortController.abort("tile not needed"), e.abortController = new AbortController());
|
|
2998
|
+
for (let a = e.meshContent.length - 1; a >= 0; a--) {
|
|
2999
|
+
const A = e.meshContent[a];
|
|
3000
|
+
A && A.asset && A.asset.copyright && (A.asset.copyright.split(";").forEach((t) => {
|
|
3001
|
+
z[t] && z[t]--;
|
|
3002
|
+
}), e.displayCopyright && aa()), e.remove(A);
|
|
3003
|
+
}
|
|
3004
|
+
e.meshContent = [], e.contentURL.forEach((a) => {
|
|
3005
|
+
e.tileLoader.invalidate(a, e.uuid);
|
|
3006
|
+
}), e.contentURL = [];
|
|
3007
|
+
}
|
|
3008
|
+
}
|
|
3009
|
+
_disposeChildren() {
|
|
3010
|
+
var e = this;
|
|
3011
|
+
e.childrenTiles.forEach((a) => {
|
|
3012
|
+
a.dispose(), e.remove(a);
|
|
3013
|
+
}), e.childrenTiles = [];
|
|
3014
|
+
}
|
|
3015
|
+
update(e) {
|
|
3016
|
+
const a = new m.Frustum();
|
|
3017
|
+
a.setFromProjectionMatrix(new m.Matrix4().multiplyMatrices(e.projectionMatrix, e.matrixWorldInverse));
|
|
3018
|
+
let A = [0], t = [0], i = [0], s = [0];
|
|
3019
|
+
return this.refine == "REPLACE" ? this.loadingStrategy === "IMMEDIATE" ? (this._updateImmediate(e, a), this._statsImmediate(i, A, s, t)) : (this._update(e, a), this._stats(i, A, s, t)) : (this._update(e, a), this._stats(i, A, s, t)), A > 0 && (s[0] /= A[0]), { numTilesLoaded: A[0], numTilesRendered: t[0], maxLOD: i[0], percentageLoaded: s[0] };
|
|
3020
|
+
}
|
|
3021
|
+
_updateImmediate(e, a) {
|
|
3022
|
+
this._computeMetricRecursive(e, a), this._updateNodeVisibilityImmediate(), this._expandTreeImmediate(e), this.shouldBeVisible = this.metric > 0 || !!this.loadOutsideView, this._shouldBeVisibleUpdateImmediate(), this._trimTreeImmediate(), this._loadMeshImmediate();
|
|
3023
|
+
}
|
|
3024
|
+
_statsImmediate(e, a, A, t) {
|
|
3025
|
+
e[0] = Math.max(e[0], this.level), (this.shouldBeVisible || this.materialVisibility) && (a[0]++, this.materialVisibility && A[0]++), this.materialVisibility && t[0]++, this.childrenTiles.forEach((i) => {
|
|
3026
|
+
i._statsImmediate(e, a, A, t);
|
|
3027
|
+
});
|
|
3028
|
+
}
|
|
3029
|
+
_stats(e, a, A, t) {
|
|
3030
|
+
e[0] = Math.max(e[0], this.level), this.hasMeshContent && (a[0]++, this.meshContent.length == this.hasMeshContent && A[0]++, this.materialVisibility && t[0]++), this.childrenTiles.forEach((i) => {
|
|
3031
|
+
i._stats(e, a, A, t);
|
|
3032
|
+
});
|
|
3033
|
+
}
|
|
3034
|
+
_trimTreeImmediate() {
|
|
3035
|
+
this.metric != null && (this.hasMeshContent && this.shouldBeVisible && this.materialVisibility ? this._disposeChildren() : this.childrenTiles.forEach((e) => {
|
|
3036
|
+
e._trimTreeImmediate();
|
|
3037
|
+
}));
|
|
3038
|
+
}
|
|
3039
|
+
_updateNodeVisibilityImmediate(e = !1) {
|
|
3040
|
+
const a = this;
|
|
3041
|
+
if (a.hasMeshContent) if (a.shouldBeVisible) a.meshContent.length == a.hasMeshContent ? a.materialVisibility ? a.childrenTiles.forEach((A) => {
|
|
3042
|
+
A._updateNodeVisibilityImmediate(!0);
|
|
3043
|
+
}) : (a._changeContentVisibility(!0), a.childrenTiles.forEach((A) => {
|
|
3044
|
+
A._updateNodeVisibilityImmediate(e);
|
|
3045
|
+
})) : a.childrenTiles.forEach((A) => {
|
|
3046
|
+
A._updateNodeVisibilityImmediate(e);
|
|
3047
|
+
});
|
|
3048
|
+
else {
|
|
3049
|
+
if (!a.loadOutsideView && a.metric < 0) return a._changeContentVisibility(!1), a.meshContent.length > 0 && a._disposeMeshContent(), void a.childrenTiles.forEach((A) => {
|
|
3050
|
+
A._updateNodeVisibilityImmediate(!0);
|
|
3051
|
+
});
|
|
3052
|
+
if (a.materialVisibility) if (e) a._changeContentVisibility(!1), a.meshContent.length > 0 && a._disposeMeshContent(), a.childrenTiles.forEach((A) => {
|
|
3053
|
+
A._updateNodeVisibilityImmediate(e);
|
|
3054
|
+
});
|
|
3055
|
+
else {
|
|
3056
|
+
let A = !0;
|
|
3057
|
+
a.childrenTiles.every((t) => !!t._isReadyImmediate() || (A = !1, !1)), A && a.childrenTiles.length > 0 ? (a._changeContentVisibility(!1), a.meshContent.length > 0 && a._disposeMeshContent(), a.childrenTiles.forEach((t) => {
|
|
3058
|
+
t._updateNodeVisibilityImmediate(e);
|
|
3059
|
+
})) : a.childrenTiles.forEach((t) => {
|
|
3060
|
+
t._updateNodeVisibilityImmediate(!0);
|
|
3061
|
+
});
|
|
3062
|
+
}
|
|
3063
|
+
else a.childrenTiles.forEach((A) => {
|
|
3064
|
+
A._updateNodeVisibilityImmediate(e);
|
|
3065
|
+
});
|
|
3066
|
+
}
|
|
3067
|
+
else a.childrenTiles.forEach((A) => {
|
|
3068
|
+
A._updateNodeVisibilityImmediate(e);
|
|
3069
|
+
});
|
|
3070
|
+
}
|
|
3071
|
+
_shouldBeVisibleUpdateImmediate() {
|
|
3072
|
+
const e = this;
|
|
3073
|
+
e.hasMeshContent ? e.metric == null ? e.shouldBeVisible = !1 : e.metric < 0 ? (e.shouldBeVisible = !!e.loadOutsideView, e.childrenTiles.forEach((a) => {
|
|
3074
|
+
a._setShouldNotBeVisibleRecursive();
|
|
3075
|
+
})) : e.metric < e.geometricErrorMultiplier * e.geometricError ? e.hasUnloadedJSONContent || (e.json && e.json.children && e.json.children.length > 0 ? (e.shouldBeVisible = !1, e.childrenTiles.forEach((a) => {
|
|
3076
|
+
a.shouldBeVisible = !0, a._shouldBeVisibleUpdateImmediate();
|
|
3077
|
+
})) : e.shouldBeVisible = !0) : e.childrenTiles.forEach((a) => {
|
|
3078
|
+
a._setShouldNotBeVisibleRecursive();
|
|
3079
|
+
}) : (e.childrenTiles.forEach((a) => {
|
|
3080
|
+
a.shouldBeVisible = !0, a._shouldBeVisibleUpdateImmediate();
|
|
3081
|
+
}), e.shouldBeVisible = !1);
|
|
3082
|
+
}
|
|
3083
|
+
_setShouldNotBeVisibleRecursive() {
|
|
3084
|
+
this.shouldBeVisible = !1, this.childrenTiles.forEach((e) => {
|
|
3085
|
+
e._setShouldNotBeVisibleRecursive();
|
|
3086
|
+
});
|
|
3087
|
+
}
|
|
3088
|
+
_loadMeshImmediate() {
|
|
3089
|
+
const e = this;
|
|
3090
|
+
e.hasMeshContent && e.shouldBeVisible ? e.meshContent.length < e.hasMeshContent && e.contentURL.length == 0 && (e.deleted = !1, e._load(!1, !0)) : e.childrenTiles.forEach((a) => {
|
|
3091
|
+
a._loadMeshImmediate();
|
|
3092
|
+
});
|
|
3093
|
+
}
|
|
3094
|
+
_computeMetricRecursive(e, a) {
|
|
3095
|
+
const A = this;
|
|
3096
|
+
A.metric = -1, A.isSetup && (A.boundingVolume && A.geometricError && (A.metric = A._calculateUpdateMetric(e, a)), A.childrenTiles.forEach((t) => t._computeMetricRecursive(e, a)));
|
|
3097
|
+
}
|
|
3098
|
+
_expandTreeImmediate(e) {
|
|
3099
|
+
const a = this;
|
|
3100
|
+
a.hasUnloadedJSONContent || (a.hasMeshContent ? a.occlusionCullingService && a.hasMeshContent && !a.occlusionCullingService.hasID(a.colorID) || a.metric >= 0 && a.metric < a.geometricErrorMultiplier * a.geometricError && a.json && a.json.children && a.childrenTiles.length < a.json.children.length && a._loadJsonChildren(e) : a.json && a.json.children && a.childrenTiles.length < a.json.children.length && a._loadJsonChildren(e)), a.childrenTiles.forEach((A) => A._expandTreeImmediate(e));
|
|
3101
|
+
}
|
|
3102
|
+
_update(e, a) {
|
|
3103
|
+
const A = this;
|
|
3104
|
+
if (!A.isSetup) return;
|
|
3105
|
+
const t = A.materialVisibility;
|
|
3106
|
+
A.boundingVolume && A.geometricError && (A.metric = A._calculateUpdateMetric(e, a)), A.childrenTiles.forEach((i) => i._update(e, a)), function(i) {
|
|
3107
|
+
if (A.hasMeshContent && !(A.meshContent.length < A.hasMeshContent)) {
|
|
3108
|
+
if (i < 0) return A.inFrustum = !1, void A._changeContentVisibility(!!A.loadOutsideView);
|
|
3109
|
+
if (A.inFrustum = !0, A.childrenTiles.length == 0) return void A._changeContentVisibility(!0);
|
|
3110
|
+
if (i >= A.geometricErrorMultiplier * A.geometricError) A._changeContentVisibility(!0);
|
|
3111
|
+
else if (i < A.geometricErrorMultiplier * A.geometricError && A.refine == "REPLACE") {
|
|
3112
|
+
let s = !0;
|
|
3113
|
+
A.childrenTiles.every((r) => !!r._isReady() || (s = !1, !1)), s ? A._changeContentVisibility(!1) : A._changeContentVisibility(!0);
|
|
3114
|
+
}
|
|
3115
|
+
}
|
|
3116
|
+
}(A.metric), function(i) {
|
|
3117
|
+
i < 0 && A.hasMeshContent || A.occlusionCullingService && A.hasMeshContent && !A.occlusionCullingService.hasID(A.colorID) || (!A.hasMeshContent || i <= A.geometricErrorMultiplier * A.geometricError && A.meshContent.length > 0) && A.json && A.json.children && A.childrenTiles.length != A.json.children.length && A._loadJsonChildren(e);
|
|
3118
|
+
}(A.metric), function(i, s) {
|
|
3119
|
+
if (A.hasMeshContent) {
|
|
3120
|
+
if (!A.inFrustum || A.occlusionCullingService && !s && A.hasMeshContent && A.meshContent.length > 0 && A.materialVisibility && A._areAllChildrenLoadedAndHidden()) return void A._disposeChildren();
|
|
3121
|
+
i >= A.geometricErrorMultiplier * A.geometricError && A._disposeChildren();
|
|
3122
|
+
}
|
|
3123
|
+
}(A.metric, t);
|
|
3124
|
+
}
|
|
3125
|
+
_loadJsonChildren(e) {
|
|
3126
|
+
const a = this;
|
|
3127
|
+
for (let A = a.json.children.length - 1; A >= 0; A--) a.json.children[A].root || a.json.children[A].children || a.json.children[A].getChildren || a.json.children[A].content || a.json.children[A].contents || a.json.children.splice(A, 1);
|
|
3128
|
+
a.json.children.forEach((A) => {
|
|
3129
|
+
let t = new EA({ parentTile: a, queryParams: a.queryParams, parentGeometricError: a.geometricError, parentBoundingVolume: a.boundingVolume, parentRefine: a.refine, json: A, rootPath: a.rootPath, geometricErrorMultiplier: a.geometricErrorMultiplier, loadOutsideView: a.loadOutsideView, level: Math.floor(a.level) + 1, tileLoader: a.tileLoader, cameraOnLoad: e, occlusionCullingService: a.occlusionCullingService, renderer: a.renderer, static: a.static, centerModel: !1, displayErrors: a.displayErrors, displayCopyright: a.displayCopyright, distanceBias: a.distanceBias, loadingStrategy: a.loadingStrategy, drawBoundingVolume: a.drawBoundingVolume });
|
|
3130
|
+
a.childrenTiles.push(t), a.add(t);
|
|
3131
|
+
}), a.updateMatrices(!0);
|
|
3132
|
+
}
|
|
3133
|
+
_areAllChildrenLoadedAndHidden() {
|
|
3134
|
+
let e = !0;
|
|
3135
|
+
const a = this;
|
|
3136
|
+
return this.childrenTiles.every((A) => {
|
|
3137
|
+
if (A.hasMeshContent) {
|
|
3138
|
+
if (A.childrenTiles.length > 0) return e = !1, !1;
|
|
3139
|
+
if (!A.metric < 0) return !0;
|
|
3140
|
+
if (A.materialVisibility || a.occlusionCullingService.hasID(A.colorID)) return e = !1, !1;
|
|
3141
|
+
} else if (!A._areAllChildrenLoadedAndHidden()) return e = !1, !1;
|
|
3142
|
+
return !0;
|
|
3143
|
+
}), e;
|
|
3144
|
+
}
|
|
3145
|
+
_isReady() {
|
|
3146
|
+
if (this.metric == null) return !1;
|
|
3147
|
+
if (this.metric < 0) return !0;
|
|
3148
|
+
if (this.hasUnloadedJSONContent) return !1;
|
|
3149
|
+
if (!this.hasMeshContent && this.json.children.length == 0 && !this.hasUnloadedJSONContent) return !0;
|
|
3150
|
+
if (!this.hasMeshContent || this.meshContent.length == 0 || !this.materialVisibility) {
|
|
3151
|
+
if (this.children.length > 0) {
|
|
3152
|
+
var e = !0;
|
|
3153
|
+
return this.childrenTiles.every((a) => !!a._isReady() || (e = !1, !1)), e;
|
|
3154
|
+
}
|
|
3155
|
+
return !1;
|
|
3156
|
+
}
|
|
3157
|
+
return !this.hasMeshContent || !(this.meshContent.length < this.hasMeshContent) && !!this.materialVisibility;
|
|
3158
|
+
}
|
|
3159
|
+
_isReadyImmediate() {
|
|
3160
|
+
if (this.materialVisibility || !this.loadOutsideView && this.metric < 0) return !0;
|
|
3161
|
+
if (this.childrenTiles.length > 0) {
|
|
3162
|
+
var e = !0;
|
|
3163
|
+
return this.childrenTiles.every((a) => !!a._isReadyImmediate() || (e = !1, !1)), e;
|
|
3164
|
+
}
|
|
3165
|
+
return !1;
|
|
3166
|
+
}
|
|
3167
|
+
_changeContentVisibility(e) {
|
|
3168
|
+
const a = this;
|
|
3169
|
+
a.bbox && (a.bbox.material.visible = e), a.hasMeshContent && a.meshContent.length > 0 && (e ? a.meshContent.forEach((A) => {
|
|
3170
|
+
A.traverse((t) => {
|
|
3171
|
+
(t.isMesh || t.isPoints) && t.layers.enable(0);
|
|
3172
|
+
});
|
|
3173
|
+
}) : a.meshContent.forEach((A) => {
|
|
3174
|
+
A.traverse((t) => {
|
|
3175
|
+
(t.isMesh || t.isPoints) && t.layers.disable(0);
|
|
3176
|
+
});
|
|
3177
|
+
})), a.materialVisibility != e && (a.materialVisibility = e);
|
|
3178
|
+
}
|
|
3179
|
+
_calculateUpdateMetric(e, a) {
|
|
3180
|
+
let A = 0;
|
|
3181
|
+
if (this.boundingVolume instanceof te) {
|
|
3182
|
+
if (T.copy(this.boundingVolume.sphere), T.applyMatrix4(this.matrixWorld), !a.intersectsSphere(T)) return -1;
|
|
3183
|
+
A = Math.max(0, e.position.distanceTo(T.center) - T.radius - e.near);
|
|
3184
|
+
} else {
|
|
3185
|
+
if (!(this.boundingVolume instanceof m.Sphere)) return console.error("unsupported shape"), -1;
|
|
3186
|
+
if (T.copy(this.boundingVolume), T.applyMatrix4(this.matrixWorld), !a.intersectsSphere(T)) return -1;
|
|
3187
|
+
A = Math.max(0, e.position.distanceTo(T.center) - T.radius - e.near);
|
|
3188
|
+
}
|
|
3189
|
+
if (A = Math.pow(A, this.distanceBias), A == 0) return 0;
|
|
3190
|
+
const t = this.matrixWorld.getMaxScaleOnAxis();
|
|
3191
|
+
this.renderer && this.renderer.getDrawingBufferSize(this.rendererSize);
|
|
3192
|
+
let i = this.rendererSize.y, s = e.fov;
|
|
3193
|
+
e.aspect < 1 && (s *= e.aspect, i = this.rendererSize.x);
|
|
3194
|
+
let r = 2 * Math.tan(0.5 * s * 0.017453292519943295) * A;
|
|
3195
|
+
return 16 * window.devicePixelRatio * r / (i * t);
|
|
3196
|
+
}
|
|
3197
|
+
_getSiblings() {
|
|
3198
|
+
const e = this, a = [];
|
|
3199
|
+
if (!e.parentTile) return a;
|
|
3200
|
+
let A = e.parentTile;
|
|
3201
|
+
for (; !A.hasMeshContent && A.parentTile; ) A = A.parentTile;
|
|
3202
|
+
return A.childrenTiles.forEach((t) => {
|
|
3203
|
+
if (t && t != e) {
|
|
3204
|
+
for (; !t.hasMeshContent && t.childrenTiles[0]; ) t = t.childrenTiles[0];
|
|
3205
|
+
a.push(t);
|
|
3206
|
+
}
|
|
3207
|
+
}), a;
|
|
3208
|
+
}
|
|
3209
|
+
_calculateDistanceToCamera(e) {
|
|
3210
|
+
return this.boundingVolume instanceof te ? (T.copy(this.boundingVolume.sphere), T.applyMatrix4(this.matrixWorld)) : this.boundingVolume instanceof m.Sphere ? (T.copy(this.boundingVolume), T.applyMatrix4(this.matrixWorld)) : console.error("unsupported shape"), Math.max(0, e.position.distanceTo(T.center) - T.radius);
|
|
3211
|
+
}
|
|
3212
|
+
setGeometricErrorMultiplier(e) {
|
|
3213
|
+
this.geometricErrorMultiplier = e, this.childrenTiles.forEach((a) => a.setGeometricErrorMultiplier(e));
|
|
3214
|
+
}
|
|
3215
|
+
setDistanceBias(e) {
|
|
3216
|
+
this.distanceBias = e, this.childrenTiles.forEach((a) => a.setDistanceBias(e));
|
|
3217
|
+
}
|
|
3218
|
+
_transformWGS84ToCartesian(e, a, A, t) {
|
|
3219
|
+
const i = 6378137 / Math.sqrt(1 - 0.006694384442042 * Math.pow(Math.sin(a), 2)), s = Math.cos(a), r = Math.cos(e), b = Math.sin(a), o = i + A, d = o * s * r, c = o * s * Math.sin(e), g = (0.993305615557957 * i + A) * b;
|
|
3220
|
+
t.set(d, c, g);
|
|
3221
|
+
}
|
|
3222
|
+
}
|
|
3223
|
+
function Na(n) {
|
|
3224
|
+
var e = document.createElement("div");
|
|
3225
|
+
e.textContent = n, e.style.position = "fixed", e.style.top = "10px", e.style.left = "50%", e.style.transform = "translateX(-50%)", e.style.padding = "10px", e.style.backgroundColor = "#ff8800", e.style.color = "#ffffff", e.style.zIndex = "9999", document.body.appendChild(e), setTimeout(function() {
|
|
3226
|
+
e.remove();
|
|
3227
|
+
}, 8e3);
|
|
3228
|
+
}
|
|
3229
|
+
function aa() {
|
|
3230
|
+
V || ((V = document.createElement("div")).style.position = "fixed", V.style.bottom = "20px", V.style.left = "20px", V.style.color = "white", V.style.textShadow = "2px 2px 0 #000, -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000", V.style.padding = "10px", V.style.backgroundColor = "rgba(0, 0, 0, 0.1)", document.body.appendChild(V));
|
|
3231
|
+
const n = fi();
|
|
3232
|
+
let e = "";
|
|
3233
|
+
n.forEach((a) => {
|
|
3234
|
+
e += a + ", ";
|
|
3235
|
+
}), e = e.slice(0, -2), V.textContent = e;
|
|
3236
|
+
}
|
|
3237
|
+
const G = new m.Sphere(new m.Vector3(0, 0, 0), 1), Ae = new m.Vector3(0, 0, 0), Aa = new m.Vector3(0, 0, 0), ui = new m.Vector3(0, 1, 0), ta = new m.Vector2(), _a = new m.Quaternion(), Pa = new m.Matrix4();
|
|
3238
|
+
class Ia extends m.Object3D {
|
|
3239
|
+
constructor(e) {
|
|
3240
|
+
super();
|
|
3241
|
+
const a = this;
|
|
3242
|
+
if (e.queryParams && (this.queryParams = { ...e.queryParams }), this.uuid = CA(), e.tileLoader ? this.tileLoader = e.tileLoader : console.error("an instanced tileset must be provided an InstancedTilesetLoader"), this.master = e.master, this.loadOutsideView = e.loadOutsideView, this.cameraOnLoad = e.cameraOnLoad, this.parentTile = e.parentTile, this.distanceBias = Math.max(1e-4, e.distanceBias ? e.distanceBias : 1), this.childrenTiles = [], this.jsonChildren = [], this.meshContent = /* @__PURE__ */ new Set(), this.static = e.static, this.static && (this.matrixAutoUpdate = !1, this.matrixWorldAutoUpdate = !1), this.tileContent, this.refinement, this.rootPath, this.geometricError, this.boundingVolume, this.json, this.materialVisibility = !1, this.inFrustum = !0, this.level = e.level ? e.level : 0, this.hasMeshContent = 0, this.hasUnloadedJSONContent = 0, this.centerModel = e.centerModel, this.deleted = !1, this.abortController = new AbortController(), e.json) this.rootPath = e.json.rootPath ? e.json.rootPath : e.rootPath, e.json.children && (this.jsonChildren = e.json.children), a.setup(e);
|
|
3243
|
+
else if (e.url) {
|
|
3244
|
+
this.loadJson = (i, s) => {
|
|
3245
|
+
const r = ie.dirname(s);
|
|
3246
|
+
a.setup({ rootPath: r, json: i, onLoadCallback: e.onLoadCallback });
|
|
3247
|
+
};
|
|
3248
|
+
var A = e.url;
|
|
3249
|
+
if (a.queryParams) {
|
|
3250
|
+
var t = "";
|
|
3251
|
+
for (let i in a.queryParams) a.queryParams.hasOwnProperty(i) && (t += "&" + i + "=" + a.queryParams[i]);
|
|
3252
|
+
A.includes("?") ? A += t : A += "?" + t.substring(1);
|
|
3253
|
+
}
|
|
3254
|
+
a.tileLoader.get(a.abortController, A, a.uuid, a);
|
|
3255
|
+
}
|
|
3256
|
+
}
|
|
3257
|
+
async setup(e) {
|
|
3258
|
+
const a = this;
|
|
3259
|
+
e.json.root ? (a.json = e.json.root, !a.json.children && a.json.getChildren && (a.json.children = await a.json.getChildren()), a.jsonChildren = a.json.children, a.json.refinement || (a.json.refinement = e.json.refinement), a.json.geometricError || (a.json.geometricError = e.json.geometricError), a.json.transform || (a.json.transform = e.json.transform), a.json.boundingVolume || (a.json.boundingVolume = e.json.boundingVolume)) : (a.json = e.json, !a.json.children && a.json.getChildren && (a.json.children = await a.json.getChildren(), a.jsonChildren = a.json.children)), a.rootPath = e.json.rootPath ? e.json.rootPath : e.rootPath, a.json.refinement ? a.refinement = a.json.refinement : a.refinement = e.parentRefinement, a.json.geometricError ? a.geometricError = a.json.geometricError : a.geometricError = e.parentGeometricError;
|
|
3260
|
+
let A = new m.Matrix4();
|
|
3261
|
+
if (a.json.transform && !a.centerModel && (A.elements = a.json.transform), a.applyMatrix4(A), a.parentTile && a.parentTile.matrix && (a.matrix.premultiply(a.parentTile.matrix), a.matrix.decompose(a.position, a.quaternion, a.scale)), a.matrixWorldNeedsUpdate = !0, a.updateWorldMatrix(!0, !0), a.json.boundingVolume) if (a.json.boundingVolume.box) a.boundingVolume = new te(a.json.boundingVolume.box);
|
|
3262
|
+
else if (a.json.boundingVolume.region) {
|
|
3263
|
+
const i = a.json.boundingVolume.region;
|
|
3264
|
+
a.transformWGS84ToCartesian(i[0], i[1], i[4], Ae), a.transformWGS84ToCartesian(i[2], i[3], i[5], Aa), Ae.lerp(Aa, 0.5), a.boundingVolume = new m.Sphere(new m.Vector3(Ae.x, Ae.y, Ae.z), Ae.distanceTo(Aa));
|
|
3265
|
+
} else if (a.json.boundingVolume.sphere) {
|
|
3266
|
+
const i = a.json.boundingVolume.sphere;
|
|
3267
|
+
a.boundingVolume = new m.Sphere(new m.Vector3(i[0], i[1], i[2]), i[3]);
|
|
3268
|
+
} else a.boundingVolume = e.parentBoundingVolume;
|
|
3269
|
+
else a.boundingVolume = e.parentBoundingVolume;
|
|
3270
|
+
function t(i) {
|
|
3271
|
+
i.uri && i.uri.includes("json") || i.url && i.url.includes("json") ? a.hasUnloadedJSONContent++ : a.hasMeshContent++;
|
|
3272
|
+
}
|
|
3273
|
+
if (a.json.content ? (t(a.json.content), a.load()) : a.json.contents && (a.json.contents.forEach((i) => t(i)), a.load()), a.centerModel) {
|
|
3274
|
+
const i = new m.Sphere();
|
|
3275
|
+
a.boundingVolume instanceof te ? i.copy(a.boundingVolume.sphere) : a.boundingVolume instanceof m.Sphere && i.copy(a.boundingVolume), this.json.boundingVolume.region && (a.transformWGS84ToCartesian(0.5 * (a.json.boundingVolume.region[0] + a.json.boundingVolume.region[2]), 0.5 * (a.json.boundingVolume.region[1] + a.json.boundingVolume.region[3]), 0.5 * (a.json.boundingVolume.region[4] + a.json.boundingVolume.region[5]), Ae), _a.setFromUnitVectors(Ae.normalize(), ui.normalize()), a.master.applyQuaternion(_a), a.master.updateWorldMatrix(!1, !1)), Pa.makeTranslation(-i.center.x * a.scale.x, -i.center.y * a.scale.y, -i.center.z * a.scale.z), a.master.matrix.multiply(Pa), a.master.matrix.decompose(a.master.position, a.master.quaternion, a.master.scale);
|
|
3276
|
+
}
|
|
3277
|
+
a.isSetup = !0, e.onLoadCallback && e.onLoadCallback(a);
|
|
3278
|
+
}
|
|
3279
|
+
isAbsolutePathOrURL(e) {
|
|
3280
|
+
const a = /^(?:http|https|ftp|tcp|udp):\/\/\S+/.test(e), A = e.startsWith("/") && !e.startsWith("//");
|
|
3281
|
+
return a || A;
|
|
3282
|
+
}
|
|
3283
|
+
assembleURL(e, a) {
|
|
3284
|
+
e.endsWith("/") || (e += "/");
|
|
3285
|
+
const A = new URL(e);
|
|
3286
|
+
let t = A.pathname.split("/").filter((s) => s !== ""), i = a.split("/").filter((s) => s !== "");
|
|
3287
|
+
for (let s = 1; s <= t.length && !(s >= i.length); s++)
|
|
3288
|
+
if (t.slice(t.length - s, t.length).join("/") === i.slice(0, s).join("/")) {
|
|
3289
|
+
for (let r = 0; r < s; r++) t.pop();
|
|
3290
|
+
break;
|
|
3291
|
+
}
|
|
3292
|
+
for (; i.length > 0 && i[0] === ".."; ) t.pop(), i.shift();
|
|
3293
|
+
return `${A.protocol}//${A.host}/${[...t, ...i].join("/")}`;
|
|
3294
|
+
}
|
|
3295
|
+
extractQueryParams(e, a) {
|
|
3296
|
+
const A = new URL(e);
|
|
3297
|
+
for (let [t, i] of A.searchParams) a[t] = i;
|
|
3298
|
+
return A.search = "", A.toString();
|
|
3299
|
+
}
|
|
3300
|
+
load() {
|
|
3301
|
+
var e = this;
|
|
3302
|
+
function a(A) {
|
|
3303
|
+
let t;
|
|
3304
|
+
A.uri ? t = A.uri : A.url && (t = A.url);
|
|
3305
|
+
const i = /^(?:http|https|ftp|tcp|udp):\/\/\S+/;
|
|
3306
|
+
if (i.test(e.rootPath) ? i.test(t) || (t = e.assembleURL(e.rootPath, t)) : ie.isAbsolute(e.rootPath) && (t = e.rootPath + ie.sep + t), t = e.extractQueryParams(t, e.queryParams), e.queryParams) {
|
|
3307
|
+
var s = "";
|
|
3308
|
+
for (let r in e.queryParams) e.queryParams.hasOwnProperty(r) && (s += "&" + r + "=" + e.queryParams[r]);
|
|
3309
|
+
t.includes("?") ? t += s : t += "?" + s.substring(1);
|
|
3310
|
+
}
|
|
3311
|
+
t && (t.includes(".b3dm") || t.includes(".glb") || t.includes(".gltf") ? (e.contentURL = t, e.tileLoader.get(e.abortController, t, e.uuid, e, e.cameraOnLoad ? () => e.calculateDistanceToCamera(e.cameraOnLoad) : () => 0, () => e.getSiblings(), e.level, !e.json.boundingVolume.region, !!e.json.boundingVolume.region, e.geometricError)) : t.includes(".json") && e.tileLoader.get(e.abortController, t, e.uuid, e));
|
|
3312
|
+
}
|
|
3313
|
+
e.deleted || (e.json.content ? a(e.json.content) : e.json.contents && e.json.contents.forEach((A) => a(A)));
|
|
3314
|
+
}
|
|
3315
|
+
loadMesh(e) {
|
|
3316
|
+
this.deleted || this.meshContent.add(e);
|
|
3317
|
+
}
|
|
3318
|
+
loadJson(e, a) {
|
|
3319
|
+
this.deleted || (this.json.children && (this.jsonChildren = this.json.children), e.rootPath = ie.dirname(a), this.jsonChildren.push(e), this.hasUnloadedJSONContent--);
|
|
3320
|
+
}
|
|
3321
|
+
dispose() {
|
|
3322
|
+
const e = this;
|
|
3323
|
+
e.childrenTiles.forEach((a) => a.dispose()), e.deleted = !0, e.abortController && e.abortController.abort(), this.parent = null, this.parentTile = null, this.dispatchEvent({ type: "removed" });
|
|
3324
|
+
}
|
|
3325
|
+
disposeChildren() {
|
|
3326
|
+
this.childrenTiles.forEach((e) => e.dispose()), this.childrenTiles = [];
|
|
3327
|
+
}
|
|
3328
|
+
_update(e, a) {
|
|
3329
|
+
const A = this;
|
|
3330
|
+
function t(i) {
|
|
3331
|
+
if (A.hasMeshContent && !(A.meshContent.size < A.hasMeshContent)) {
|
|
3332
|
+
if (i < 0) return A.inFrustum = !1, void A.changeContentVisibility(!!A.loadOutsideView);
|
|
3333
|
+
if (A.inFrustum = !0, A.childrenTiles.length != 0) {
|
|
3334
|
+
if (i >= A.master.geometricErrorMultiplier * A.geometricError) A.changeContentVisibility(!0);
|
|
3335
|
+
else if (i < A.master.geometricErrorMultiplier * A.geometricError) {
|
|
3336
|
+
let s = !0;
|
|
3337
|
+
A.childrenTiles.every((r) => !!r.isReady() || (s = !1, !1)), s && A.changeContentVisibility(!1);
|
|
3338
|
+
}
|
|
3339
|
+
} else A.changeContentVisibility(!0);
|
|
3340
|
+
}
|
|
3341
|
+
}
|
|
3342
|
+
A.isSetup && (A.materialVisibility, A.boundingVolume && A.geometricError && (A.metric = A.calculateUpdateMetric(e, a)), A.childrenTiles.forEach((i) => i._update(e, a)), t(A.metric), function(i) {
|
|
3343
|
+
i < 0 && A.hasMeshContent || (!A.hasMeshContent && A.rootPath || i < A.master.geometricErrorMultiplier * A.geometricError && A.meshContent.size > 0) && A.json && A.jsonChildren && A.childrenTiles.length != A.jsonChildren.length && A.jsonChildren.forEach((s) => {
|
|
3344
|
+
if (!(s.root || s.children || s.getChildren || s.content || s.contents)) return;
|
|
3345
|
+
let r = new Ia({ parentTile: A, queryParams: A.queryParams, parentGeometricError: A.geometricError, parentBoundingVolume: A.boundingVolume, parentRefinement: A.refinement, json: s, rootPath: A.rootPath, loadOutsideView: A.loadOutsideView, level: A.level + 1, tileLoader: A.tileLoader, cameraOnLoad: e, master: A.master, centerModel: !1 });
|
|
3346
|
+
A.childrenTiles.push(r);
|
|
3347
|
+
});
|
|
3348
|
+
}(A.metric), function(i) {
|
|
3349
|
+
if (A.hasMeshContent) {
|
|
3350
|
+
if (!A.inFrustum) return A.disposeChildren(), void t(i);
|
|
3351
|
+
i >= A.master.geometricErrorMultiplier * A.geometricError && (A.disposeChildren(), t(i));
|
|
3352
|
+
}
|
|
3353
|
+
}(A.metric));
|
|
3354
|
+
}
|
|
3355
|
+
areAllChildrenLoadedAndHidden() {
|
|
3356
|
+
let e = !0;
|
|
3357
|
+
return this.childrenTiles.every((a) => {
|
|
3358
|
+
if (a.hasMeshContent) {
|
|
3359
|
+
if (a.childrenTiles.length > 0) return e = !1, !1;
|
|
3360
|
+
if (!a.inFrustum) return !0;
|
|
3361
|
+
if (!a.materialVisibility || a.meshesToDisplay != a.meshesDisplayed) return e = !1, !1;
|
|
3362
|
+
} else if (!a.areAllChildrenLoadedAndHidden()) return e = !1, !1;
|
|
3363
|
+
return !0;
|
|
3364
|
+
}), e;
|
|
3365
|
+
}
|
|
3366
|
+
isReady() {
|
|
3367
|
+
if (!this.inFrustum) return !0;
|
|
3368
|
+
if (this.hasUnloadedJSONContent) return !1;
|
|
3369
|
+
if (!this.hasMeshContent || this.meshContent.size == 0 || !this.materialVisibility) {
|
|
3370
|
+
if (this.childrenTiles.length > 0) {
|
|
3371
|
+
var e = !0;
|
|
3372
|
+
return this.childrenTiles.every((a) => !!a.isReady() || (e = !1, !1)), e;
|
|
3373
|
+
}
|
|
3374
|
+
return !1;
|
|
3375
|
+
}
|
|
3376
|
+
return !this.hasMeshContent || !(this.meshContent.size < this.hasMeshContent) && !!this.materialVisibility;
|
|
3377
|
+
}
|
|
3378
|
+
changeContentVisibility(e) {
|
|
3379
|
+
this.materialVisibility = e;
|
|
3380
|
+
}
|
|
3381
|
+
calculateUpdateMetric(e, a) {
|
|
3382
|
+
if (this.boundingVolume instanceof te) {
|
|
3383
|
+
if (G.copy(this.boundingVolume.sphere), G.applyMatrix4(this.matrixWorld), !a.intersectsSphere(G)) return -1;
|
|
3384
|
+
} else {
|
|
3385
|
+
if (!(this.boundingVolume instanceof m.Sphere)) return console.error("unsupported shape"), -1;
|
|
3386
|
+
if (G.copy(this.boundingVolume), G.applyMatrix4(this.matrixWorld), !a.intersectsSphere(G)) return -1;
|
|
3387
|
+
}
|
|
3388
|
+
let A = Math.max(0, e.position.distanceTo(G.center) - G.radius);
|
|
3389
|
+
if (A = Math.pow(A, this.distanceBias), A == 0) return 0;
|
|
3390
|
+
const t = this.matrixWorld.getMaxScaleOnAxis();
|
|
3391
|
+
this.master._renderSize(ta);
|
|
3392
|
+
let i = ta.y, s = e.fov;
|
|
3393
|
+
e.aspect < 1 && (s *= e.aspect, i = ta.x);
|
|
3394
|
+
let r = 2 * Math.tan(0.5 * s * 0.017453292519943295) * A;
|
|
3395
|
+
return 16 * window.devicePixelRatio * r / (i * t);
|
|
3396
|
+
}
|
|
3397
|
+
getSiblings() {
|
|
3398
|
+
const e = this, a = [];
|
|
3399
|
+
if (!e.parentTile) return a;
|
|
3400
|
+
let A = e.parentTile;
|
|
3401
|
+
for (; !A.hasMeshContent && A.parentTile; ) A = A.parentTile;
|
|
3402
|
+
return A.childrenTiles.forEach((t) => {
|
|
3403
|
+
if (t && t != e) {
|
|
3404
|
+
for (; !t.hasMeshContent && t.childrenTiles[0]; ) t = t.childrenTiles[0];
|
|
3405
|
+
a.push(t);
|
|
3406
|
+
}
|
|
3407
|
+
}), a;
|
|
3408
|
+
}
|
|
3409
|
+
calculateDistanceToCamera(e) {
|
|
3410
|
+
return this.boundingVolume instanceof te ? (G.copy(this.boundingVolume.sphere), G.applyMatrix4(this.matrixWorld)) : this.boundingVolume instanceof m.Sphere ? (G.copy(this.boundingVolume), G.applyMatrix4(this.matrixWorld)) : console.error("unsupported shape"), Math.max(0, e.position.distanceTo(G.center) - G.radius);
|
|
3411
|
+
}
|
|
3412
|
+
getWorldMatrix() {
|
|
3413
|
+
return this.matrixWorld;
|
|
3414
|
+
}
|
|
3415
|
+
transformWGS84ToCartesian(e, a, A, t) {
|
|
3416
|
+
const i = 6378137 / Math.sqrt(1 - 0.006694384442042 * Math.pow(Math.sin(a), 2)), s = Math.cos(a), r = Math.cos(e), b = Math.sin(a), o = i + A, d = o * s * r, c = o * s * Math.sin(e), g = (0.993305615557957 * i + A) * b;
|
|
3417
|
+
t.set(d, c, g);
|
|
3418
|
+
}
|
|
3419
|
+
}
|
|
3420
|
+
class wi extends m.Object3D {
|
|
3421
|
+
constructor(e) {
|
|
3422
|
+
super(), e.master = this, e.domWidth && e.domHeight ? this.rendererSize = new m.Vector2(e.domWidth, e.domHeight) : this.rendererSize = new m.Vector2(1e3, 1e3), this.renderer = e.renderer, this.distanceBias = Math.max(1e-4, e.distanceBias ? e.distanceBias : 1), this.geometricErrorMultiplier = e.geometricErrorMultiplier ? e.geometricErrorMultiplier : 1, this.tileset = new Ia(e), e.static && (this.matrixAutoUpdate = !1), this.tileLoader = e.tileLoader;
|
|
3423
|
+
}
|
|
3424
|
+
_renderSize(e) {
|
|
3425
|
+
this.renderer ? this.renderer.getDrawingBufferSize(e) : e.copy(this.rendererSize);
|
|
3426
|
+
}
|
|
3427
|
+
setCanvasSize(e, a) {
|
|
3428
|
+
this.rendererSize.set(e, a);
|
|
3429
|
+
}
|
|
3430
|
+
update(e, a) {
|
|
3431
|
+
if (a) this.tileset._update(e, a);
|
|
3432
|
+
else {
|
|
3433
|
+
const A = new m.Frustum();
|
|
3434
|
+
A.setFromProjectionMatrix(new m.Matrix4().multiplyMatrices(e.projectionMatrix, e.matrixWorldInverse)), this.tileset._update(e, A);
|
|
3435
|
+
}
|
|
3436
|
+
}
|
|
3437
|
+
setGeometricErrorMultiplier(e) {
|
|
3438
|
+
this.geometricErrorMultiplier = e || 1;
|
|
3439
|
+
}
|
|
3440
|
+
}
|
|
3441
|
+
class Bi {
|
|
3442
|
+
constructor(e) {
|
|
3443
|
+
const a = this;
|
|
3444
|
+
a.scene = e, a.instancedTiles = [], a.instancedMesh, a.reuseableMatrix = new m.Matrix4();
|
|
3445
|
+
}
|
|
3446
|
+
addInstance(e) {
|
|
3447
|
+
const a = this;
|
|
3448
|
+
e.added = !0, e.listOMesh = a.instancedTiles, a.instancedTiles.push(e), a.instancedMesh && e.loadMesh(a.instancedMesh);
|
|
3449
|
+
}
|
|
3450
|
+
addToScene() {
|
|
3451
|
+
const e = this;
|
|
3452
|
+
e.instancedMesh.setMatrixAt(0, new m.Matrix4()), e.instancedMesh.instanceMatrix.needsUpdate = !0, e.instancedMesh.count = 1, e.scene.add(e.instancedMesh), e.instancedMesh.onAfterRender = () => {
|
|
3453
|
+
delete e.instancedMesh.onAfterRender, e.instancedMesh.displayedOnce = !0;
|
|
3454
|
+
};
|
|
3455
|
+
}
|
|
3456
|
+
setObject(e) {
|
|
3457
|
+
const a = this;
|
|
3458
|
+
a.instancedMesh = e, a.instancedMesh.matrixAutoUpdate = !1, a.instancedMesh.matrixWorldAutoUpdate = !1, a.scene.children.includes(e) || this.addToScene();
|
|
3459
|
+
for (let A = 0; A < a.instancedTiles.length; A++) a.instancedTiles[A].loadMesh(a.instancedMesh);
|
|
3460
|
+
}
|
|
3461
|
+
update() {
|
|
3462
|
+
const e = this;
|
|
3463
|
+
for (let a = e.instancedTiles.length - 1; a >= 0; a--) e.instancedTiles[a].deleted && e.instancedTiles.splice(a, 1);
|
|
3464
|
+
if (e.instancedMesh) {
|
|
3465
|
+
e.instancedMesh.count = 0, e.instancedMesh.instancedTiles = [];
|
|
3466
|
+
for (let a = 0; a < e.instancedTiles.length; a++) e.instancedTiles[a].meshContent.add(e.instancedMesh), e.instancedTiles[a].materialVisibility && (e.instancedMesh.count++, e.reuseableMatrix.set(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1), e.reuseableMatrix.multiply(e.instancedTiles[a].matrixWorld), e.reuseableMatrix.multiply(e.instancedMesh.baseMatrix), e.instancedMesh.setMatrixAt(e.instancedMesh.count - 1, e.reuseableMatrix), e.instancedMesh.instancedTiles.push(e.instancedTiles[a]));
|
|
3467
|
+
e.instancedMesh.instanceMatrix.needsUpdate = !0, e.instancedMesh.needsUpdate = !0, e.instancedMesh.computeBoundingSphere();
|
|
3468
|
+
}
|
|
3469
|
+
}
|
|
3470
|
+
getCount() {
|
|
3471
|
+
return this.instancedTiles.length;
|
|
3472
|
+
}
|
|
3473
|
+
dispose() {
|
|
3474
|
+
const e = this;
|
|
3475
|
+
return !(e.instancedTiles.length > 0) && !!e.instancedMesh && (e.scene.remove(e.instancedMesh), e.instancedMesh.traverse((a) => {
|
|
3476
|
+
if (a.dispose && a.dispose(), a.material) if (a.material.length) for (let A = 0; A < a.material.length; ++A) a.material[A].dispose();
|
|
3477
|
+
else a.material.dispose();
|
|
3478
|
+
a.geometry && a.geometry.dispose();
|
|
3479
|
+
}), e.instancedMesh.dispose(), !0);
|
|
3480
|
+
}
|
|
3481
|
+
}
|
|
3482
|
+
class Ci {
|
|
3483
|
+
constructor() {
|
|
3484
|
+
const e = this;
|
|
3485
|
+
e.count = 0, e.json, e.instancedTiles = [];
|
|
3486
|
+
}
|
|
3487
|
+
addInstance(e) {
|
|
3488
|
+
this.instancedTiles.push(e), this.json && e.loadJson(this.json, this.url);
|
|
3489
|
+
}
|
|
3490
|
+
setObject(e, a) {
|
|
3491
|
+
const A = this;
|
|
3492
|
+
A.json = e, A.url = a;
|
|
3493
|
+
for (let t = 0; t < A.instancedTiles.length; t++) A.instancedTiles[t].loadJson(A.json, A.url);
|
|
3494
|
+
}
|
|
3495
|
+
getCount() {
|
|
3496
|
+
return this.instancedTiles.length;
|
|
3497
|
+
}
|
|
3498
|
+
update() {
|
|
3499
|
+
const e = this;
|
|
3500
|
+
for (let a = e.instancedTiles.length - 1; a >= 0; a--) e.instancedTiles[a].deleted && e.instancedTiles.splice(a, 1);
|
|
3501
|
+
}
|
|
3502
|
+
dispose() {
|
|
3503
|
+
return !(!this.json || this.instancedTiles.length != 0);
|
|
3504
|
+
}
|
|
3505
|
+
}
|
|
3506
|
+
let oe = 0;
|
|
3507
|
+
class yi {
|
|
3508
|
+
constructor(e, a) {
|
|
3509
|
+
if (this.zUpToYUpMatrix = new m.Matrix4(), this.zUpToYUpMatrix.set(1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1), this.maxCachedItems = 100, this.maxInstances = 1, this.proxy = a.proxy, a && (this.meshCallback = a.meshCallback, this.pointsCallback = a.pointsCallback, a.maxCachedItems && (this.maxCachedItems = a.maxCachedItems), a.maxInstances && (this.maxInstances = a.maxInstances)), this.gltfLoader = new eA(), a && a.dracoLoader) this.gltfLoader.setDRACOLoader(a.dracoLoader), this.hasDracoLoader = !0;
|
|
3510
|
+
else {
|
|
3511
|
+
const A = new tA();
|
|
3512
|
+
A.setDecoderPath("https://www.gstatic.com/draco/versioned/decoders/1.4.3/"), this.gltfLoader.setDRACOLoader(A), this.gltfLoader.hasDracoLoader = !0;
|
|
3513
|
+
}
|
|
3514
|
+
if (a && a.ktx2Loader) this.gltfLoader.setKTX2Loader(a.ktx2Loader), this.hasKTX2Loader = !0;
|
|
3515
|
+
else if (a && a.renderer) {
|
|
3516
|
+
const A = new v();
|
|
3517
|
+
A.setTranscoderPath("https://storage.googleapis.com/ogc-3d-tiles/basis/").detectSupport(a.renderer), this.gltfLoader.setKTX2Loader(A), this.gltfLoader.hasKTX2Loader = !0;
|
|
3518
|
+
}
|
|
3519
|
+
this.gltfLoader.setMeshoptDecoder(BA), this.hasMeshOptDecoder = !0, this.b3dmDecoder = new $a(this.gltfLoader), this.cache = new Xa.LinkedHashMap(), this.scene = e, this.ready = [], this.downloads = [], this.nextReady = [], this.nextDownloads = [];
|
|
3520
|
+
}
|
|
3521
|
+
update() {
|
|
3522
|
+
const e = this;
|
|
3523
|
+
e._checkSize(), e.cache._data.forEach((a) => {
|
|
3524
|
+
a.update();
|
|
3525
|
+
}), oe < 8 && e._download(), e._loadBatch();
|
|
3526
|
+
}
|
|
3527
|
+
_download() {
|
|
3528
|
+
const e = this;
|
|
3529
|
+
if (e.nextDownloads.length != 0 || (e._getNextDownloads(), e.nextDownloads.length != 0)) for (; e.nextDownloads.length > 0; ) {
|
|
3530
|
+
const A = e.nextDownloads.shift();
|
|
3531
|
+
if (A) {
|
|
3532
|
+
if (A.path.includes(".b3dm") && (a = e.proxy ? () => fetch(e.proxy, { method: "POST", body: A.path }) : () => fetch(A.path), oe++, a().then((t) => {
|
|
3533
|
+
if (!t.ok) throw console.error("could not load tile with path : " + A.path), new Error(`couldn't load "${A.path}". Request failed with status ${t.status} : ${t.statusText}`);
|
|
3534
|
+
return t.arrayBuffer();
|
|
3535
|
+
}).then((t) => this.b3dmDecoder.parseB3DMInstanced(t, (i) => {
|
|
3536
|
+
e.meshCallback(i, A.geometricError);
|
|
3537
|
+
}, e.maxInstances, A.sceneZupToYup, A.meshZupToYup)).then((t) => {
|
|
3538
|
+
t.frustumCulled = !1, A.tile.setObject(t), e.ready.unshift(A);
|
|
3539
|
+
}).catch((t) => console.error(t)).finally(() => {
|
|
3540
|
+
oe--;
|
|
3541
|
+
})), A.path.includes(".glb") || A.path.includes(".gltf")) a = e.proxy ? () => fetch(e.proxy, { method: "POST", body: A.path }) : () => fetch(A.path), oe++, a().then((t) => {
|
|
3542
|
+
if (!t.ok) throw new Error("missing content");
|
|
3543
|
+
return t.arrayBuffer();
|
|
3544
|
+
}).then(async (t) => {
|
|
3545
|
+
await Ei(this.gltfLoader), this.gltfLoader.parse(t, null, (i) => {
|
|
3546
|
+
let s;
|
|
3547
|
+
i.scene.asset = i.asset, A.sceneZupToYup && i.scene.applyMatrix4(this.zUpToYUpMatrix), i.scene.traverse((r) => {
|
|
3548
|
+
r.geometricError = A.geometricError, r.isMesh && (A.meshZupToYup && r.applyMatrix4(this.zUpToYUpMatrix), e.meshCallback && e.meshCallback(r, r.geometricError)), r.isPoints && console.error("instanced point cloud is not supported");
|
|
3549
|
+
}), i.scene.updateWorldMatrix(!1, !0), i.scene.traverse((r) => {
|
|
3550
|
+
r.isMesh && (s = new m.InstancedMesh(r.geometry, r.material, e.maxInstances), s.baseMatrix = r.matrixWorld);
|
|
3551
|
+
}), e.ready.unshift(A), s ? (s.frustumCulled = !1, A.tile.setObject(s)) : i.scene.traverse((r) => {
|
|
3552
|
+
r.dispose && r.dispose(), r.material && r.material.dispose();
|
|
3553
|
+
});
|
|
3554
|
+
});
|
|
3555
|
+
}, (t) => {
|
|
3556
|
+
console.error("could not load tile : " + A.path);
|
|
3557
|
+
}).finally(() => {
|
|
3558
|
+
oe--;
|
|
3559
|
+
});
|
|
3560
|
+
else if (A.path.includes(".json")) {
|
|
3561
|
+
var a;
|
|
3562
|
+
a = e.proxy ? () => fetch(e.proxy, { method: "POST", body: A.path }) : () => fetch(A.path), oe++, a().then((t) => {
|
|
3563
|
+
if (!t.ok) throw console.error("could not load tile with path : " + A.path), new Error(`couldn't load "${A.path}". Request failed with status ${t.status} : ${t.statusText}`);
|
|
3564
|
+
return t.json();
|
|
3565
|
+
}).then((t) => la(t, A.path)).then((t) => {
|
|
3566
|
+
A.tile.setObject(t, A.path), e.ready.unshift(A);
|
|
3567
|
+
}).catch((t) => console.error(t)).finally(() => {
|
|
3568
|
+
oe--;
|
|
3569
|
+
});
|
|
3570
|
+
}
|
|
3571
|
+
}
|
|
3572
|
+
}
|
|
3573
|
+
}
|
|
3574
|
+
_loadBatch() {
|
|
3575
|
+
return this.nextReady.length == 0 && (this._getNextReady(), this.nextReady.length == 0) ? 0 : this.nextReady.shift() ? 1 : 0;
|
|
3576
|
+
}
|
|
3577
|
+
_getNextReady() {
|
|
3578
|
+
let e = Number.MAX_VALUE, a = -1;
|
|
3579
|
+
for (let A = this.ready.length - 1; A >= 0; A--) this.ready[A].distanceFunction || this.nextReady.push(this.ready.splice(A, 1)[0]);
|
|
3580
|
+
if (!(this.nextReady.length > 0)) {
|
|
3581
|
+
for (let A = this.ready.length - 1; A >= 0; A--) {
|
|
3582
|
+
const t = this.ready[A].distanceFunction() * this.ready[A].level;
|
|
3583
|
+
t < e && (e = t, a = A);
|
|
3584
|
+
}
|
|
3585
|
+
if (a >= 0) {
|
|
3586
|
+
const A = this.ready.splice(a, 1).pop();
|
|
3587
|
+
this.nextReady.push(A);
|
|
3588
|
+
const t = A.getSiblings();
|
|
3589
|
+
for (let i = this.ready.length - 1; i >= 0; i--) t.includes(this.ready[i].uuid) && this.nextready.push(this.ready.splice(i, 1).pop());
|
|
3590
|
+
}
|
|
3591
|
+
}
|
|
3592
|
+
}
|
|
3593
|
+
get(e, a, A, t, i, s, r, b, o, d) {
|
|
3594
|
+
const c = this, g = function(h) {
|
|
3595
|
+
for (var f = h.split("/"), I = [], B = 0, u = 0; u < f.length; u++) {
|
|
3596
|
+
var E = f[u];
|
|
3597
|
+
E !== "." && E !== "" && E !== ".." ? I[B++] = E : E === ".." && B > 0 && B--;
|
|
3598
|
+
}
|
|
3599
|
+
if (B === 0) return "/";
|
|
3600
|
+
var C = "";
|
|
3601
|
+
for (u = 0; u < B; u++) C += "/" + I[u];
|
|
3602
|
+
return C;
|
|
3603
|
+
}(a);
|
|
3604
|
+
if (!(a.includes(".b3dm") || a.includes(".json") || a.includes(".glb") || a.includes(".gltf"))) return void console.error("the 3DTiles cache can only be used to load B3DM, gltf and json data");
|
|
3605
|
+
const l = c.cache.get(g);
|
|
3606
|
+
if (l) l.addInstance(t);
|
|
3607
|
+
else if (a.includes(".b3dm") || a.includes(".glb") || a.includes(".gltf")) {
|
|
3608
|
+
const h = new Bi(c.scene);
|
|
3609
|
+
h.addInstance(t), c.cache.put(g, h);
|
|
3610
|
+
const f = new AbortController();
|
|
3611
|
+
e.signal.addEventListener("abort", () => {
|
|
3612
|
+
h.getCount() == 0 && f.abort();
|
|
3613
|
+
}), this.downloads.push({ abortController: f, tile: h, key: g, path: a, distanceFunction: i, getSiblings: s, level: r, uuid: A, sceneZupToYup: b, meshZupToYup: o, geometricError: d, shouldDoDownload: () => !0 });
|
|
3614
|
+
} else if (a.includes(".json")) {
|
|
3615
|
+
const h = new Ci();
|
|
3616
|
+
h.addInstance(t), c.cache.put(g, h);
|
|
3617
|
+
const f = new AbortController();
|
|
3618
|
+
e.signal.addEventListener("abort", () => {
|
|
3619
|
+
h.getCount() == 0 && f.abort();
|
|
3620
|
+
}), this.downloads.push({ abortController: f, tile: h, key: g, path: a, distanceFunction: i, getSiblings: s, level: r, shouldDoDownload: () => !0 });
|
|
3621
|
+
}
|
|
3622
|
+
}
|
|
3623
|
+
_getNextDownloads() {
|
|
3624
|
+
let e = Number.MAX_VALUE, a = -1;
|
|
3625
|
+
for (let A = this.downloads.length - 1; A >= 0; A--) {
|
|
3626
|
+
const t = this.downloads[A];
|
|
3627
|
+
t.shouldDoDownload() ? t.distanceFunction || this.nextDownloads.push(this.downloads.splice(A, 1)[0]) : this.downloads.splice(A, 1);
|
|
3628
|
+
}
|
|
3629
|
+
if (!(this.nextDownloads.length > 0)) {
|
|
3630
|
+
for (let A = this.downloads.length - 1; A >= 0; A--) {
|
|
3631
|
+
const t = this.downloads[A], i = t.distanceFunction() * t.level;
|
|
3632
|
+
i < e && (e = i, a = A);
|
|
3633
|
+
}
|
|
3634
|
+
if (a >= 0) {
|
|
3635
|
+
const A = this.downloads.splice(a, 1).pop();
|
|
3636
|
+
this.nextDownloads.push(A);
|
|
3637
|
+
const t = A.getSiblings();
|
|
3638
|
+
for (let i = this.downloads.length - 1; i >= 0; i--) t.includes(this.downloads[i].uuid) && this.nextDownloads.push(this.downloads.splice(i, 1).pop());
|
|
3639
|
+
}
|
|
3640
|
+
}
|
|
3641
|
+
}
|
|
3642
|
+
_checkSize() {
|
|
3643
|
+
const e = this;
|
|
3644
|
+
let a = 0;
|
|
3645
|
+
for (; e.cache.size() > e.maxCachedItems && a < e.cache.size(); ) {
|
|
3646
|
+
a++;
|
|
3647
|
+
const A = e.cache.head();
|
|
3648
|
+
e.cache.remove(A.key), A.value.dispose() || e.cache.put(A.key, A.value);
|
|
3649
|
+
}
|
|
3650
|
+
}
|
|
3651
|
+
}
|
|
3652
|
+
async function Ei(n) {
|
|
3653
|
+
return new Promise((e) => {
|
|
3654
|
+
const a = setInterval(() => {
|
|
3655
|
+
n.hasDracoLoader && !n.dracoLoader || n.hasKTX2Loader && !n.ktx2Loader || (clearInterval(a), e());
|
|
3656
|
+
}, 10);
|
|
3657
|
+
});
|
|
3658
|
+
}
|
|
3659
|
+
export {
|
|
3660
|
+
wi as InstancedOGC3DTile,
|
|
3661
|
+
yi as InstancedTileLoader,
|
|
3662
|
+
EA as OGC3DTile,
|
|
3663
|
+
Qi as OcclusionCullingService,
|
|
3664
|
+
bi as TileLoader,
|
|
3665
|
+
fi as getOGC3DTilesCopyrightInfo
|
|
3666
|
+
};
|
|
3667
|
+
//# sourceMappingURL=threedtiles.es.js.map
|