@needle-tools/gltf-progressive 2.1.6 → 3.0.0-rc.f23cbbb

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.
@@ -1,213 +1,209 @@
1
- var Xe = Object.defineProperty;
2
- var qe = (i, e, t) => e in i ? Xe(i, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : i[e] = t;
3
- var d = (i, e, t) => (qe(i, typeof e != "symbol" ? e + "" : e, t), t), Ae = (i, e, t) => {
4
- if (!e.has(i))
5
- throw TypeError("Cannot " + t);
1
+ var Ke = Object.defineProperty;
2
+ var Ye = (n, t, e) => t in n ? Ke(n, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : n[t] = e;
3
+ var d = (n, t, e) => (Ye(n, typeof t != "symbol" ? t + "" : t, e), e), Ce = (n, t, e) => {
4
+ if (!t.has(n))
5
+ throw TypeError("Cannot " + e);
6
6
  };
7
- var m = (i, e, t) => (Ae(i, e, "read from private field"), t ? t.call(i) : e.get(i)), J = (i, e, t) => {
8
- if (e.has(i))
7
+ var y = (n, t, e) => (Ce(n, t, "read from private field"), e ? e.call(n) : t.get(n)), J = (n, t, e) => {
8
+ if (t.has(n))
9
9
  throw TypeError("Cannot add the same private member more than once");
10
- e instanceof WeakSet ? e.add(i) : e.set(i, t);
11
- }, z = (i, e, t, s) => (Ae(i, e, "write to private field"), s ? s.call(i, t) : e.set(i, t), t);
12
- import { BufferGeometry as ge, Mesh as j, Texture as re, TextureLoader as Ke, Matrix4 as Pe, Clock as Ye, MeshStandardMaterial as He, Sphere as Je, Box3 as Ee, Vector3 as X } from "three";
13
- import { GLTFLoader as Te } from "three/examples/jsm/loaders/GLTFLoader.js";
14
- import { MeshoptDecoder as Qe } from "three/examples/jsm/libs/meshopt_decoder.module.js";
15
- import { DRACOLoader as Ze } from "three/examples/jsm/loaders/DRACOLoader.js";
16
- import { KTX2Loader as je } from "three/examples/jsm/loaders/KTX2Loader.js";
17
- const et = "";
18
- globalThis.GLTF_PROGRESSIVE_VERSION = et;
10
+ t instanceof WeakSet ? t.add(n) : t.set(n, e);
11
+ }, V = (n, t, e, r) => (Ce(n, t, "write to private field"), r ? r.call(n, e) : t.set(n, e), e);
12
+ import { BufferGeometry as me, Mesh as te, Texture as ne, TextureLoader as He, Matrix4 as Ee, Clock as je, MeshStandardMaterial as Je, Sphere as Qe, Box3 as Be, Vector3 as K } from "three";
13
+ import { GLTFLoader as Pe } from "three/examples/jsm/loaders/GLTFLoader.js";
14
+ import { MeshoptDecoder as Ze } from "three/examples/jsm/libs/meshopt_decoder.module.js";
15
+ import { DRACOLoader as et } from "three/examples/jsm/loaders/DRACOLoader.js";
16
+ import { KTX2Loader as tt } from "three/examples/jsm/loaders/KTX2Loader.js";
17
+ const rt = "";
18
+ globalThis.GLTF_PROGRESSIVE_VERSION = rt;
19
19
  console.debug("[gltf-progressive] version -");
20
- let V = "https://www.gstatic.com/draco/versioned/decoders/1.5.7/", ee = "https://www.gstatic.com/basis-universal/versioned/2021-04-15-ba1c3e4/";
21
- const tt = V, st = ee, Re = new URL(V + "draco_decoder.js");
22
- Re.searchParams.append("range", "true");
23
- fetch(Re, {
20
+ let W = "https://www.gstatic.com/draco/versioned/decoders/1.5.7/", re = "https://www.gstatic.com/basis-universal/versioned/2021-04-15-ba1c3e4/";
21
+ const st = W, ot = re, Ge = new URL(W + "draco_decoder.js");
22
+ Ge.searchParams.append("range", "true");
23
+ fetch(Ge, {
24
24
  method: "GET",
25
25
  headers: {
26
26
  Range: "bytes=0-1"
27
27
  }
28
- }).catch((i) => {
29
- console.debug(`Failed to fetch remote Draco decoder from ${V} (offline: ${typeof navigator < "u" ? navigator.onLine : "unknown"})`), V === tt && rt("./include/draco/"), ee === st && ot("./include/ktx2/");
28
+ }).catch((n) => {
29
+ console.debug(`Failed to fetch remote Draco decoder from ${W} (offline: ${typeof navigator < "u" ? navigator.onLine : "unknown"})`), W === st && it("./include/draco/"), re === ot && nt("./include/ktx2/");
30
30
  }).finally(() => {
31
- Ge();
31
+ $e();
32
32
  });
33
- function rt(i) {
34
- V = i, B && B[Oe] != V ? (console.debug("Updating Draco decoder path to " + i), B[Oe] = V, B.setDecoderPath(V), B.preload()) : console.debug("Setting Draco decoder path to " + i);
33
+ function it(n) {
34
+ W = n, R && R[Se] != W ? (console.debug("Updating Draco decoder path to " + n), R[Se] = W, R.setDecoderPath(W), R.preload()) : console.debug("Setting Draco decoder path to " + n);
35
35
  }
36
- function ot(i) {
37
- ee = i, U && U.transcoderPath != ee ? (console.debug("Updating KTX2 transcoder path to " + i), U.setTranscoderPath(ee), U.init()) : console.debug("Setting KTX2 transcoder path to " + i);
36
+ function nt(n) {
37
+ re = n, F && F.transcoderPath != re ? (console.debug("Updating KTX2 transcoder path to " + n), F.setTranscoderPath(re), F.init()) : console.debug("Setting KTX2 transcoder path to " + n);
38
38
  }
39
- const Oe = Symbol("dracoDecoderPath");
40
- let B, pe, U;
41
- function Ge() {
42
- B || (B = new Ze(), B[Oe] = V, B.setDecoderPath(V), B.setDecoderConfig({ type: "js" }), B.preload()), U || (U = new je(), U.setTranscoderPath(ee), U.init()), pe || (pe = Qe);
39
+ const Se = Symbol("dracoDecoderPath");
40
+ let R, Le, F;
41
+ function $e() {
42
+ R || (R = new et(), R[Se] = W, R.setDecoderPath(W), R.setDecoderConfig({ type: "js" }), R.preload()), F || (F = new tt(), F.setTranscoderPath(re), F.init()), Le || (Le = Ze);
43
43
  }
44
- function $e(i) {
45
- return Ge(), i ? U.detectSupport(i) : i !== null && console.warn("No renderer provided to detect ktx2 support - loading KTX2 textures might fail"), { dracoLoader: B, ktx2Loader: U, meshoptDecoder: pe };
44
+ function Ue(n) {
45
+ return $e(), n ? F.detectSupport(n) : n !== null && console.warn("No renderer provided to detect ktx2 support - loading KTX2 textures might fail"), { dracoLoader: R, ktx2Loader: F, meshoptDecoder: Le };
46
46
  }
47
- function Ue(i) {
48
- i.dracoLoader || i.setDRACOLoader(B), i.ktx2Loader || i.setKTX2Loader(U), i.meshoptDecoder || i.setMeshoptDecoder(pe);
47
+ function Fe(n) {
48
+ n.dracoLoader || n.setDRACOLoader(R), n.ktx2Loader || n.setKTX2Loader(F), n.meshoptDecoder || n.setMeshoptDecoder(Le);
49
49
  }
50
- const _e = /* @__PURE__ */ new WeakMap();
51
- function Fe(i, e) {
52
- let t = _e.get(i);
53
- t ? t = Object.assign(t, e) : t = e, _e.set(i, t);
50
+ const Te = /* @__PURE__ */ new WeakMap();
51
+ function Ne(n, t) {
52
+ let e = Te.get(n);
53
+ e ? e = Object.assign(e, t) : e = t, Te.set(n, e);
54
54
  }
55
- const De = Te.prototype.load;
56
- function nt(...i) {
57
- const e = _e.get(this);
58
- let t = i[0];
59
- const s = new URL(t, window.location.href);
60
- if (s.hostname.endsWith("needle.tools")) {
61
- const r = (e == null ? void 0 : e.progressive) !== void 0 ? e.progressive : !0, o = e != null && e.usecase ? e.usecase : "default";
62
- r ? this.requestHeader.Accept = `*/*;progressive=allowed;usecase=${o}` : this.requestHeader.Accept = `*/*;usecase=${o}`, t = s.toString();
55
+ const we = Pe.prototype.load;
56
+ function at(...n) {
57
+ const t = Te.get(this);
58
+ let e = n[0];
59
+ const r = new URL(e, window.location.href);
60
+ if (r.hostname.endsWith("needle.tools")) {
61
+ const o = (t == null ? void 0 : t.progressive) !== void 0 ? t.progressive : !0, s = t != null && t.usecase ? t.usecase : "default";
62
+ o ? this.requestHeader.Accept = `*/*;progressive=allowed;usecase=${s}` : this.requestHeader.Accept = `*/*;usecase=${s}`, e = r.toString();
63
63
  }
64
- return i[0] = t, De == null ? void 0 : De.call(this, ...i);
64
+ return n[0] = e, we == null ? void 0 : we.call(this, ...n);
65
65
  }
66
- Te.prototype.load = nt;
67
- le("debugprogressive");
68
- function le(i) {
66
+ Pe.prototype.load = at;
67
+ ue("debugprogressive");
68
+ function ue(n) {
69
69
  if (typeof window > "u")
70
70
  return !1;
71
- const t = new URL(window.location.href).searchParams.get(i);
72
- return t == null || t === "0" || t === "false" ? !1 : t === "" ? !0 : t;
71
+ const e = new URL(window.location.href).searchParams.get(n);
72
+ return e == null || e === "0" || e === "false" ? !1 : e === "" ? !0 : e;
73
73
  }
74
- function it(i, e) {
75
- if (e === void 0 || e.startsWith("./") || e.startsWith("http") || i === void 0)
76
- return e;
77
- const t = i.lastIndexOf("/");
78
- if (t >= 0) {
79
- const s = i.substring(0, t + 1);
80
- for (; s.endsWith("/") && e.startsWith("/"); )
81
- e = e.substring(1);
82
- return s + e;
74
+ function lt(n, t) {
75
+ if (t === void 0 || t.startsWith("./") || t.startsWith("http") || n === void 0)
76
+ return t;
77
+ const e = n.lastIndexOf("/");
78
+ if (e >= 0) {
79
+ const r = n.substring(0, e + 1);
80
+ for (; r.endsWith("/") && t.startsWith("/"); )
81
+ t = t.substring(1);
82
+ return r + t;
83
83
  }
84
- return e;
84
+ return t;
85
85
  }
86
- let oe;
87
- function at() {
88
- return oe !== void 0 || (oe = /iPhone|iPad|iPod|Android|IEMobile/i.test(navigator.userAgent), le("debugprogressive") && console.log("[glTF Progressive]: isMobileDevice", oe)), oe;
86
+ let ae;
87
+ function ct() {
88
+ return ae !== void 0 || (ae = /iPhone|iPad|iPod|Android|IEMobile/i.test(navigator.userAgent), ue("debugprogressive") && console.log("[glTF Progressive]: isMobileDevice", ae)), ae;
89
89
  }
90
- const lt = typeof window > "u" && typeof document > "u", be = Symbol("needle:raycast-mesh");
91
- function ce(i) {
92
- return (i == null ? void 0 : i[be]) instanceof ge ? i[be] : null;
90
+ const ut = typeof window > "u" && typeof document > "u", Ae = Symbol("needle:raycast-mesh");
91
+ function de(n) {
92
+ return (n == null ? void 0 : n[Ae]) instanceof me ? n[Ae] : null;
93
93
  }
94
- function ct(i, e) {
95
- if ((i.type === "Mesh" || i.type === "SkinnedMesh") && !ce(i)) {
96
- const s = ft(e);
97
- s.userData = { isRaycastMesh: !0 }, i[be] = s;
94
+ function dt(n, t) {
95
+ if ((n.type === "Mesh" || n.type === "SkinnedMesh") && !de(n)) {
96
+ const r = ht(t);
97
+ r.userData = { isRaycastMesh: !0 }, n[Ae] = r;
98
98
  }
99
99
  }
100
- function ut(i = !0) {
101
- if (i) {
102
- if (ne)
100
+ function ft(n = !0) {
101
+ if (n) {
102
+ if (le)
103
103
  return;
104
- const e = ne = j.prototype.raycast;
105
- j.prototype.raycast = function(t, s) {
106
- const n = this, r = ce(n);
107
- let o;
108
- r && n.isMesh && (o = n.geometry, n.geometry = r), e.call(this, t, s), o && (n.geometry = o);
104
+ const t = le = te.prototype.raycast;
105
+ te.prototype.raycast = function(e, r) {
106
+ const i = this, o = de(i);
107
+ let s;
108
+ o && i.isMesh && (s = i.geometry, i.geometry = o), t.call(this, e, r), s && (i.geometry = s);
109
109
  };
110
110
  } else {
111
- if (!ne)
111
+ if (!le)
112
112
  return;
113
- j.prototype.raycast = ne, ne = null;
113
+ te.prototype.raycast = le, le = null;
114
114
  }
115
115
  }
116
- let ne = null;
117
- function ft(i) {
118
- const e = new ge();
119
- for (const t in i.attributes)
120
- e.setAttribute(t, i.getAttribute(t));
121
- return e.setIndex(i.getIndex()), e;
116
+ let le = null;
117
+ function ht(n) {
118
+ const t = new me();
119
+ for (const e in n.attributes)
120
+ t.setAttribute(e, n.getAttribute(e));
121
+ return t.setIndex(n.getIndex()), t;
122
122
  }
123
- const Z = new Array(), q = "NEEDLE_progressive", L = le("debugprogressive"), Me = Symbol("needle-progressive-texture"), ae = /* @__PURE__ */ new Map(), Se = /* @__PURE__ */ new Set();
123
+ const Z = new Array(), L = ue("debugprogressive");
124
+ let ye, ee = -1;
124
125
  if (L) {
125
- let i = function() {
126
- e += 1, console.log("Toggle LOD level", e, ae), ae.forEach((n, r) => {
127
- for (const o of n.keys) {
128
- const a = r[o];
129
- if (a != null)
130
- if (a.isBufferGeometry === !0) {
131
- const l = T.getMeshLODInformation(a), u = l ? Math.min(e, l.lods.length) : 0;
132
- r["DEBUG:LOD"] = u, l && (t = Math.max(t, l.lods.length - 1));
133
- } else
134
- r.isMaterial === !0 && (r["DEBUG:LOD"] = e);
135
- }
136
- }), e >= t && (e = -1);
137
- }, e = -1, t = 2, s = !1;
138
- window.addEventListener("keyup", (n) => {
139
- n.key === "p" && i(), n.key === "w" && (s = !s, Se && Se.forEach((r) => {
140
- r.name != "BackgroundCubeMaterial" && r.glyphMap == null && "wireframe" in r && (r.wireframe = s);
141
- }));
126
+ let n = function() {
127
+ ee += 1, ee >= t && (ee = -1), console.log(`Toggle LOD level [${ee}]`);
128
+ }, t = 6;
129
+ window.addEventListener("keyup", (e) => {
130
+ e.key === "p" && n(), e.key === "w" && (ye = !ye, console.log(`Toggle wireframe [${ye}]`));
131
+ const r = parseInt(e.key);
132
+ !isNaN(r) && r >= 0 && (ee = r, console.log(`Set LOD level to [${ee}]`));
142
133
  });
143
134
  }
144
- function Ce(i, e, t) {
145
- var n;
146
- if (!L)
147
- return;
148
- ae.has(i) || ae.set(i, { keys: [], sourceId: t });
149
- const s = ae.get(i);
150
- ((n = s == null ? void 0 : s.keys) == null ? void 0 : n.includes(e)) == !1 && s.keys.push(e);
135
+ function ze(n) {
136
+ if (L)
137
+ if (Array.isArray(n))
138
+ for (const t of n)
139
+ ze(t);
140
+ else
141
+ n && "wireframe" in n && (n.wireframe = ye === !0);
151
142
  }
152
- const v = class {
153
- constructor(e, t) {
143
+ const Y = "NEEDLE_progressive", _e = Symbol("needle-progressive-texture"), b = class {
144
+ constructor(t, e) {
154
145
  d(this, "parser");
155
146
  d(this, "url");
156
147
  d(this, "_isLoadingMesh");
157
- d(this, "loadMesh", (e) => {
158
- var s, n;
148
+ d(this, "loadMesh", (t) => {
149
+ var r, i;
159
150
  if (this._isLoadingMesh)
160
151
  return null;
161
- const t = (n = (s = this.parser.json.meshes[e]) == null ? void 0 : s.extensions) == null ? void 0 : n[q];
162
- return t ? (this._isLoadingMesh = !0, this.parser.getDependency("mesh", e).then((r) => {
163
- var o;
164
- return this._isLoadingMesh = !1, r && v.registerMesh(this.url, t.guid, r, (o = t.lods) == null ? void 0 : o.length, void 0, t), r;
152
+ const e = (i = (r = this.parser.json.meshes[t]) == null ? void 0 : r.extensions) == null ? void 0 : i[Y];
153
+ return e ? (this._isLoadingMesh = !0, this.parser.getDependency("mesh", t).then((o) => {
154
+ var s;
155
+ return this._isLoadingMesh = !1, o && b.registerMesh(this.url, e.guid, o, (s = e.lods) == null ? void 0 : s.length, 0, e), o;
165
156
  })) : null;
166
157
  });
167
- L && console.log("Progressive extension registered for", t), this.parser = e, this.url = t;
158
+ L && console.log("Progressive extension registered for", e), this.parser = t, this.url = e;
168
159
  }
169
160
  /** The name of the extension */
170
161
  get name() {
171
- return q;
162
+ return Y;
163
+ }
164
+ static getMeshLODExtension(t) {
165
+ const e = this.getAssignedLODInformation(t);
166
+ return e != null && e.key ? this.lodInfos.get(e.key) : null;
172
167
  }
173
- static getMeshLODInformation(e) {
174
- const t = this.getAssignedLODInformation(e);
175
- return t != null && t.key ? this.lodInfos.get(t.key) : null;
168
+ static getPrimitiveIndex(t) {
169
+ var r;
170
+ const e = (r = this.getAssignedLODInformation(t)) == null ? void 0 : r.index;
171
+ return e ?? -1;
176
172
  }
177
- static getMaterialMinMaxLODsCount(e, t) {
178
- const s = this, n = "LODS:minmax", r = e[n];
179
- if (r != null)
180
- return r;
181
- if (t || (t = {
173
+ static getMaterialMinMaxLODsCount(t, e) {
174
+ const r = this, i = "LODS:minmax", o = t[i];
175
+ if (o != null)
176
+ return o;
177
+ if (e || (e = {
182
178
  min_count: 1 / 0,
183
179
  max_count: 0,
184
180
  lods: []
185
- }), Array.isArray(e)) {
186
- for (const a of e)
187
- this.getMaterialMinMaxLODsCount(a, t);
188
- return e[n] = t, t;
181
+ }), Array.isArray(t)) {
182
+ for (const a of t)
183
+ this.getMaterialMinMaxLODsCount(a, e);
184
+ return t[i] = e, e;
189
185
  }
190
- if (L === "verbose" && console.log("getMaterialMinMaxLODsCount", e), e.type === "ShaderMaterial" || e.type === "RawShaderMaterial") {
191
- const a = e;
186
+ if (L === "verbose" && console.log("getMaterialMinMaxLODsCount", t), t.type === "ShaderMaterial" || t.type === "RawShaderMaterial") {
187
+ const a = t;
192
188
  for (const l of Object.keys(a.uniforms)) {
193
189
  const u = a.uniforms[l].value;
194
- (u == null ? void 0 : u.isTexture) === !0 && o(u, t);
190
+ (u == null ? void 0 : u.isTexture) === !0 && s(u, e);
195
191
  }
196
- } else if (e.isMaterial)
197
- for (const a of Object.keys(e)) {
198
- const l = e[a];
199
- (l == null ? void 0 : l.isTexture) === !0 && o(l, t);
192
+ } else if (t.isMaterial)
193
+ for (const a of Object.keys(t)) {
194
+ const l = t[a];
195
+ (l == null ? void 0 : l.isTexture) === !0 && s(l, e);
200
196
  }
201
- return e[n] = t, t;
202
- function o(a, l) {
203
- const u = s.getAssignedLODInformation(a);
197
+ return t[i] = e, e;
198
+ function s(a, l) {
199
+ const u = r.getAssignedLODInformation(a);
204
200
  if (u) {
205
- const c = s.lodInfos.get(u.key);
201
+ const c = r.lodInfos.get(u.key);
206
202
  if (c && c.lods) {
207
203
  l.min_count = Math.min(l.min_count, c.lods.length), l.max_count = Math.max(l.max_count, c.lods.length);
208
- for (let g = 0; g < c.lods.length; g++) {
209
- const p = c.lods[g];
210
- p.width && (l.lods[g] = l.lods[g] || { min_height: 1 / 0, max_height: 0 }, l.lods[g].min_height = Math.min(l.lods[g].min_height, p.height), l.lods[g].max_height = Math.max(l.lods[g].max_height, p.height));
204
+ for (let h = 0; h < c.lods.length; h++) {
205
+ const g = c.lods[h];
206
+ g.width && (l.lods[h] = l.lods[h] || { min_height: 1 / 0, max_height: 0 }, l.lods[h].min_height = Math.min(l.lods[h].min_height, g.height), l.lods[h].max_height = Math.max(l.lods[h].max_height, g.height));
211
207
  }
212
208
  }
213
209
  }
@@ -218,33 +214,33 @@ const v = class {
218
214
  * @param level the level of detail to check for (0 is the highest resolution). If undefined, the function checks if any LOD level is available
219
215
  * @returns true if the LOD level is available (or if any LOD level is available if level is undefined)
220
216
  */
221
- static hasLODLevelAvailable(e, t) {
222
- var r;
223
- if (Array.isArray(e)) {
224
- for (const o of e)
225
- if (this.hasLODLevelAvailable(o, t))
217
+ static hasLODLevelAvailable(t, e) {
218
+ var o;
219
+ if (Array.isArray(t)) {
220
+ for (const s of t)
221
+ if (this.hasLODLevelAvailable(s, e))
226
222
  return !0;
227
223
  return !1;
228
224
  }
229
- if (e.isMaterial === !0) {
230
- for (const o of Object.keys(e)) {
231
- const a = e[o];
232
- if (a && a.isTexture && this.hasLODLevelAvailable(a, t))
225
+ if (t.isMaterial === !0) {
226
+ for (const s of Object.keys(t)) {
227
+ const a = t[s];
228
+ if (a && a.isTexture && this.hasLODLevelAvailable(a, e))
233
229
  return !0;
234
230
  }
235
231
  return !1;
236
- } else if (e.isGroup === !0) {
237
- for (const o of e.children)
238
- if (o.isMesh === !0 && this.hasLODLevelAvailable(o, t))
232
+ } else if (t.isGroup === !0) {
233
+ for (const s of t.children)
234
+ if (s.isMesh === !0 && this.hasLODLevelAvailable(s, e))
239
235
  return !0;
240
236
  }
241
- let s, n;
242
- if (e.isMesh ? s = e.geometry : (e.isBufferGeometry || e.isTexture) && (s = e), s && (r = s == null ? void 0 : s.userData) != null && r.LODS) {
243
- const o = s.userData.LODS;
244
- if (n = this.lodInfos.get(o.key), t === void 0)
245
- return n != null;
246
- if (n)
247
- return Array.isArray(n.lods) ? t < n.lods.length : t === 0;
237
+ let r, i;
238
+ if (t.isMesh ? r = t.geometry : (t.isBufferGeometry || t.isTexture) && (r = t), r && (o = r == null ? void 0 : r.userData) != null && o.LODS) {
239
+ const s = r.userData.LODS;
240
+ if (i = this.lodInfos.get(s.key), e === void 0)
241
+ return i != null;
242
+ if (i)
243
+ return Array.isArray(i.lods) ? e < i.lods.length : e === 0;
248
244
  }
249
245
  return !1;
250
246
  }
@@ -262,113 +258,107 @@ const v = class {
262
258
  * });
263
259
  * ```
264
260
  */
265
- static assignMeshLOD(e, t) {
266
- var s;
267
- if (!e)
261
+ static assignMeshLOD(t, e) {
262
+ var r;
263
+ if (!t)
268
264
  return Promise.resolve(null);
269
- if (e instanceof j || e.isMesh === !0) {
270
- const n = e.geometry, r = this.getAssignedLODInformation(n);
271
- if (!r)
265
+ if (t instanceof te || t.isMesh === !0) {
266
+ const i = t.geometry, o = this.getAssignedLODInformation(i);
267
+ if (!o)
272
268
  return Promise.resolve(null);
273
- for (const o of Z)
274
- (s = o.onBeforeGetLODMesh) == null || s.call(o, e, t);
275
- return e["LOD:requested level"] = t, v.getOrLoadLOD(n, t).then((o) => {
276
- if (Array.isArray(o)) {
277
- const a = r.index || 0;
278
- o = o[a];
269
+ for (const s of Z)
270
+ (r = s.onBeforeGetLODMesh) == null || r.call(s, t, e);
271
+ return t["LOD:requested level"] = e, b.getOrLoadLOD(i, e).then((s) => {
272
+ if (Array.isArray(s)) {
273
+ const a = o.index || 0;
274
+ s = s[a];
279
275
  }
280
- return e["LOD:requested level"] === t && (delete e["LOD:requested level"], o && n != o && ((o == null ? void 0 : o.isBufferGeometry) ? (e.geometry = o, L && Ce(e, "geometry", r.url)) : L && console.error("Invalid LOD geometry", o))), o;
281
- }).catch((o) => (console.error("Error loading mesh LOD", e, o), null));
276
+ return t["LOD:requested level"] === e && (delete t["LOD:requested level"], s && i != s && ((s == null ? void 0 : s.isBufferGeometry) ? t.geometry = s : L && console.error("Invalid LOD geometry", s))), s;
277
+ }).catch((s) => (console.error("Error loading mesh LOD", t, s), null));
282
278
  } else
283
- L && console.error("Invalid call to assignMeshLOD: Request mesh LOD but the object is not a mesh", e);
279
+ L && console.error("Invalid call to assignMeshLOD: Request mesh LOD but the object is not a mesh", t);
284
280
  return Promise.resolve(null);
285
281
  }
286
- static assignTextureLOD(e, t = 0) {
287
- if (!e)
282
+ static assignTextureLOD(t, e = 0) {
283
+ if (!t)
288
284
  return Promise.resolve(null);
289
- if (e.isMesh === !0) {
290
- const s = e;
291
- if (Array.isArray(s.material)) {
292
- const n = new Array();
293
- for (const r of s.material) {
294
- const o = this.assignTextureLOD(r, t);
295
- n.push(o);
285
+ if (t.isMesh === !0) {
286
+ const r = t;
287
+ if (Array.isArray(r.material)) {
288
+ const i = new Array();
289
+ for (const o of r.material) {
290
+ const s = this.assignTextureLOD(o, e);
291
+ i.push(s);
296
292
  }
297
- return Promise.all(n).then((r) => {
298
- const o = new Array();
299
- for (const a of r)
300
- Array.isArray(a) && o.push(...a);
301
- return o;
293
+ return Promise.all(i).then((o) => {
294
+ const s = new Array();
295
+ for (const a of o)
296
+ Array.isArray(a) && s.push(...a);
297
+ return s;
302
298
  });
303
299
  } else
304
- return this.assignTextureLOD(s.material, t);
300
+ return this.assignTextureLOD(r.material, e);
305
301
  }
306
- if (e.isMaterial === !0) {
307
- const s = e, n = [], r = new Array();
308
- if (L && Se.add(s), s.uniforms && (s.isRawShaderMaterial || s.isShaderMaterial === !0)) {
309
- const o = s;
310
- for (const a of Object.keys(o.uniforms)) {
311
- const l = o.uniforms[a].value;
302
+ if (t.isMaterial === !0) {
303
+ const r = t, i = [], o = new Array();
304
+ if (r.uniforms && (r.isRawShaderMaterial || r.isShaderMaterial === !0)) {
305
+ const s = r;
306
+ for (const a of Object.keys(s.uniforms)) {
307
+ const l = s.uniforms[a].value;
312
308
  if ((l == null ? void 0 : l.isTexture) === !0) {
313
- const u = this.assignTextureLODForSlot(l, t, s, a).then((c) => (c && o.uniforms[a].value != c && (o.uniforms[a].value = c, o.uniformsNeedUpdate = !0), c));
314
- n.push(u), r.push(a);
309
+ const u = this.assignTextureLODForSlot(l, e, r, a).then((c) => (c && s.uniforms[a].value != c && (s.uniforms[a].value = c, s.uniformsNeedUpdate = !0), c));
310
+ i.push(u), o.push(a);
315
311
  }
316
312
  }
317
313
  } else
318
- for (const o of Object.keys(s)) {
319
- const a = s[o];
314
+ for (const s of Object.keys(r)) {
315
+ const a = r[s];
320
316
  if ((a == null ? void 0 : a.isTexture) === !0) {
321
- const l = this.assignTextureLODForSlot(a, t, s, o);
322
- n.push(l), r.push(o);
317
+ const l = this.assignTextureLODForSlot(a, e, r, s);
318
+ i.push(l), o.push(s);
323
319
  }
324
320
  }
325
- return Promise.all(n).then((o) => {
321
+ return Promise.all(i).then((s) => {
326
322
  const a = new Array();
327
- for (let l = 0; l < o.length; l++) {
328
- const u = o[l], c = r[l];
329
- u && u.isTexture === !0 ? a.push({ material: s, slot: c, texture: u, level: t }) : a.push({ material: s, slot: c, texture: null, level: t });
323
+ for (let l = 0; l < s.length; l++) {
324
+ const u = s[l], c = o[l];
325
+ u && u.isTexture === !0 ? a.push({ material: r, slot: c, texture: u, level: e }) : a.push({ material: r, slot: c, texture: null, level: e });
330
326
  }
331
327
  return a;
332
328
  });
333
329
  }
334
- if (e instanceof re || e.isTexture === !0) {
335
- const s = e;
336
- return this.assignTextureLODForSlot(s, t, null, null);
330
+ if (t instanceof ne || t.isTexture === !0) {
331
+ const r = t;
332
+ return this.assignTextureLODForSlot(r, e, null, null);
337
333
  }
338
334
  return Promise.resolve(null);
339
335
  }
340
- static assignTextureLODForSlot(e, t, s, n) {
341
- return (e == null ? void 0 : e.isTexture) !== !0 ? Promise.resolve(null) : n === "glyphMap" ? Promise.resolve(e) : v.getOrLoadLOD(e, t).then((r) => {
342
- if (Array.isArray(r))
336
+ static assignTextureLODForSlot(t, e, r, i) {
337
+ return (t == null ? void 0 : t.isTexture) !== !0 ? Promise.resolve(null) : i === "glyphMap" ? Promise.resolve(t) : b.getOrLoadLOD(t, e).then((o) => {
338
+ if (Array.isArray(o))
343
339
  return null;
344
- if ((r == null ? void 0 : r.isTexture) === !0) {
345
- if (r != e) {
346
- if (s && n) {
347
- const o = s[n];
348
- if (o && !L) {
349
- const a = this.getAssignedLODInformation(o);
350
- if (a && (a == null ? void 0 : a.level) < t)
351
- return L === "verbose" && console.warn("Assigned texture level is already higher: ", a.level, t, s, o, r), null;
352
- }
353
- s[n] = r;
354
- }
355
- if (L && n && s) {
356
- const o = this.getAssignedLODInformation(e);
357
- o ? Ce(s, n, o.url) : console.warn("No LOD info for texture", e);
340
+ if ((o == null ? void 0 : o.isTexture) === !0) {
341
+ if (o != t && r && i) {
342
+ const s = r[i];
343
+ if (s && !L) {
344
+ const a = this.getAssignedLODInformation(s);
345
+ if (a && (a == null ? void 0 : a.level) < e)
346
+ return L === "verbose" && console.warn("Assigned texture level is already higher: ", a.level, e, r, s, o), null;
358
347
  }
348
+ r[i] = o;
359
349
  }
360
- return r;
350
+ return o;
361
351
  } else
362
- L == "verbose" && console.warn("No LOD found for", e, t);
352
+ L == "verbose" && console.warn("No LOD found for", t, e);
363
353
  return null;
364
- }).catch((r) => (console.error("Error loading LOD", e, r), null));
354
+ }).catch((o) => (console.error("Error loading LOD", t, o), null));
365
355
  }
366
- afterRoot(e) {
367
- var t, s;
368
- return L && console.log("AFTER", this.url, e), (t = this.parser.json.textures) == null || t.forEach((n, r) => {
369
- var o;
370
- if (n != null && n.extensions) {
371
- const a = n == null ? void 0 : n.extensions[q];
356
+ afterRoot(t) {
357
+ var e, r;
358
+ return L && console.log("AFTER", this.url, t), (e = this.parser.json.textures) == null || e.forEach((i, o) => {
359
+ var s;
360
+ if (i != null && i.extensions) {
361
+ const a = i == null ? void 0 : i.extensions[Y];
372
362
  if (a) {
373
363
  if (!a.lods) {
374
364
  L && console.warn("Texture has no LODs", a);
@@ -378,207 +368,204 @@ const v = class {
378
368
  for (const u of this.parser.associations.keys())
379
369
  if (u.isTexture === !0) {
380
370
  const c = this.parser.associations.get(u);
381
- (c == null ? void 0 : c.textures) === r && (l = !0, v.registerTexture(this.url, u, (o = a.lods) == null ? void 0 : o.length, r, a));
371
+ (c == null ? void 0 : c.textures) === o && (l = !0, b.registerTexture(this.url, u, (s = a.lods) == null ? void 0 : s.length, o, a));
382
372
  }
383
- l || this.parser.getDependency("texture", r).then((u) => {
373
+ l || this.parser.getDependency("texture", o).then((u) => {
384
374
  var c;
385
- u && v.registerTexture(this.url, u, (c = a.lods) == null ? void 0 : c.length, r, a);
375
+ u && b.registerTexture(this.url, u, (c = a.lods) == null ? void 0 : c.length, o, a);
386
376
  });
387
377
  }
388
378
  }
389
- }), (s = this.parser.json.meshes) == null || s.forEach((n, r) => {
390
- if (n != null && n.extensions) {
391
- const o = n == null ? void 0 : n.extensions[q];
392
- if (o && o.lods) {
379
+ }), (r = this.parser.json.meshes) == null || r.forEach((i, o) => {
380
+ if (i != null && i.extensions) {
381
+ const s = i == null ? void 0 : i.extensions[Y];
382
+ if (s && s.lods) {
393
383
  for (const a of this.parser.associations.keys())
394
384
  if (a.isMesh) {
395
385
  const l = this.parser.associations.get(a);
396
- (l == null ? void 0 : l.meshes) === r && v.registerMesh(this.url, o.guid, a, o.lods.length, l.primitives, o);
386
+ (l == null ? void 0 : l.meshes) === o && b.registerMesh(this.url, s.guid, a, s.lods.length, l.primitives, s);
397
387
  }
398
388
  }
399
389
  }
400
390
  }), null;
401
391
  }
402
- static async getOrLoadLOD(e, t) {
392
+ static async getOrLoadLOD(t, e) {
403
393
  var a, l, u, c;
404
- const s = L == "verbose", n = e.userData.LODS;
405
- if (!n)
394
+ const r = L == "verbose", i = t.userData.LODS;
395
+ if (!i)
406
396
  return null;
407
- const r = n == null ? void 0 : n.key;
408
- let o;
409
- if (e.isTexture === !0) {
410
- const g = e;
411
- g.source && g.source[Me] && (o = g.source[Me]);
397
+ const o = i == null ? void 0 : i.key;
398
+ let s;
399
+ if (t.isTexture === !0) {
400
+ const h = t;
401
+ h.source && h.source[_e] && (s = h.source[_e]);
412
402
  }
413
- if (o || (o = v.lodInfos.get(r)), o) {
414
- if (t > 0) {
415
- let M = !1;
416
- const w = Array.isArray(o.lods);
417
- if (w && t >= o.lods.length ? M = !0 : w || (M = !0), M)
418
- return this.lowresCache.get(r);
403
+ if (s || (s = b.lodInfos.get(o)), s) {
404
+ if (e > 0) {
405
+ let D = !1;
406
+ const _ = Array.isArray(s.lods);
407
+ if (_ && e >= s.lods.length ? D = !0 : _ || (D = !0), D)
408
+ return this.lowresCache.get(o);
419
409
  }
420
- const g = Array.isArray(o.lods) ? (a = o.lods[t]) == null ? void 0 : a.path : o.lods;
421
- if (!g)
422
- return L && !o["missing:uri"] && (o["missing:uri"] = !0, console.warn("Missing uri for progressive asset for LOD " + t, o)), null;
423
- const p = it(n.url, g);
424
- if (p.endsWith(".glb") || p.endsWith(".gltf")) {
425
- if (!o.guid)
426
- return console.warn("missing pointer for glb/gltf texture", o), null;
427
- const M = p + "_" + o.guid, w = this.previouslyLoaded.get(M);
428
- if (w !== void 0) {
429
- s && console.log(`LOD ${t} was already loading/loaded: ${M}`);
430
- let h = await w.catch((N) => (console.error(`Error loading LOD ${t} from ${p}
431
- `, N), null)), I = !1;
432
- if (h == null || (h instanceof re && e instanceof re ? (l = h.image) != null && l.data || (u = h.source) != null && u.data ? h = this.copySettings(e, h) : (I = !0, this.previouslyLoaded.delete(M)) : h instanceof ge && e instanceof ge && ((c = h.attributes.position) != null && c.array || (I = !0, this.previouslyLoaded.delete(M)))), !I)
433
- return h;
410
+ const h = Array.isArray(s.lods) ? (a = s.lods[e]) == null ? void 0 : a.path : s.lods;
411
+ if (!h)
412
+ return L && !s["missing:uri"] && (s["missing:uri"] = !0, console.warn("Missing uri for progressive asset for LOD " + e, s)), null;
413
+ const g = lt(i.url, h);
414
+ if (g.endsWith(".glb") || g.endsWith(".gltf")) {
415
+ if (!s.guid)
416
+ return console.warn("missing pointer for glb/gltf texture", s), null;
417
+ const D = g + "_" + s.guid, _ = this.previouslyLoaded.get(D);
418
+ if (_ !== void 0) {
419
+ r && console.log(`LOD ${e} was already loading/loaded: ${D}`);
420
+ let M = await _.catch((p) => (console.error(`Error loading LOD ${e} from ${g}
421
+ `, p), null)), w = !1;
422
+ if (M == null || (M instanceof ne && t instanceof ne ? (l = M.image) != null && l.data || (u = M.source) != null && u.data ? M = this.copySettings(t, M) : (w = !0, this.previouslyLoaded.delete(D)) : M instanceof me && t instanceof me && ((c = M.attributes.position) != null && c.array || (w = !0, this.previouslyLoaded.delete(D)))), !w)
423
+ return M;
434
424
  }
435
- const x = o, F = new Promise(async (h, I) => {
436
- const N = new Te();
437
- Ue(N), L && (await new Promise((b) => setTimeout(b, 1e3)), s && console.warn("Start loading (delayed) " + p, x.guid));
438
- let R = p;
425
+ const x = s, N = new Promise(async (M, w) => {
426
+ const p = new Pe();
427
+ Fe(p), L && (await new Promise((O) => setTimeout(O, 1e3)), r && console.warn("Start loading (delayed) " + g, x.guid));
428
+ let q = g;
439
429
  if (x && Array.isArray(x.lods)) {
440
- const b = x.lods[t];
441
- b.hash && (R += "?v=" + b.hash);
430
+ const O = x.lods[e];
431
+ O.hash && (q += "?v=" + O.hash);
442
432
  }
443
- const A = await N.loadAsync(R).catch((b) => (console.error(`Error loading LOD ${t} from ${p}
444
- `, b), null));
445
- if (!A)
433
+ const P = await p.loadAsync(q).catch((O) => (console.error(`Error loading LOD ${e} from ${g}
434
+ `, O), null));
435
+ if (!P)
446
436
  return null;
447
- const W = A.parser;
448
- s && console.log("Loading finished " + p, x.guid);
449
- let _ = 0;
450
- if (A.parser.json.textures) {
451
- let b = !1;
452
- for (const f of A.parser.json.textures) {
437
+ const G = P.parser;
438
+ r && console.log("Loading finished " + g, x.guid);
439
+ let k = 0;
440
+ if (P.parser.json.textures) {
441
+ let O = !1;
442
+ for (const f of P.parser.json.textures) {
453
443
  if (f != null && f.extensions) {
454
- const y = f == null ? void 0 : f.extensions[q];
455
- if (y != null && y.guid && y.guid === x.guid) {
456
- b = !0;
444
+ const S = f == null ? void 0 : f.extensions[Y];
445
+ if (S != null && S.guid && S.guid === x.guid) {
446
+ O = !0;
457
447
  break;
458
448
  }
459
449
  }
460
- _++;
450
+ k++;
461
451
  }
462
- if (b) {
463
- let f = await W.getDependency("texture", _);
464
- return f && v.assignLODInformation(n.url, f, r, t, void 0, void 0), s && console.log('change "' + e.name + '" → "' + f.name + '"', p, _, f, M), e instanceof re && (f = this.copySettings(e, f)), f && (f.guid = x.guid), h(f);
452
+ if (O) {
453
+ let f = await G.getDependency("texture", k);
454
+ return f && b.assignLODInformation(i.url, f, o, e, void 0), r && console.log('change "' + t.name + '" → "' + f.name + '"', g, k, f, D), t instanceof ne && (f = this.copySettings(t, f)), f && (f.guid = x.guid), M(f);
465
455
  } else
466
- L && console.warn("Could not find texture with guid", x.guid, A.parser.json);
456
+ L && console.warn("Could not find texture with guid", x.guid, P.parser.json);
467
457
  }
468
- if (_ = 0, A.parser.json.meshes) {
469
- let b = !1;
470
- for (const f of A.parser.json.meshes) {
458
+ if (k = 0, P.parser.json.meshes) {
459
+ let O = !1;
460
+ for (const f of P.parser.json.meshes) {
471
461
  if (f != null && f.extensions) {
472
- const y = f == null ? void 0 : f.extensions[q];
473
- if (y != null && y.guid && y.guid === x.guid) {
474
- b = !0;
462
+ const S = f == null ? void 0 : f.extensions[Y];
463
+ if (S != null && S.guid && S.guid === x.guid) {
464
+ O = !0;
475
465
  break;
476
466
  }
477
467
  }
478
- _++;
468
+ k++;
479
469
  }
480
- if (b) {
481
- const f = await W.getDependency("mesh", _), y = x;
482
- if (s && console.log(`Loaded Mesh "${f.name}"`, p, _, f, M), f.isMesh === !0) {
483
- const O = f.geometry;
484
- return v.assignLODInformation(n.url, O, r, t, void 0, y.density), h(O);
470
+ if (O) {
471
+ const f = await G.getDependency("mesh", k);
472
+ if (r && console.log(`Loaded Mesh "${f.name}"`, g, k, f, D), f.isMesh === !0) {
473
+ const S = f.geometry;
474
+ return b.assignLODInformation(i.url, S, o, e, 0), M(S);
485
475
  } else {
486
- const O = new Array();
487
- for (let S = 0; S < f.children.length; S++) {
488
- const P = f.children[S];
489
- if (P.isMesh === !0) {
490
- const H = P.geometry;
491
- v.assignLODInformation(n.url, H, r, t, S, y.density), O.push(H);
476
+ const S = new Array();
477
+ for (let m = 0; m < f.children.length; m++) {
478
+ const v = f.children[m];
479
+ if (v.isMesh === !0) {
480
+ const C = v.geometry;
481
+ b.assignLODInformation(i.url, C, o, e, m), S.push(C);
492
482
  }
493
483
  }
494
- return h(O);
484
+ return M(S);
495
485
  }
496
486
  } else
497
- L && console.warn("Could not find mesh with guid", x.guid, A.parser.json);
487
+ L && console.warn("Could not find mesh with guid", x.guid, P.parser.json);
498
488
  }
499
- return h(null);
489
+ return M(null);
500
490
  });
501
- return this.previouslyLoaded.set(M, F), await F;
502
- } else if (e instanceof re) {
503
- s && console.log("Load texture from uri: " + p);
504
- const w = await new Ke().loadAsync(p);
505
- return w ? (w.guid = o.guid, w.flipY = !1, w.needsUpdate = !0, w.colorSpace = e.colorSpace, s && console.log(o, w)) : L && console.warn("failed loading", p), w;
491
+ return this.previouslyLoaded.set(D, N), await N;
492
+ } else if (t instanceof ne) {
493
+ r && console.log("Load texture from uri: " + g);
494
+ const _ = await new He().loadAsync(g);
495
+ return _ ? (_.guid = s.guid, _.flipY = !1, _.needsUpdate = !0, _.colorSpace = t.colorSpace, r && console.log(s, _)) : L && console.warn("failed loading", g), _;
506
496
  }
507
497
  } else
508
- L && console.warn(`Can not load LOD ${t}: no LOD info found for "${r}" ${e.name}`, e.type);
498
+ L && console.warn(`Can not load LOD ${e}: no LOD info found for "${o}" ${t.name}`, t.type);
509
499
  return null;
510
500
  }
511
- static assignLODInformation(e, t, s, n, r, o) {
512
- if (!t)
501
+ static assignLODInformation(t, e, r, i, o) {
502
+ if (!e)
513
503
  return;
514
- t.userData || (t.userData = {});
515
- const a = new dt(e, s, n, r, o);
516
- t.userData.LODS = a;
504
+ e.userData || (e.userData = {});
505
+ const s = new gt(t, r, i, o);
506
+ e.userData.LODS = s;
517
507
  }
518
- static getAssignedLODInformation(e) {
519
- var t;
520
- return ((t = e == null ? void 0 : e.userData) == null ? void 0 : t.LODS) || null;
508
+ static getAssignedLODInformation(t) {
509
+ var e;
510
+ return ((e = t == null ? void 0 : t.userData) == null ? void 0 : e.LODS) || null;
521
511
  }
522
512
  // private static readonly _copiedTextures: WeakMap<Texture, Texture> = new Map();
523
- static copySettings(e, t) {
524
- return t ? (L && console.warn(`Copy texture settings
525
- `, e.uuid, `
526
- `, t.uuid), t = t.clone(), t.offset = e.offset, t.repeat = e.repeat, t.colorSpace = e.colorSpace, t.magFilter = e.magFilter, t.minFilter = e.minFilter, t.wrapS = e.wrapS, t.wrapT = e.wrapT, t.flipY = e.flipY, t.anisotropy = e.anisotropy, t.mipmaps || (t.generateMipmaps = e.generateMipmaps), t) : e;
513
+ static copySettings(t, e) {
514
+ return e ? (L && console.warn(`Copy texture settings
515
+ `, t.uuid, `
516
+ `, e.uuid), e = e.clone(), e.offset = t.offset, e.repeat = t.repeat, e.colorSpace = t.colorSpace, e.magFilter = t.magFilter, e.minFilter = t.minFilter, e.wrapS = t.wrapS, e.wrapT = t.wrapT, e.flipY = t.flipY, e.anisotropy = t.anisotropy, e.mipmaps || (e.generateMipmaps = t.generateMipmaps), e) : t;
527
517
  }
528
518
  };
529
- let T = v;
519
+ let A = b;
530
520
  /**
531
521
  * Register a texture with LOD information
532
522
  */
533
- d(T, "registerTexture", (e, t, s, n, r) => {
534
- if (L && console.log("> Progressive: register texture", n, t.name, t.uuid, t, r), !t) {
523
+ d(A, "registerTexture", (t, e, r, i, o) => {
524
+ if (L && console.log("> Progressive: register texture", i, e.name, e.uuid, e, o), !e) {
535
525
  L && console.error("gltf-progressive: Register texture without texture");
536
526
  return;
537
527
  }
538
- t.source && (t.source[Me] = r);
539
- const o = r.guid;
540
- v.assignLODInformation(e, t, o, s, n, void 0), v.lodInfos.set(o, r), v.lowresCache.set(o, t);
528
+ e.source && (e.source[_e] = o);
529
+ const s = o.guid;
530
+ b.assignLODInformation(t, e, s, r, i), b.lodInfos.set(s, o), b.lowresCache.set(s, e);
541
531
  }), /**
542
532
  * Register a mesh with LOD information
543
533
  */
544
- d(T, "registerMesh", (e, t, s, n, r, o) => {
534
+ d(A, "registerMesh", (t, e, r, i, o, s) => {
545
535
  var u;
546
- L && console.log("> Progressive: register mesh", r, s.name, o, s.uuid, s);
547
- const a = s.geometry;
536
+ const a = r.geometry;
548
537
  if (!a) {
549
538
  L && console.warn("gltf-progressive: Register mesh without geometry");
550
539
  return;
551
540
  }
552
- a.userData || (a.userData = {}), v.assignLODInformation(e, a, t, n, r, o.density), v.lodInfos.set(t, o);
553
- let l = v.lowresCache.get(t);
554
- l ? l.push(s.geometry) : l = [s.geometry], v.lowresCache.set(t, l), n > 0 && !ce(s) && ct(s, a);
541
+ a.userData || (a.userData = {}), L && console.log("> Progressive: register mesh " + r.name, { index: o, uuid: r.uuid }, s, r), b.assignLODInformation(t, a, e, i, o), b.lodInfos.set(e, s);
542
+ let l = b.lowresCache.get(e);
543
+ l ? l.push(r.geometry) : l = [r.geometry], b.lowresCache.set(e, l), i > 0 && !de(r) && dt(r, a);
555
544
  for (const c of Z)
556
- (u = c.onRegisteredNewMesh) == null || u.call(c, s, o);
545
+ (u = c.onRegisteredNewMesh) == null || u.call(c, r, s);
557
546
  }), /** A map of key = asset uuid and value = LOD information */
558
- d(T, "lodInfos", /* @__PURE__ */ new Map()), /** cache of already loaded mesh lods */
559
- d(T, "previouslyLoaded", /* @__PURE__ */ new Map()), /** this contains the geometry/textures that were originally loaded */
560
- d(T, "lowresCache", /* @__PURE__ */ new Map());
561
- class dt {
562
- constructor(e, t, s, n, r) {
547
+ d(A, "lodInfos", /* @__PURE__ */ new Map()), /** cache of already loaded mesh lods */
548
+ d(A, "previouslyLoaded", /* @__PURE__ */ new Map()), /** this contains the geometry/textures that were originally loaded */
549
+ d(A, "lowresCache", /* @__PURE__ */ new Map());
550
+ class gt {
551
+ constructor(t, e, r, i) {
563
552
  d(this, "url");
564
553
  /** the key to lookup the LOD information */
565
554
  d(this, "key");
566
555
  d(this, "level");
567
556
  /** For multi objects (e.g. a group of meshes) this is the index of the object */
568
557
  d(this, "index");
569
- /** the mesh density */
570
- d(this, "density");
571
- this.url = e, this.key = t, this.level = s, n != null && (this.index = n), r != null && (this.density = r);
558
+ this.url = t, this.key = e, this.level = r, i != null && (this.index = i);
572
559
  }
573
560
  }
574
- const G = le("debugprogressive"), ht = le("noprogressive"), we = Symbol("Needle:LODSManager"), ve = Symbol("Needle:LODState"), Q = Symbol("Needle:CurrentLOD"), $ = { mesh_lod: -1, texture_lod: -1 };
575
- var C, K, ye, te, se, me, Y;
576
- const E = class {
561
+ const U = ue("debugprogressive"), pt = ue("noprogressive"), Oe = Symbol("Needle:LODSManager"), be = Symbol("Needle:LODState"), Q = Symbol("Needle:CurrentLOD"), E = { mesh_lod: -1, texture_lod: -1 };
562
+ var B, H, xe, se, oe, De, j;
563
+ const T = class {
577
564
  // readonly plugins: NEEDLE_progressive_plugin[] = [];
578
- constructor(e, t) {
565
+ constructor(t, e) {
579
566
  d(this, "context");
580
567
  d(this, "renderer");
581
- d(this, "projectionScreenMatrix", new Pe());
568
+ d(this, "projectionScreenMatrix", new Ee());
582
569
  /**
583
570
  * The target triangle density is the desired max amount of triangles on screen when the mesh is filling the screen.
584
571
  * @default 200_000
@@ -595,7 +582,7 @@ const E = class {
595
582
  * @default "auto"
596
583
  */
597
584
  d(this, "updateInterval", "auto");
598
- J(this, C, 1);
585
+ J(this, B, 1);
599
586
  /**
600
587
  * If set to true, the LODsManager will not update the LODs.
601
588
  * @default false
@@ -608,110 +595,110 @@ const E = class {
608
595
  */
609
596
  d(this, "manual", !1);
610
597
  d(this, "_lodchangedlisteners", []);
611
- J(this, K, void 0);
612
- J(this, ye, new Ye());
613
- J(this, te, 0);
598
+ J(this, H, void 0);
599
+ J(this, xe, new je());
614
600
  J(this, se, 0);
615
- J(this, me, 0);
616
- J(this, Y, 0);
601
+ J(this, oe, 0);
602
+ J(this, De, 0);
603
+ J(this, j, 0);
617
604
  d(this, "_fpsBuffer", [60, 60, 60, 60, 60]);
618
605
  // private testIfLODLevelsAreAvailable() {
619
- d(this, "_sphere", new Je());
620
- d(this, "_tempBox", new Ee());
621
- d(this, "_tempBox2", new Ee());
622
- d(this, "tempMatrix", new Pe());
623
- d(this, "_tempWorldPosition", new X());
624
- d(this, "_tempBoxSize", new X());
625
- d(this, "_tempBox2Size", new X());
626
- this.renderer = e, this.context = { ...t };
606
+ d(this, "_sphere", new Qe());
607
+ d(this, "_tempBox", new Be());
608
+ d(this, "_tempBox2", new Be());
609
+ d(this, "tempMatrix", new Ee());
610
+ d(this, "_tempWorldPosition", new K());
611
+ d(this, "_tempBoxSize", new K());
612
+ d(this, "_tempBox2Size", new K());
613
+ this.renderer = t, this.context = { ...e };
627
614
  }
628
615
  /** @internal */
629
- static getObjectLODState(e) {
630
- return e[ve];
616
+ static getObjectLODState(t) {
617
+ return t[be];
631
618
  }
632
- static addPlugin(e) {
633
- Z.push(e);
619
+ static addPlugin(t) {
620
+ Z.push(t);
634
621
  }
635
- static removePlugin(e) {
636
- const t = Z.indexOf(e);
637
- t >= 0 && Z.splice(t, 1);
622
+ static removePlugin(t) {
623
+ const e = Z.indexOf(t);
624
+ e >= 0 && Z.splice(e, 1);
638
625
  }
639
626
  /**
640
627
  * Gets the LODsManager for the given renderer. If the LODsManager does not exist yet, it will be created.
641
628
  * @param renderer The renderer to get the LODsManager for.
642
629
  * @returns The LODsManager instance.
643
630
  */
644
- static get(e, t) {
645
- if (e[we])
646
- return console.debug("[gltf-progressive] LODsManager already exists for this renderer"), e[we];
647
- const s = new E(e, {
631
+ static get(t, e) {
632
+ if (t[Oe])
633
+ return console.debug("[gltf-progressive] LODsManager already exists for this renderer"), t[Oe];
634
+ const r = new T(t, {
648
635
  engine: "unknown",
649
- ...t
636
+ ...e
650
637
  });
651
- return e[we] = s, s;
638
+ return t[Oe] = r, r;
652
639
  }
653
640
  /** @deprecated use static `LODsManager.addPlugin()` method. This getter will be removed in later versions */
654
641
  get plugins() {
655
642
  return Z;
656
643
  }
657
- addEventListener(e, t) {
658
- e === "changed" && this._lodchangedlisteners.push(t);
644
+ addEventListener(t, e) {
645
+ t === "changed" && this._lodchangedlisteners.push(e);
659
646
  }
660
- removeEventListener(e, t) {
661
- if (e === "changed") {
662
- const s = this._lodchangedlisteners.indexOf(t);
663
- s >= 0 && this._lodchangedlisteners.splice(s, 1);
647
+ removeEventListener(t, e) {
648
+ if (t === "changed") {
649
+ const r = this._lodchangedlisteners.indexOf(e);
650
+ r >= 0 && this._lodchangedlisteners.splice(r, 1);
664
651
  }
665
652
  }
666
653
  /**
667
654
  * Enable the LODsManager. This will replace the render method of the renderer with a method that updates the LODs.
668
655
  */
669
656
  enable() {
670
- if (m(this, K))
657
+ if (y(this, H))
671
658
  return;
672
659
  console.debug("[gltf-progressive] Enabling LODsManager for renderer");
673
- let e = 0;
674
- z(this, K, this.renderer.render);
675
- const t = this;
676
- $e(this.renderer), this.renderer.render = function(s, n) {
677
- const r = t.renderer.getRenderTarget();
678
- (r == null || "isXRRenderTarget" in r && r.isXRRenderTarget) && (e = 0, z(t, te, m(t, te) + 1), z(t, se, m(t, ye).getDelta()), z(t, me, m(t, me) + m(t, se)), t._fpsBuffer.shift(), t._fpsBuffer.push(1 / m(t, se)), z(t, Y, t._fpsBuffer.reduce((a, l) => a + l) / t._fpsBuffer.length), G && m(t, te) % 200 === 0 && console.log("FPS", Math.round(m(t, Y)), "Interval:", m(t, C)));
679
- const o = e++;
680
- m(t, K).call(this, s, n), t.onAfterRender(s, n, o);
660
+ let t = 0;
661
+ V(this, H, this.renderer.render);
662
+ const e = this;
663
+ Ue(this.renderer), this.renderer.render = function(r, i) {
664
+ const o = e.renderer.getRenderTarget();
665
+ (o == null || "isXRRenderTarget" in o && o.isXRRenderTarget) && (t = 0, V(e, se, y(e, se) + 1), V(e, oe, y(e, xe).getDelta()), V(e, De, y(e, De) + y(e, oe)), e._fpsBuffer.shift(), e._fpsBuffer.push(1 / y(e, oe)), V(e, j, e._fpsBuffer.reduce((a, l) => a + l) / e._fpsBuffer.length), U && y(e, se) % 200 === 0 && console.log("FPS", Math.round(y(e, j)), "Interval:", y(e, B)));
666
+ const s = t++;
667
+ y(e, H).call(this, r, i), e.onAfterRender(r, i, s);
681
668
  };
682
669
  }
683
670
  disable() {
684
- m(this, K) && (console.debug("[gltf-progressive] Disabling LODsManager for renderer"), this.renderer.render = m(this, K), z(this, K, void 0));
671
+ y(this, H) && (console.debug("[gltf-progressive] Disabling LODsManager for renderer"), this.renderer.render = y(this, H), V(this, H, void 0));
685
672
  }
686
- update(e, t) {
687
- this.internalUpdate(e, t);
673
+ update(t, e) {
674
+ this.internalUpdate(t, e);
688
675
  }
689
- onAfterRender(e, t, s) {
676
+ onAfterRender(t, e, r) {
690
677
  if (this.pause)
691
678
  return;
692
- const r = this.renderer.renderLists.get(e, 0).opaque;
693
- let o = !0;
694
- if (r.length === 1) {
695
- const a = r[0].material;
696
- (a.name === "EffectMaterial" || a.name === "CopyShader") && (o = !1);
679
+ const o = this.renderer.renderLists.get(t, 0).opaque;
680
+ let s = !0;
681
+ if (o.length === 1) {
682
+ const a = o[0].material;
683
+ (a.name === "EffectMaterial" || a.name === "CopyShader") && (s = !1);
697
684
  }
698
- if ((t.parent && t.parent.type === "CubeCamera" || s >= 1 && t.type === "OrthographicCamera") && (o = !1), o) {
699
- if (ht || (this.updateInterval === "auto" ? m(this, Y) < 40 && m(this, C) < 10 ? (z(this, C, m(this, C) + 1), G && console.warn("↓ Reducing LOD updates", m(this, C), m(this, Y).toFixed(0))) : m(this, Y) >= 60 && m(this, C) > 1 && (z(this, C, m(this, C) - 1), G && console.warn("↑ Increasing LOD updates", m(this, C), m(this, Y).toFixed(0))) : z(this, C, this.updateInterval), m(this, C) > 0 && m(this, te) % m(this, C) != 0))
685
+ if ((e.parent && e.parent.type === "CubeCamera" || r >= 1 && e.type === "OrthographicCamera") && (s = !1), s) {
686
+ if (pt || (this.updateInterval === "auto" ? y(this, j) < 40 && y(this, B) < 10 ? (V(this, B, y(this, B) + 1), U && console.warn("↓ Reducing LOD updates", y(this, B), y(this, j).toFixed(0))) : y(this, j) >= 60 && y(this, B) > 1 && (V(this, B, y(this, B) - 1), U && console.warn("↑ Increasing LOD updates", y(this, B), y(this, j).toFixed(0))) : V(this, B, this.updateInterval), y(this, B) > 0 && y(this, se) % y(this, B) != 0))
700
687
  return;
701
- this.internalUpdate(e, t);
688
+ this.internalUpdate(t, e);
702
689
  }
703
690
  }
704
691
  /**
705
692
  * Update LODs in a scene
706
693
  */
707
- internalUpdate(e, t) {
694
+ internalUpdate(t, e) {
708
695
  var l, u;
709
- const s = this.renderer.renderLists.get(e, 0), n = s.opaque;
710
- this.projectionScreenMatrix.multiplyMatrices(t.projectionMatrix, t.matrixWorldInverse);
711
- const r = this.targetTriangleDensity;
712
- for (const c of n) {
696
+ const r = this.renderer.renderLists.get(t, 0), i = r.opaque;
697
+ this.projectionScreenMatrix.multiplyMatrices(e.projectionMatrix, e.matrixWorldInverse);
698
+ const o = this.targetTriangleDensity;
699
+ for (const c of i) {
713
700
  if (c.material && (((l = c.geometry) == null ? void 0 : l.type) === "BoxGeometry" || ((u = c.geometry) == null ? void 0 : u.type) === "BufferGeometry") && (c.material.name === "SphericalGaussianBlur" || c.material.name == "BackgroundCubeMaterial" || c.material.name === "CubemapFromEquirect" || c.material.name === "EquirectangularToCubeUV")) {
714
- G && (c.material["NEEDLE_PROGRESSIVE:IGNORE-WARNING"] || (c.material["NEEDLE_PROGRESSIVE:IGNORE-WARNING"] = !0, console.warn("Ignoring skybox or BLIT object", c, c.material.name, c.material.type)));
701
+ U && (c.material["NEEDLE_PROGRESSIVE:IGNORE-WARNING"] || (c.material["NEEDLE_PROGRESSIVE:IGNORE-WARNING"] = !0, console.warn("Ignoring skybox or BLIT object", c, c.material.name, c.material.type)));
715
702
  continue;
716
703
  }
717
704
  switch (c.material.type) {
@@ -723,59 +710,58 @@ const E = class {
723
710
  case "MeshDepthMaterial":
724
711
  continue;
725
712
  }
726
- if (G === "color" && c.material && !c.object.progressive_debug_color) {
713
+ if (U === "color" && c.material && !c.object.progressive_debug_color) {
727
714
  c.object.progressive_debug_color = !0;
728
- const p = Math.random() * 16777215, M = new He({ color: p });
729
- c.object.material = M;
715
+ const g = Math.random() * 16777215, D = new Je({ color: g });
716
+ c.object.material = D;
730
717
  }
731
- const g = c.object;
732
- (g instanceof j || g.isMesh) && this.updateLODs(e, t, g, r);
718
+ const h = c.object;
719
+ (h instanceof te || h.isMesh) && this.updateLODs(t, e, h, o);
733
720
  }
734
- const o = s.transparent;
735
- for (const c of o) {
736
- const g = c.object;
737
- (g instanceof j || g.isMesh) && this.updateLODs(e, t, g, r);
721
+ const s = r.transparent;
722
+ for (const c of s) {
723
+ const h = c.object;
724
+ (h instanceof te || h.isMesh) && this.updateLODs(t, e, h, o);
738
725
  }
739
- const a = s.transmissive;
726
+ const a = r.transmissive;
740
727
  for (const c of a) {
741
- const g = c.object;
742
- (g instanceof j || g.isMesh) && this.updateLODs(e, t, g, r);
728
+ const h = c.object;
729
+ (h instanceof te || h.isMesh) && this.updateLODs(t, e, h, o);
743
730
  }
744
731
  }
745
732
  /** Update the LOD levels for the renderer. */
746
- updateLODs(e, t, s, n) {
733
+ updateLODs(t, e, r, i) {
747
734
  var a, l;
748
- s.userData || (s.userData = {});
749
- let r = s[ve];
750
- if (r || (r = new gt(), s[ve] = r), r.frames++ < 2)
735
+ r.userData || (r.userData = {});
736
+ let o = r[be];
737
+ if (o || (o = new yt(), r[be] = o), o.frames++ < 2)
751
738
  return;
752
739
  for (const u of Z)
753
- (a = u.onBeforeUpdateLOD) == null || a.call(u, this.renderer, e, t, s);
754
- this.calculateLodLevel(t, s, r, n, $), $.mesh_lod = Math.round($.mesh_lod), $.texture_lod = Math.round($.texture_lod), $.mesh_lod >= 0 && this.loadProgressiveMeshes(s, $.mesh_lod);
755
- let o = $.texture_lod;
756
- s.material && o >= 0 && this.loadProgressiveTextures(s.material, o);
740
+ (a = u.onBeforeUpdateLOD) == null || a.call(u, this.renderer, t, e, r);
741
+ const s = T.overrideGlobalLodLevel !== void 0 ? T.overrideGlobalLodLevel : ee;
742
+ s >= 0 ? (E.mesh_lod = s, E.texture_lod = s) : (this.calculateLodLevel(e, r, o, i, E), E.mesh_lod = Math.round(E.mesh_lod), E.texture_lod = Math.round(E.texture_lod)), E.mesh_lod >= 0 && this.loadProgressiveMeshes(r, E.mesh_lod), r.material && E.texture_lod >= 0 && this.loadProgressiveTextures(r.material, E.texture_lod), L && r.material && !r.isGizmo && ze(r.material);
757
743
  for (const u of Z)
758
- (l = u.onAfterUpdatedLOD) == null || l.call(u, this.renderer, e, t, s, $);
759
- r.lastLodLevel_Mesh = $.mesh_lod, r.lastLodLevel_Texture = $.texture_lod;
744
+ (l = u.onAfterUpdatedLOD) == null || l.call(u, this.renderer, t, e, r, E);
745
+ o.lastLodLevel_Mesh = E.mesh_lod, o.lastLodLevel_Texture = E.texture_lod;
760
746
  }
761
747
  /** Load progressive textures for the given material
762
748
  * @param material the material to load the textures for
763
749
  * @param level the LOD level to load. Level 0 is the best quality, higher levels are lower quality
764
750
  * @returns Promise with true if the LOD was loaded, false if not
765
751
  */
766
- loadProgressiveTextures(e, t) {
767
- if (!e)
752
+ loadProgressiveTextures(t, e) {
753
+ if (!t)
768
754
  return;
769
- if (Array.isArray(e)) {
770
- for (const r of e)
771
- this.loadProgressiveTextures(r, t);
755
+ if (Array.isArray(t)) {
756
+ for (const o of t)
757
+ this.loadProgressiveTextures(o, e);
772
758
  return;
773
759
  }
774
- let s = !1;
775
- (e[Q] === void 0 || t < e[Q]) && (s = !0);
776
- const n = e["DEBUG:LOD"];
777
- n != null && (s = e[Q] != n, t = n), s && (e[Q] = t, T.assignTextureLOD(e, t).then((r) => {
778
- this._lodchangedlisteners.forEach((o) => o({ type: "texture", level: t, object: e }));
760
+ let r = !1;
761
+ (t[Q] === void 0 || e < t[Q]) && (r = !0);
762
+ const i = t["DEBUG:LOD"];
763
+ i != null && (r = t[Q] != i, e = i), r && (t[Q] = e, A.assignTextureLOD(t, e).then((o) => {
764
+ this._lodchangedlisteners.forEach((s) => s({ type: "texture", level: e, object: t }));
779
765
  }));
780
766
  }
781
767
  /** Load progressive meshes for the given mesh
@@ -784,324 +770,329 @@ const E = class {
784
770
  * @param level the LOD level to load. Level 0 is the best quality, higher levels are lower quality
785
771
  * @returns Promise with true if the LOD was loaded, false if not
786
772
  */
787
- loadProgressiveMeshes(e, t) {
788
- if (!e)
773
+ loadProgressiveMeshes(t, e) {
774
+ if (!t)
789
775
  return Promise.resolve(null);
790
- let s = e[Q] !== t;
791
- const n = e["DEBUG:LOD"];
792
- if (n != null && (s = e[Q] != n, t = n), s) {
793
- e[Q] = t;
794
- const r = e.geometry;
795
- return T.assignMeshLOD(e, t).then((o) => (o && e[Q] == t && r != e.geometry && this._lodchangedlisteners.forEach((a) => a({ type: "mesh", level: t, object: e })), o));
776
+ let r = t[Q] !== e;
777
+ const i = t["DEBUG:LOD"];
778
+ if (i != null && (r = t[Q] != i, e = i), r) {
779
+ t[Q] = e;
780
+ const o = t.geometry;
781
+ return A.assignMeshLOD(t, e).then((s) => (s && t[Q] == e && o != t.geometry && this._lodchangedlisteners.forEach((a) => a({ type: "mesh", level: e, object: t })), s));
796
782
  }
797
783
  return Promise.resolve(null);
798
784
  }
799
- static isInside(e, t) {
800
- const s = e.min, n = e.max, r = (s.x + n.x) * 0.5, o = (s.y + n.y) * 0.5;
801
- return this._tempPtInside.set(r, o, s.z).applyMatrix4(t).z < 0;
785
+ static isInside(t, e) {
786
+ const r = t.min, i = t.max, o = (r.x + i.x) * 0.5, s = (r.y + i.y) * 0.5;
787
+ return this._tempPtInside.set(o, s, r.z).applyMatrix4(e).z < 0;
802
788
  }
803
- calculateLodLevel(e, t, s, n, r) {
804
- var F;
805
- if (!t) {
806
- r.mesh_lod = -1, r.texture_lod = -1;
789
+ calculateLodLevel(t, e, r, i, o) {
790
+ var N, X, M;
791
+ if (!e) {
792
+ o.mesh_lod = -1, o.texture_lod = -1;
807
793
  return;
808
794
  }
809
- if (!e) {
810
- r.mesh_lod = -1, r.texture_lod = -1;
795
+ if (!t) {
796
+ o.mesh_lod = -1, o.texture_lod = -1;
811
797
  return;
812
798
  }
813
799
  let a = 10 + 1, l = !1;
814
- if (G && t["DEBUG:LOD"] != null)
815
- return t["DEBUG:LOD"];
816
- const u = T.getMeshLODInformation(t.geometry), c = u == null ? void 0 : u.lods, g = c && c.length > 0, p = T.getMaterialMinMaxLODsCount(t.material), M = (p == null ? void 0 : p.min_count) != 1 / 0 && p.min_count > 0 && p.max_count > 0;
817
- if (!g && !M) {
818
- r.mesh_lod = 0, r.texture_lod = 0;
800
+ if (U && e["DEBUG:LOD"] != null)
801
+ return e["DEBUG:LOD"];
802
+ const u = (N = A.getMeshLODExtension(e.geometry)) == null ? void 0 : N.lods, c = A.getPrimitiveIndex(e.geometry), h = u && u.length > 0, g = A.getMaterialMinMaxLODsCount(e.material), D = (g == null ? void 0 : g.min_count) != 1 / 0 && g.min_count > 0 && g.max_count > 0;
803
+ if (!h && !D) {
804
+ o.mesh_lod = 0, o.texture_lod = 0;
819
805
  return;
820
806
  }
821
- g || (l = !0, a = 0);
822
- const w = this.renderer.domElement.clientHeight || this.renderer.domElement.height;
823
- let x = t.geometry.boundingBox;
824
- if (t.type === "SkinnedMesh") {
825
- const D = t;
826
- if (!D.boundingBox)
827
- D.computeBoundingBox();
828
- else if (this.skinnedMeshAutoUpdateBoundsInterval > 0 && s.frames % this.skinnedMeshAutoUpdateBoundsInterval === 0) {
829
- const h = ce(D), I = D.geometry;
830
- h && (D.geometry = h), D.computeBoundingBox(), D.geometry = I;
807
+ h || (l = !0, a = 0);
808
+ const _ = this.renderer.domElement.clientHeight || this.renderer.domElement.height;
809
+ let x = e.geometry.boundingBox;
810
+ if (e.type === "SkinnedMesh") {
811
+ const w = e;
812
+ if (!w.boundingBox)
813
+ w.computeBoundingBox();
814
+ else if (this.skinnedMeshAutoUpdateBoundsInterval > 0 && r.frames % this.skinnedMeshAutoUpdateBoundsInterval === 0) {
815
+ const p = de(w), q = w.geometry;
816
+ p && (w.geometry = p), w.computeBoundingBox(), w.geometry = q;
831
817
  }
832
- x = D.boundingBox;
818
+ x = w.boundingBox;
833
819
  }
834
820
  if (x) {
835
- const D = e;
836
- if (t.geometry.attributes.color && t.geometry.attributes.color.count < 100 && t.geometry.boundingSphere) {
837
- this._sphere.copy(t.geometry.boundingSphere), this._sphere.applyMatrix4(t.matrixWorld);
838
- const f = e.getWorldPosition(this._tempWorldPosition);
839
- if (this._sphere.containsPoint(f)) {
840
- r.mesh_lod = 0, r.texture_lod = 0;
821
+ const w = t;
822
+ if (e.geometry.attributes.color && e.geometry.attributes.color.count < 100 && e.geometry.boundingSphere) {
823
+ this._sphere.copy(e.geometry.boundingSphere), this._sphere.applyMatrix4(e.matrixWorld);
824
+ const m = t.getWorldPosition(this._tempWorldPosition);
825
+ if (this._sphere.containsPoint(m)) {
826
+ o.mesh_lod = 0, o.texture_lod = 0;
841
827
  return;
842
828
  }
843
829
  }
844
- if (this._tempBox.copy(x), this._tempBox.applyMatrix4(t.matrixWorld), D.isPerspectiveCamera && E.isInside(this._tempBox, this.projectionScreenMatrix)) {
845
- r.mesh_lod = 0, r.texture_lod = 0;
830
+ if (this._tempBox.copy(x), this._tempBox.applyMatrix4(e.matrixWorld), w.isPerspectiveCamera && T.isInside(this._tempBox, this.projectionScreenMatrix)) {
831
+ o.mesh_lod = 0, o.texture_lod = 0;
846
832
  return;
847
833
  }
848
- if (this._tempBox.applyMatrix4(this.projectionScreenMatrix), this.renderer.xr.enabled && D.isPerspectiveCamera && D.fov > 70) {
849
- const f = this._tempBox.min, y = this._tempBox.max;
850
- let O = f.x, S = f.y, P = y.x, H = y.y;
851
- const ue = 2, Le = 1.5, fe = (f.x + y.x) * 0.5, de = (f.y + y.y) * 0.5;
852
- O = (O - fe) * ue + fe, S = (S - de) * ue + de, P = (P - fe) * ue + fe, H = (H - de) * ue + de;
853
- const Ve = O < 0 && P > 0 ? 0 : Math.min(Math.abs(f.x), Math.abs(y.x)), We = S < 0 && H > 0 ? 0 : Math.min(Math.abs(f.y), Math.abs(y.y)), xe = Math.max(Ve, We);
854
- s.lastCentrality = (Le - xe) * (Le - xe) * (Le - xe);
834
+ if (this._tempBox.applyMatrix4(this.projectionScreenMatrix), this.renderer.xr.enabled && w.isPerspectiveCamera && w.fov > 70) {
835
+ const m = this._tempBox.min, v = this._tempBox.max;
836
+ let C = m.x, $ = m.y, z = v.x, ie = v.y;
837
+ const fe = 2, Me = 1.5, he = (m.x + v.x) * 0.5, ge = (m.y + v.y) * 0.5;
838
+ C = (C - he) * fe + he, $ = ($ - ge) * fe + ge, z = (z - he) * fe + he, ie = (ie - ge) * fe + ge;
839
+ const Xe = C < 0 && z > 0 ? 0 : Math.min(Math.abs(m.x), Math.abs(v.x)), qe = $ < 0 && ie > 0 ? 0 : Math.min(Math.abs(m.y), Math.abs(v.y)), ve = Math.max(Xe, qe);
840
+ r.lastCentrality = (Me - ve) * (Me - ve) * (Me - ve);
855
841
  } else
856
- s.lastCentrality = 1;
857
- const h = this._tempBox.getSize(this._tempBoxSize);
858
- h.multiplyScalar(0.5), screen.availHeight > 0 && w > 0 && h.multiplyScalar(w / screen.availHeight), e.isPerspectiveCamera ? h.x *= e.aspect : e.isOrthographicCamera;
859
- const I = e.matrixWorldInverse, N = this._tempBox2;
860
- N.copy(x), N.applyMatrix4(t.matrixWorld), N.applyMatrix4(I);
861
- const R = N.getSize(this._tempBox2Size), A = Math.max(R.x, R.y);
862
- if (Math.max(h.x, h.y) != 0 && A != 0 && (h.z = R.z / Math.max(R.x, R.y) * Math.max(h.x, h.y)), s.lastScreenCoverage = Math.max(h.x, h.y, h.z), s.lastScreenspaceVolume.copy(h), s.lastScreenCoverage *= s.lastCentrality, G && E.debugDrawLine) {
863
- const f = this.tempMatrix.copy(this.projectionScreenMatrix);
864
- f.invert();
865
- const y = E.corner0, O = E.corner1, S = E.corner2, P = E.corner3;
866
- y.copy(this._tempBox.min), O.copy(this._tempBox.max), O.x = y.x, S.copy(this._tempBox.max), S.y = y.y, P.copy(this._tempBox.max);
867
- const H = (y.z + P.z) * 0.5;
868
- y.z = O.z = S.z = P.z = H, y.applyMatrix4(f), O.applyMatrix4(f), S.applyMatrix4(f), P.applyMatrix4(f), E.debugDrawLine(y, O, 255), E.debugDrawLine(y, S, 255), E.debugDrawLine(O, P, 255), E.debugDrawLine(S, P, 255);
842
+ r.lastCentrality = 1;
843
+ const p = this._tempBox.getSize(this._tempBoxSize);
844
+ p.multiplyScalar(0.5), screen.availHeight > 0 && _ > 0 && p.multiplyScalar(_ / screen.availHeight), t.isPerspectiveCamera ? p.x *= t.aspect : t.isOrthographicCamera;
845
+ const q = t.matrixWorldInverse, P = this._tempBox2;
846
+ P.copy(x), P.applyMatrix4(e.matrixWorld), P.applyMatrix4(q);
847
+ const G = P.getSize(this._tempBox2Size), k = Math.max(G.x, G.y);
848
+ if (Math.max(p.x, p.y) != 0 && k != 0 && (p.z = G.z / Math.max(G.x, G.y) * Math.max(p.x, p.y)), r.lastScreenCoverage = Math.max(p.x, p.y, p.z), r.lastScreenspaceVolume.copy(p), r.lastScreenCoverage *= r.lastCentrality, U && T.debugDrawLine) {
849
+ const m = this.tempMatrix.copy(this.projectionScreenMatrix);
850
+ m.invert();
851
+ const v = T.corner0, C = T.corner1, $ = T.corner2, z = T.corner3;
852
+ v.copy(this._tempBox.min), C.copy(this._tempBox.max), C.x = v.x, $.copy(this._tempBox.max), $.y = v.y, z.copy(this._tempBox.max);
853
+ const ie = (v.z + z.z) * 0.5;
854
+ v.z = C.z = $.z = z.z = ie, v.applyMatrix4(m), C.applyMatrix4(m), $.applyMatrix4(m), z.applyMatrix4(m), T.debugDrawLine(v, C, 255), T.debugDrawLine(v, $, 255), T.debugDrawLine(C, z, 255), T.debugDrawLine($, z, 255);
869
855
  }
870
- let _ = 999;
871
- if (c && s.lastScreenCoverage > 0) {
872
- for (let f = 0; f < c.length; f++)
873
- if (c[f].density / s.lastScreenCoverage < n) {
874
- _ = f;
856
+ let f = 999;
857
+ if (u && r.lastScreenCoverage > 0)
858
+ for (let m = 0; m < u.length; m++) {
859
+ const v = u[m];
860
+ if ((((X = v.densities) == null ? void 0 : X[c]) || v.density || 1e-5) / r.lastScreenCoverage < i) {
861
+ f = m;
875
862
  break;
876
863
  }
877
- }
878
- _ < a && (a = _, l = !0);
864
+ }
865
+ f < a && (a = f, l = !0);
879
866
  }
880
- if (l ? r.mesh_lod = a : r.mesh_lod = s.lastLodLevel_Mesh, G && r.mesh_lod != s.lastLodLevel_Mesh) {
881
- const h = c == null ? void 0 : c[r.mesh_lod];
882
- h && console.log(`Mesh LOD changed: ${s.lastLodLevel_Mesh} → ${r.mesh_lod} (${h.density.toFixed(0)}) - ${t.name}`);
867
+ if (l ? o.mesh_lod = a : o.mesh_lod = r.lastLodLevel_Mesh, U && o.mesh_lod != r.lastLodLevel_Mesh) {
868
+ const p = u == null ? void 0 : u[o.mesh_lod];
869
+ p && console.log(`Mesh LOD changed: ${r.lastLodLevel_Mesh} → ${o.mesh_lod} (${p.density.toFixed(0)}) - ${e.name}`);
883
870
  }
884
- if (M) {
885
- const D = "saveData" in globalThis.navigator && globalThis.navigator.saveData === !0;
886
- if (s.lastLodLevel_Texture < 0) {
887
- if (r.texture_lod = p.max_count - 1, G) {
888
- const h = p.lods[p.max_count - 1];
889
- G && console.log(`First Texture LOD ${r.texture_lod} (${h.max_height}px) - ${t.name}`);
871
+ if (D) {
872
+ const w = "saveData" in globalThis.navigator && globalThis.navigator.saveData === !0;
873
+ if (r.lastLodLevel_Texture < 0) {
874
+ if (o.texture_lod = g.max_count - 1, U) {
875
+ const p = g.lods[g.max_count - 1];
876
+ U && console.log(`First Texture LOD ${o.texture_lod} (${p.max_height}px) - ${e.name}`);
890
877
  }
891
878
  } else {
892
- const h = s.lastScreenspaceVolume.x + s.lastScreenspaceVolume.y + s.lastScreenspaceVolume.z;
893
- let I = s.lastScreenCoverage * 4;
894
- ((F = this.context) == null ? void 0 : F.engine) === "model-viewer" && (I *= 1.5);
895
- const R = w / window.devicePixelRatio * I;
896
- let A = !1;
897
- for (let W = p.lods.length - 1; W >= 0; W--) {
898
- const _ = p.lods[W];
899
- if (!(D && _.max_height >= 2048) && !(at() && _.max_height > 4096) && (_.max_height > R || !A && W === 0)) {
900
- if (A = !0, r.texture_lod = W, r.texture_lod < s.lastLodLevel_Texture) {
901
- const b = _.max_height;
902
- G && console.log(`Texture LOD changed: ${s.lastLodLevel_Texture} → ${r.texture_lod} = ${b}px
903
- Screensize: ${R.toFixed(0)}px, Coverage: ${(100 * s.lastScreenCoverage).toFixed(2)}%, Volume ${h.toFixed(1)}
904
- ${t.name}`);
879
+ const p = r.lastScreenspaceVolume.x + r.lastScreenspaceVolume.y + r.lastScreenspaceVolume.z;
880
+ let q = r.lastScreenCoverage * 4;
881
+ ((M = this.context) == null ? void 0 : M.engine) === "model-viewer" && (q *= 1.5);
882
+ const G = _ / window.devicePixelRatio * q;
883
+ let k = !1;
884
+ for (let O = g.lods.length - 1; O >= 0; O--) {
885
+ const f = g.lods[O];
886
+ if (!(w && f.max_height >= 2048) && !(ct() && f.max_height > 4096) && (f.max_height > G || !k && O === 0)) {
887
+ if (k = !0, o.texture_lod = O, o.texture_lod < r.lastLodLevel_Texture) {
888
+ const S = f.max_height;
889
+ U && console.log(`Texture LOD changed: ${r.lastLodLevel_Texture} → ${o.texture_lod} = ${S}px
890
+ Screensize: ${G.toFixed(0)}px, Coverage: ${(100 * r.lastScreenCoverage).toFixed(2)}%, Volume ${p.toFixed(1)}
891
+ ${e.name}`);
905
892
  }
906
893
  break;
907
894
  }
908
895
  }
909
896
  }
910
897
  } else
911
- r.texture_lod = 0;
898
+ o.texture_lod = 0;
912
899
  }
913
900
  };
914
- let k = E;
915
- C = new WeakMap(), K = new WeakMap(), ye = new WeakMap(), te = new WeakMap(), se = new WeakMap(), me = new WeakMap(), Y = new WeakMap(), /** Assign a function to draw debug lines for the LODs. This function will be called with the start and end position of the line and the color of the line when the `debugprogressive` query parameter is set.
901
+ let I = T;
902
+ B = new WeakMap(), H = new WeakMap(), xe = new WeakMap(), se = new WeakMap(), oe = new WeakMap(), De = new WeakMap(), j = new WeakMap(), /**
903
+ * Assign a function to draw debug lines for the LODs. This function will be called with the start and end position of the line and the color of the line when the `debugprogressive` query parameter is set.
916
904
  */
917
- d(k, "debugDrawLine"), d(k, "corner0", new X()), d(k, "corner1", new X()), d(k, "corner2", new X()), d(k, "corner3", new X()), d(k, "_tempPtInside", new X());
918
- class gt {
905
+ d(I, "debugDrawLine"), /**
906
+ * Force override the LOD level for all objects in the scene
907
+ */
908
+ d(I, "overrideGlobalLodLevel"), d(I, "corner0", new K()), d(I, "corner1", new K()), d(I, "corner2", new K()), d(I, "corner3", new K()), d(I, "_tempPtInside", new K());
909
+ class yt {
919
910
  constructor() {
920
911
  d(this, "frames", 0);
921
912
  d(this, "lastLodLevel_Mesh", -1);
922
913
  d(this, "lastLodLevel_Texture", -1);
923
914
  d(this, "lastScreenCoverage", 0);
924
- d(this, "lastScreenspaceVolume", new X());
915
+ d(this, "lastScreenspaceVolume", new K());
925
916
  d(this, "lastCentrality", 0);
926
917
  }
927
918
  }
928
- const Be = Symbol("NEEDLE_mesh_lod"), he = Symbol("NEEDLE_texture_lod");
929
- let ie = null;
930
- function Ne() {
931
- const i = pt();
932
- i && (i.mapURLs(function(e) {
933
- return ke(), e;
934
- }), ke(), ie == null || ie.disconnect(), ie = new MutationObserver((e) => {
935
- e.forEach((t) => {
936
- t.addedNodes.forEach((s) => {
937
- s instanceof HTMLElement && s.tagName.toLowerCase() === "model-viewer" && ze(s);
919
+ const Ie = Symbol("NEEDLE_mesh_lod"), pe = Symbol("NEEDLE_texture_lod");
920
+ let ce = null;
921
+ function Ve() {
922
+ const n = mt();
923
+ n && (n.mapURLs(function(t) {
924
+ return Re(), t;
925
+ }), Re(), ce == null || ce.disconnect(), ce = new MutationObserver((t) => {
926
+ t.forEach((e) => {
927
+ e.addedNodes.forEach((r) => {
928
+ r instanceof HTMLElement && r.tagName.toLowerCase() === "model-viewer" && We(r);
938
929
  });
939
930
  });
940
- }), ie.observe(document, { childList: !0, subtree: !0 }));
931
+ }), ce.observe(document, { childList: !0, subtree: !0 }));
941
932
  }
942
- function pt() {
933
+ function mt() {
943
934
  if (typeof customElements > "u")
944
935
  return null;
945
- const i = customElements.get("model-viewer");
946
- return i || (customElements.whenDefined("model-viewer").then(() => {
947
- console.debug("[gltf-progressive] model-viewer defined"), Ne();
936
+ const n = customElements.get("model-viewer");
937
+ return n || (customElements.whenDefined("model-viewer").then(() => {
938
+ console.debug("[gltf-progressive] model-viewer defined"), Ve();
948
939
  }), null);
949
940
  }
950
- function ke() {
941
+ function Re() {
951
942
  if (typeof document > "u")
952
943
  return;
953
- document.querySelectorAll("model-viewer").forEach((e) => {
954
- ze(e);
944
+ document.querySelectorAll("model-viewer").forEach((t) => {
945
+ We(t);
955
946
  });
956
947
  }
957
- const Ie = /* @__PURE__ */ new WeakSet();
958
- let yt = 0;
959
- function ze(i) {
960
- if (!i || Ie.has(i))
948
+ const ke = /* @__PURE__ */ new WeakSet();
949
+ let Lt = 0;
950
+ function We(n) {
951
+ if (!n || ke.has(n))
961
952
  return null;
962
- Ie.add(i), console.debug("[gltf-progressive] found new model-viewer..." + ++yt + `
963
- `, i.getAttribute("src"));
964
- let e = null, t = null, s = null;
965
- for (let n = i; n != null; n = Object.getPrototypeOf(n)) {
966
- const r = Object.getOwnPropertySymbols(n), o = r.find((u) => u.toString() == "Symbol(renderer)"), a = r.find((u) => u.toString() == "Symbol(scene)"), l = r.find((u) => u.toString() == "Symbol(needsRender)");
967
- !e && o != null && (e = i[o].threeRenderer), !t && a != null && (t = i[a]), !s && l != null && (s = i[l]);
953
+ ke.add(n), console.debug("[gltf-progressive] found new model-viewer..." + ++Lt + `
954
+ `, n.getAttribute("src"));
955
+ let t = null, e = null, r = null;
956
+ for (let i = n; i != null; i = Object.getPrototypeOf(i)) {
957
+ const o = Object.getOwnPropertySymbols(i), s = o.find((u) => u.toString() == "Symbol(renderer)"), a = o.find((u) => u.toString() == "Symbol(scene)"), l = o.find((u) => u.toString() == "Symbol(needsRender)");
958
+ !t && s != null && (t = n[s].threeRenderer), !e && a != null && (e = n[a]), !r && l != null && (r = n[l]);
968
959
  }
969
- if (e && t) {
970
- let n = function() {
971
- if (s) {
972
- let o = 0, a = setInterval(() => {
973
- if (o++ > 5) {
960
+ if (t && e) {
961
+ let i = function() {
962
+ if (r) {
963
+ let s = 0, a = setInterval(() => {
964
+ if (s++ > 5) {
974
965
  clearInterval(a);
975
966
  return;
976
967
  }
977
- s == null || s.call(i);
968
+ r == null || r.call(n);
978
969
  }, 300);
979
970
  }
980
971
  };
981
972
  console.debug("[gltf-progressive] setup model-viewer");
982
- const r = k.get(e, { engine: "model-viewer" });
983
- return k.addPlugin(new mt()), r.enable(), r.addEventListener("changed", () => {
984
- s == null || s.call(i);
985
- }), i.addEventListener("model-visibility", (o) => {
986
- o.detail.visible && (s == null || s.call(i));
987
- }), i.addEventListener("load", () => {
988
- n();
973
+ const o = I.get(t, { engine: "model-viewer" });
974
+ return I.addPlugin(new xt()), o.enable(), o.addEventListener("changed", () => {
975
+ r == null || r.call(n);
976
+ }), n.addEventListener("model-visibility", (s) => {
977
+ s.detail.visible && (r == null || r.call(n));
978
+ }), n.addEventListener("load", () => {
979
+ i();
989
980
  }), () => {
990
- r.disable();
981
+ o.disable();
991
982
  };
992
983
  }
993
984
  return null;
994
985
  }
995
- class mt {
986
+ class xt {
996
987
  constructor() {
997
988
  d(this, "_didWarnAboutMissingUrl", !1);
998
989
  }
999
- onBeforeUpdateLOD(e, t, s, n) {
1000
- this.tryParseMeshLOD(t, n), this.tryParseTextureLOD(t, n);
990
+ onBeforeUpdateLOD(t, e, r, i) {
991
+ this.tryParseMeshLOD(e, i), this.tryParseTextureLOD(e, i);
1001
992
  }
1002
- getUrl(e) {
1003
- if (!e)
993
+ getUrl(t) {
994
+ if (!t)
1004
995
  return null;
1005
- let t = e.getAttribute("src");
1006
- return t || (t = e.src), t || (this._didWarnAboutMissingUrl || console.warn("No url found in modelviewer", e), this._didWarnAboutMissingUrl = !0), t;
996
+ let e = t.getAttribute("src");
997
+ return e || (e = t.src), e || (this._didWarnAboutMissingUrl || console.warn("No url found in modelviewer", t), this._didWarnAboutMissingUrl = !0), e;
1007
998
  }
1008
- tryGetCurrentGLTF(e) {
1009
- return e._currentGLTF;
999
+ tryGetCurrentGLTF(t) {
1000
+ return t._currentGLTF;
1010
1001
  }
1011
- tryGetCurrentModelViewer(e) {
1012
- return e.element;
1002
+ tryGetCurrentModelViewer(t) {
1003
+ return t.element;
1013
1004
  }
1014
- tryParseTextureLOD(e, t) {
1015
- if (t[he] == !0)
1005
+ tryParseTextureLOD(t, e) {
1006
+ if (e[pe] == !0)
1016
1007
  return;
1017
- t[he] = !0;
1018
- const s = this.tryGetCurrentGLTF(e), n = this.tryGetCurrentModelViewer(e), r = this.getUrl(n);
1019
- if (r && s && t.material) {
1020
- let o = function(l) {
1021
- var c, g, p;
1022
- if (l[he] == !0)
1008
+ e[pe] = !0;
1009
+ const r = this.tryGetCurrentGLTF(t), i = this.tryGetCurrentModelViewer(t), o = this.getUrl(i);
1010
+ if (o && r && e.material) {
1011
+ let s = function(l) {
1012
+ var c, h, g;
1013
+ if (l[pe] == !0)
1023
1014
  return;
1024
- l[he] = !0, l.userData && (l.userData.LOD = -1);
1015
+ l[pe] = !0, l.userData && (l.userData.LOD = -1);
1025
1016
  const u = Object.keys(l);
1026
- for (let M = 0; M < u.length; M++) {
1027
- const w = u[M], x = l[w];
1017
+ for (let D = 0; D < u.length; D++) {
1018
+ const _ = u[D], x = l[_];
1028
1019
  if ((x == null ? void 0 : x.isTexture) === !0) {
1029
- const F = (g = (c = x.userData) == null ? void 0 : c.associations) == null ? void 0 : g.textures;
1030
- if (F == null)
1020
+ const N = (h = (c = x.userData) == null ? void 0 : c.associations) == null ? void 0 : h.textures;
1021
+ if (N == null)
1031
1022
  continue;
1032
- const D = s.parser.json.textures[F];
1033
- if (!D) {
1034
- console.warn("Texture data not found for texture index " + F);
1023
+ const X = r.parser.json.textures[N];
1024
+ if (!X) {
1025
+ console.warn("Texture data not found for texture index " + N);
1035
1026
  continue;
1036
1027
  }
1037
- if ((p = D == null ? void 0 : D.extensions) != null && p[q]) {
1038
- const h = D.extensions[q];
1039
- h && r && T.registerTexture(r, x, h.lods.length, F, h);
1028
+ if ((g = X == null ? void 0 : X.extensions) != null && g[Y]) {
1029
+ const M = X.extensions[Y];
1030
+ M && o && A.registerTexture(o, x, M.lods.length, N, M);
1040
1031
  }
1041
1032
  }
1042
1033
  }
1043
1034
  };
1044
- const a = t.material;
1035
+ const a = e.material;
1045
1036
  if (Array.isArray(a))
1046
1037
  for (const l of a)
1047
- o(l);
1038
+ s(l);
1048
1039
  else
1049
- o(a);
1040
+ s(a);
1050
1041
  }
1051
1042
  }
1052
- tryParseMeshLOD(e, t) {
1053
- var o, a;
1054
- if (t[Be] == !0)
1043
+ tryParseMeshLOD(t, e) {
1044
+ var s, a;
1045
+ if (e[Ie] == !0)
1055
1046
  return;
1056
- t[Be] = !0;
1057
- const s = this.tryGetCurrentModelViewer(e), n = this.getUrl(s);
1058
- if (!n)
1047
+ e[Ie] = !0;
1048
+ const r = this.tryGetCurrentModelViewer(t), i = this.getUrl(r);
1049
+ if (!i)
1059
1050
  return;
1060
- const r = (a = (o = t.userData) == null ? void 0 : o.gltfExtensions) == null ? void 0 : a[q];
1061
- if (r && n) {
1062
- const l = t.uuid;
1063
- T.registerMesh(n, l, t, 0, r.lods.length, r);
1051
+ const o = (a = (s = e.userData) == null ? void 0 : s.gltfExtensions) == null ? void 0 : a[Y];
1052
+ if (o && i) {
1053
+ const l = e.uuid;
1054
+ A.registerMesh(i, l, e, 0, o.lods.length, o);
1064
1055
  }
1065
1056
  }
1066
1057
  }
1067
- function Lt(i, e, t, s) {
1068
- $e(e), Ue(t), Fe(t, {
1058
+ function Dt(n, t, e, r) {
1059
+ Ue(t), Fe(e), Ne(e, {
1069
1060
  progressive: !0,
1070
- ...s == null ? void 0 : s.hints
1071
- }), t.register((r) => new T(r, i));
1072
- const n = k.get(e);
1073
- return (s == null ? void 0 : s.enableLODsManager) !== !1 && n.enable(), n;
1061
+ ...r == null ? void 0 : r.hints
1062
+ }), e.register((o) => new A(o, n));
1063
+ const i = I.get(t);
1064
+ return (r == null ? void 0 : r.enableLODsManager) !== !1 && i.enable(), i;
1074
1065
  }
1075
- Ne();
1076
- if (!lt) {
1077
- const i = {
1066
+ Ve();
1067
+ if (!ut) {
1068
+ const n = {
1078
1069
  gltfProgressive: {
1079
- useNeedleProgressive: Lt,
1080
- LODsManager: k,
1081
- configureLoader: Fe,
1082
- getRaycastMesh: ce,
1083
- useRaycastMeshes: ut
1070
+ useNeedleProgressive: Dt,
1071
+ LODsManager: I,
1072
+ configureLoader: Ne,
1073
+ getRaycastMesh: de,
1074
+ useRaycastMeshes: ft
1084
1075
  }
1085
1076
  };
1086
1077
  if (!globalThis.Needle)
1087
- globalThis.Needle = i;
1078
+ globalThis.Needle = n;
1088
1079
  else
1089
- for (const e in i)
1090
- globalThis.Needle[e] = i[e];
1080
+ for (const t in n)
1081
+ globalThis.Needle[t] = n[t];
1091
1082
  }
1092
1083
  export {
1093
- q as EXTENSION_NAME,
1094
- k as LODsManager,
1095
- T as NEEDLE_progressive,
1096
- et as VERSION,
1097
- Ue as addDracoAndKTX2Loaders,
1098
- Fe as configureLoader,
1099
- $e as createLoaders,
1100
- ce as getRaycastMesh,
1101
- Ne as patchModelViewer,
1102
- ct as registerRaycastMesh,
1103
- rt as setDracoDecoderLocation,
1104
- ot as setKTX2TranscoderLocation,
1105
- Lt as useNeedleProgressive,
1106
- ut as useRaycastMeshes
1084
+ Y as EXTENSION_NAME,
1085
+ I as LODsManager,
1086
+ A as NEEDLE_progressive,
1087
+ rt as VERSION,
1088
+ Fe as addDracoAndKTX2Loaders,
1089
+ Ne as configureLoader,
1090
+ Ue as createLoaders,
1091
+ de as getRaycastMesh,
1092
+ Ve as patchModelViewer,
1093
+ dt as registerRaycastMesh,
1094
+ it as setDracoDecoderLocation,
1095
+ nt as setKTX2TranscoderLocation,
1096
+ Dt as useNeedleProgressive,
1097
+ ft as useRaycastMeshes
1107
1098
  };