@speridlabs/visus 2.1.1 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/react.es.js CHANGED
@@ -1,8 +1,7 @@
1
- var ve = Object.defineProperty;
2
- var we = (A, e, n) => e in A ? ve(A, e, { enumerable: !0, configurable: !0, writable: !0, value: n }) : A[e] = n;
3
- var h = (A, e, n) => we(A, typeof e != "symbol" ? e + "" : e, n);
4
- import be, { useRef as Se, useMemo as Me, useEffect as _e } from "react";
5
- import { useLoader as Ae } from "@react-three/fiber";
1
+ var be = Object.defineProperty;
2
+ var Se = (x, e, o) => e in x ? be(x, e, { enumerable: !0, configurable: !0, writable: !0, value: o }) : x[e] = o;
3
+ var f = (x, e, o) => Se(x, typeof e != "symbol" ? e + "" : e, o);
4
+ import Me, { useState as Ce, useRef as Ae, useEffect as Te } from "react";
6
5
  import * as l from "three";
7
6
  var ce = { exports: {} }, ae = {};
8
7
  /**
@@ -14,27 +13,27 @@ var ce = { exports: {} }, ae = {};
14
13
  * This source code is licensed under the MIT license found in the
15
14
  * LICENSE file in the root directory of this source tree.
16
15
  */
17
- var pe;
18
- function Te() {
19
- if (pe) return ae;
20
- pe = 1;
21
- var A = Symbol.for("react.transitional.element"), e = Symbol.for("react.fragment");
22
- function n(r, t, o) {
16
+ var me;
17
+ function _e() {
18
+ if (me) return ae;
19
+ me = 1;
20
+ var x = Symbol.for("react.transitional.element"), e = Symbol.for("react.fragment");
21
+ function o(t, r, n) {
23
22
  var a = null;
24
- if (o !== void 0 && (a = "" + o), t.key !== void 0 && (a = "" + t.key), "key" in t) {
25
- o = {};
26
- for (var i in t)
27
- i !== "key" && (o[i] = t[i]);
28
- } else o = t;
29
- return t = o.ref, {
30
- $$typeof: A,
31
- type: r,
23
+ if (n !== void 0 && (a = "" + n), r.key !== void 0 && (a = "" + r.key), "key" in r) {
24
+ n = {};
25
+ for (var i in r)
26
+ i !== "key" && (n[i] = r[i]);
27
+ } else n = r;
28
+ return r = n.ref, {
29
+ $$typeof: x,
30
+ type: t,
32
31
  key: a,
33
- ref: t !== void 0 ? t : null,
34
- props: o
32
+ ref: r !== void 0 ? r : null,
33
+ props: n
35
34
  };
36
35
  }
37
- return ae.Fragment = e, ae.jsx = n, ae.jsxs = n, ae;
36
+ return ae.Fragment = e, ae.jsx = o, ae.jsxs = o, ae;
38
37
  }
39
38
  var ie = {};
40
39
  /**
@@ -46,24 +45,24 @@ var ie = {};
46
45
  * This source code is licensed under the MIT license found in the
47
46
  * LICENSE file in the root directory of this source tree.
48
47
  */
49
- var me;
50
- function Ce() {
51
- return me || (me = 1, process.env.NODE_ENV !== "production" && function() {
52
- function A(s) {
48
+ var xe;
49
+ function ke() {
50
+ return xe || (xe = 1, process.env.NODE_ENV !== "production" && function() {
51
+ function x(s) {
53
52
  if (s == null) return null;
54
53
  if (typeof s == "function")
55
- return s.$$typeof === y ? null : s.displayName || s.name || null;
54
+ return s.$$typeof === v ? null : s.displayName || s.name || null;
56
55
  if (typeof s == "string") return s;
57
56
  switch (s) {
58
57
  case I:
59
58
  return "Fragment";
60
59
  case j:
61
60
  return "Profiler";
62
- case z:
61
+ case P:
63
62
  return "StrictMode";
64
- case W:
63
+ case L:
65
64
  return "Suspense";
66
- case _:
65
+ case A:
67
66
  return "SuspenseList";
68
67
  case T:
69
68
  return "Activity";
@@ -72,21 +71,21 @@ function Ce() {
72
71
  switch (typeof s.tag == "number" && console.error(
73
72
  "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."
74
73
  ), s.$$typeof) {
75
- case b:
74
+ case S:
76
75
  return "Portal";
77
- case L:
76
+ case W:
78
77
  return (s.displayName || "Context") + ".Provider";
79
78
  case H:
80
79
  return (s._context.displayName || "Context") + ".Consumer";
81
- case ne:
80
+ case oe:
82
81
  var p = s.render;
83
82
  return s = s.displayName, s || (s = p.displayName || p.name || "", s = s !== "" ? "ForwardRef(" + s + ")" : "ForwardRef"), s;
84
- case x:
85
- return p = s.displayName || null, p !== null ? p : A(s.type) || "Memo";
83
+ case g:
84
+ return p = s.displayName || null, p !== null ? p : x(s.type) || "Memo";
86
85
  case D:
87
86
  p = s._payload, s = s._init;
88
87
  try {
89
- return A(s(p));
88
+ return x(s(p));
90
89
  } catch {
91
90
  }
92
91
  }
@@ -95,7 +94,7 @@ function Ce() {
95
94
  function e(s) {
96
95
  return "" + s;
97
96
  }
98
- function n(s) {
97
+ function o(s) {
99
98
  try {
100
99
  e(s);
101
100
  var p = !1;
@@ -104,30 +103,30 @@ function Ce() {
104
103
  }
105
104
  if (p) {
106
105
  p = console;
107
- var S = p.error, E = typeof Symbol == "function" && Symbol.toStringTag && s[Symbol.toStringTag] || s.constructor.name || "Object";
108
- return S.call(
106
+ var M = p.error, E = typeof Symbol == "function" && Symbol.toStringTag && s[Symbol.toStringTag] || s.constructor.name || "Object";
107
+ return M.call(
109
108
  p,
110
109
  "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",
111
110
  E
112
111
  ), e(s);
113
112
  }
114
113
  }
115
- function r(s) {
114
+ function t(s) {
116
115
  if (s === I) return "<>";
117
116
  if (typeof s == "object" && s !== null && s.$$typeof === D)
118
117
  return "<...>";
119
118
  try {
120
- var p = A(s);
119
+ var p = x(s);
121
120
  return p ? "<" + p + ">" : "<...>";
122
121
  } catch {
123
122
  return "<...>";
124
123
  }
125
124
  }
126
- function t() {
125
+ function r() {
127
126
  var s = R.A;
128
127
  return s === null ? null : s.getOwner();
129
128
  }
130
- function o() {
129
+ function n() {
131
130
  return Error("react-stack-top-frame");
132
131
  }
133
132
  function a(s) {
@@ -138,31 +137,31 @@ function Ce() {
138
137
  return s.key !== void 0;
139
138
  }
140
139
  function i(s, p) {
141
- function S() {
140
+ function M() {
142
141
  Z || (Z = !0, console.error(
143
142
  "%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",
144
143
  p
145
144
  ));
146
145
  }
147
- S.isReactWarning = !0, Object.defineProperty(s, "key", {
148
- get: S,
146
+ M.isReactWarning = !0, Object.defineProperty(s, "key", {
147
+ get: M,
149
148
  configurable: !0
150
149
  });
151
150
  }
152
151
  function u() {
153
- var s = A(this.type);
152
+ var s = x(this.type);
154
153
  return U[s] || (U[s] = !0, console.error(
155
154
  "Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release."
156
155
  )), s = this.props.ref, s !== void 0 ? s : null;
157
156
  }
158
- function v(s, p, S, E, m, c, g, P) {
159
- return S = c.ref, s = {
160
- $$typeof: w,
157
+ function w(s, p, M, E, m, c, y, z) {
158
+ return M = c.ref, s = {
159
+ $$typeof: b,
161
160
  type: s,
162
161
  key: p,
163
162
  props: c,
164
163
  _owner: m
165
- }, (S !== void 0 ? S : null) !== null ? Object.defineProperty(s, "ref", {
164
+ }, (M !== void 0 ? M : null) !== null ? Object.defineProperty(s, "ref", {
166
165
  enumerable: !1,
167
166
  get: u
168
167
  }) : Object.defineProperty(s, "ref", { enumerable: !1, value: null }), s._store = {}, Object.defineProperty(s._store, "validated", {
@@ -179,33 +178,33 @@ function Ce() {
179
178
  configurable: !1,
180
179
  enumerable: !1,
181
180
  writable: !0,
182
- value: g
181
+ value: y
183
182
  }), Object.defineProperty(s, "_debugTask", {
184
183
  configurable: !1,
185
184
  enumerable: !1,
186
185
  writable: !0,
187
- value: P
186
+ value: z
188
187
  }), Object.freeze && (Object.freeze(s.props), Object.freeze(s)), s;
189
188
  }
190
- function M(s, p, S, E, m, c, g, P) {
191
- var f = p.children;
192
- if (f !== void 0)
189
+ function C(s, p, M, E, m, c, y, z) {
190
+ var d = p.children;
191
+ if (d !== void 0)
193
192
  if (E)
194
- if (X(f)) {
195
- for (E = 0; E < f.length; E++)
196
- C(f[E]);
197
- Object.freeze && Object.freeze(f);
193
+ if ($(d)) {
194
+ for (E = 0; E < d.length; E++)
195
+ _(d[E]);
196
+ Object.freeze && Object.freeze(d);
198
197
  } else
199
198
  console.error(
200
199
  "React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead."
201
200
  );
202
- else C(f);
201
+ else _(d);
203
202
  if (B.call(p, "key")) {
204
- f = A(s);
205
- var k = Object.keys(p).filter(function(V) {
206
- return V !== "key";
203
+ d = x(s);
204
+ var k = Object.keys(p).filter(function(q) {
205
+ return q !== "key";
207
206
  });
208
- E = 0 < k.length ? "{key: someKey, " + k.join(": ..., ") + ": ...}" : "{key: someKey}", te[f + E] || (k = 0 < k.length ? "{" + k.join(": ..., ") + ": ...}" : "{}", console.error(
207
+ E = 0 < k.length ? "{key: someKey, " + k.join(": ..., ") + ": ...}" : "{key: someKey}", te[d + E] || (k = 0 < k.length ? "{" + k.join(": ..., ") + ": ...}" : "{}", console.error(
209
208
  `A props object containing a "key" prop is being spread into JSX:
210
209
  let props = %s;
211
210
  <%s {...props} />
@@ -213,84 +212,84 @@ React keys must be passed directly to JSX without using spread:
213
212
  let props = %s;
214
213
  <%s key={someKey} {...props} />`,
215
214
  E,
216
- f,
215
+ d,
217
216
  k,
218
- f
219
- ), te[f + E] = !0);
217
+ d
218
+ ), te[d + E] = !0);
220
219
  }
221
- if (f = null, S !== void 0 && (n(S), f = "" + S), a(p) && (n(p.key), f = "" + p.key), "key" in p) {
222
- S = {};
220
+ if (d = null, M !== void 0 && (o(M), d = "" + M), a(p) && (o(p.key), d = "" + p.key), "key" in p) {
221
+ M = {};
223
222
  for (var O in p)
224
- O !== "key" && (S[O] = p[O]);
225
- } else S = p;
226
- return f && i(
227
- S,
223
+ O !== "key" && (M[O] = p[O]);
224
+ } else M = p;
225
+ return d && i(
226
+ M,
228
227
  typeof s == "function" ? s.displayName || s.name || "Unknown" : s
229
- ), v(
228
+ ), w(
230
229
  s,
231
- f,
230
+ d,
232
231
  c,
233
232
  m,
234
- t(),
235
- S,
236
- g,
237
- P
233
+ r(),
234
+ M,
235
+ y,
236
+ z
238
237
  );
239
238
  }
240
- function C(s) {
241
- typeof s == "object" && s !== null && s.$$typeof === w && s._store && (s._store.validated = 1);
239
+ function _(s) {
240
+ typeof s == "object" && s !== null && s.$$typeof === b && s._store && (s._store.validated = 1);
242
241
  }
243
- var d = be, w = Symbol.for("react.transitional.element"), b = Symbol.for("react.portal"), I = Symbol.for("react.fragment"), z = Symbol.for("react.strict_mode"), j = Symbol.for("react.profiler"), H = Symbol.for("react.consumer"), L = Symbol.for("react.context"), ne = Symbol.for("react.forward_ref"), W = Symbol.for("react.suspense"), _ = Symbol.for("react.suspense_list"), x = Symbol.for("react.memo"), D = Symbol.for("react.lazy"), T = Symbol.for("react.activity"), y = Symbol.for("react.client.reference"), R = d.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, B = Object.prototype.hasOwnProperty, X = Array.isArray, $ = console.createTask ? console.createTask : function() {
242
+ var h = Me, b = Symbol.for("react.transitional.element"), S = Symbol.for("react.portal"), I = Symbol.for("react.fragment"), P = Symbol.for("react.strict_mode"), j = Symbol.for("react.profiler"), H = Symbol.for("react.consumer"), W = Symbol.for("react.context"), oe = Symbol.for("react.forward_ref"), L = Symbol.for("react.suspense"), A = Symbol.for("react.suspense_list"), g = Symbol.for("react.memo"), D = Symbol.for("react.lazy"), T = Symbol.for("react.activity"), v = Symbol.for("react.client.reference"), R = h.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, B = Object.prototype.hasOwnProperty, $ = Array.isArray, X = console.createTask ? console.createTask : function() {
244
243
  return null;
245
244
  };
246
- d = {
245
+ h = {
247
246
  "react-stack-bottom-frame": function(s) {
248
247
  return s();
249
248
  }
250
249
  };
251
- var Z, U = {}, F = d["react-stack-bottom-frame"].bind(
252
- d,
253
- o
254
- )(), N = $(r(o)), te = {};
255
- ie.Fragment = I, ie.jsx = function(s, p, S, E, m) {
250
+ var Z, U = {}, F = h["react-stack-bottom-frame"].bind(
251
+ h,
252
+ n
253
+ )(), N = X(t(n)), te = {};
254
+ ie.Fragment = I, ie.jsx = function(s, p, M, E, m) {
256
255
  var c = 1e4 > R.recentlyCreatedOwnerStacks++;
257
- return M(
256
+ return C(
258
257
  s,
259
258
  p,
260
- S,
259
+ M,
261
260
  !1,
262
261
  E,
263
262
  m,
264
263
  c ? Error("react-stack-top-frame") : F,
265
- c ? $(r(s)) : N
264
+ c ? X(t(s)) : N
266
265
  );
267
- }, ie.jsxs = function(s, p, S, E, m) {
266
+ }, ie.jsxs = function(s, p, M, E, m) {
268
267
  var c = 1e4 > R.recentlyCreatedOwnerStacks++;
269
- return M(
268
+ return C(
270
269
  s,
271
270
  p,
272
- S,
271
+ M,
273
272
  !0,
274
273
  E,
275
274
  m,
276
275
  c ? Error("react-stack-top-frame") : F,
277
- c ? $(r(s)) : N
276
+ c ? X(t(s)) : N
278
277
  );
279
278
  };
280
279
  }()), ie;
281
280
  }
282
- var xe;
283
- function ke() {
284
- return xe || (xe = 1, process.env.NODE_ENV === "production" ? ce.exports = Te() : ce.exports = Ce()), ce.exports;
281
+ var ge;
282
+ function Ee() {
283
+ return ge || (ge = 1, process.env.NODE_ENV === "production" ? ce.exports = _e() : ce.exports = ke()), ce.exports;
285
284
  }
286
- var Ee = ke();
285
+ var Ie = Ee();
287
286
  class fe {
288
287
  constructor() {
289
- h(this, "min", new l.Vector3(1 / 0, 1 / 0, 1 / 0));
290
- h(this, "max", new l.Vector3(-1 / 0, -1 / 0, -1 / 0));
291
- h(this, "center", new l.Vector3());
288
+ f(this, "min", new l.Vector3(1 / 0, 1 / 0, 1 / 0));
289
+ f(this, "max", new l.Vector3(-1 / 0, -1 / 0, -1 / 0));
290
+ f(this, "center", new l.Vector3());
292
291
  /** Half extents (size/2) */
293
- h(this, "halfExtents", new l.Vector3());
292
+ f(this, "halfExtents", new l.Vector3());
294
293
  }
295
294
  /**
296
295
  * Reset the bounding box to its initial state
@@ -342,16 +341,16 @@ class fe {
342
341
  return e.min.copy(this.min), e.max.copy(this.max), e.center.copy(this.center), e.halfExtents.copy(this.halfExtents), e;
343
342
  }
344
343
  }
345
- class Ie {
344
+ class Re {
346
345
  // TODO: there is no sh spherical harmonics
347
346
  constructor(e = 0) {
348
- h(this, "numSplats", 0);
349
- h(this, "positions");
350
- h(this, "rotations");
351
- h(this, "scales");
352
- h(this, "colors");
353
- h(this, "opacities");
354
- h(this, "boundingBox", new fe());
347
+ f(this, "numSplats", 0);
348
+ f(this, "positions");
349
+ f(this, "rotations");
350
+ f(this, "scales");
351
+ f(this, "colors");
352
+ f(this, "opacities");
353
+ f(this, "boundingBox", new fe());
355
354
  this.numSplats = e, this.allocateBuffers(e);
356
355
  }
357
356
  allocateBuffers(e) {
@@ -366,13 +365,13 @@ class Ie {
366
365
  * @param color Color
367
366
  * @param opacity Opacity value
368
367
  */
369
- setSplat(e, n, r, t, o, a) {
368
+ setSplat(e, o, t, r, n, a) {
370
369
  if (e >= this.numSplats)
371
370
  throw new Error(
372
371
  `Splat index out of bounds: ${e} >= ${this.numSplats}`
373
372
  );
374
- const i = e * 3, u = e * 4, v = e * 3, M = e * 3;
375
- this.positions[i] = n.x, this.positions[i + 1] = n.y, this.positions[i + 2] = n.z, this.rotations[u] = r.x, this.rotations[u + 1] = r.y, this.rotations[u + 2] = r.z, this.rotations[u + 3] = r.w, this.scales[v] = t.x, this.scales[v + 1] = t.y, this.scales[v + 2] = t.z, this.colors[M] = o.r, this.colors[M + 1] = o.g, this.colors[M + 2] = o.b, this.opacities[e] = a;
373
+ const i = e * 3, u = e * 4, w = e * 3, C = e * 3;
374
+ this.positions[i] = o.x, this.positions[i + 1] = o.y, this.positions[i + 2] = o.z, this.rotations[u] = t.x, this.rotations[u + 1] = t.y, this.rotations[u + 2] = t.z, this.rotations[u + 3] = t.w, this.scales[w] = r.x, this.scales[w + 1] = r.y, this.scales[w + 2] = r.z, this.colors[C] = n.r, this.colors[C + 1] = n.g, this.colors[C + 2] = n.b, this.opacities[e] = a;
376
375
  }
377
376
  /**
378
377
  * Get a splat's data
@@ -384,29 +383,29 @@ class Ie {
384
383
  throw new Error(
385
384
  `Splat index out of bounds: ${e} >= ${this.numSplats}`
386
385
  );
387
- const n = e * 3, r = e * 4, t = e * 3, o = e * 3;
386
+ const o = e * 3, t = e * 4, r = e * 3, n = e * 3;
388
387
  return {
389
388
  position: new l.Vector3(
390
- this.positions[n],
391
- this.positions[n + 1],
392
- this.positions[n + 2]
389
+ this.positions[o],
390
+ this.positions[o + 1],
391
+ this.positions[o + 2]
393
392
  ),
394
393
  rotation: new l.Quaternion(
395
- this.rotations[r],
396
- this.rotations[r + 1],
397
- this.rotations[r + 2],
398
- this.rotations[r + 3]
394
+ this.rotations[t],
395
+ this.rotations[t + 1],
396
+ this.rotations[t + 2],
397
+ this.rotations[t + 3]
399
398
  ),
400
399
  // Convert log scale back to linear scale for external use
401
400
  scale: new l.Vector3(
402
- Math.exp(this.scales[t]),
403
- Math.exp(this.scales[t + 1]),
404
- Math.exp(this.scales[t + 2])
401
+ Math.exp(this.scales[r]),
402
+ Math.exp(this.scales[r + 1]),
403
+ Math.exp(this.scales[r + 2])
405
404
  ),
406
405
  color: new l.Color(
407
- this.colors[o],
408
- this.colors[o + 1],
409
- this.colors[o + 2]
406
+ this.colors[n],
407
+ this.colors[n + 1],
408
+ this.colors[n + 2]
410
409
  ),
411
410
  opacity: this.opacities[e]
412
411
  };
@@ -418,12 +417,12 @@ class Ie {
418
417
  calculateBoundingBox() {
419
418
  this.boundingBox.reset();
420
419
  const e = new l.Vector3();
421
- for (let n = 0; n < this.numSplats; n++) {
422
- const r = n * 3;
420
+ for (let o = 0; o < this.numSplats; o++) {
421
+ const t = o * 3;
423
422
  e.set(
424
- this.positions[r],
425
- this.positions[r + 1],
426
- this.positions[r + 2]
423
+ this.positions[t],
424
+ this.positions[t + 1],
425
+ this.positions[t + 2]
427
426
  ), this.boundingBox.expandByPoint(e);
428
427
  }
429
428
  return this.boundingBox;
@@ -438,19 +437,19 @@ class Ie {
438
437
  "position",
439
438
  new l.BufferAttribute(this.positions, 3)
440
439
  );
441
- const n = new Float32Array(this.numSplats * 3), r = new l.Quaternion(), t = new l.Euler();
442
- for (let o = 0; o < this.numSplats; o++) {
443
- const a = o * 4, i = o * 3;
444
- r.set(
440
+ const o = new Float32Array(this.numSplats * 3), t = new l.Quaternion(), r = new l.Euler();
441
+ for (let n = 0; n < this.numSplats; n++) {
442
+ const a = n * 4, i = n * 3;
443
+ t.set(
445
444
  this.rotations[a],
446
445
  this.rotations[a + 1],
447
446
  this.rotations[a + 2],
448
447
  this.rotations[a + 3]
449
- ), t.setFromQuaternion(r), n[i] = t.x, n[i + 1] = t.y, n[i + 2] = t.z;
448
+ ), r.setFromQuaternion(t), o[i] = r.x, o[i + 1] = r.y, o[i + 2] = r.z;
450
449
  }
451
450
  return e.setAttribute(
452
451
  "rotation",
453
- new l.BufferAttribute(n, 3)
452
+ new l.BufferAttribute(o, 3)
454
453
  ), e.setAttribute(
455
454
  "scale",
456
455
  new l.BufferAttribute(this.scales, 3)
@@ -463,34 +462,35 @@ class Ie {
463
462
  ), e;
464
463
  }
465
464
  }
466
- class Re extends l.Loader {
467
- constructor(n) {
468
- super(n);
469
- h(this, "requestId", 0);
470
- h(this, "worker");
471
- h(this, "pendingCallbacks", /* @__PURE__ */ new Map());
472
- const r = this.createWorkerCode(), t = new Blob([r], { type: "application/javascript" });
473
- this.worker = new Worker(URL.createObjectURL(t)), this.worker.onmessage = this.onWorkerMessage.bind(this);
465
+ class ze extends l.Loader {
466
+ constructor(o) {
467
+ super(o);
468
+ f(this, "requestId", 0);
469
+ f(this, "worker");
470
+ f(this, "pendingCallbacks", /* @__PURE__ */ new Map());
471
+ this.withCredentials = !0;
472
+ const t = this.createWorkerCode(), r = new Blob([t], { type: "application/javascript" });
473
+ this.worker = new Worker(URL.createObjectURL(r)), this.worker.onmessage = this.onWorkerMessage.bind(this);
474
474
  }
475
475
  /**
476
476
  * Handles messages received from the parsing worker
477
477
  * @param event The message event from the worker
478
478
  */
479
- onWorkerMessage(n) {
480
- const { requestId: r, error: t, result: o } = n.data, a = this.pendingCallbacks.get(r);
481
- if (!a) return console.warn(`PlyLoader: Received response for unknown request ${r}`);
482
- if (this.pendingCallbacks.delete(r), t) return a.reject(new Error(t));
483
- if (!o) return a.reject(new Error("Worker returned no result"));
479
+ onWorkerMessage(o) {
480
+ const { requestId: t, error: r, result: n } = o.data, a = this.pendingCallbacks.get(t);
481
+ if (!a) return console.warn(`PlyLoader: Received response for unknown request ${t}`);
482
+ if (this.pendingCallbacks.delete(t), r) return a.reject(new Error(r));
483
+ if (!n) return a.reject(new Error("Worker returned no result"));
484
484
  try {
485
- const i = new Ie(0);
486
- i.numSplats = o.numSplats, i.positions = new Float32Array(o.positions), i.rotations = new Float32Array(o.rotations), i.scales = new Float32Array(o.scales), i.colors = new Float32Array(o.colors), i.opacities = new Float32Array(o.opacities), i.boundingBox.min.set(
487
- o.boundingBox.minX,
488
- o.boundingBox.minY,
489
- o.boundingBox.minZ
485
+ const i = new Re(0);
486
+ i.numSplats = n.numSplats, i.positions = new Float32Array(n.positions), i.rotations = new Float32Array(n.rotations), i.scales = new Float32Array(n.scales), i.colors = new Float32Array(n.colors), i.opacities = new Float32Array(n.opacities), i.boundingBox.min.set(
487
+ n.boundingBox.minX,
488
+ n.boundingBox.minY,
489
+ n.boundingBox.minZ
490
490
  ), i.boundingBox.max.set(
491
- o.boundingBox.maxX,
492
- o.boundingBox.maxY,
493
- o.boundingBox.maxZ
491
+ n.boundingBox.maxX,
492
+ n.boundingBox.maxY,
493
+ n.boundingBox.maxZ
494
494
  ), this.worker.terminate(), a.resolve(i);
495
495
  } catch (i) {
496
496
  a.reject(i);
@@ -503,19 +503,19 @@ class Re extends l.Loader {
503
503
  * @param onProgress Optional progress callback
504
504
  * @param onError Optional error callback
505
505
  */
506
- load(n, r, t, o) {
506
+ load(o, t, r, n) {
507
507
  const a = new l.FileLoader(this.manager);
508
508
  a.setResponseType("arraybuffer"), a.setRequestHeader(this.requestHeader), a.setPath(this.path), a.setWithCredentials(this.withCredentials), a.load(
509
- n,
509
+ o,
510
510
  (i) => {
511
511
  this.parseAsync(i).then((u) => {
512
- r && r(u);
512
+ t && t(u);
513
513
  }).catch((u) => {
514
- o ? o(u) : console.error(u), this.manager.itemError(n);
514
+ n ? n(u) : console.error(u), this.manager.itemError(o);
515
515
  });
516
516
  },
517
- t,
518
- o
517
+ r,
518
+ n
519
519
  );
520
520
  }
521
521
  /**
@@ -524,19 +524,19 @@ class Re extends l.Loader {
524
524
  * @param onProgress Optional progress callback
525
525
  * @returns A Promise that resolves with the parsed SplatData
526
526
  */
527
- loadAsync(n, r) {
528
- return new Promise((t, o) => {
527
+ loadAsync(o, t) {
528
+ return new Promise((r, n) => {
529
529
  const a = new l.FileLoader(this.manager);
530
530
  a.setResponseType("arraybuffer"), a.setRequestHeader(this.requestHeader), a.setPath(this.path), a.setWithCredentials(this.withCredentials), a.load(
531
- n,
531
+ o,
532
532
  (i) => {
533
- this.parseAsync(i).then(t).catch((u) => {
534
- o(u), this.manager.itemError(n);
533
+ this.parseAsync(i).then(r).catch((u) => {
534
+ n(u), this.manager.itemError(o);
535
535
  });
536
536
  },
537
- r,
537
+ t,
538
538
  (i) => {
539
- o(i), this.manager.itemError(n);
539
+ n(i), this.manager.itemError(o);
540
540
  }
541
541
  );
542
542
  });
@@ -546,15 +546,15 @@ class Re extends l.Loader {
546
546
  * @param buffer ArrayBuffer containing PLY data
547
547
  * @returns Promise that resolves with parsed SplatData
548
548
  */
549
- parseAsync(n) {
550
- return new Promise((r, t) => {
551
- const o = this.requestId++;
552
- this.pendingCallbacks.set(o, { resolve: r, reject: t });
549
+ parseAsync(o) {
550
+ return new Promise((t, r) => {
551
+ const n = this.requestId++;
552
+ this.pendingCallbacks.set(n, { resolve: t, reject: r });
553
553
  const a = {
554
- requestId: o,
555
- buffer: n
554
+ requestId: n,
555
+ buffer: o
556
556
  };
557
- this.worker.postMessage(a, [n]);
557
+ this.worker.postMessage(a, [o]);
558
558
  });
559
559
  }
560
560
  /**
@@ -569,11 +569,11 @@ class Re extends l.Loader {
569
569
  */
570
570
  createWorkerCode() {
571
571
  return `(${(function() {
572
- self.onmessage = (t) => {
573
- const { requestId: o, buffer: a } = t.data;
572
+ self.onmessage = (r) => {
573
+ const { requestId: n, buffer: a } = r.data;
574
574
  try {
575
- const i = r(a), u = {
576
- requestId: o,
575
+ const i = t(a), u = {
576
+ requestId: n,
577
577
  result: i
578
578
  };
579
579
  self.postMessage(u, [
@@ -585,14 +585,14 @@ class Re extends l.Loader {
585
585
  ]);
586
586
  } catch (i) {
587
587
  const u = {
588
- requestId: o,
588
+ requestId: n,
589
589
  error: i instanceof Error ? i.message : String(i)
590
590
  };
591
591
  self.postMessage(u);
592
592
  }
593
593
  };
594
- function r(t) {
595
- const o = new TextDecoder(), a = new Uint8Array(t), i = [112, 108, 121, 10], u = `
594
+ function t(r) {
595
+ const n = new TextDecoder(), a = new Uint8Array(r), i = [112, 108, 121, 10], u = `
596
596
  end_header
597
597
  `;
598
598
  for (let m = 0; m < i.length; m++)
@@ -600,88 +600,88 @@ end_header
600
600
  throw new Error(
601
601
  "Invalid PLY file: Missing magic bytes"
602
602
  );
603
- let v = 0;
603
+ let w = 0;
604
604
  for (let m = 0; m < a.length - u.length; m++) {
605
605
  let c = !0;
606
- for (let g = 0; g < u.length; g++)
607
- if (a[m + g] !== u.charCodeAt(g)) {
606
+ for (let y = 0; y < u.length; y++)
607
+ if (a[m + y] !== u.charCodeAt(y)) {
608
608
  c = !1;
609
609
  break;
610
610
  }
611
611
  if (c) {
612
- v = m + u.length;
612
+ w = m + u.length;
613
613
  break;
614
614
  }
615
615
  }
616
- if (v === 0)
616
+ if (w === 0)
617
617
  throw new Error(
618
618
  "Invalid PLY file: Could not find end of header"
619
619
  );
620
- const C = o.decode(
621
- a.subarray(0, v)
620
+ const _ = n.decode(
621
+ a.subarray(0, w)
622
622
  ).split(`
623
- `), d = [];
624
- let w = null;
625
- for (let m = 1; m < C.length; m++) {
626
- const c = C[m].trim();
623
+ `), h = [];
624
+ let b = null;
625
+ for (let m = 1; m < _.length; m++) {
626
+ const c = _[m].trim();
627
627
  if (c === "" || c === "end_header") continue;
628
- const g = c.split(" ");
629
- switch (g[0]) {
628
+ const y = c.split(" ");
629
+ switch (y[0]) {
630
630
  case "format":
631
- w = g[1];
631
+ b = y[1];
632
632
  break;
633
633
  case "element":
634
- d.push({
635
- name: g[1],
636
- count: parseInt(g[2], 10),
634
+ h.push({
635
+ name: y[1],
636
+ count: parseInt(y[2], 10),
637
637
  properties: []
638
638
  });
639
639
  break;
640
640
  case "property":
641
- if (d.length === 0)
641
+ if (h.length === 0)
642
642
  throw new Error(
643
643
  "Invalid PLY file: Property without element"
644
644
  );
645
- d[d.length - 1].properties.push({
646
- type: g[1],
647
- name: g[2]
645
+ h[h.length - 1].properties.push({
646
+ type: y[1],
647
+ name: y[2]
648
648
  });
649
649
  break;
650
650
  }
651
651
  }
652
- if (w !== "binary_little_endian")
653
- throw new Error(`Unsupported PLY format: ${w}`);
654
- const b = d.find((m) => m.name === "vertex");
655
- if (!b)
652
+ if (b !== "binary_little_endian")
653
+ throw new Error(`Unsupported PLY format: ${b}`);
654
+ const S = h.find((m) => m.name === "vertex");
655
+ if (!S)
656
656
  throw new Error(
657
657
  "Invalid PLY file: No vertex element found"
658
658
  );
659
- const I = b.count, z = new Float32Array(I * 3), j = new Float32Array(I * 4), H = new Float32Array(I * 3), L = new Float32Array(I * 3), ne = new Float32Array(I), W = new DataView(t);
660
- let _ = v;
661
- const x = (m) => b.properties.findIndex(
659
+ const I = S.count, P = new Float32Array(I * 3), j = new Float32Array(I * 4), H = new Float32Array(I * 3), W = new Float32Array(I * 3), oe = new Float32Array(I), L = new DataView(r);
660
+ let A = w;
661
+ const g = (m) => S.properties.findIndex(
662
662
  (c) => c.name === m
663
- ), D = x("x"), T = x("y"), y = x("z"), R = [
664
- x("rot_0"),
665
- x("rot_1"),
666
- x("rot_2"),
667
- x("rot_3")
663
+ ), D = g("x"), T = g("y"), v = g("z"), R = [
664
+ g("rot_0"),
665
+ g("rot_1"),
666
+ g("rot_2"),
667
+ g("rot_3")
668
668
  ], B = [
669
- x("scale_0"),
670
- x("scale_1"),
671
- x("scale_2")
672
- ], X = [
673
- x("f_dc_0"),
674
- x("f_dc_1"),
675
- x("f_dc_2")
676
- ], $ = x("opacity");
669
+ g("scale_0"),
670
+ g("scale_1"),
671
+ g("scale_2")
672
+ ], $ = [
673
+ g("f_dc_0"),
674
+ g("f_dc_1"),
675
+ g("f_dc_2")
676
+ ], X = g("opacity");
677
677
  if ([
678
678
  D,
679
679
  T,
680
- y,
680
+ v,
681
681
  ...R,
682
682
  ...B,
683
- ...X,
684
- $
683
+ ...$,
684
+ X
685
685
  ].some((m) => m === -1))
686
686
  throw new Error(
687
687
  "Invalid PLY file: Missing required properties"
@@ -691,73 +691,73 @@ end_header
691
691
  const c = Math.exp(m);
692
692
  return c / (1 + c);
693
693
  };
694
- let N = 1 / 0, te = 1 / 0, s = 1 / 0, p = -1 / 0, S = -1 / 0, E = -1 / 0;
694
+ let N = 1 / 0, te = 1 / 0, s = 1 / 0, p = -1 / 0, M = -1 / 0, E = -1 / 0;
695
695
  for (let m = 0; m < I; m++) {
696
696
  const c = [];
697
- for (let de = 0; de < b.properties.length; de++) {
698
- const he = b.properties[de].type;
697
+ for (let he = 0; he < S.properties.length; he++) {
698
+ const pe = S.properties[he].type;
699
699
  let ee;
700
- switch (he) {
700
+ switch (pe) {
701
701
  case "char":
702
- ee = W.getInt8(_), _ += 1;
702
+ ee = L.getInt8(A), A += 1;
703
703
  break;
704
704
  case "uchar":
705
- ee = W.getUint8(_), _ += 1;
705
+ ee = L.getUint8(A), A += 1;
706
706
  break;
707
707
  case "short":
708
- ee = W.getInt16(_, !0), _ += 2;
708
+ ee = L.getInt16(A, !0), A += 2;
709
709
  break;
710
710
  case "ushort":
711
- ee = W.getUint16(_, !0), _ += 2;
711
+ ee = L.getUint16(A, !0), A += 2;
712
712
  break;
713
713
  case "int":
714
- ee = W.getInt32(_, !0), _ += 4;
714
+ ee = L.getInt32(A, !0), A += 4;
715
715
  break;
716
716
  case "uint":
717
- ee = W.getUint32(_, !0), _ += 4;
717
+ ee = L.getUint32(A, !0), A += 4;
718
718
  break;
719
719
  case "float":
720
- ee = W.getFloat32(_, !0), _ += 4;
720
+ ee = L.getFloat32(A, !0), A += 4;
721
721
  break;
722
722
  case "double":
723
- ee = W.getFloat64(_, !0), _ += 8;
723
+ ee = L.getFloat64(A, !0), A += 8;
724
724
  break;
725
725
  default:
726
726
  throw new Error(
727
- `Unsupported property type: ${he}`
727
+ `Unsupported property type: ${pe}`
728
728
  );
729
729
  }
730
730
  c.push(ee);
731
731
  }
732
- const g = c[D], P = c[T], f = c[y], k = m * 3;
733
- z[k] = g, z[k + 1] = P, z[k + 2] = f, N = Math.min(N, g), te = Math.min(te, P), s = Math.min(s, f), p = Math.max(p, g), S = Math.max(S, P), E = Math.max(E, f);
734
- let O = c[R[1]], V = c[R[2]], G = c[R[3]], q = c[R[0]];
732
+ const y = c[D], z = c[T], d = c[v], k = m * 3;
733
+ P[k] = y, P[k + 1] = z, P[k + 2] = d, N = Math.min(N, y), te = Math.min(te, z), s = Math.min(s, d), p = Math.max(p, y), M = Math.max(M, z), E = Math.max(E, d);
734
+ let O = c[R[1]], q = c[R[2]], G = c[R[3]], V = c[R[0]];
735
735
  const Y = Math.sqrt(
736
- O * O + V * V + G * G + q * q
736
+ O * O + q * q + G * G + V * V
737
737
  );
738
- Y > 0 && (O /= Y, V /= Y, G /= Y, q /= Y), q < 0 && (O = -O, V = -V, G = -G, q = -q);
739
- const Q = m * 4;
740
- j[Q] = O, j[Q + 1] = V, j[Q + 2] = G, j[Q + 3] = q;
741
- const K = m * 3;
742
- H[K] = c[B[0]], H[K + 1] = c[B[1]], H[K + 2] = c[B[2]];
743
- let re = 0.5 + c[X[0]] * U, oe = 0.5 + c[X[1]] * U, J = 0.5 + c[X[2]] * U;
744
- re = Math.max(0, Math.min(1, re)), oe = Math.max(0, Math.min(1, oe)), J = Math.max(0, Math.min(1, J));
738
+ Y > 0 && (O /= Y, q /= Y, G /= Y, V /= Y), V < 0 && (O = -O, q = -q, G = -G, V = -V);
739
+ const K = m * 4;
740
+ j[K] = O, j[K + 1] = q, j[K + 2] = G, j[K + 3] = V;
741
+ const Q = m * 3;
742
+ H[Q] = c[B[0]], H[Q + 1] = c[B[1]], H[Q + 2] = c[B[2]];
743
+ let re = 0.5 + c[$[0]] * U, ne = 0.5 + c[$[1]] * U, J = 0.5 + c[$[2]] * U;
744
+ re = Math.max(0, Math.min(1, re)), ne = Math.max(0, Math.min(1, ne)), J = Math.max(0, Math.min(1, J));
745
745
  const ue = m * 3;
746
- L[ue] = re, L[ue + 1] = oe, L[ue + 2] = J, ne[m] = F(c[$]);
746
+ W[ue] = re, W[ue + 1] = ne, W[ue + 2] = J, oe[m] = F(c[X]);
747
747
  }
748
748
  return {
749
749
  numSplats: I,
750
- positions: z.buffer,
750
+ positions: P.buffer,
751
751
  rotations: j.buffer,
752
752
  scales: H.buffer,
753
- colors: L.buffer,
754
- opacities: ne.buffer,
753
+ colors: W.buffer,
754
+ opacities: oe.buffer,
755
755
  boundingBox: {
756
756
  minX: N,
757
757
  minY: te,
758
758
  minZ: s,
759
759
  maxX: p,
760
- maxY: S,
760
+ maxY: M,
761
761
  maxZ: E
762
762
  }
763
763
  };
@@ -768,31 +768,31 @@ end_header
768
768
  class Pe extends l.EventDispatcher {
769
769
  constructor() {
770
770
  super();
771
- h(this, "worker");
772
- h(this, "centers", null);
773
- h(this, "orderTexture", null);
771
+ f(this, "worker");
772
+ f(this, "centers", null);
773
+ f(this, "orderTexture", null);
774
774
  /** Bounding box data for optimization */
775
- h(this, "chunks", null);
776
- h(this, "lastCameraPosition", new l.Vector3());
777
- h(this, "lastCameraDirection", new l.Vector3());
778
- const n = this.createWorkerCode(), r = new Blob([n], { type: "application/javascript" });
779
- this.worker = new Worker(URL.createObjectURL(r)), this.worker.onmessage = this.onWorkerMessage.bind(this);
775
+ f(this, "chunks", null);
776
+ f(this, "lastCameraPosition", new l.Vector3());
777
+ f(this, "lastCameraDirection", new l.Vector3());
778
+ const o = this.createWorkerCode(), t = new Blob([o], { type: "application/javascript" });
779
+ this.worker = new Worker(URL.createObjectURL(t)), this.worker.onmessage = this.onWorkerMessage.bind(this);
780
780
  }
781
781
  /**
782
782
  * Handles messages received from the sorting worker.
783
783
  * @param event The message event from the worker.
784
784
  */
785
- onWorkerMessage(n) {
785
+ onWorkerMessage(o) {
786
786
  if (!this.orderTexture || !this.orderTexture.image)
787
787
  return console.error("SplatSorter: Order texture not initialized!");
788
- const { order: r, count: t } = n.data, o = this.orderTexture.image.data;
789
- if (!(o instanceof Uint32Array))
788
+ const { order: t, count: r } = o.data, n = this.orderTexture.image.data;
789
+ if (!(n instanceof Uint32Array))
790
790
  return console.error(
791
791
  "SplatSorter: Order texture data is not a Uint32Array!"
792
792
  );
793
- o.set(new Uint32Array(r)), this.orderTexture.source.data.updateRanges || (this.orderTexture.source.data.updateRanges = []), this.orderTexture.needsUpdate = !0;
794
- const a = o.buffer.slice(0), i = { order: a };
795
- this.worker.postMessage(i, [a]), this.dispatchEvent({ type: "updated", count: t });
793
+ n.set(new Uint32Array(t)), this.orderTexture.source.data.updateRanges || (this.orderTexture.source.data.updateRanges = []), this.orderTexture.needsUpdate = !0;
794
+ const a = n.buffer.slice(0), i = { order: a };
795
+ this.worker.postMessage(i, [a]), this.dispatchEvent({ type: "updated", count: r });
796
796
  }
797
797
  /**
798
798
  * Initializes the sorter with necessary data and textures.
@@ -801,35 +801,35 @@ class Pe extends l.EventDispatcher {
801
801
  * @param chunks Optional: A Float32Array containing bounding box chunk data [minX, minY, minZ, maxX, maxY, maxZ, ...] for optimization.
802
802
  * @param transferOwnership Optional: If true, transfers ownership of centers buffer to worker (saves memory, main thread loses access). Default: false.
803
803
  */
804
- init(n, r, t, o = !1) {
805
- if (!n || !(n.image.data instanceof Uint32Array))
804
+ init(o, t, r, n = !1) {
805
+ if (!o || !(o.image.data instanceof Uint32Array))
806
806
  throw new Error("SplatSorter: Invalid orderTexture provided. Must be DataTexture with Uint32Array data.");
807
- if (!r || r.length % 3 !== 0)
807
+ if (!t || t.length % 3 !== 0)
808
808
  throw new Error("SplatSorter: Invalid centers array provided. Length must be multiple of 3.");
809
- if (n.image.data.length < r.length / 3)
809
+ if (o.image.data.length < t.length / 3)
810
810
  throw new Error("SplatSorter: orderTexture data buffer is smaller than the number of splats.");
811
- if (r.buffer.byteLength === 0)
811
+ if (t.buffer.byteLength === 0)
812
812
  throw new Error(
813
813
  "SplatSorter: positions buffer is detached (likely React StrictMode + cached asset). "
814
814
  );
815
- const a = r.length / 3;
816
- this.orderTexture = n, o ? this.centers = null : this.centers = r.slice();
815
+ const a = t.length / 3;
816
+ this.orderTexture = o, n ? this.centers = null : this.centers = t.slice();
817
817
  const i = this.orderTexture.image.data;
818
- for (let d = 0; d < a; d++) i[d] = d;
818
+ for (let h = 0; h < a; h++) i[h] = h;
819
819
  this.orderTexture.source.data.updateRanges || (this.orderTexture.source.data.updateRanges = []), this.orderTexture.needsUpdate = !0;
820
- const u = i.buffer.slice(0), v = o ? r.buffer : r.buffer.slice(0), M = {
820
+ const u = i.buffer.slice(0), w = n ? t.buffer : t.buffer.slice(0), C = {
821
821
  order: u,
822
- centers: v
823
- }, C = [
822
+ centers: w
823
+ }, _ = [
824
824
  u,
825
- v
825
+ w
826
826
  ];
827
- if (t) {
828
- this.chunks = t.slice();
829
- const d = this.chunks.buffer.slice(0);
830
- M.chunks = d, C.push(d);
827
+ if (r) {
828
+ this.chunks = r.slice();
829
+ const h = this.chunks.buffer.slice(0);
830
+ C.chunks = h, _.push(h);
831
831
  }
832
- this.worker.postMessage(M, C), queueMicrotask(() => {
832
+ this.worker.postMessage(C, _), queueMicrotask(() => {
833
833
  this.dispatchEvent({
834
834
  type: "updated",
835
835
  count: a
@@ -841,51 +841,51 @@ class Pe extends l.EventDispatcher {
841
841
  * The sorter will only consider splats whose original indices are present in the mapping.
842
842
  * @param mapping A Uint32Array where each element is the *original* index of a splat to include, or null to reset mapping.
843
843
  */
844
- setMapping(n) {
844
+ setMapping(o) {
845
845
  if (!this.centers)
846
846
  return console.warn(
847
847
  "SplatSorter: Cannot set mapping before initialization."
848
848
  );
849
- let r;
850
- const t = [];
851
- if (!n) {
849
+ let t;
850
+ const r = [];
851
+ if (!o) {
852
852
  const u = this.centers.buffer.slice(0);
853
- return r = {
853
+ return t = {
854
854
  centers: u,
855
855
  mapping: null
856
- }, t.push(u), this.worker.postMessage(r, t);
856
+ }, r.push(u), this.worker.postMessage(t, r);
857
857
  }
858
- const o = new Float32Array(n.length * 3);
859
- for (let u = 0; u < n.length; u++) {
860
- const v = n[u];
861
- if (v * 3 + 2 >= this.centers.length) {
858
+ const n = new Float32Array(o.length * 3);
859
+ for (let u = 0; u < o.length; u++) {
860
+ const w = o[u];
861
+ if (w * 3 + 2 >= this.centers.length) {
862
862
  console.warn(
863
- `SplatSorter: Mapping index ${v} out of bounds.`
863
+ `SplatSorter: Mapping index ${w} out of bounds.`
864
864
  );
865
865
  continue;
866
866
  }
867
- const M = v * 3, C = u * 3;
868
- o[C + 0] = this.centers[M + 0], o[C + 1] = this.centers[M + 1], o[C + 2] = this.centers[M + 2];
867
+ const C = w * 3, _ = u * 3;
868
+ n[_ + 0] = this.centers[C + 0], n[_ + 1] = this.centers[C + 1], n[_ + 2] = this.centers[C + 2];
869
869
  }
870
- const a = o.buffer.slice(0), i = n.buffer.slice(0);
871
- r = {
870
+ const a = n.buffer.slice(0), i = o.buffer.slice(0);
871
+ t = {
872
872
  centers: a,
873
873
  mapping: i
874
- }, t.push(a, i), this.worker.postMessage(r, t);
874
+ }, r.push(a, i), this.worker.postMessage(t, r);
875
875
  }
876
876
  /**
877
877
  * Updates the camera parameters used for sorting.
878
878
  * @param position The camera's position in the sorter's local coordinate space.
879
879
  * @param direction The camera's forward direction in the sorter's local coordinate space.
880
880
  */
881
- setCamera(n, r) {
882
- const t = this.lastCameraPosition.distanceToSquared(n) > 1e-7, o = this.lastCameraDirection.dot(r) < 0.9999;
883
- if (!t && !o)
881
+ setCamera(o, t) {
882
+ const r = this.lastCameraPosition.distanceToSquared(o) > 1e-7, n = this.lastCameraDirection.dot(t) < 0.9999;
883
+ if (!r && !n)
884
884
  return;
885
- this.lastCameraPosition.copy(n), this.lastCameraDirection.copy(r);
885
+ this.lastCameraPosition.copy(o), this.lastCameraDirection.copy(t);
886
886
  const a = {
887
- cameraPosition: { x: n.x, y: n.y, z: n.z },
888
- cameraDirection: { x: r.x, y: r.y, z: r.z }
887
+ cameraPosition: { x: o.x, y: o.y, z: o.z },
888
+ cameraDirection: { x: t.x, y: t.y, z: t.z }
889
889
  };
890
890
  this.worker.postMessage(a);
891
891
  }
@@ -901,165 +901,165 @@ class Pe extends l.EventDispatcher {
901
901
  */
902
902
  createWorkerCode() {
903
903
  return `(${(function() {
904
- let r = null, t = null, o = null, a = null, i = null, u = null, v = !1;
905
- const M = { x: 0, y: 0, z: 0 }, C = { x: 0, y: 0, z: 0 }, d = { x: 0, y: 0, z: 0 }, w = { x: 0, y: 0, z: 0 };
906
- let b = null, I = null;
907
- const z = 32, j = new Array(z).fill(0), H = new Array(z).fill(0), L = new Array(z).fill(0), ne = (_, x, D) => {
908
- for (; _ <= x; ) {
909
- const T = x + _ >> 1, y = D(T);
910
- if (y > 0) _ = T + 1;
911
- else if (y < 0) x = T - 1;
904
+ let t = null, r = null, n = null, a = null, i = null, u = null, w = !1;
905
+ const C = { x: 0, y: 0, z: 0 }, _ = { x: 0, y: 0, z: 0 }, h = { x: 0, y: 0, z: 0 }, b = { x: 0, y: 0, z: 0 };
906
+ let S = null, I = null;
907
+ const P = 32, j = new Array(P).fill(0), H = new Array(P).fill(0), W = new Array(P).fill(0), oe = (A, g, D) => {
908
+ for (; A <= g; ) {
909
+ const T = g + A >> 1, v = D(T);
910
+ if (v > 0) A = T + 1;
911
+ else if (v < 0) g = T - 1;
912
912
  else return T;
913
913
  }
914
- return ~_;
915
- }, W = () => {
916
- if (!r || !t || !i || !u)
914
+ return ~A;
915
+ }, L = () => {
916
+ if (!t || !r || !i || !u)
917
917
  return;
918
- if (t.length === 0) {
918
+ if (r.length === 0) {
919
919
  const c = {
920
- order: r.buffer,
920
+ order: t.buffer,
921
921
  count: 0
922
922
  };
923
- self.postMessage(c, [r.buffer]), r = null;
923
+ self.postMessage(c, [t.buffer]), t = null;
924
924
  return;
925
925
  }
926
- const _ = i.x, x = i.y, D = i.z, T = u.x, y = u.y, R = u.z, B = 1e-4, X = Math.abs(_ - M.x) > B || Math.abs(x - M.y) > B || Math.abs(D - M.z) > B, $ = Math.abs(T - C.x) > B || Math.abs(y - C.y) > B || Math.abs(R - C.z) > B;
927
- if (!v && !X && !$)
926
+ const A = i.x, g = i.y, D = i.z, T = u.x, v = u.y, R = u.z, B = 1e-4, $ = Math.abs(A - C.x) > B || Math.abs(g - C.y) > B || Math.abs(D - C.z) > B, X = Math.abs(T - _.x) > B || Math.abs(v - _.y) > B || Math.abs(R - _.z) > B;
927
+ if (!w && !$ && !X)
928
928
  return;
929
- v = !1, M.x = _, M.y = x, M.z = D, C.x = T, C.y = y, C.z = R;
929
+ w = !1, C.x = A, C.y = g, C.z = D, _.x = T, _.y = v, _.z = R;
930
930
  let Z = 1 / 0, U = -1 / 0;
931
931
  for (let c = 0; c < 8; ++c) {
932
- const g = c & 1 ? d.x : w.x, P = c & 2 ? d.y : w.y, f = c & 4 ? d.z : w.z, k = g * T + P * y + f * R;
932
+ const y = c & 1 ? h.x : b.x, z = c & 2 ? h.y : b.y, d = c & 4 ? h.z : b.z, k = y * T + z * v + d * R;
933
933
  Z = Math.min(Z, k), U = Math.max(U, k);
934
934
  }
935
- const F = t.length / 3, N = U - Z, s = (1 << Math.max(
935
+ const F = r.length / 3, N = U - Z, s = (1 << Math.max(
936
936
  10,
937
937
  Math.min(20, Math.ceil(Math.log2(F / 4)))
938
938
  )) + 1;
939
- if ((!b || b.length !== F) && (b = new Uint32Array(F)), !I || I.length !== s ? I = new Uint32Array(s) : I.fill(0), N < 1e-7) {
940
- for (let c = 0; c < F; ++c) b[c] = 0;
939
+ if ((!S || S.length !== F) && (S = new Uint32Array(F)), !I || I.length !== s ? I = new Uint32Array(s) : I.fill(0), N < 1e-7) {
940
+ for (let c = 0; c < F; ++c) S[c] = 0;
941
941
  I[0] = F;
942
- } else if (o && o.length > 0) {
943
- const c = o.length / 6;
942
+ } else if (n && n.length > 0) {
943
+ const c = n.length / 6;
944
944
  j.fill(0);
945
- for (let f = 0; f < c; ++f) {
946
- const k = f * 6, O = o[k + 0], V = o[k + 1], G = o[k + 2], q = o[k + 3], Y = O * T + V * y + G * R - Z, Q = Y - q, K = Y + q, re = Math.max(
945
+ for (let d = 0; d < c; ++d) {
946
+ const k = d * 6, O = n[k + 0], q = n[k + 1], G = n[k + 2], V = n[k + 3], Y = O * T + q * v + G * R - Z, K = Y - V, Q = Y + V, re = Math.max(
947
947
  0,
948
- Math.floor(Q * z / N)
949
- ), oe = Math.min(
950
- z,
951
- Math.ceil(K * z / N)
948
+ Math.floor(K * P / N)
949
+ ), ne = Math.min(
950
+ P,
951
+ Math.ceil(Q * P / N)
952
952
  );
953
- for (let J = re; J < oe; ++J)
953
+ for (let J = re; J < ne; ++J)
954
954
  j[J]++;
955
955
  }
956
- let g = 0;
957
- for (let f = 0; f < z; ++f) g += j[f];
958
- L[0] = 0, H[0] = 0;
959
- for (let f = 1; f < z; ++f)
960
- L[f - 1] = j[f - 1] / g * s >>> 0, H[f] = H[f - 1] + L[f - 1];
961
- L[z - 1] = j[z - 1] / g * s >>> 0;
962
- const P = N / z;
963
- for (let f = 0; f < F; ++f) {
964
- const k = f * 3, O = t[k + 0], V = t[k + 1], G = t[k + 2], q = O * T + V * y + G * R, Q = (U - q) / P, K = Math.max(
956
+ let y = 0;
957
+ for (let d = 0; d < P; ++d) y += j[d];
958
+ W[0] = 0, H[0] = 0;
959
+ for (let d = 1; d < P; ++d)
960
+ W[d - 1] = j[d - 1] / y * s >>> 0, H[d] = H[d - 1] + W[d - 1];
961
+ W[P - 1] = j[P - 1] / y * s >>> 0;
962
+ const z = N / P;
963
+ for (let d = 0; d < F; ++d) {
964
+ const k = d * 3, O = r[k + 0], q = r[k + 1], G = r[k + 2], V = O * T + q * v + G * R, K = (U - V) / z, Q = Math.max(
965
965
  0,
966
966
  Math.min(
967
- z - 1,
968
- Math.floor(Q)
967
+ P - 1,
968
+ Math.floor(K)
969
969
  )
970
- ), re = Q - K, oe = H[K] + L[K] * re >>> 0, J = Math.min(oe, s - 1);
971
- b[f] = J, I[J]++;
970
+ ), re = K - Q, ne = H[Q] + W[Q] * re >>> 0, J = Math.min(ne, s - 1);
971
+ S[d] = J, I[J]++;
972
972
  }
973
973
  } else {
974
974
  const c = (s - 1) / N;
975
- for (let g = 0; g < F; ++g) {
976
- const P = g * 3, f = t[P + 0], k = t[P + 1], O = t[P + 2], V = f * T + k * y + O * R, q = (U - V) * c >>> 0, Y = Math.min(q, s - 1);
977
- b[g] = Y, I[Y]++;
975
+ for (let y = 0; y < F; ++y) {
976
+ const z = y * 3, d = r[z + 0], k = r[z + 1], O = r[z + 2], q = d * T + k * v + O * R, V = (U - q) * c >>> 0, Y = Math.min(V, s - 1);
977
+ S[y] = Y, I[Y]++;
978
978
  }
979
979
  }
980
980
  for (let c = 1; c < s; c++)
981
981
  I[c] += I[c - 1];
982
982
  for (let c = F - 1; c >= 0; c--) {
983
- const g = b[c], P = --I[g];
984
- r[P] = a ? a[c] : c;
983
+ const y = S[c], z = --I[y];
984
+ t[z] = a ? a[c] : c;
985
985
  }
986
- const p = _ * T + x * y + D * R, S = (c) => {
987
- if (!r) return -1 / 0;
988
- const g = r[c], P = g;
989
- if (!t || P * 3 + 2 >= t.length)
986
+ const p = A * T + g * v + D * R, M = (c) => {
987
+ if (!t) return -1 / 0;
988
+ const y = t[c], z = y;
989
+ if (!r || z * 3 + 2 >= r.length)
990
990
  return -1 / 0;
991
- const f = P * 3;
992
- return t[f] * T + t[f + 1] * y + t[f + 2] * R - p;
991
+ const d = z * 3;
992
+ return r[d] * T + r[d + 1] * v + r[d + 2] * R - p;
993
993
  };
994
994
  let E = F;
995
- if (F > 0 && S(F - 1) < 0) {
996
- const c = ne(
995
+ if (F > 0 && M(F - 1) < 0) {
996
+ const c = oe(
997
997
  0,
998
998
  F - 1,
999
- S
999
+ M
1000
1000
  );
1001
1001
  E = c < 0 ? ~c : c;
1002
1002
  }
1003
1003
  const m = {
1004
- order: r.buffer,
1004
+ order: t.buffer,
1005
1005
  count: E
1006
1006
  };
1007
- self.postMessage(m, [r.buffer]), r = null;
1007
+ self.postMessage(m, [t.buffer]), t = null;
1008
1008
  };
1009
- self.onmessage = (_) => {
1010
- const x = _.data;
1011
- x.order && (r = new Uint32Array(x.order));
1009
+ self.onmessage = (A) => {
1010
+ const g = A.data;
1011
+ g.order && (t = new Uint32Array(g.order));
1012
1012
  let D = !1;
1013
- if (x.centers && (t = new Float32Array(x.centers), D = !0, v = !0), Object.prototype.hasOwnProperty.call(x, "mapping") && (a = x.mapping ? new Uint32Array(x.mapping) : null, v = !0), x.chunks) {
1014
- if (o = new Float32Array(x.chunks), o.length > 0 && o[3] > 0)
1015
- for (let T = 0; T < o.length / 6; ++T) {
1016
- const y = T * 6, R = o[y + 0], B = o[y + 1], X = o[y + 2], $ = o[y + 3], Z = o[y + 4], U = o[y + 5];
1017
- o[y + 0] = (R + $) * 0.5, o[y + 1] = (B + Z) * 0.5, o[y + 2] = (X + U) * 0.5, o[y + 3] = Math.sqrt(
1018
- ($ - R) ** 2 + (Z - B) ** 2 + (U - X) ** 2
1013
+ if (g.centers && (r = new Float32Array(g.centers), D = !0, w = !0), Object.prototype.hasOwnProperty.call(g, "mapping") && (a = g.mapping ? new Uint32Array(g.mapping) : null, w = !0), g.chunks) {
1014
+ if (n = new Float32Array(g.chunks), n.length > 0 && n[3] > 0)
1015
+ for (let T = 0; T < n.length / 6; ++T) {
1016
+ const v = T * 6, R = n[v + 0], B = n[v + 1], $ = n[v + 2], X = n[v + 3], Z = n[v + 4], U = n[v + 5];
1017
+ n[v + 0] = (R + X) * 0.5, n[v + 1] = (B + Z) * 0.5, n[v + 2] = ($ + U) * 0.5, n[v + 3] = Math.sqrt(
1018
+ (X - R) ** 2 + (Z - B) ** 2 + (U - $) ** 2
1019
1019
  ) * 0.5;
1020
1020
  }
1021
- v = !0;
1021
+ w = !0;
1022
1022
  }
1023
- if (D && t && t.length > 0) {
1024
- d.x = w.x = t[0], d.y = w.y = t[1], d.z = w.z = t[2];
1025
- for (let T = 1; T < t.length / 3; T++) {
1026
- const y = T * 3;
1027
- d.x = Math.min(d.x, t[y + 0]), w.x = Math.max(w.x, t[y + 0]), d.y = Math.min(d.y, t[y + 1]), w.y = Math.max(w.y, t[y + 1]), d.z = Math.min(d.z, t[y + 2]), w.z = Math.max(w.z, t[y + 2]);
1023
+ if (D && r && r.length > 0) {
1024
+ h.x = b.x = r[0], h.y = b.y = r[1], h.z = b.z = r[2];
1025
+ for (let T = 1; T < r.length / 3; T++) {
1026
+ const v = T * 3;
1027
+ h.x = Math.min(h.x, r[v + 0]), b.x = Math.max(b.x, r[v + 0]), h.y = Math.min(h.y, r[v + 1]), b.y = Math.max(b.y, r[v + 1]), h.z = Math.min(h.z, r[v + 2]), b.z = Math.max(b.z, r[v + 2]);
1028
1028
  }
1029
- } else D && t && t.length === 0 && (d.x = w.x = d.y = w.y = d.z = w.z = 0);
1030
- x.cameraPosition && (i = x.cameraPosition), x.cameraDirection && (u = x.cameraDirection), W();
1029
+ } else D && r && r.length === 0 && (h.x = b.x = h.y = b.y = h.z = b.z = 0);
1030
+ g.cameraPosition && (i = g.cameraPosition), g.cameraDirection && (u = g.cameraDirection), L();
1031
1031
  };
1032
1032
  }).toString()})();`;
1033
1033
  }
1034
1034
  }
1035
- const ze = (A, e) => {
1036
- const n = ge(A), r = ge(e);
1037
- return n | r << 16;
1035
+ const Be = (x, e) => {
1036
+ const o = ye(x), t = ye(e);
1037
+ return o | t << 16;
1038
1038
  };
1039
- function ge(A) {
1040
- const e = new Float32Array([A]), r = new Int32Array(e.buffer)[0];
1041
- let t = r >> 16 & 32768, o = r >> 12 & 2047;
1042
- const a = r >> 23 & 255;
1043
- return a < 103 ? t : a > 142 ? (t |= 31744, t |= (a === 255 ? 0 : 1) && r & 8388607, t) : a < 113 ? (o |= 2048, t |= (o >> 114 - a) + (o >> 113 - a & 1), t) : (t |= a - 112 << 10 | o >> 1, t += o & 1, t);
1039
+ function ye(x) {
1040
+ const e = new Float32Array([x]), t = new Int32Array(e.buffer)[0];
1041
+ let r = t >> 16 & 32768, n = t >> 12 & 2047;
1042
+ const a = t >> 23 & 255;
1043
+ return a < 103 ? r : a > 142 ? (r |= 31744, r |= (a === 255 ? 0 : 1) && t & 8388607, r) : a < 113 ? (n |= 2048, r |= (n >> 114 - a) + (n >> 113 - a & 1), r) : (r |= a - 112 << 10 | n >> 1, r += n & 1, r);
1044
1044
  }
1045
- const Be = new ArrayBuffer(4), ye = new DataView(Be), Fe = (A) => (ye.setUint32(0, A, !0), ye.getFloat32(0, !0));
1046
- class Oe {
1045
+ const Fe = new ArrayBuffer(4), ve = new DataView(Fe), Oe = (x) => (ve.setUint32(0, x, !0), ve.getFloat32(0, !0));
1046
+ class De {
1047
1047
  /**
1048
1048
  * Create a new TextureManager for a set of splats
1049
1049
  * @param splatData The splat data to manage textures for
1050
1050
  */
1051
1051
  constructor(e) {
1052
- h(this, "textureWidth");
1053
- h(this, "textureHeight");
1054
- h(this, "transformA");
1052
+ f(this, "textureWidth");
1053
+ f(this, "textureHeight");
1054
+ f(this, "transformA");
1055
1055
  // position xyz and rotation quaternion y,z components
1056
- h(this, "transformB");
1056
+ f(this, "transformB");
1057
1057
  // rotation quaternion x and scale xyz
1058
- h(this, "colorTexture");
1058
+ f(this, "colorTexture");
1059
1059
  // color an opacity
1060
- h(this, "orderTexture");
1061
- const n = e.numSplats;
1062
- this.textureWidth = Math.ceil(Math.sqrt(n)), this.textureHeight = Math.ceil(n / this.textureWidth), this.transformA = this.createTransformATexture(e), this.transformB = this.createTransformBTexture(e), this.colorTexture = this.createColorTexture(e), this.orderTexture = this.createOrderTexture(n);
1060
+ f(this, "orderTexture");
1061
+ const o = e.numSplats;
1062
+ this.textureWidth = Math.ceil(Math.sqrt(o)), this.textureHeight = Math.ceil(o / this.textureWidth), this.transformA = this.createTransformATexture(e), this.transformB = this.createTransformBTexture(e), this.colorTexture = this.createColorTexture(e), this.orderTexture = this.createOrderTexture(o);
1063
1063
  }
1064
1064
  /**
1065
1065
  * Create the transform A texture (positions and quaternion w component)
@@ -1067,24 +1067,24 @@ class Oe {
1067
1067
  * @returns DataTexture containing position data
1068
1068
  */
1069
1069
  createTransformATexture(e) {
1070
- const n = e.numSplats, r = new Float32Array(
1070
+ const o = e.numSplats, t = new Float32Array(
1071
1071
  this.textureWidth * this.textureHeight * 4
1072
1072
  );
1073
- for (let o = 0; o < n; o++) {
1074
- const a = o * 4, i = o * 3, u = o * 4;
1075
- r[a] = e.positions[i], r[a + 1] = e.positions[i + 1], r[a + 2] = e.positions[i + 2];
1076
- const v = e.rotations[u + 0], M = e.rotations[u + 1], C = ze(v, M);
1077
- r[a + 3] = Fe(C);
1073
+ for (let n = 0; n < o; n++) {
1074
+ const a = n * 4, i = n * 3, u = n * 4;
1075
+ t[a] = e.positions[i], t[a + 1] = e.positions[i + 1], t[a + 2] = e.positions[i + 2];
1076
+ const w = e.rotations[u + 0], C = e.rotations[u + 1], _ = Be(w, C);
1077
+ t[a + 3] = Oe(_);
1078
1078
  }
1079
- const t = new l.DataTexture(
1080
- r,
1079
+ const r = new l.DataTexture(
1080
+ t,
1081
1081
  this.textureWidth,
1082
1082
  this.textureHeight,
1083
1083
  l.RGBAFormat,
1084
1084
  l.FloatType
1085
1085
  // Store as Float32, shader will reinterpret bits
1086
1086
  );
1087
- return t.magFilter = l.NearestFilter, t.minFilter = l.NearestFilter, t.source.data.updateRanges || (t.source.data.updateRanges = []), t.needsUpdate = !0, t;
1087
+ return r.magFilter = l.NearestFilter, r.minFilter = l.NearestFilter, r.source.data.updateRanges || (r.source.data.updateRanges = []), r.needsUpdate = !0, r;
1088
1088
  }
1089
1089
  /**
1090
1090
  * Create the transform B texture (scale and rotation xyz)
@@ -1092,21 +1092,21 @@ class Oe {
1092
1092
  * @returns DataTexture containing scale and rotation data
1093
1093
  */
1094
1094
  createTransformBTexture(e) {
1095
- const n = e.numSplats, r = new Float32Array(
1095
+ const o = e.numSplats, t = new Float32Array(
1096
1096
  this.textureWidth * this.textureHeight * 4
1097
1097
  );
1098
- for (let o = 0; o < n; o++) {
1099
- const a = o * 4, i = o * 3, u = o * 4;
1100
- r[a] = e.scales[i], r[a + 1] = e.scales[i + 1], r[a + 2] = e.scales[i + 2], r[a + 3] = e.rotations[u + 2];
1098
+ for (let n = 0; n < o; n++) {
1099
+ const a = n * 4, i = n * 3, u = n * 4;
1100
+ t[a] = e.scales[i], t[a + 1] = e.scales[i + 1], t[a + 2] = e.scales[i + 2], t[a + 3] = e.rotations[u + 2];
1101
1101
  }
1102
- const t = new l.DataTexture(
1103
- r,
1102
+ const r = new l.DataTexture(
1103
+ t,
1104
1104
  this.textureWidth,
1105
1105
  this.textureHeight,
1106
1106
  l.RGBAFormat,
1107
1107
  l.FloatType
1108
1108
  );
1109
- return t.magFilter = l.NearestFilter, t.minFilter = l.NearestFilter, t.source.data.updateRanges || (t.source.data.updateRanges = []), t.needsUpdate = !0, t;
1109
+ return r.magFilter = l.NearestFilter, r.minFilter = l.NearestFilter, r.source.data.updateRanges || (r.source.data.updateRanges = []), r.needsUpdate = !0, r;
1110
1110
  }
1111
1111
  /**
1112
1112
  * Create the color texture (RGB and opacity)
@@ -1114,21 +1114,21 @@ class Oe {
1114
1114
  * @returns DataTexture containing color data
1115
1115
  */
1116
1116
  createColorTexture(e) {
1117
- const n = e.numSplats, r = new Float32Array(
1117
+ const o = e.numSplats, t = new Float32Array(
1118
1118
  this.textureWidth * this.textureHeight * 4
1119
1119
  );
1120
- for (let o = 0; o < n; o++) {
1121
- const a = o * 4, i = o * 3;
1122
- r[a] = e.colors[i], r[a + 1] = e.colors[i + 1], r[a + 2] = e.colors[i + 2], r[a + 3] = e.opacities[o];
1120
+ for (let n = 0; n < o; n++) {
1121
+ const a = n * 4, i = n * 3;
1122
+ t[a] = e.colors[i], t[a + 1] = e.colors[i + 1], t[a + 2] = e.colors[i + 2], t[a + 3] = e.opacities[n];
1123
1123
  }
1124
- const t = new l.DataTexture(
1125
- r,
1124
+ const r = new l.DataTexture(
1125
+ t,
1126
1126
  this.textureWidth,
1127
1127
  this.textureHeight,
1128
1128
  l.RGBAFormat,
1129
1129
  l.FloatType
1130
1130
  );
1131
- return t.source.data.updateRanges || (t.source.data.updateRanges = []), t.needsUpdate = !0, t;
1131
+ return r.source.data.updateRanges || (r.source.data.updateRanges = []), r.needsUpdate = !0, r;
1132
1132
  }
1133
1133
  /**
1134
1134
  * Create the order texture for sorting
@@ -1136,23 +1136,23 @@ class Oe {
1136
1136
  * @returns DataTexture for storing order indices
1137
1137
  */
1138
1138
  createOrderTexture(e) {
1139
- const n = new Uint32Array(this.textureWidth * this.textureHeight);
1140
- for (let t = 0; t < e; t++)
1141
- n[t] = t;
1142
- const r = new l.DataTexture(
1143
- n,
1139
+ const o = new Uint32Array(this.textureWidth * this.textureHeight);
1140
+ for (let r = 0; r < e; r++)
1141
+ o[r] = r;
1142
+ const t = new l.DataTexture(
1143
+ o,
1144
1144
  this.textureWidth,
1145
1145
  this.textureHeight,
1146
1146
  l.RedIntegerFormat,
1147
1147
  l.UnsignedIntType
1148
1148
  );
1149
- return r.source.data.updateRanges || (r.source.data.updateRanges = []), r.needsUpdate = !0, r;
1149
+ return t.source.data.updateRanges || (t.source.data.updateRanges = []), t.needsUpdate = !0, t;
1150
1150
  }
1151
1151
  dispose() {
1152
1152
  this.transformA.dispose(), this.transformB.dispose(), this.colorTexture.dispose(), this.orderTexture.dispose();
1153
1153
  }
1154
1154
  }
1155
- const De = (
1155
+ const Ue = (
1156
1156
  /* glsl */
1157
1157
  `
1158
1158
  precision highp float;
@@ -1410,7 +1410,7 @@ void main(void) {
1410
1410
  vUv = clippedCornerOffset;
1411
1411
  }
1412
1412
  `
1413
- ), Ue = (
1413
+ ), qe = (
1414
1414
  /* glsl */
1415
1415
  `
1416
1416
  precision highp float;
@@ -1446,7 +1446,7 @@ void main(void) {
1446
1446
  );
1447
1447
  class Ve extends l.ShaderMaterial {
1448
1448
  constructor(e = {}) {
1449
- const n = {
1449
+ const o = {
1450
1450
  // Textures (values set via methods)
1451
1451
  transformA: { value: null },
1452
1452
  transformB: { value: null },
@@ -1459,9 +1459,9 @@ class Ve extends l.ShaderMaterial {
1459
1459
  // Max splats to render (updated by sorter)
1460
1460
  };
1461
1461
  super({
1462
- vertexShader: De,
1463
- fragmentShader: Ue,
1464
- uniforms: n,
1462
+ vertexShader: Ue,
1463
+ fragmentShader: qe,
1464
+ uniforms: o,
1465
1465
  transparent: !0,
1466
1466
  blending: l.CustomBlending,
1467
1467
  // Premultiplied alpha blending:
@@ -1492,8 +1492,8 @@ class Ve extends l.ShaderMaterial {
1492
1492
  * @param width Viewport width
1493
1493
  * @param height Viewport height
1494
1494
  */
1495
- updateViewport(e, n) {
1496
- this.uniforms.viewport.value.set(e, n);
1495
+ updateViewport(e, o) {
1496
+ this.uniforms.viewport.value.set(e, o);
1497
1497
  }
1498
1498
  /**
1499
1499
  * Set transform texture A (positions)
@@ -1538,41 +1538,41 @@ const se = class se extends l.Mesh {
1538
1538
  * @param splatData The splat data to render
1539
1539
  * @param options Rendering options
1540
1540
  */
1541
- constructor(n, r = {}) {
1542
- const t = new Ve(r), o = se.createInstancedGeometry(n.numSplats, se.INSTANCE_SIZE);
1543
- super(o, t);
1544
- h(this, "sorter");
1545
- h(this, "splatData");
1546
- h(this, "options");
1547
- h(this, "textureManager");
1548
- h(this, "material");
1549
- h(this, "geometry");
1550
- h(this, "lastCameraPositionLocal", new l.Vector3());
1551
- h(this, "lastCameraDirectionLocal", new l.Vector3());
1552
- h(this, "invModelMatrix", new l.Matrix4());
1541
+ constructor(o, t = {}) {
1542
+ const r = new Ve(t), n = se.createInstancedGeometry(o.numSplats, se.INSTANCE_SIZE);
1543
+ super(n, r);
1544
+ f(this, "sorter");
1545
+ f(this, "splatData");
1546
+ f(this, "options");
1547
+ f(this, "textureManager");
1548
+ f(this, "material");
1549
+ f(this, "geometry");
1550
+ f(this, "lastCameraPositionLocal", new l.Vector3());
1551
+ f(this, "lastCameraDirectionLocal", new l.Vector3());
1552
+ f(this, "invModelMatrix", new l.Matrix4());
1553
1553
  // Cached inverse matrix
1554
- h(this, "_vpW", -1);
1555
- h(this, "_vpH", -1);
1556
- h(this, "_size", new l.Vector2());
1557
- h(this, "_camPosW", new l.Vector3());
1558
- h(this, "_camDirW", new l.Vector3());
1559
- h(this, "_camPosL", new l.Vector3());
1560
- h(this, "_camDirL", new l.Vector3());
1561
- h(this, "onSorterUpdated", (n) => {
1562
- const r = n.count;
1563
- this.geometry.instanceCount = Math.ceil(r / se.INSTANCE_SIZE), this.material.setNumSplats(r);
1554
+ f(this, "_vpW", -1);
1555
+ f(this, "_vpH", -1);
1556
+ f(this, "_size", new l.Vector2());
1557
+ f(this, "_camPosW", new l.Vector3());
1558
+ f(this, "_camDirW", new l.Vector3());
1559
+ f(this, "_camPosL", new l.Vector3());
1560
+ f(this, "_camDirL", new l.Vector3());
1561
+ f(this, "onSorterUpdated", (o) => {
1562
+ const t = o.count;
1563
+ this.geometry.instanceCount = Math.ceil(t / se.INSTANCE_SIZE), this.material.setNumSplats(t);
1564
1564
  });
1565
- this.geometry = o, this.material = t, this.splatData = n, this.frustumCulled = !1, this.options = {
1565
+ this.geometry = n, this.material = r, this.splatData = o, this.frustumCulled = !1, this.options = {
1566
1566
  autoSort: !0,
1567
- ...r
1568
- }, this.textureManager = new Oe(n), this.sorter = new Pe();
1567
+ ...t
1568
+ }, this.textureManager = new De(o), this.sorter = new Pe();
1569
1569
  let a = this.createChunks() || void 0;
1570
1570
  a === null && console.warn("Visus: Could not create sorter chunks, bounding box might be invalid."), a = void 0, this.sorter.addEventListener("updated", this.onSorterUpdated), this.sorter.init(
1571
1571
  this.textureManager.orderTexture,
1572
1572
  this.splatData.positions,
1573
1573
  a ?? void 0,
1574
1574
  !this.options.keepSplatData
1575
- ), this.material.setTransformA(this.textureManager.transformA), this.material.setTransformB(this.textureManager.transformB), this.material.setColorTexture(this.textureManager.colorTexture), this.material.setOrderTexture(this.textureManager.orderTexture), this.material.setNumSplats(0), this.geometry.boundingBox = n.boundingBox.toBox3(), this.geometry.boundingSphere = new l.Sphere(), this.geometry.boundingBox.getBoundingSphere(this.geometry.boundingSphere), this.options.keepSplatData || (this.splatData = null);
1575
+ ), this.material.setTransformA(this.textureManager.transformA), this.material.setTransformB(this.textureManager.transformB), this.material.setColorTexture(this.textureManager.colorTexture), this.material.setOrderTexture(this.textureManager.orderTexture), this.material.setNumSplats(0), this.geometry.boundingBox = o.boundingBox.toBox3(), this.geometry.boundingSphere = new l.Sphere(), this.geometry.boundingBox.getBoundingSphere(this.geometry.boundingSphere), this.options.keepSplatData || (this.splatData = null);
1576
1576
  }
1577
1577
  /**
1578
1578
  * Creates the instanced geometry for rendering splats.
@@ -1580,8 +1580,8 @@ const se = class se extends l.Mesh {
1580
1580
  * @param instanceSize Number of splats per instance.
1581
1581
  * @returns InstancedBufferGeometry
1582
1582
  */
1583
- static createInstancedGeometry(n, r) {
1584
- const t = Math.ceil(n / r), o = new l.BufferGeometry(), a = new Float32Array([
1583
+ static createInstancedGeometry(o, t) {
1584
+ const r = Math.ceil(o / t), n = new l.BufferGeometry(), a = new Float32Array([
1585
1585
  // x, y, splat_index_in_instance
1586
1586
  -1,
1587
1587
  -1,
@@ -1595,24 +1595,24 @@ const se = class se extends l.Mesh {
1595
1595
  -1,
1596
1596
  1,
1597
1597
  0
1598
- ]), i = new Uint16Array([0, 1, 2, 0, 2, 3]), u = new Float32Array(4 * 3 * r);
1599
- for (let d = 0; d < r; d++) {
1600
- const w = d * 4 * 3;
1601
- for (let b = 0; b < 4; b++)
1602
- u[w + b * 3 + 0] = a[b * 3 + 0], u[w + b * 3 + 1] = a[b * 3 + 1], u[w + b * 3 + 2] = d;
1598
+ ]), i = new Uint16Array([0, 1, 2, 0, 2, 3]), u = new Float32Array(4 * 3 * t);
1599
+ for (let h = 0; h < t; h++) {
1600
+ const b = h * 4 * 3;
1601
+ for (let S = 0; S < 4; S++)
1602
+ u[b + S * 3 + 0] = a[S * 3 + 0], u[b + S * 3 + 1] = a[S * 3 + 1], u[b + S * 3 + 2] = h;
1603
1603
  }
1604
- const v = new Uint32Array(6 * r);
1605
- for (let d = 0; d < r; d++) {
1606
- const w = d * 6, b = d * 4;
1607
- v[w + 0] = i[0] + b, v[w + 1] = i[1] + b, v[w + 2] = i[2] + b, v[w + 3] = i[3] + b, v[w + 4] = i[4] + b, v[w + 5] = i[5] + b;
1604
+ const w = new Uint32Array(6 * t);
1605
+ for (let h = 0; h < t; h++) {
1606
+ const b = h * 6, S = h * 4;
1607
+ w[b + 0] = i[0] + S, w[b + 1] = i[1] + S, w[b + 2] = i[2] + S, w[b + 3] = i[3] + S, w[b + 4] = i[4] + S, w[b + 5] = i[5] + S;
1608
1608
  }
1609
- o.setAttribute("position", new l.BufferAttribute(u, 3)), o.setIndex(new l.BufferAttribute(v, 1));
1610
- const M = new l.InstancedBufferGeometry();
1611
- M.index = o.index, M.setAttribute("position", o.getAttribute("position"));
1612
- const C = new Uint32Array(t);
1613
- for (let d = 0; d < t; d++)
1614
- C[d] = d * r;
1615
- return M.setAttribute("splatInstanceIndex", new l.InstancedBufferAttribute(C, 1, !1)), M.instanceCount = 0, M;
1609
+ n.setAttribute("position", new l.BufferAttribute(u, 3)), n.setIndex(new l.BufferAttribute(w, 1));
1610
+ const C = new l.InstancedBufferGeometry();
1611
+ C.index = n.index, C.setAttribute("position", n.getAttribute("position"));
1612
+ const _ = new Uint32Array(r);
1613
+ for (let h = 0; h < r; h++)
1614
+ _[h] = h * t;
1615
+ return C.setAttribute("splatInstanceIndex", new l.InstancedBufferAttribute(_, 1, !1)), C.instanceCount = 0, C;
1616
1616
  }
1617
1617
  /**
1618
1618
  * Create chunks data (bounding box min/max) for the sorter.
@@ -1621,14 +1621,14 @@ const se = class se extends l.Mesh {
1621
1621
  createChunks() {
1622
1622
  if (!this.splatData)
1623
1623
  return null;
1624
- const n = this.splatData.boundingBox;
1625
- return n.min.x === 1 / 0 || n.max.x === -1 / 0 ? null : new Float32Array([
1626
- n.min.x,
1627
- n.min.y,
1628
- n.min.z,
1629
- n.max.x,
1630
- n.max.y,
1631
- n.max.z
1624
+ const o = this.splatData.boundingBox;
1625
+ return o.min.x === 1 / 0 || o.max.x === -1 / 0 ? null : new Float32Array([
1626
+ o.min.x,
1627
+ o.min.y,
1628
+ o.min.z,
1629
+ o.max.x,
1630
+ o.max.y,
1631
+ o.max.z
1632
1632
  ]);
1633
1633
  }
1634
1634
  /**
@@ -1636,17 +1636,17 @@ const se = class se extends l.Mesh {
1636
1636
  * @param width Viewport width
1637
1637
  * @param height Viewport height
1638
1638
  */
1639
- updateViewport(n, r) {
1640
- n === this._vpW && r === this._vpH || (this._vpW = n, this._vpH = r, this.material.updateViewport(n, r));
1639
+ updateViewport(o, t) {
1640
+ o === this._vpW && t === this._vpH || (this._vpW = o, this._vpH = t, this.material.updateViewport(o, t));
1641
1641
  }
1642
1642
  /**
1643
1643
  * Sorts splats based on camera position and direction.
1644
1644
  * @param camera The camera to sort against.
1645
1645
  */
1646
- sort(n) {
1647
- n.getWorldPosition(this._camPosW), n.getWorldDirection(this._camDirW), this.invModelMatrix.copy(this.matrixWorld).invert(), this._camPosL.copy(this._camPosW).applyMatrix4(this.invModelMatrix), this._camDirL.copy(this._camDirW).transformDirection(this.invModelMatrix);
1648
- const r = this.lastCameraPositionLocal.distanceToSquared(this._camPosL) > 1e-6, t = this.lastCameraDirectionLocal.dot(this._camDirL) < 0.999;
1649
- this.options.autoSort && (r || t) && (this.lastCameraPositionLocal.copy(this._camPosL), this.lastCameraDirectionLocal.copy(this._camDirL), this.sorter.setCamera(this._camPosL, this._camDirL));
1646
+ sort(o) {
1647
+ o.getWorldPosition(this._camPosW), o.getWorldDirection(this._camDirW), this.invModelMatrix.copy(this.matrixWorld).invert(), this._camPosL.copy(this._camPosW).applyMatrix4(this.invModelMatrix), this._camDirL.copy(this._camDirW).transformDirection(this.invModelMatrix);
1648
+ const t = this.lastCameraPositionLocal.distanceToSquared(this._camPosL) > 1e-6, r = this.lastCameraDirectionLocal.dot(this._camDirL) < 0.999;
1649
+ this.options.autoSort && (t || r) && (this.lastCameraPositionLocal.copy(this._camPosL), this.lastCameraDirectionLocal.copy(this._camDirL), this.sorter.setCamera(this._camPosL, this._camDirL));
1650
1650
  }
1651
1651
  /**
1652
1652
  * THREE.js hook called before rendering the object.
@@ -1657,8 +1657,8 @@ const se = class se extends l.Mesh {
1657
1657
  */
1658
1658
  // prettier-ignore
1659
1659
  // @ts-expect-error scene is not used
1660
- onBeforeRender(n, r, t) {
1661
- this.sort(t), n.getSize(this._size), this.updateViewport(this._size.x, this._size.y);
1660
+ onBeforeRender(o, t, r) {
1661
+ this.sort(r), o.getSize(this._size), this.updateViewport(this._size.x, this._size.y);
1662
1662
  }
1663
1663
  /**
1664
1664
  * Dispose of resources
@@ -1668,36 +1668,39 @@ const se = class se extends l.Mesh {
1668
1668
  }
1669
1669
  };
1670
1670
  /** Number of splats combined into a single instanced draw call. */
1671
- h(se, "INSTANCE_SIZE", 128);
1672
- let le = se;
1673
- const qe = Symbol.for("@speridlabs/visus/SplatMesh");
1674
- try {
1675
- Object.defineProperty(le.prototype, qe, {
1676
- value: !0,
1677
- configurable: !1,
1678
- enumerable: !1,
1679
- writable: !1
1680
- });
1681
- } catch {
1682
- console.warn("Couldn't define Visus SplatMesh symbol");
1683
- }
1684
- const Ye = ({
1685
- plyUrl: A,
1671
+ f(se, "INSTANCE_SIZE", 128);
1672
+ let de = se;
1673
+ const le = /* @__PURE__ */ new Map(), He = ({
1674
+ plyUrl: x,
1686
1675
  debug: e = !1,
1687
- splatOptions: n = {},
1688
- ...r
1676
+ splatOptions: o = {},
1677
+ ...t
1689
1678
  }) => {
1690
- typeof window < "u" && e && (window.__VISUS_SPLAT_DEBUG__ = !0), e && console.debug("SPLAT: rendering", { plyUrl: A, splatOptions: n, meshProps: r });
1691
- const t = Se(null), o = Ae(Re, A), a = Me(
1692
- () => new le(o, n || {}),
1693
- [o, n]
1694
- );
1695
- return _e(() => () => {
1696
- e && console.debug("SPLAT: disposing mesh for", A), typeof (a == null ? void 0 : a.dispose) == "function" && a.dispose();
1697
- }, [a]), /* @__PURE__ */ Ee.jsx("primitive", { ref: t, object: a, ...r });
1679
+ e && console.debug("SPLAT: rendering", { plyUrl: x, splatOptions: o, meshProps: t });
1680
+ const [r, n] = Ce(null), a = Ae(null);
1681
+ return Te(() => {
1682
+ const i = we(x, o);
1683
+ return je(x, o).then(
1684
+ (u) => {
1685
+ n(u);
1686
+ }
1687
+ ), () => {
1688
+ e && console.debug("SPLAT: releasing mesh for", x), We(i);
1689
+ };
1690
+ }, [x, o, e]), r ? /* @__PURE__ */ Ie.jsx("primitive", { ref: a, object: r, ...t }) : null;
1691
+ }, we = (x, e) => `${x}:${JSON.stringify(e)}`, je = async (x, e) => {
1692
+ const o = we(x, e), t = le.get(o);
1693
+ if (t)
1694
+ return t.refCount++, t.mesh;
1695
+ const n = await new ze().loadAsync(x), a = new de(n, e);
1696
+ return le.set(o, { mesh: a, refCount: 1 }), a;
1698
1697
  };
1698
+ function We(x) {
1699
+ const e = le.get(x);
1700
+ e && (e.refCount--, e.refCount <= 0 && (e.mesh.dispose(), le.delete(x)));
1701
+ }
1699
1702
  export {
1700
- Re as PlyLoader,
1701
- Ye as Splat,
1702
- le as SplatMesh
1703
+ ze as PlyLoader,
1704
+ He as Splat,
1705
+ de as SplatMesh
1703
1706
  };