@needle-tools/gltf-progressive 2.1.6-next.fa4044e → 2.1.6

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,209 +1,213 @@
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);
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);
6
6
  };
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))
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))
9
9
  throw TypeError("Cannot add the same private member more than once");
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;
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;
19
19
  console.debug("[gltf-progressive] version -");
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, {
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, {
24
24
  method: "GET",
25
25
  headers: {
26
26
  Range: "bytes=0-1"
27
27
  }
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/");
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/");
30
30
  }).finally(() => {
31
- $e();
31
+ Ge();
32
32
  });
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);
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);
35
35
  }
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);
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);
38
38
  }
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);
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);
43
43
  }
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 };
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 };
46
46
  }
47
- function Fe(n) {
48
- n.dracoLoader || n.setDRACOLoader(R), n.ktx2Loader || n.setKTX2Loader(F), n.meshoptDecoder || n.setMeshoptDecoder(Le);
47
+ function Ue(i) {
48
+ i.dracoLoader || i.setDRACOLoader(B), i.ktx2Loader || i.setKTX2Loader(U), i.meshoptDecoder || i.setMeshoptDecoder(pe);
49
49
  }
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);
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);
54
54
  }
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();
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();
63
63
  }
64
- return n[0] = e, we == null ? void 0 : we.call(this, ...n);
64
+ return i[0] = t, De == null ? void 0 : De.call(this, ...i);
65
65
  }
66
- Pe.prototype.load = at;
67
- ue("debugprogressive");
68
- function ue(n) {
66
+ Te.prototype.load = nt;
67
+ le("debugprogressive");
68
+ function le(i) {
69
69
  if (typeof window > "u")
70
70
  return !1;
71
- const e = new URL(window.location.href).searchParams.get(n);
72
- return e == null || e === "0" || e === "false" ? !1 : e === "" ? !0 : e;
71
+ const t = new URL(window.location.href).searchParams.get(i);
72
+ return t == null || t === "0" || t === "false" ? !1 : t === "" ? !0 : t;
73
73
  }
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;
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;
83
83
  }
84
- return t;
84
+ return e;
85
85
  }
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;
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;
89
89
  }
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;
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;
93
93
  }
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;
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;
98
98
  }
99
99
  }
100
- function ft(n = !0) {
101
- if (n) {
102
- if (le)
100
+ function ut(i = !0) {
101
+ if (i) {
102
+ if (ne)
103
103
  return;
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);
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);
109
109
  };
110
110
  } else {
111
- if (!le)
111
+ if (!ne)
112
112
  return;
113
- te.prototype.raycast = le, le = null;
113
+ j.prototype.raycast = ne, ne = null;
114
114
  }
115
115
  }
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;
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;
122
122
  }
123
- const Z = new Array(), L = ue("debugprogressive");
124
- let ye, ee = -1;
123
+ const Z = new Array(), q = "NEEDLE_progressive", L = le("debugprogressive"), Me = Symbol("needle-progressive-texture"), ae = /* @__PURE__ */ new Map(), Se = /* @__PURE__ */ new Set();
125
124
  if (L) {
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}]`));
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
+ }));
133
142
  });
134
143
  }
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);
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);
142
151
  }
143
- const Y = "NEEDLE_progressive", _e = Symbol("needle-progressive-texture"), b = class {
144
- constructor(t, e) {
152
+ const v = class {
153
+ constructor(e, t) {
145
154
  d(this, "parser");
146
155
  d(this, "url");
147
156
  d(this, "_isLoadingMesh");
148
- d(this, "loadMesh", (t) => {
149
- var r, i;
157
+ d(this, "loadMesh", (e) => {
158
+ var s, n;
150
159
  if (this._isLoadingMesh)
151
160
  return null;
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;
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;
156
165
  })) : null;
157
166
  });
158
- L && console.log("Progressive extension registered for", e), this.parser = t, this.url = e;
167
+ L && console.log("Progressive extension registered for", t), this.parser = e, this.url = t;
159
168
  }
160
169
  /** The name of the extension */
161
170
  get name() {
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;
171
+ return q;
167
172
  }
168
- static getPrimitiveIndex(t) {
169
- var r;
170
- const e = (r = this.getAssignedLODInformation(t)) == null ? void 0 : r.index;
171
- return e ?? -1;
173
+ static getMeshLODInformation(e) {
174
+ const t = this.getAssignedLODInformation(e);
175
+ return t != null && t.key ? this.lodInfos.get(t.key) : null;
172
176
  }
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 = {
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 = {
178
182
  min_count: 1 / 0,
179
183
  max_count: 0,
180
184
  lods: []
181
- }), Array.isArray(t)) {
182
- for (const a of t)
183
- this.getMaterialMinMaxLODsCount(a, e);
184
- return t[i] = e, e;
185
+ }), Array.isArray(e)) {
186
+ for (const a of e)
187
+ this.getMaterialMinMaxLODsCount(a, t);
188
+ return e[n] = t, t;
185
189
  }
186
- if (L === "verbose" && console.log("getMaterialMinMaxLODsCount", t), t.type === "ShaderMaterial" || t.type === "RawShaderMaterial") {
187
- const a = t;
190
+ if (L === "verbose" && console.log("getMaterialMinMaxLODsCount", e), e.type === "ShaderMaterial" || e.type === "RawShaderMaterial") {
191
+ const a = e;
188
192
  for (const l of Object.keys(a.uniforms)) {
189
193
  const u = a.uniforms[l].value;
190
- (u == null ? void 0 : u.isTexture) === !0 && s(u, e);
194
+ (u == null ? void 0 : u.isTexture) === !0 && o(u, t);
191
195
  }
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);
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);
196
200
  }
197
- return t[i] = e, e;
198
- function s(a, l) {
199
- const u = r.getAssignedLODInformation(a);
201
+ return e[n] = t, t;
202
+ function o(a, l) {
203
+ const u = s.getAssignedLODInformation(a);
200
204
  if (u) {
201
- const c = r.lodInfos.get(u.key);
205
+ const c = s.lodInfos.get(u.key);
202
206
  if (c && c.lods) {
203
207
  l.min_count = Math.min(l.min_count, c.lods.length), l.max_count = Math.max(l.max_count, c.lods.length);
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));
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));
207
211
  }
208
212
  }
209
213
  }
@@ -214,33 +218,33 @@ const Y = "NEEDLE_progressive", _e = Symbol("needle-progressive-texture"), b = c
214
218
  * @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
215
219
  * @returns true if the LOD level is available (or if any LOD level is available if level is undefined)
216
220
  */
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))
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))
222
226
  return !0;
223
227
  return !1;
224
228
  }
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))
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))
229
233
  return !0;
230
234
  }
231
235
  return !1;
232
- } else if (t.isGroup === !0) {
233
- for (const s of t.children)
234
- if (s.isMesh === !0 && this.hasLODLevelAvailable(s, e))
236
+ } else if (e.isGroup === !0) {
237
+ for (const o of e.children)
238
+ if (o.isMesh === !0 && this.hasLODLevelAvailable(o, t))
235
239
  return !0;
236
240
  }
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;
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;
244
248
  }
245
249
  return !1;
246
250
  }
@@ -258,107 +262,113 @@ const Y = "NEEDLE_progressive", _e = Symbol("needle-progressive-texture"), b = c
258
262
  * });
259
263
  * ```
260
264
  */
261
- static assignMeshLOD(t, e) {
262
- var r;
263
- if (!t)
265
+ static assignMeshLOD(e, t) {
266
+ var s;
267
+ if (!e)
264
268
  return Promise.resolve(null);
265
- if (t instanceof te || t.isMesh === !0) {
266
- const i = t.geometry, o = this.getAssignedLODInformation(i);
267
- if (!o)
269
+ if (e instanceof j || e.isMesh === !0) {
270
+ const n = e.geometry, r = this.getAssignedLODInformation(n);
271
+ if (!r)
268
272
  return Promise.resolve(null);
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];
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];
275
279
  }
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));
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));
278
282
  } else
279
- L && console.error("Invalid call to assignMeshLOD: Request mesh LOD but the object is not a mesh", t);
283
+ L && console.error("Invalid call to assignMeshLOD: Request mesh LOD but the object is not a mesh", e);
280
284
  return Promise.resolve(null);
281
285
  }
282
- static assignTextureLOD(t, e = 0) {
283
- if (!t)
286
+ static assignTextureLOD(e, t = 0) {
287
+ if (!e)
284
288
  return Promise.resolve(null);
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);
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);
292
296
  }
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;
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;
298
302
  });
299
303
  } else
300
- return this.assignTextureLOD(r.material, e);
304
+ return this.assignTextureLOD(s.material, t);
301
305
  }
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;
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;
308
312
  if ((l == null ? void 0 : l.isTexture) === !0) {
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);
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);
311
315
  }
312
316
  }
313
317
  } else
314
- for (const s of Object.keys(r)) {
315
- const a = r[s];
318
+ for (const o of Object.keys(s)) {
319
+ const a = s[o];
316
320
  if ((a == null ? void 0 : a.isTexture) === !0) {
317
- const l = this.assignTextureLODForSlot(a, e, r, s);
318
- i.push(l), o.push(s);
321
+ const l = this.assignTextureLODForSlot(a, t, s, o);
322
+ n.push(l), r.push(o);
319
323
  }
320
324
  }
321
- return Promise.all(i).then((s) => {
325
+ return Promise.all(n).then((o) => {
322
326
  const a = new Array();
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 });
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 });
326
330
  }
327
331
  return a;
328
332
  });
329
333
  }
330
- if (t instanceof ne || t.isTexture === !0) {
331
- const r = t;
332
- return this.assignTextureLODForSlot(r, e, null, null);
334
+ if (e instanceof re || e.isTexture === !0) {
335
+ const s = e;
336
+ return this.assignTextureLODForSlot(s, t, null, null);
333
337
  }
334
338
  return Promise.resolve(null);
335
339
  }
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))
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))
339
343
  return null;
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;
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);
347
358
  }
348
- r[i] = o;
349
359
  }
350
- return o;
360
+ return r;
351
361
  } else
352
- L == "verbose" && console.warn("No LOD found for", t, e);
362
+ L == "verbose" && console.warn("No LOD found for", e, t);
353
363
  return null;
354
- }).catch((o) => (console.error("Error loading LOD", t, o), null));
364
+ }).catch((r) => (console.error("Error loading LOD", e, r), null));
355
365
  }
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];
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];
362
372
  if (a) {
363
373
  if (!a.lods) {
364
374
  L && console.warn("Texture has no LODs", a);
@@ -368,204 +378,207 @@ const Y = "NEEDLE_progressive", _e = Symbol("needle-progressive-texture"), b = c
368
378
  for (const u of this.parser.associations.keys())
369
379
  if (u.isTexture === !0) {
370
380
  const c = this.parser.associations.get(u);
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));
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));
372
382
  }
373
- l || this.parser.getDependency("texture", o).then((u) => {
383
+ l || this.parser.getDependency("texture", r).then((u) => {
374
384
  var c;
375
- u && b.registerTexture(this.url, u, (c = a.lods) == null ? void 0 : c.length, o, a);
385
+ u && v.registerTexture(this.url, u, (c = a.lods) == null ? void 0 : c.length, r, a);
376
386
  });
377
387
  }
378
388
  }
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) {
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) {
383
393
  for (const a of this.parser.associations.keys())
384
394
  if (a.isMesh) {
385
395
  const l = this.parser.associations.get(a);
386
- (l == null ? void 0 : l.meshes) === o && b.registerMesh(this.url, s.guid, a, s.lods.length, l.primitives, s);
396
+ (l == null ? void 0 : l.meshes) === r && v.registerMesh(this.url, o.guid, a, o.lods.length, l.primitives, o);
387
397
  }
388
398
  }
389
399
  }
390
400
  }), null;
391
401
  }
392
- static async getOrLoadLOD(t, e) {
402
+ static async getOrLoadLOD(e, t) {
393
403
  var a, l, u, c;
394
- const r = L == "verbose", i = t.userData.LODS;
395
- if (!i)
404
+ const s = L == "verbose", n = e.userData.LODS;
405
+ if (!n)
396
406
  return null;
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]);
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]);
402
412
  }
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);
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);
409
419
  }
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;
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;
424
434
  }
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;
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;
429
439
  if (x && Array.isArray(x.lods)) {
430
- const O = x.lods[e];
431
- O.hash && (q += "?v=" + O.hash);
440
+ const b = x.lods[t];
441
+ b.hash && (R += "?v=" + b.hash);
432
442
  }
433
- const P = await p.loadAsync(q).catch((O) => (console.error(`Error loading LOD ${e} from ${g}
434
- `, O), null));
435
- if (!P)
443
+ const A = await N.loadAsync(R).catch((b) => (console.error(`Error loading LOD ${t} from ${p}
444
+ `, b), null));
445
+ if (!A)
436
446
  return null;
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) {
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) {
443
453
  if (f != null && f.extensions) {
444
- const S = f == null ? void 0 : f.extensions[Y];
445
- if (S != null && S.guid && S.guid === x.guid) {
446
- O = !0;
454
+ const y = f == null ? void 0 : f.extensions[q];
455
+ if (y != null && y.guid && y.guid === x.guid) {
456
+ b = !0;
447
457
  break;
448
458
  }
449
459
  }
450
- k++;
460
+ _++;
451
461
  }
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);
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);
455
465
  } else
456
- L && console.warn("Could not find texture with guid", x.guid, P.parser.json);
466
+ L && console.warn("Could not find texture with guid", x.guid, A.parser.json);
457
467
  }
458
- if (k = 0, P.parser.json.meshes) {
459
- let O = !1;
460
- for (const f of P.parser.json.meshes) {
468
+ if (_ = 0, A.parser.json.meshes) {
469
+ let b = !1;
470
+ for (const f of A.parser.json.meshes) {
461
471
  if (f != null && f.extensions) {
462
- const S = f == null ? void 0 : f.extensions[Y];
463
- if (S != null && S.guid && S.guid === x.guid) {
464
- O = !0;
472
+ const y = f == null ? void 0 : f.extensions[q];
473
+ if (y != null && y.guid && y.guid === x.guid) {
474
+ b = !0;
465
475
  break;
466
476
  }
467
477
  }
468
- k++;
478
+ _++;
469
479
  }
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);
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);
475
485
  } else {
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);
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);
482
492
  }
483
493
  }
484
- return M(S);
494
+ return h(O);
485
495
  }
486
496
  } else
487
- L && console.warn("Could not find mesh with guid", x.guid, P.parser.json);
497
+ L && console.warn("Could not find mesh with guid", x.guid, A.parser.json);
488
498
  }
489
- return M(null);
499
+ return h(null);
490
500
  });
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), _;
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;
496
506
  }
497
507
  } else
498
- L && console.warn(`Can not load LOD ${e}: no LOD info found for "${o}" ${t.name}`, t.type);
508
+ L && console.warn(`Can not load LOD ${t}: no LOD info found for "${r}" ${e.name}`, e.type);
499
509
  return null;
500
510
  }
501
- static assignLODInformation(t, e, r, i, o) {
502
- if (!e)
511
+ static assignLODInformation(e, t, s, n, r, o) {
512
+ if (!t)
503
513
  return;
504
- e.userData || (e.userData = {});
505
- const s = new gt(t, r, i, o);
506
- e.userData.LODS = s;
514
+ t.userData || (t.userData = {});
515
+ const a = new dt(e, s, n, r, o);
516
+ t.userData.LODS = a;
507
517
  }
508
- static getAssignedLODInformation(t) {
509
- var e;
510
- return ((e = t == null ? void 0 : t.userData) == null ? void 0 : e.LODS) || null;
518
+ static getAssignedLODInformation(e) {
519
+ var t;
520
+ return ((t = e == null ? void 0 : e.userData) == null ? void 0 : t.LODS) || null;
511
521
  }
512
522
  // private static readonly _copiedTextures: WeakMap<Texture, Texture> = new Map();
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;
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;
517
527
  }
518
528
  };
519
- let A = b;
529
+ let T = v;
520
530
  /**
521
531
  * Register a texture with LOD information
522
532
  */
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) {
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) {
525
535
  L && console.error("gltf-progressive: Register texture without texture");
526
536
  return;
527
537
  }
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);
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);
531
541
  }), /**
532
542
  * Register a mesh with LOD information
533
543
  */
534
- d(A, "registerMesh", (t, e, r, i, o, s) => {
544
+ d(T, "registerMesh", (e, t, s, n, r, o) => {
535
545
  var u;
536
- const a = r.geometry;
546
+ L && console.log("> Progressive: register mesh", r, s.name, o, s.uuid, s);
547
+ const a = s.geometry;
537
548
  if (!a) {
538
549
  L && console.warn("gltf-progressive: Register mesh without geometry");
539
550
  return;
540
551
  }
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);
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);
544
555
  for (const c of Z)
545
- (u = c.onRegisteredNewMesh) == null || u.call(c, r, s);
556
+ (u = c.onRegisteredNewMesh) == null || u.call(c, s, o);
546
557
  }), /** A map of key = asset uuid and value = LOD information */
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) {
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) {
552
563
  d(this, "url");
553
564
  /** the key to lookup the LOD information */
554
565
  d(this, "key");
555
566
  d(this, "level");
556
567
  /** For multi objects (e.g. a group of meshes) this is the index of the object */
557
568
  d(this, "index");
558
- this.url = t, this.key = e, this.level = r, i != null && (this.index = i);
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);
559
572
  }
560
573
  }
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 {
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 {
564
577
  // readonly plugins: NEEDLE_progressive_plugin[] = [];
565
- constructor(t, e) {
578
+ constructor(e, t) {
566
579
  d(this, "context");
567
580
  d(this, "renderer");
568
- d(this, "projectionScreenMatrix", new Ee());
581
+ d(this, "projectionScreenMatrix", new Pe());
569
582
  /**
570
583
  * The target triangle density is the desired max amount of triangles on screen when the mesh is filling the screen.
571
584
  * @default 200_000
@@ -582,7 +595,7 @@ const T = class {
582
595
  * @default "auto"
583
596
  */
584
597
  d(this, "updateInterval", "auto");
585
- J(this, B, 1);
598
+ J(this, C, 1);
586
599
  /**
587
600
  * If set to true, the LODsManager will not update the LODs.
588
601
  * @default false
@@ -595,110 +608,110 @@ const T = class {
595
608
  */
596
609
  d(this, "manual", !1);
597
610
  d(this, "_lodchangedlisteners", []);
598
- J(this, H, void 0);
599
- J(this, xe, new je());
611
+ J(this, K, void 0);
612
+ J(this, ye, new Ye());
613
+ J(this, te, 0);
600
614
  J(this, se, 0);
601
- J(this, oe, 0);
602
- J(this, De, 0);
603
- J(this, j, 0);
615
+ J(this, me, 0);
616
+ J(this, Y, 0);
604
617
  d(this, "_fpsBuffer", [60, 60, 60, 60, 60]);
605
618
  // private testIfLODLevelsAreAvailable() {
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 };
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 };
614
627
  }
615
628
  /** @internal */
616
- static getObjectLODState(t) {
617
- return t[be];
629
+ static getObjectLODState(e) {
630
+ return e[ve];
618
631
  }
619
- static addPlugin(t) {
620
- Z.push(t);
632
+ static addPlugin(e) {
633
+ Z.push(e);
621
634
  }
622
- static removePlugin(t) {
623
- const e = Z.indexOf(t);
624
- e >= 0 && Z.splice(e, 1);
635
+ static removePlugin(e) {
636
+ const t = Z.indexOf(e);
637
+ t >= 0 && Z.splice(t, 1);
625
638
  }
626
639
  /**
627
640
  * Gets the LODsManager for the given renderer. If the LODsManager does not exist yet, it will be created.
628
641
  * @param renderer The renderer to get the LODsManager for.
629
642
  * @returns The LODsManager instance.
630
643
  */
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, {
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, {
635
648
  engine: "unknown",
636
- ...e
649
+ ...t
637
650
  });
638
- return t[Oe] = r, r;
651
+ return e[we] = s, s;
639
652
  }
640
653
  /** @deprecated use static `LODsManager.addPlugin()` method. This getter will be removed in later versions */
641
654
  get plugins() {
642
655
  return Z;
643
656
  }
644
- addEventListener(t, e) {
645
- t === "changed" && this._lodchangedlisteners.push(e);
657
+ addEventListener(e, t) {
658
+ e === "changed" && this._lodchangedlisteners.push(t);
646
659
  }
647
- removeEventListener(t, e) {
648
- if (t === "changed") {
649
- const r = this._lodchangedlisteners.indexOf(e);
650
- r >= 0 && this._lodchangedlisteners.splice(r, 1);
660
+ removeEventListener(e, t) {
661
+ if (e === "changed") {
662
+ const s = this._lodchangedlisteners.indexOf(t);
663
+ s >= 0 && this._lodchangedlisteners.splice(s, 1);
651
664
  }
652
665
  }
653
666
  /**
654
667
  * Enable the LODsManager. This will replace the render method of the renderer with a method that updates the LODs.
655
668
  */
656
669
  enable() {
657
- if (y(this, H))
670
+ if (m(this, K))
658
671
  return;
659
672
  console.debug("[gltf-progressive] Enabling LODsManager for renderer");
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);
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);
668
681
  };
669
682
  }
670
683
  disable() {
671
- y(this, H) && (console.debug("[gltf-progressive] Disabling LODsManager for renderer"), this.renderer.render = y(this, H), V(this, H, void 0));
684
+ m(this, K) && (console.debug("[gltf-progressive] Disabling LODsManager for renderer"), this.renderer.render = m(this, K), z(this, K, void 0));
672
685
  }
673
- update(t, e) {
674
- this.internalUpdate(t, e);
686
+ update(e, t) {
687
+ this.internalUpdate(e, t);
675
688
  }
676
- onAfterRender(t, e, r) {
689
+ onAfterRender(e, t, s) {
677
690
  if (this.pause)
678
691
  return;
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);
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);
684
697
  }
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))
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))
687
700
  return;
688
- this.internalUpdate(t, e);
701
+ this.internalUpdate(e, t);
689
702
  }
690
703
  }
691
704
  /**
692
705
  * Update LODs in a scene
693
706
  */
694
- internalUpdate(t, e) {
707
+ internalUpdate(e, t) {
695
708
  var l, u;
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) {
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) {
700
713
  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")) {
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)));
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)));
702
715
  continue;
703
716
  }
704
717
  switch (c.material.type) {
@@ -710,58 +723,59 @@ const T = class {
710
723
  case "MeshDepthMaterial":
711
724
  continue;
712
725
  }
713
- if (U === "color" && c.material && !c.object.progressive_debug_color) {
726
+ if (G === "color" && c.material && !c.object.progressive_debug_color) {
714
727
  c.object.progressive_debug_color = !0;
715
- const g = Math.random() * 16777215, D = new Je({ color: g });
716
- c.object.material = D;
728
+ const p = Math.random() * 16777215, M = new He({ color: p });
729
+ c.object.material = M;
717
730
  }
718
- const h = c.object;
719
- (h instanceof te || h.isMesh) && this.updateLODs(t, e, h, o);
731
+ const g = c.object;
732
+ (g instanceof j || g.isMesh) && this.updateLODs(e, t, g, r);
720
733
  }
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);
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);
725
738
  }
726
- const a = r.transmissive;
739
+ const a = s.transmissive;
727
740
  for (const c of a) {
728
- const h = c.object;
729
- (h instanceof te || h.isMesh) && this.updateLODs(t, e, h, o);
741
+ const g = c.object;
742
+ (g instanceof j || g.isMesh) && this.updateLODs(e, t, g, r);
730
743
  }
731
744
  }
732
745
  /** Update the LOD levels for the renderer. */
733
- updateLODs(t, e, r, i) {
746
+ updateLODs(e, t, s, n) {
734
747
  var a, l;
735
- r.userData || (r.userData = {});
736
- let o = r[be];
737
- if (o || (o = new yt(), r[be] = o), o.frames++ < 2)
748
+ s.userData || (s.userData = {});
749
+ let r = s[ve];
750
+ if (r || (r = new gt(), s[ve] = r), r.frames++ < 2)
738
751
  return;
739
752
  for (const u of Z)
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);
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);
743
757
  for (const u of Z)
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;
758
+ (l = u.onAfterUpdatedLOD) == null || l.call(u, this.renderer, e, t, s, $);
759
+ r.lastLodLevel_Mesh = $.mesh_lod, r.lastLodLevel_Texture = $.texture_lod;
746
760
  }
747
761
  /** Load progressive textures for the given material
748
762
  * @param material the material to load the textures for
749
763
  * @param level the LOD level to load. Level 0 is the best quality, higher levels are lower quality
750
764
  * @returns Promise with true if the LOD was loaded, false if not
751
765
  */
752
- loadProgressiveTextures(t, e) {
753
- if (!t)
766
+ loadProgressiveTextures(e, t) {
767
+ if (!e)
754
768
  return;
755
- if (Array.isArray(t)) {
756
- for (const o of t)
757
- this.loadProgressiveTextures(o, e);
769
+ if (Array.isArray(e)) {
770
+ for (const r of e)
771
+ this.loadProgressiveTextures(r, t);
758
772
  return;
759
773
  }
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 }));
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 }));
765
779
  }));
766
780
  }
767
781
  /** Load progressive meshes for the given mesh
@@ -770,329 +784,324 @@ const T = class {
770
784
  * @param level the LOD level to load. Level 0 is the best quality, higher levels are lower quality
771
785
  * @returns Promise with true if the LOD was loaded, false if not
772
786
  */
773
- loadProgressiveMeshes(t, e) {
774
- if (!t)
787
+ loadProgressiveMeshes(e, t) {
788
+ if (!e)
775
789
  return Promise.resolve(null);
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));
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));
782
796
  }
783
797
  return Promise.resolve(null);
784
798
  }
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;
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;
788
802
  }
789
- calculateLodLevel(t, e, r, i, o) {
790
- var N, X, M;
791
- if (!e) {
792
- o.mesh_lod = -1, o.texture_lod = -1;
803
+ calculateLodLevel(e, t, s, n, r) {
804
+ var F;
805
+ if (!t) {
806
+ r.mesh_lod = -1, r.texture_lod = -1;
793
807
  return;
794
808
  }
795
- if (!t) {
796
- o.mesh_lod = -1, o.texture_lod = -1;
809
+ if (!e) {
810
+ r.mesh_lod = -1, r.texture_lod = -1;
797
811
  return;
798
812
  }
799
813
  let a = 10 + 1, l = !1;
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;
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;
805
819
  return;
806
820
  }
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;
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;
817
831
  }
818
- x = w.boundingBox;
832
+ x = D.boundingBox;
819
833
  }
820
834
  if (x) {
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;
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;
827
841
  return;
828
842
  }
829
843
  }
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;
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;
832
846
  return;
833
847
  }
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);
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);
841
855
  } else
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);
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);
855
869
  }
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;
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;
862
875
  break;
863
876
  }
864
- }
865
- f < a && (a = f, l = !0);
877
+ }
878
+ _ < a && (a = _, l = !0);
866
879
  }
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}`);
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}`);
870
883
  }
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}`);
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}`);
877
890
  }
878
891
  } else {
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}`);
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}`);
892
905
  }
893
906
  break;
894
907
  }
895
908
  }
896
909
  }
897
910
  } else
898
- o.texture_lod = 0;
911
+ r.texture_lod = 0;
899
912
  }
900
913
  };
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.
904
- */
905
- d(I, "debugDrawLine"), /**
906
- * Force override the LOD level for all objects in the scene
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.
907
916
  */
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 {
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 {
910
919
  constructor() {
911
920
  d(this, "frames", 0);
912
921
  d(this, "lastLodLevel_Mesh", -1);
913
922
  d(this, "lastLodLevel_Texture", -1);
914
923
  d(this, "lastScreenCoverage", 0);
915
- d(this, "lastScreenspaceVolume", new K());
924
+ d(this, "lastScreenspaceVolume", new X());
916
925
  d(this, "lastCentrality", 0);
917
926
  }
918
927
  }
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);
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);
929
938
  });
930
939
  });
931
- }), ce.observe(document, { childList: !0, subtree: !0 }));
940
+ }), ie.observe(document, { childList: !0, subtree: !0 }));
932
941
  }
933
- function mt() {
942
+ function pt() {
934
943
  if (typeof customElements > "u")
935
944
  return null;
936
- const n = customElements.get("model-viewer");
937
- return n || (customElements.whenDefined("model-viewer").then(() => {
938
- console.debug("[gltf-progressive] model-viewer defined"), Ve();
945
+ const i = customElements.get("model-viewer");
946
+ return i || (customElements.whenDefined("model-viewer").then(() => {
947
+ console.debug("[gltf-progressive] model-viewer defined"), Ne();
939
948
  }), null);
940
949
  }
941
- function Re() {
950
+ function ke() {
942
951
  if (typeof document > "u")
943
952
  return;
944
- document.querySelectorAll("model-viewer").forEach((t) => {
945
- We(t);
953
+ document.querySelectorAll("model-viewer").forEach((e) => {
954
+ ze(e);
946
955
  });
947
956
  }
948
- const ke = /* @__PURE__ */ new WeakSet();
949
- let Lt = 0;
950
- function We(n) {
951
- if (!n || ke.has(n))
957
+ const Ie = /* @__PURE__ */ new WeakSet();
958
+ let yt = 0;
959
+ function ze(i) {
960
+ if (!i || Ie.has(i))
952
961
  return null;
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]);
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]);
959
968
  }
960
- if (t && e) {
961
- let i = function() {
962
- if (r) {
963
- let s = 0, a = setInterval(() => {
964
- if (s++ > 5) {
969
+ if (e && t) {
970
+ let n = function() {
971
+ if (s) {
972
+ let o = 0, a = setInterval(() => {
973
+ if (o++ > 5) {
965
974
  clearInterval(a);
966
975
  return;
967
976
  }
968
- r == null || r.call(n);
977
+ s == null || s.call(i);
969
978
  }, 300);
970
979
  }
971
980
  };
972
981
  console.debug("[gltf-progressive] setup model-viewer");
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();
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();
980
989
  }), () => {
981
- o.disable();
990
+ r.disable();
982
991
  };
983
992
  }
984
993
  return null;
985
994
  }
986
- class xt {
995
+ class mt {
987
996
  constructor() {
988
997
  d(this, "_didWarnAboutMissingUrl", !1);
989
998
  }
990
- onBeforeUpdateLOD(t, e, r, i) {
991
- this.tryParseMeshLOD(e, i), this.tryParseTextureLOD(e, i);
999
+ onBeforeUpdateLOD(e, t, s, n) {
1000
+ this.tryParseMeshLOD(t, n), this.tryParseTextureLOD(t, n);
992
1001
  }
993
- getUrl(t) {
994
- if (!t)
1002
+ getUrl(e) {
1003
+ if (!e)
995
1004
  return null;
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;
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;
998
1007
  }
999
- tryGetCurrentGLTF(t) {
1000
- return t._currentGLTF;
1008
+ tryGetCurrentGLTF(e) {
1009
+ return e._currentGLTF;
1001
1010
  }
1002
- tryGetCurrentModelViewer(t) {
1003
- return t.element;
1011
+ tryGetCurrentModelViewer(e) {
1012
+ return e.element;
1004
1013
  }
1005
- tryParseTextureLOD(t, e) {
1006
- if (e[pe] == !0)
1014
+ tryParseTextureLOD(e, t) {
1015
+ if (t[he] == !0)
1007
1016
  return;
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)
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)
1014
1023
  return;
1015
- l[pe] = !0, l.userData && (l.userData.LOD = -1);
1024
+ l[he] = !0, l.userData && (l.userData.LOD = -1);
1016
1025
  const u = Object.keys(l);
1017
- for (let D = 0; D < u.length; D++) {
1018
- const _ = u[D], x = l[_];
1026
+ for (let M = 0; M < u.length; M++) {
1027
+ const w = u[M], x = l[w];
1019
1028
  if ((x == null ? void 0 : x.isTexture) === !0) {
1020
- const N = (h = (c = x.userData) == null ? void 0 : c.associations) == null ? void 0 : h.textures;
1021
- if (N == null)
1029
+ const F = (g = (c = x.userData) == null ? void 0 : c.associations) == null ? void 0 : g.textures;
1030
+ if (F == null)
1022
1031
  continue;
1023
- const X = r.parser.json.textures[N];
1024
- if (!X) {
1025
- console.warn("Texture data not found for texture index " + N);
1032
+ const D = s.parser.json.textures[F];
1033
+ if (!D) {
1034
+ console.warn("Texture data not found for texture index " + F);
1026
1035
  continue;
1027
1036
  }
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);
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);
1031
1040
  }
1032
1041
  }
1033
1042
  }
1034
1043
  };
1035
- const a = e.material;
1044
+ const a = t.material;
1036
1045
  if (Array.isArray(a))
1037
1046
  for (const l of a)
1038
- s(l);
1047
+ o(l);
1039
1048
  else
1040
- s(a);
1049
+ o(a);
1041
1050
  }
1042
1051
  }
1043
- tryParseMeshLOD(t, e) {
1044
- var s, a;
1045
- if (e[Ie] == !0)
1052
+ tryParseMeshLOD(e, t) {
1053
+ var o, a;
1054
+ if (t[Be] == !0)
1046
1055
  return;
1047
- e[Ie] = !0;
1048
- const r = this.tryGetCurrentModelViewer(t), i = this.getUrl(r);
1049
- if (!i)
1056
+ t[Be] = !0;
1057
+ const s = this.tryGetCurrentModelViewer(e), n = this.getUrl(s);
1058
+ if (!n)
1050
1059
  return;
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);
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);
1055
1064
  }
1056
1065
  }
1057
1066
  }
1058
- function Dt(n, t, e, r) {
1059
- Ue(t), Fe(e), Ne(e, {
1067
+ function Lt(i, e, t, s) {
1068
+ $e(e), Ue(t), Fe(t, {
1060
1069
  progressive: !0,
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;
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;
1065
1074
  }
1066
- Ve();
1067
- if (!ut) {
1068
- const n = {
1075
+ Ne();
1076
+ if (!lt) {
1077
+ const i = {
1069
1078
  gltfProgressive: {
1070
- useNeedleProgressive: Dt,
1071
- LODsManager: I,
1072
- configureLoader: Ne,
1073
- getRaycastMesh: de,
1074
- useRaycastMeshes: ft
1079
+ useNeedleProgressive: Lt,
1080
+ LODsManager: k,
1081
+ configureLoader: Fe,
1082
+ getRaycastMesh: ce,
1083
+ useRaycastMeshes: ut
1075
1084
  }
1076
1085
  };
1077
1086
  if (!globalThis.Needle)
1078
- globalThis.Needle = n;
1087
+ globalThis.Needle = i;
1079
1088
  else
1080
- for (const t in n)
1081
- globalThis.Needle[t] = n[t];
1089
+ for (const e in i)
1090
+ globalThis.Needle[e] = i[e];
1082
1091
  }
1083
1092
  export {
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
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
1098
1107
  };