ldr 0.14.0 → 0.15.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.
@@ -1,4 +1,4 @@
1
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/spec.ts
1
+ // ../../../../../../../tmp/ldr-build-MHOtAg/src/spec.ts
2
2
  var norm = (s) => s.trim().toLowerCase().replace(/\\/g, "/").replace(/\/+/g, "/");
3
3
  function parseColor(tok) {
4
4
  if (/^0x/i.test(tok))
@@ -690,7 +690,7 @@ function fileStepViews(f) {
690
690
  viewMemo.set(f, out);
691
691
  return out;
692
692
  }
693
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/model.ts
693
+ // ../../../../../../../tmp/ldr-build-MHOtAg/src/model.ts
694
694
  var CALLOUT_END = 999999;
695
695
  var stepKey = (steps) => steps.map((x) => String(x).padStart(6, "0")).join(".") + "~";
696
696
  function flatten(doc, opts = {}) {
@@ -1039,7 +1039,7 @@ function parseLDConfig(text) {
1039
1039
  }
1040
1040
  return out;
1041
1041
  }
1042
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/instructions.ts
1042
+ // ../../../../../../../tmp/ldr-build-MHOtAg/src/instructions.ts
1043
1043
  var MIN_VIS = 0.5;
1044
1044
  var REORIENT = 0.35;
1045
1045
  var deg = Math.PI / 180;
@@ -1407,10 +1407,10 @@ function planStepViews(insts, parts, stepOf, nSteps, o = {}) {
1407
1407
  }
1408
1408
  };
1409
1409
  }
1410
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/render.ts
1410
+ // ../../../../../../../tmp/ldr-build-MHOtAg/src/render.ts
1411
1411
  import * as THREE from "three";
1412
1412
 
1413
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/pack-io.ts
1413
+ // ../../../../../../../tmp/ldr-build-MHOtAg/src/pack-io.ts
1414
1414
  import { decompress } from "fzstd";
1415
1415
  async function decompressPack(data) {
1416
1416
  const u = data instanceof Uint8Array ? data : new Uint8Array(data);
@@ -1429,7 +1429,7 @@ function decodePack(buf) {
1429
1429
  return { header, arr, bytes: buf.byteLength, buffer: buf };
1430
1430
  }
1431
1431
 
1432
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/cull.ts
1432
+ // ../../../../../../../tmp/ldr-build-MHOtAg/src/cull.ts
1433
1433
  var upright = (m, o = 0) => Math.abs(m[o + 7] - 1) < 0.001 && Math.abs(m[o + 4]) < 0.001 && Math.abs(m[o + 10]) < 0.001;
1434
1434
  var prepCache = new WeakMap;
1435
1435
  function prepPart(H, part) {
@@ -1746,7 +1746,7 @@ function precomputeCull(instances, H, useTex = true) {
1746
1746
  return cullCore(s.all, H, s.nSteps > 1 ? s.stepOf : undefined);
1747
1747
  }
1748
1748
 
1749
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/render.ts
1749
+ // ../../../../../../../tmp/ldr-build-MHOtAg/src/render.ts
1750
1750
  async function loadPack(url) {
1751
1751
  const res = await fetch(url);
1752
1752
  if (!res.ok)
@@ -2329,7 +2329,7 @@ class LdrLodRoot extends THREE.LOD {
2329
2329
  }
2330
2330
  }
2331
2331
  }
2332
- function buildStudMeshes(insts, H, cull, arr, LOD, color, matOf, steps, colorIndex) {
2332
+ function* buildStudMeshesGen(insts, H, cull, arr, LOD, color, matOf, steps, colorIndex) {
2333
2333
  const bKind = [], bMat = [];
2334
2334
  const bAll = [];
2335
2335
  const studBucket = new Uint16Array(cull.nStuds);
@@ -2384,6 +2384,8 @@ function buildStudMeshes(insts, H, cull, arr, LOD, color, matOf, steps, colorInd
2384
2384
  const instNeg = det12(a) < 0 ? 1 : 0;
2385
2385
  const B = pp.studM;
2386
2386
  for (let si = 0;si < pp.nStuds; si++, j++) {
2387
+ if ((j & 32767) === 0 && j)
2388
+ yield;
2387
2389
  const o = si * 12, b0 = B[o], b1 = B[o + 1], b2 = B[o + 2];
2388
2390
  const neg = (instNeg ^ ps.neg[si]) === 1;
2389
2391
  const km = ps.kid[si] * 2 + (neg ? 1 : 0);
@@ -2446,23 +2448,39 @@ function buildStudMeshes(insts, H, cull, arr, LOD, color, matOf, steps, colorInd
2446
2448
  colCache.set(c, x = color(c));
2447
2449
  return x;
2448
2450
  };
2449
- forEachStud(insts, H, (j, owner, w, _kind, col, si) => {
2450
- const sm = sMesh[studCl[j]];
2451
- if (!sm)
2452
- return;
2453
- const im = sm.im;
2454
- const slot = studSlot[j];
2455
- if (sm.slots) {
2456
- const t = sm.slots;
2457
- t.own[slot] = steps[owner];
2458
- t.hide[slot] = cull.studHideStep[j];
2459
- t.inst[slot] = owner;
2460
- t.stud[slot] = si;
2461
- t.col[slot] = colorIndex(col);
2462
- }
2463
- writeM4(im.instanceMatrix.array, slot * 16, w);
2464
- colorOf(col).toArray(im.instanceColor.array, slot * 3);
2465
- });
2451
+ yield;
2452
+ {
2453
+ const w = new Float64Array(12);
2454
+ let j = 0;
2455
+ for (let idx = 0;idx < insts.length; idx++) {
2456
+ const it = insts[idx];
2457
+ const pp = prepPart(H, it.part);
2458
+ if (!pp || !pp.nStuds)
2459
+ continue;
2460
+ for (let si = 0;si < pp.nStuds; si++, j++) {
2461
+ if ((j & 32767) === 0 && j)
2462
+ yield;
2463
+ mul12To(it.m, pp.studM, si * 12, w);
2464
+ const sm = sMesh[studCl[j]];
2465
+ if (!sm)
2466
+ continue;
2467
+ const im = sm.im;
2468
+ const slot = studSlot[j];
2469
+ const sc = pp.color[si];
2470
+ const col = sc === "16" ? it.color : sc;
2471
+ if (sm.slots) {
2472
+ const t = sm.slots;
2473
+ t.own[slot] = steps[idx];
2474
+ t.hide[slot] = cull.studHideStep[j];
2475
+ t.inst[slot] = idx;
2476
+ t.stud[slot] = si;
2477
+ t.col[slot] = colorIndex(col);
2478
+ }
2479
+ writeM4(im.instanceMatrix.array, slot * 16, w);
2480
+ colorOf(col).toArray(im.instanceColor.array, slot * 3);
2481
+ }
2482
+ }
2483
+ }
2466
2484
  return sMesh;
2467
2485
  }
2468
2486
  function undersideGroups(ids, insts) {
@@ -2492,7 +2510,7 @@ function undersideGroups(ids, insts) {
2492
2510
  out.push({ ids: rest, ax: null });
2493
2511
  return out;
2494
2512
  }
2495
- function buildLdrScene(insts, pack, P, color, mark) {
2513
+ function* buildLdrSceneGen(insts, pack, P, color, mark) {
2496
2514
  const { header: H, arr } = pack;
2497
2515
  const LOD = P.lod !== false;
2498
2516
  const EDGES = !!P.edges;
@@ -2501,6 +2519,7 @@ function buildLdrScene(insts, pack, P, color, mark) {
2501
2519
  root.px = P.lodPx ?? 0.5;
2502
2520
  root.edgePpl = (P.lodEdgePx ?? 0.5) / 20;
2503
2521
  root.edgeMinPx = P.lodEdgeMinPx ?? 0.15;
2522
+ yield root;
2504
2523
  const trackVp = (r) => {
2505
2524
  const rt = r.getRenderTarget();
2506
2525
  const h = rt ? rt.height : r.getContext().drawingBufferHeight;
@@ -2569,9 +2588,11 @@ function buildLdrScene(insts, pack, P, color, mark) {
2569
2588
  }
2570
2589
  b.ids.push(i);
2571
2590
  });
2591
+ yield root;
2572
2592
  const steps = P.steps;
2573
2593
  let cull = P.cull ?? cullCore(insts, H, steps);
2574
2594
  mark("culling");
2595
+ yield root;
2575
2596
  const stepBatches = [];
2576
2597
  const stepBatched = [];
2577
2598
  const instM = steps ? new Float64Array(insts.length * 12) : null;
@@ -2714,6 +2735,7 @@ function buildLdrScene(insts, pack, P, color, mark) {
2714
2735
  };
2715
2736
  const coldByMat = new Map;
2716
2737
  for (const [, bucket] of byPart) {
2738
+ yield root;
2717
2739
  const part = bucket.part;
2718
2740
  const p = H.parts[part];
2719
2741
  const idsAll = bucket.ids;
@@ -2815,9 +2837,11 @@ function buildLdrScene(insts, pack, P, color, mark) {
2815
2837
  list.push({ part, p, mat, ids: idsAll });
2816
2838
  }
2817
2839
  }
2840
+ yield root;
2818
2841
  const tmpM = new THREE.Matrix4;
2819
2842
  const tmpC = new THREE.Color;
2820
2843
  for (const [mat, items] of coldByMat) {
2844
+ yield root;
2821
2845
  const entries = [];
2822
2846
  for (const it of items)
2823
2847
  for (const id of it.ids)
@@ -3060,13 +3084,24 @@ function buildLdrScene(insts, pack, P, color, mark) {
3060
3084
  }
3061
3085
  }
3062
3086
  }
3063
- const sMesh = buildStudMeshes(insts, H, cull, arr, LOD, color, (c, mirror) => materialFor(c, mirror, false), steps, steps && colorIndex);
3087
+ yield root;
3088
+ const _studGen = buildStudMeshesGen(insts, H, cull, arr, LOD, color, (c, mirror) => materialFor(c, mirror, false), steps, steps && colorIndex);
3089
+ let _studR = _studGen.next();
3090
+ while (!_studR.done) {
3091
+ yield root;
3092
+ _studR = _studGen.next();
3093
+ }
3094
+ const sMesh = _studR.value;
3064
3095
  const sKind = sMesh.map((x) => x?.kind ?? "");
3065
3096
  const sVis = sMesh.map((x) => x?.vis ?? 0);
3066
3097
  const STUD_ERR = 12;
3067
- sMesh.forEach((sm, ci) => {
3098
+ let _coopS = 0;
3099
+ for (let ci = 0;ci < sMesh.length; ci++) {
3100
+ const sm = sMesh[ci];
3068
3101
  if (!sm)
3069
- return;
3102
+ continue;
3103
+ if ((++_coopS & 3) === 0)
3104
+ yield root;
3070
3105
  const im = sm.im;
3071
3106
  const kind = sKind[ci];
3072
3107
  const k = H.studKinds[kind];
@@ -3095,7 +3130,8 @@ function buildLdrScene(insts, pack, P, color, mark) {
3095
3130
  toggles.push({ mesh: countTo(() => objs), all: trim ? vis : all, visible: vis, flag: "studs" });
3096
3131
  if (sm.slots)
3097
3132
  stepBatches.push({ im, objs, flag: "studs", ...sm.slots });
3098
- });
3133
+ }
3134
+ yield root;
3099
3135
  stats.uncertParts = Object.values(H.parts).filter((x) => x.uncert).length;
3100
3136
  stats.uncertBatches = nUncert;
3101
3137
  let condOn = true, edgesOn = true;
@@ -3261,6 +3297,37 @@ function buildLdrScene(insts, pack, P, color, mark) {
3261
3297
  byPart.clear();
3262
3298
  return { root, stats, setCull, setSide, setEdges, setCond, setLod, setStep, box, texturesReady, trimmed };
3263
3299
  }
3300
+ function buildLdrScene(insts, pack, P, color, mark) {
3301
+ const g = buildLdrSceneGen(insts, pack, P, color, mark);
3302
+ let r = g.next();
3303
+ while (!r.done)
3304
+ r = g.next();
3305
+ return r.value;
3306
+ }
3307
+ async function buildLdrSceneAsync(insts, pack, P, color, mark, opts = {}) {
3308
+ const sliceMs = opts.sliceMs ?? 8;
3309
+ const g = buildLdrSceneGen(insts, pack, P, color, mark);
3310
+ let r = g.next();
3311
+ let sliceStart = performance.now();
3312
+ let longestSliceMs = 0;
3313
+ let yields = 0;
3314
+ while (!r.done) {
3315
+ const now = performance.now();
3316
+ if (now - sliceStart >= sliceMs) {
3317
+ longestSliceMs = Math.max(longestSliceMs, now - sliceStart);
3318
+ yields++;
3319
+ if (opts.onSlice)
3320
+ await opts.onSlice(r.value);
3321
+ await new Promise((res) => setTimeout(res, 0));
3322
+ sliceStart = performance.now();
3323
+ }
3324
+ r = g.next();
3325
+ }
3326
+ longestSliceMs = Math.max(longestSliceMs, performance.now() - sliceStart);
3327
+ const value = r.value;
3328
+ value.stats = { ...value.stats, longestSliceMs: +longestSliceMs.toFixed(2), buildYields: yields };
3329
+ return value;
3330
+ }
3264
3331
  async function warmPackGeometry(pack, stop = () => false, sliceMs = 8) {
3265
3332
  const { header: H, arr } = pack;
3266
3333
  const list = [];
@@ -3283,7 +3350,7 @@ async function warmPackGeometry(pack, stop = () => false, sliceMs = 8) {
3283
3350
  await new Promise((r) => setTimeout(r, 0));
3284
3351
  }
3285
3352
  }
3286
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/scene.ts
3353
+ // ../../../../../../../tmp/ldr-build-MHOtAg/src/scene.ts
3287
3354
  import * as THREE2 from "three";
3288
3355
  function colorFn(src, pack, fallback) {
3289
3356
  const table = new Map;
@@ -3343,6 +3410,12 @@ function toPlastic(old) {
3343
3410
  return m;
3344
3411
  }
3345
3412
  function createLdrObject(instances, pack, options = {}) {
3413
+ return createLdrObjectInner(instances, pack, options, false);
3414
+ }
3415
+ async function createLdrObjectAsync(instances, pack, options = {}) {
3416
+ return createLdrObjectInner(instances, pack, options, true);
3417
+ }
3418
+ function createLdrObjectInner(instances, pack, options, progressive) {
3346
3419
  const o = { edges: true, conditionalLines: true, cullStuds: true, cullUndersides: true, side: "front", material: "plastic", ...options };
3347
3420
  const color = colorFn(o.colors, pack, new THREE2.Color(o.fallbackColor ?? 10528169));
3348
3421
  const useTex = o.textures !== false;
@@ -3384,9 +3457,9 @@ function createLdrObject(instances, pack, options = {}) {
3384
3457
  };
3385
3458
  const multiStep = uniq.length > 1;
3386
3459
  const drawnAt = (step, mask) => all.filter((i, k) => (step == null || stepOf[k] <= step) && (!mask || mask[k]) && pack.header.parts[i.part]).length;
3387
- const build = () => {
3388
- const t0 = performance.now();
3389
- cur = buildLdrScene(all, pack, { cullStuds: cs, cullUnder: cu, edges: o.edges, side, cond: o.conditionalLines, condStuds: o.conditionalStudLines !== false, tex: o.textures !== false, lod: o.lod !== false, lodPx: o.lodPx, lodEdgePx: o.lodEdgePx, lodEdgeMinPx: o.lodEdgeMinPx, lodUnder: o.lodUnder, steps: multiStep ? stepOf : undefined, cull: o.precomputedCull }, color, () => {});
3460
+ const sceneOpts = () => ({ cullStuds: cs, cullUnder: cu, edges: o.edges, side, cond: o.conditionalLines, condStuds: o.conditionalStudLines !== false, tex: o.textures !== false, lod: o.lod !== false, lodPx: o.lodPx, lodEdgePx: o.lodEdgePx, lodEdgeMinPx: o.lodEdgeMinPx, lodUnder: o.lodUnder, steps: multiStep ? stepOf : undefined, cull: o.precomputedCull });
3461
+ const applyBuilt = (built, t0) => {
3462
+ cur = built;
3390
3463
  pairs.clear();
3391
3464
  if (o.material === "plastic")
3392
3465
  cur.root.traverse((x) => {
@@ -3405,8 +3478,9 @@ function createLdrObject(instances, pack, options = {}) {
3405
3478
  cur.setCond(false);
3406
3479
  if (!lodOn)
3407
3480
  cur.setLod(false);
3408
- object.add(cur.root);
3409
- Object.assign(stats, { drawn: drawnAt(null), studsTotal: cur.stats.studsTotal, studsHidden: cur.stats.studsHidden, undersTotal: cur.stats.undersTotal, undersHidden: cur.stats.undersHidden, condBatches: cur.stats.condBatches ?? 0, texBatches: cur.stats.texBatches ?? 0, textures: cur.stats.textures ?? 0, clusters: cur.stats.clusters ?? 0, buildMs: performance.now() - t0 });
3481
+ if (cur.root.parent !== object)
3482
+ object.add(cur.root);
3483
+ Object.assign(stats, { drawn: drawnAt(null), studsTotal: cur.stats.studsTotal, studsHidden: cur.stats.studsHidden, undersTotal: cur.stats.undersTotal, undersHidden: cur.stats.undersHidden, condBatches: cur.stats.condBatches ?? 0, texBatches: cur.stats.texBatches ?? 0, textures: cur.stats.textures ?? 0, clusters: cur.stats.clusters ?? 0, longestSliceMs: cur.stats.longestSliceMs, buildYields: cur.stats.buildYields, buildMs: performance.now() - t0 });
3410
3484
  api.texturesReady = cur.texturesReady;
3411
3485
  };
3412
3486
  const setStep = (step, mask = null) => {
@@ -3416,63 +3490,86 @@ function createLdrObject(instances, pack, options = {}) {
3416
3490
  Object.assign(stats, cur.setStep(step, mask), { drawn: drawnAt(step, mask), buildMs: performance.now() - t0 });
3417
3491
  };
3418
3492
  const api = { texturesReady: Promise.resolve() };
3419
- build();
3420
- if (o.step != null)
3421
- setStep(o.step);
3422
- return Object.assign(api, {
3423
- object,
3424
- stats,
3425
- stepCount: uniq.length,
3426
- stepViews,
3427
- setStep,
3428
- setEdges: (v) => {
3429
- edges = v;
3430
- cur.setEdges(v);
3431
- },
3432
- setConditionalLines: (v) => {
3433
- cond = v;
3434
- cur.setCond(v);
3435
- },
3436
- setCulling: (a, b) => {
3437
- cs = a;
3438
- cu = b;
3439
- if (!a && cur.trimmed.studs || !b && cur.trimmed.under) {
3440
- disposeCur();
3441
- build();
3442
- } else
3443
- cur.setCull(a, b);
3444
- },
3445
- setLod: (v) => {
3446
- lodOn = v;
3447
- cur.setLod(v);
3448
- },
3449
- setSide: (s) => {
3450
- side = s;
3451
- cur.setSide(s === "front");
3452
- for (const [p, old] of pairs) {
3453
- p.side = old.side;
3454
- p.needsUpdate = true;
3455
- }
3456
- },
3457
- getBox: (target = new THREE2.Box3) => {
3458
- object.updateMatrixWorld(true);
3459
- target.makeEmpty();
3460
- object.traverse((x) => {
3461
- if (x.isInstancedMesh && x.count && !x.userData.ldrLod) {
3462
- x.computeBoundingBox();
3463
- const b = x.boundingBox.clone().applyMatrix4(x.matrixWorld);
3464
- target.union(b);
3493
+ const finish = () => {
3494
+ if (o.step != null)
3495
+ setStep(o.step);
3496
+ return Object.assign(api, {
3497
+ object,
3498
+ stats,
3499
+ stepCount: uniq.length,
3500
+ stepViews,
3501
+ setStep,
3502
+ setEdges: (v) => {
3503
+ edges = v;
3504
+ cur.setEdges(v);
3505
+ },
3506
+ setConditionalLines: (v) => {
3507
+ cond = v;
3508
+ cur.setCond(v);
3509
+ },
3510
+ setCulling: (a, b) => {
3511
+ cs = a;
3512
+ cu = b;
3513
+ if (!a && cur.trimmed.studs || !b && cur.trimmed.under) {
3514
+ disposeCur();
3515
+ const t0 = performance.now();
3516
+ applyBuilt(buildLdrScene(all, pack, sceneOpts(), color, () => {}), t0);
3517
+ } else
3518
+ cur.setCull(a, b);
3519
+ },
3520
+ setLod: (v) => {
3521
+ lodOn = v;
3522
+ cur.setLod(v);
3523
+ },
3524
+ setSide: (s) => {
3525
+ side = s;
3526
+ cur.setSide(s === "front");
3527
+ for (const [p, old] of pairs) {
3528
+ p.side = old.side;
3529
+ p.needsUpdate = true;
3465
3530
  }
3466
- });
3467
- return target;
3468
- },
3469
- dispose: disposeCur
3470
- });
3531
+ },
3532
+ getBox: (target = new THREE2.Box3) => {
3533
+ object.updateMatrixWorld(true);
3534
+ target.makeEmpty();
3535
+ object.traverse((x) => {
3536
+ if (x.isInstancedMesh && x.count && !x.userData.ldrLod) {
3537
+ x.computeBoundingBox();
3538
+ const b = x.boundingBox.clone().applyMatrix4(x.matrixWorld);
3539
+ target.union(b);
3540
+ }
3541
+ });
3542
+ return target;
3543
+ },
3544
+ dispose: disposeCur
3545
+ });
3546
+ };
3547
+ if (!progressive) {
3548
+ const t0 = performance.now();
3549
+ applyBuilt(buildLdrScene(all, pack, sceneOpts(), color, () => {}), t0);
3550
+ return finish();
3551
+ }
3552
+ return (async () => {
3553
+ const t0 = performance.now();
3554
+ const so = sceneOpts();
3555
+ if (!so.cull)
3556
+ so.cull = cullCore(all, pack.header, so.steps);
3557
+ const built = await buildLdrSceneAsync(all, pack, so, color, () => {}, {
3558
+ sliceMs: o.sliceMs,
3559
+ onSlice: async (root) => {
3560
+ if (root.parent !== object)
3561
+ object.add(root);
3562
+ await o.onSlice?.();
3563
+ }
3564
+ });
3565
+ applyBuilt(built, t0);
3566
+ return finish();
3567
+ })();
3471
3568
  }
3472
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/parts-cdn.ts
3569
+ // ../../../../../../../tmp/ldr-build-MHOtAg/src/parts-cdn.ts
3473
3570
  import { decompress as decompress2 } from "fzstd";
3474
3571
 
3475
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/embedded.ts
3572
+ // ../../../../../../../tmp/ldr-build-MHOtAg/src/embedded.ts
3476
3573
  function splitFiles(text, fallback) {
3477
3574
  const files = new Map;
3478
3575
  let cur = null, saw = false;
@@ -3544,7 +3641,7 @@ function embeddedKeys(text, names, fallback = "main.ldr") {
3544
3641
  return out;
3545
3642
  }
3546
3643
 
3547
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/parts-cdn.ts
3644
+ // ../../../../../../../tmp/ldr-build-MHOtAg/src/parts-cdn.ts
3548
3645
  var DEFAULT_PARTS_CDN = "https://ldr-demo.vercel.app/cdn/v1/";
3549
3646
  var indexCache = new Map;
3550
3647
  var shardCache = new Map;
@@ -3704,10 +3801,10 @@ async function prepareModel(source, o = {}) {
3704
3801
  return { insts, pack, missing, requests, bytes, cull, timings: { fetchModel: t1 - t0, parse: t2 - t1, parts: t3 - t2, ...cull ? { cull: performance.now() - t3 } : {} } };
3705
3802
  }
3706
3803
 
3707
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/load-worker.gen.ts
3804
+ // ../../../../../../../tmp/ldr-build-MHOtAg/src/load-worker.gen.ts
3708
3805
  var load_worker_gen_default = 'var ht=ArrayBuffer,W=Uint8Array,ge=Uint16Array,gt=Int16Array;var be=Int32Array,Ce=function(e,t,n){if(W.prototype.slice)return W.prototype.slice.call(e,t,n);if(t==null||t<0)t=0;if(n==null||n>e.length)n=e.length;var r=new W(n-t);return r.set(e.subarray(t,n)),r},ce=function(e,t,n,r){if(W.prototype.fill)return W.prototype.fill.call(e,t,n,r);if(n==null||n<0)n=0;if(r==null||r>e.length)r=e.length;for(;n<r;++n)e[n]=t;return e},bt=function(e,t,n,r){if(W.prototype.copyWithin)return W.prototype.copyWithin.call(e,t,n,r);if(n==null||n<0)n=0;if(r==null||r>e.length)r=e.length;while(n<r)e[t++]=e[n++]};var dt=["invalid zstd data","window size too large (>2046MB)","invalid block type","FSE accuracy too high","match distance too far back","unexpected EOF"],K=function(e,t,n){var r=Error(t||dt[e]);if(r.code=e,Error.captureStackTrace)Error.captureStackTrace(r,K);if(!n)throw r;return r},Be=function(e,t,n){var r=0,s=0;for(;r<n;++r)s|=e[t++]<<(r<<3);return s},xt=function(e,t){return(e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24)>>>0},yt=function(e,t){var n=e[0]|e[1]<<8|e[2]<<16;if(n==3126568&&e[3]==253){var r=e[4],s=r>>5&1,o=r>>2&1,i=r&3,l=r>>6;if(r&8)K(0);var a=6-s,c=i==3?4:i,p=Be(e,a,c);a+=c;var m=l?1<<l:s,h=Be(e,a,m)+(l==1&&256),d=h;if(!s){var C=1<<10+(e[5]>>3);d=C+(C>>3)*(e[5]&7)}if(d>2145386496)K(1);var u=new W((t==1?h||d:t?0:d)+12);return u[0]=1,u[4]=4,u[8]=8,{b:a+m,y:0,l:0,d:p,w:t&&t!=1?t:u.subarray(12),e:d,o:new be(u.buffer,0,3),u:h,c:o,m:Math.min(131072,d)}}else if((n>>4|e[3]<<20)==25481893)return xt(e,4)+8;K(0)},re=function(e){var t=0;for(;1<<t<=e;++t);return t-1},ue=function(e,t,n){var r=(t<<3)+4,s=(e[t]&15)+5;if(s>n)K(3);var o=1<<s,i=o,l=-1,a=-1,c=-1,p=o,m=new ht(512+(o<<2)),h=new gt(m,0,256),d=new ge(m,0,256),C=new ge(m,512,o),u=512+(o<<1),b=new W(m,u,o),S=new W(m,u+o);while(l<255&&i>0){var g=re(i+1),f=r>>3,A=(1<<g+1)-1,z=(e[f]|e[f+1]<<8|e[f+2]<<16)>>(r&7)&A,x=(1<<g)-1,M=A-i-1,L=z&x;if(L<M)r+=g,z=L;else if(r+=g+1,z>x)z-=M;if(h[++l]=--z,z==-1)i+=z,b[--p]=l;else i-=z;if(!z)do{var D=r>>3;a=(e[D]|e[D+1]<<8)>>(r&7)&3,r+=2,l+=a}while(a==3)}if(l>255||i)K(0);var E=0,U=(o>>1)+(o>>3)+3,X=o-1;for(var H=0;H<=l;++H){var v=h[H];if(v<1){d[H]=-v;continue}for(c=0;c<v;++c){b[E]=H;do E=E+U&X;while(E>=p)}}if(E)K(0);for(c=0;c<o;++c){var w=d[b[c]]++,P=S[c]=s-re(w);C[c]=(w<<P)-o}return[r+7>>3,{b:s,s:b,n:S,t:C}]},wt=function(e,t){var n=0,r=-1,s=new W(292),o=e[t],i=s.subarray(0,256),l=s.subarray(256,268),a=new ge(s.buffer,268);if(o<128){var c=ue(e,t+1,6),p=c[0],m=c[1];t+=o;var h=p<<3,d=e[t];if(!d)K(0);var C=0,u=0,b=m.b,S=b,g=(++t<<3)-8+re(d);for(;;){if(g-=b,g<h)break;var f=g>>3;if(C+=(e[f]|e[f+1]<<8)>>(g&7)&(1<<b)-1,i[++r]=m.s[C],g-=S,g<h)break;f=g>>3,u+=(e[f]|e[f+1]<<8)>>(g&7)&(1<<S)-1,i[++r]=m.s[u],b=m.n[C],C=m.t[C],S=m.n[u],u=m.t[u]}if(++r>255)K(0)}else{r=o-127;for(;n<r;n+=2){var A=e[++t];i[n]=A>>4,i[n+1]=A&15}++t}var z=0;for(n=0;n<r;++n){var x=i[n];if(x>11)K(0);z+=x&&1<<x-1}var M=re(z)+1,L=1<<M,D=L-z;if(D&D-1)K(0);i[r++]=re(D)+1;for(n=0;n<r;++n){var x=i[n];++l[i[n]=x&&M+1-x]}var E=new W(L<<1),U=E.subarray(0,L),X=E.subarray(L);a[M]=0;for(n=M;n>0;--n){var H=a[n];ce(X,n,H,a[n-1]=H+l[n]*(1<<M-n))}if(a[0]!=L)K(0);for(n=0;n<r;++n){var v=i[n];if(v){var w=a[v];ce(U,n,w,a[v]=w+(1<<M-v))}}return[t,{n:X,b:M,s:U}]},At=ue(new W([81,16,99,140,49,198,24,99,12,33,196,24,99,102,102,134,70,146,4]),0,6)[1],vt=ue(new W([33,20,196,24,99,140,33,132,16,66,8,33,132,16,66,8,33,68,68,68,68,68,68,68,68,36,9]),0,6)[1],Mt=ue(new W([32,132,16,66,102,70,68,68,68,68,36,73,2]),0,5)[1],$e=function(e,t){var n=e.length,r=new be(n);for(var s=0;s<n;++s)r[s]=t,t+=1<<e[s];return r},Ee=new W(new be([0,0,0,0,16843009,50528770,134678020,202050057,269422093]).buffer,0,36),Ct=$e(Ee,0),Se=new W(new be([0,0,0,0,0,0,0,0,16843009,50528770,117769220,185207048,252579084,16]).buffer,0,53),Et=$e(Se,3),le=function(e,t,n){var r=e.length,s=t.length,o=e[r-1],i=(1<<n.b)-1,l=-n.b;if(!o)K(0);var a=0,c=n.b,p=(r<<3)-8+re(o)-c,m=-1;for(;p>l&&m<s;){var h=p>>3,d=(e[h]|e[h+1]<<8|e[h+2]<<16)>>(p&7);a=(a<<c|d)&i,t[++m]=n.s[a],p-=c=n.n[a]}if(p!=l||m+1!=s)K(0)},St=function(e,t,n){var r=6,s=t.length,o=s+3>>2,i=o<<1,l=o+i;le(e.subarray(r,r+=e[0]|e[1]<<8),t.subarray(0,o),n),le(e.subarray(r,r+=e[2]|e[3]<<8),t.subarray(o,i),n),le(e.subarray(r,r+=e[4]|e[5]<<8),t.subarray(i,l),n),le(e.subarray(r),t.subarray(l),n)},Lt=function(e,t,n){var r,s=t.b,o=e[s],i=o>>1&3;t.l=o&1;var l=o>>3|e[s+1]<<5|e[s+2]<<13,a=(s+=3)+l;if(i==1){if(s>=e.length)return;if(t.b=s+1,n)return ce(n,e[s],t.y,t.y+=l),n;return ce(new W(l),e[s])}if(a>e.length)return;if(i==0){if(t.b=a,n)return n.set(e.subarray(s,a),t.y),t.y+=l,n;return Ce(e,s,a)}if(i==2){var c=e[s],p=c&3,m=c>>2&3,h=c>>4,d=0,C=0;if(p<2)if(m&1)h|=e[++s]<<4|(m&2&&e[++s]<<12);else h=c>>3;else if(C=m,m<2)h|=(e[++s]&63)<<4,d=e[s]>>6|e[++s]<<2;else if(m==2)h|=e[++s]<<4|(e[++s]&3)<<12,d=e[s]>>2|e[++s]<<6;else h|=e[++s]<<4|(e[++s]&63)<<12,d=e[s]>>6|e[++s]<<2|e[++s]<<10;++s;var u=n?n.subarray(t.y,t.y+t.m):new W(t.m),b=u.length-h;if(p==0)u.set(e.subarray(s,s+=h),b);else if(p==1)ce(u,e[s++],b);else{var S=t.h;if(p==2){var g=wt(e,s);d+=s-(s=g[0]),t.h=S=g[1]}else if(!S)K(0);(C?St:le)(e.subarray(s,s+=d),u.subarray(b),S)}var f=e[s++];if(f){if(f==255)f=(e[s++]|e[s++]<<8)+32512;else if(f>127)f=f-128<<8|e[s++];var A=e[s++];if(A&3)K(0);var z=[vt,Mt,At];for(var x=2;x>-1;--x){var M=A>>(x<<1)+2&3;if(M==1){var L=new W([0,0,e[s++]]);z[x]={s:L.subarray(2,3),n:L.subarray(0,1),t:new ge(L.buffer,0,1),b:0}}else if(M==2)r=ue(e,s,9-(x&1)),s=r[0],z[x]=r[1];else if(M==3){if(!t.t)K(0);z[x]=t.t[x]}}var D=t.t=z,E=D[0],U=D[1],X=D[2],H=e[a-1];if(!H)K(0);var v=(a<<3)-8+re(H)-X.b,w=v>>3,P=0,V=(e[w]|e[w+1]<<8)>>(v&7)&(1<<X.b)-1;w=(v-=U.b)>>3;var I=(e[w]|e[w+1]<<8)>>(v&7)&(1<<U.b)-1;w=(v-=E.b)>>3;var B=(e[w]|e[w+1]<<8)>>(v&7)&(1<<E.b)-1;for(++f;--f;){var T=X.s[V],y=X.n[V],N=E.s[B],R=E.n[B],k=U.s[I],O=U.n[I];w=(v-=k)>>3;var j=1<<k,F=j+((e[w]|e[w+1]<<8|e[w+2]<<16|e[w+3]<<24)>>>(v&7)&j-1);w=(v-=Se[N])>>3;var G=Et[N]+((e[w]|e[w+1]<<8|e[w+2]<<16)>>(v&7)&(1<<Se[N])-1);w=(v-=Ee[T])>>3;var _=Ct[T]+((e[w]|e[w+1]<<8|e[w+2]<<16)>>(v&7)&(1<<Ee[T])-1);if(w=(v-=y)>>3,V=X.t[V]+((e[w]|e[w+1]<<8)>>(v&7)&(1<<y)-1),w=(v-=R)>>3,B=E.t[B]+((e[w]|e[w+1]<<8)>>(v&7)&(1<<R)-1),w=(v-=O)>>3,I=U.t[I]+((e[w]|e[w+1]<<8)>>(v&7)&(1<<O)-1),F>3)t.o[2]=t.o[1],t.o[1]=t.o[0],t.o[0]=F-=3;else{var Z=F-(_!=0);if(Z){if(F=Z==3?t.o[0]-1:t.o[Z],Z>1)t.o[2]=t.o[1];t.o[1]=t.o[0],t.o[0]=F}else F=t.o[0]}for(var x=0;x<_;++x)u[P+x]=u[b+x];P+=_,b+=_;var q=P-F;if(q<0){var J=-q,ee=t.e+q;if(J>G)J=G;for(var x=0;x<J;++x)u[P+x]=t.w[ee+x];P+=J,G-=J,q=0}for(var x=0;x<G;++x)u[P+x]=u[q+x];P+=G}if(P!=b)while(b<u.length)u[P++]=u[b++];else P=u.length;if(n)t.y+=P;else u=Ce(u,0,P)}else if(n){if(t.y+=h,b)for(var x=0;x<h;++x)u[x]=u[b+x]}else if(b)u=Ce(u,b);return t.b=a,u}K(2)},Tt=function(e,t){if(e.length==1)return e[0];var n=new W(t);for(var r=0,s=0;r<e.length;++r){var o=e[r];n.set(o,s),s+=o.length}return n};function je(e,t){var n=[],r=+!t,s=0,o=0;for(;e.length;){var i=yt(e,r||t);if(typeof i=="object"){if(r){if(t=null,i.w.length==i.u)n.push(t=i.w),o+=i.u}else n.push(t),i.e=0;for(;!i.l;){var l=Lt(e,i,t);if(!l)K(5);if(t)i.e=i.y;else n.push(l),o+=l.length,bt(i.w,0,l.length),i.w.set(l,i.w.length-l.length)}s=i.b+i.c*4}else s=i;e=e.subarray(s)}return Tt(n,o)}function de(e){let t=new DataView(e).getUint32(0,!0),n=JSON.parse(new TextDecoder().decode(new Uint8Array(e,4,t))),r=4+t;return{header:n,arr:(o)=>o&&(o[2]==="f32"?new Float32Array(e,r+o[0],o[1]):o[2]==="u16"?new Uint16Array(e,r+o[0],o[1]):o[2]==="u8"?new Uint8Array(e,r+o[0],o[1]):new Uint32Array(e,r+o[0],o[1])),bytes:e.byteLength,buffer:e}}var Y=(e)=>e.trim().toLowerCase().replace(/\\\\/g,"/").replace(/\\/+/g,"/");function Le(e){if(/^0x/i.test(e))return parseInt(e,16);return+e}var Ve=/^~?\\s*moved\\s+to\\s+(.+)$/i,Pt=new Set(["FILE","NOFILE","!DATA","!:","STEP","BFC","ROTSTEP","BUFEXCHG","!TEXMAP"]),Ye=new Set(["part","subpart","primitive","8_primitive","48_primitive","shortcut","helper"]),It=new Set(["model","submodel","configuration"]),Ft=/^(?:!?LDRAW_ORG|Unofficial|Official\\s+LCAD)\\s+(\\S+)/i;function He(e){let t=Ft.exec(e);if(!t)return;let n=t[1].toLowerCase().replace(/^unofficial_/,"");return Ye.has(n)||It.has(n)?n:void 0}function Rt(e){let t=[],n=0;while(n<e.length){while(e[n]===" "||e[n]==="\\t")n++;if(n>=e.length)break;if(e[n]===\'"\'){let r="";n++;while(n<e.length&&e[n]!==\'"\'){if(e[n]==="\\\\"&&n+1<e.length)n++;r+=e[n++]}n++,t.push(r)}else{let r=n;while(r<e.length&&e[r]!==" "&&e[r]!=="\\t")r++;t.push(e.slice(n,r)),n=r}}return t}function kt(e,t=!1){let n=/^\\s*(\\S+)\\s+(.*)$/.exec(e);if(!n)return null;let r=n[1].toUpperCase(),s=r==="PLANAR"?9:r==="CYLINDRICAL"?10:r==="SPHERICAL"?11:0;if(!s)return null;let o=n[2].trim().split(/\\s+/);if(o.length<s+1)return null;let i=o.slice(0,s).map(Number);if(!i.every(Number.isFinite))return null;let l=n[2].trim();for(let m=0;m<s;m++)l=l.replace(/^\\S+\\s*/,"");let a=Rt(l);if(!a.length)return null;let c={method:r,p1:i.slice(0,3),p2:i.slice(3,6),p3:i.slice(6,9),texture:a[0]};if(s>=10)c.a=i[9];if(s===11)c.b=i[10];let p=a.findIndex((m,h)=>h>0&&m.toUpperCase()==="GLOSSMAP");if(p>0&&a[p+1])c.glossmap=a[p+1];if(t)c.next=!0;return c}var Dt=(e)=>{let t=e.replace(/[^A-Za-z0-9+/]/g,""),n=t+"=".repeat((4-t.length%4)%4),r=atob(n),s=new Uint8Array(r.length);for(let o=0;o<r.length;o++)s[o]=r.charCodeAt(o);return s};function Ut(e){let t=e.length,n=1,r=(c)=>c===32||c===9,s=()=>{while(n<t&&r(e.charCodeAt(n)))n++;let c=n;while(n<t&&!r(e.charCodeAt(n)))n++;return c<n?e.slice(c,n):null},o=s();if(o===null)return null;let i=Array(12);for(let c=0;c<12;c++){let p=s();if(p===null)return null;i[c]=+p}while(n<t&&r(e.charCodeAt(n)))n++;if(n>=t)return null;let l=e.slice(n),a=/[ \\t]{2,}|\\t/.test(l)?l.split(/\\s+/).join(" "):l;return{t:1,color:Le(o),m:i,file:Y(a)}}function Ge(e){let t=+e[0];if(!(t>=1&&t<=5)||e.length<2)return null;let n=Le(e[1]),r=e.slice(2).map(Number);if(t===1)return{t:1,color:n,m:r.slice(0,12),file:Y(e.slice(14).join(" "))};if(t===2)return{t:2,color:n,p:r.slice(0,6)};if(t===3)return{t:3,color:n,p:r.slice(0,9)};if(t===4)return{t:4,color:n,p:r.slice(0,12)};return{t:5,color:n,p:r.slice(0,12)}}function Je(e,t="main.ldr",n={}){let r=!!n.geometryText,s=new Map,o=null,i="",l,a=null,c=[],p=null,m=()=>{if(!a)return;let g=Dt(a.chunks.join("")),f=g[0]===137&&g[1]===80&&g[2]===78&&g[3]===71;(l??=new Map).set(Y(a.name),{name:a.name,bytes:g,...f?{mime:"image/png"}:{}}),a=null},h=!0,d=(g)=>{if(m(),o={name:Y(g),cmds:[]},s.set(o.name,o),!i)i=o.name;c=[],p=null,h=!0},C=!1,u=!1,b=()=>{if(u)return;u=!0,s.clear(),o=null,i=""},S=(g,f)=>{if(p){g.tex=p,p=null;return}let A=c[c.length-1];if(!A)return;if(A.fallback){if(!f)g.fallback=!0}else g.tex=A.map};for(let g of e.split(`\n`)){let f=g.trim();if(!f)continue;if(r&&f.charCodeAt(0)>=50&&f.charCodeAt(0)<=53&&(f.charCodeAt(1)===32||f.charCodeAt(1)===9)){if(a||C)continue;if(!o)d(t);let M=f.slice(2).trimStart(),L=M.search(/\\s/),D={t:f.charCodeAt(0)-48,color:Le(L<0?M:M.slice(0,L)),p:[],src:f};S(D,!1),o.cmds.push(D),h=!1;continue}if(f.charCodeAt(0)===48&&(f.charCodeAt(1)===32||f.charCodeAt(1)===9)){let M=2;while(f.charCodeAt(M)===32||f.charCodeAt(M)===9)M++;let L=M;while(L<f.length&&f.charCodeAt(L)!==32&&f.charCodeAt(L)!==9)L++;let D=f.slice(M,L);if(!Pt.has(D)){if(C||a)continue;if(!o)d(t);let E=f.slice(M),U={t:0,text:E};if(D.charCodeAt(0)===33)U.meta=D;if(p=null,h&&!o.org){let H=He(E);if(H)o.org=H}let X=E.match(Ve);if(X&&!o.movedTo){let H=X[1].trim().replace(/\\\\/g,"/");if(!/\\.(dat|ldr|mpd)$/i.test(H))H+=".dat";o.movedTo=Y(H)}o.cmds.push(U);continue}}if(f.charCodeAt(0)===49&&(f.charCodeAt(1)===32||f.charCodeAt(1)===9)&&!a&&!C){let M=Ut(f);if(M){if(!o)d(t);S(M,!1),o.cmds.push(M),h=!1;continue}}let A=f.split(/\\s+/);if(+A[0]===0){let M=f.slice(1).trim();if(A[1]==="FILE"){b(),C=!1,d(M.slice(5));continue}if(A[1]==="NOFILE"){m(),o=null,C=!0;continue}if(A[1]==="!DATA"){b(),m(),o=null,C=!1,a={name:M.slice(5).trim(),chunks:[]};continue}if(C)continue;if(a){if(A[1]==="!:")a.chunks.push(A.slice(2).join(""));continue}if(!o)d(t);let L={t:0,text:M};if(A[1]==="STEP")L.step=!0,c=[],p=null;else if(A[1]==="BFC")L.bfc=A.slice(2).join(" ");else if(A[1]==="ROTSTEP")if(L.meta="ROTSTEP",L.step=!0,c=[],p=null,(A[2]??"").toUpperCase()==="END")L.rotstep={x:0,y:0,z:0,mode:"END"};else{let E=(A[5]??"REL").toUpperCase();L.rotstep={x:+A[2]||0,y:+A[3]||0,z:+A[4]||0,mode:["REL","ABS","ADD"].includes(E)?E:"REL"}}else if(A[1]==="BUFEXCHG"){L.meta="BUFEXCHG";let E=(A[2]??"").toUpperCase();L.bufexchg={op:E==="RETRIEVE"?"RETRIEVE":"STORE",buf:A[3]??"A"}}else if(A[1]?.startsWith("!"))L.meta=A[1];if(h&&!o.org){let E=He(M);if(E)o.org=E}if(A[1]==="!TEXMAP"){let E=(A[2]??"").toUpperCase();if(p=null,E==="START"||E==="NEXT"){let U=kt(M.replace(/^!TEXMAP\\s+\\S+/i,""),E==="NEXT");if(L.texmap={op:E,...U?{map:U}:{}},U)if((o.texmaps??=[]).push(U),E==="START")c.push({map:U,fallback:!1});else p=U}else if(E==="FALLBACK"){L.texmap={op:E};let U=c[c.length-1];if(U)U.fallback=!0}else if(E==="END")L.texmap={op:E},c.pop()}else if(A[1]==="!:"){p=null;let E=Ge(A.slice(2));if(E)S(E,!0),L.geom=E}else p=null;let D=M.match(Ve);if(D&&!o.movedTo){let E=D[1].trim().replace(/\\\\/g,"/");if(!/\\.(dat|ldr|mpd)$/i.test(E))E+=".dat";o.movedTo=Y(E)}o.cmds.push(L);continue}if(a||C)continue;if(!o)d(t);let x=Ge(A);if(!x)continue;S(x,!1),o.cmds.push(x),h=!1}return m(),l?{main:i,files:s,data:l}:{main:i,files:s}}var tn=Math.PI/180;function qe(e,t){let n=(r)=>[t[3]*r[0]+t[4]*r[1]+t[5]*r[2]+t[0],t[6]*r[0]+t[7]*r[1]+t[8]*r[2]+t[1],t[9]*r[0]+t[10]*r[1]+t[11]*r[2]+t[2]];return{...e,p1:n(e.p1),p2:n(e.p2),p3:n(e.p3)}}function Qe(e,t){let[n,r,s,o,i,l,a,c,p,m,h,d]=e,[C,u,b,S,g,f,A,z,x,M,L,D]=t;return[o*C+i*u+l*b+n,a*C+c*u+p*b+r,m*C+h*u+d*b+s,o*S+i*A+l*M,o*g+i*z+l*L,o*f+i*x+l*D,a*S+c*A+p*M,a*g+c*z+p*L,a*f+c*x+p*D,m*S+h*A+d*M,m*g+h*z+d*L,m*f+h*x+d*D]}var Te=[0,0,0,1,0,0,0,1,0,0,0,1];var _e=new WeakMap,zt=/^(s|8|48)\\//;function Pe(e,t){let n=e.files.get(Y(t));if(!n)return"part";let r=_e.get(n);if(r)return r;if(n.org)r=Ye.has(n.org)?"part":"model";else if(n.name===e.main)r="model";else r=n.cmds.some((s)=>s.t>=2||s.t===0&&!!s.geom||s.t===1&&zt.test(s.file))?"part":"model";return _e.set(n,r),r}var We=new WeakMap;function et(e){let t=We.get(e);if(t)return t;t=[];let n=0;for(let r of e.cmds){if(r.t===0&&r.step){n++;continue}if((r.t>=2||r.t===0&&r.geom&&r.geom.t>=2)&&t[t.length-1]!==n)t.push(n)}return We.set(e,t),t}var Ke=(e)=>e>16777215?"0x"+e.toString(16).toUpperCase():String(e),Ot=(e)=>e.t===0?"0 "+e.text:e.t===1?`1 ${Ke(e.color)} ${e.m.join(" ")} ${e.file}`:e.src?e.src:`${e.t} ${Ke(e.color)} ${e.p.join(" ")}`,Ie=(e,t)=>`${Y(e)}#${t}`;function Nt(e,t){let n=[],r=0,s=(o)=>!!o&&o.t===0&&o.texmap?.op==="NEXT";for(let o of e.cmds){if(o.t===0){if(o.step){r++;continue}if(o.bfc!==void 0){n.push(o);continue}if(r!==t)continue;if(o.texmap)n.push(o);else if(o.geom){if(o.geom.t>=2)n.push(o);else if(s(n[n.length-1]))n.pop()}continue}if(r!==t)continue;if(o.t===1){if(s(n[n.length-1]))n.pop();continue}n.push(o)}return{name:Ie(e.name,t),cmds:n}}function tt(e,t){return[`0 ldr: own geometry of ${e.name}, step ${t}`,...Nt(e,t).cmds.map(Ot)].join(`\n`)+`\n`}function Bt(e){let t=2166136261;for(let n=0;n<e.length;n++)t^=e.charCodeAt(n),t=Math.imul(t,16777619);return(t>>>0).toString(16).padStart(8,"0")}function nt(e){let[t,n,r,s,o,i,l,a,c,p,m,h]=e,d=a*h-c*m,C=-(l*h-c*p),u=l*m-a*p,b=s*d+o*C+i*u;if(!Number.isFinite(b)||Math.abs(b)<0.000000000001)return null;let S=1/b,g=[d*S,-(o*h-i*m)*S,(o*c-i*a)*S,C*S,(s*h-i*p)*S,-(s*c-i*l)*S,u*S,-(s*m-o*p)*S,(s*a-o*l)*S];return[-(g[0]*t+g[1]*n+g[2]*r),-(g[3]*t+g[4]*n+g[5]*r),-(g[6]*t+g[7]*n+g[8]*r),...g]}var $t=(e)=>String(+e.toFixed(6)||0),Xe=(e)=>\'"\'+e.replace(/\\\\/g,"\\\\\\\\").replace(/"/g,"\\\\\\"")+\'"\';function rt(e,t){let n=[...t.p1,...t.p2,...t.p3,...t.method!=="PLANAR"?[t.a??360]:[],...t.method==="SPHERICAL"?[t.b??180]:[]].map($t).join(" "),r=`0 ldr: ${e} with a model-level !TEXMAP\n0 BFC CERTIFY CCW\n0 !TEXMAP START ${t.method} ${n} ${Xe(t.texture)}${t.glossmap?" GLOSSMAP "+Xe(t.glossmap):""}\n1 16 0 0 0 1 0 0 0 1 0 0 0 1 ${Y(e)}\n0 !TEXMAP END\n`;return{name:`${Y(e)}#tex-${Bt(r)}`,source:r}}var jt=(e,t)=>{let n=[,,,,,,,,,];for(let r=0;r<3;r++)for(let s=0;s<3;s++)n[r*3+s]=e[r*3]*t[s]+e[r*3+1]*t[3+s]+e[r*3+2]*t[6+s];return n};function Vt(e,t,n){let r=Math.PI/180,s=Math.sin(e*r),o=Math.cos(e*r),i=Math.sin(t*r),l=Math.cos(t*r),a=Math.sin(n*r),c=Math.cos(n*r);return[l*c,-l*a,i,o*a+s*i*c,o*c-s*i*a,-s*l,s*a-o*i*c,s*c+o*i*a,o*l]}var Ze=new WeakMap;function st(e){let t=Ze.get(e);if(t)return t;let n=[],r=null;for(let s of e.cmds){if(s.t!==0||!s.step)continue;let o=s.rotstep;if(o)if(o.mode==="END")r=null;else{let i=Vt(o.x,o.y,o.z);r=o.mode==="ABS"?{abs:!0,m:i,rotstep:o}:o.mode==="ADD"&&r?{abs:r.abs,m:jt(r.m,i),rotstep:o}:{abs:!1,m:i,rotstep:o}}n.push(r)}return n.push(r),Ze.set(e,n),n}var ot=999999,it=(e)=>e.map((t)=>String(t).padStart(6,"0")).join(".")+"~";function Ht(e,t={}){let n=[],r=t.maxDepth??64,s=t.looseGeometry!==!1,o=!!t.textures,i=!!t.callouts,l=new Map,a=0,c=(m,h)=>{let d=m.name+"#"+h,C=l.get(d);if(!C){let u;C=Object.assign(()=>u??=tt(m,h),{file:m,step:h}),l.set(d,C)}return C},p=(m,h,d,C,u,b,S,g,f=null,A=[],z=[])=>{let x=m.files.get(h);if(!x||S>r)return;let M=0,L=S>0?++a:0,D=i&&L?[...A,L]:A,E=i&&L?[...z,d]:z,U=i&&!f?new Map:null,X=-1,H=0,v=(T,y,N,R,k,O)=>{if(X!==M)X=M,H=0;let j=U?.get(M+"|"+y);if(j)return j.n++,p(T,T===m?y:T.main,N,R,u+"/"+y,[...k,ot],S+1,O,[...k,ot],D,E);let F=[...k,H++],G=n.length;p(T,T===m?y:T.main,N,R,u+"/"+y,F,S+1,O,f,D,E),U?.set(M+"|"+y,{n:1,from:G,to:n.length})},w=st(x),P=s?et(x):[],V=0,I=(T,y,N,R,k,O,j)=>{if(f)R=f;let F={part:T,color:y,m:N,step:R[0],steps:R,localStep:k,path:u};if(L){if(F.sub=L,i)F.subPath=D,F.subMats=E}if(O)F.embedded=!0;if(j){let _=rt(T,j);F.texPart=_.name,F.texSource=_.source}let G=w[k];if(G)F.view=G;return n.push(F),F},B=(T)=>{while(V<P.length&&P[V]<=T){let y=P[V++];I(Ie(x.name,y),C,d,[...b,y],y,!1,null).source=c(x,y)}};for(let T of x.cmds){if(T.t===0&&T.step){M++;continue}let y=T;if(y.t>=2||y.t===0&&y.geom&&y.geom.t>=2){B(M);continue}if(y.t===0)if(o&&y.geom?.t===1)y=y.geom;else continue;if(y.t!==1)continue;if(o&&y.fallback)continue;let N=y.color===16?C:y.color,R=Qe(d,y.m),k=[...b,M],O=o?y.tex??g:null,j=O?nt(y.m):null,F=O&&j?qe(O,j):null;if(m.files.has(y.file)){if(Pe(m,y.file)==="model"){v(m,y.file,R,N,k,F);continue}I(y.file,N,R,k,M,!0,F);continue}let G=t.resolveModel?.(y.file);if(G){v(G,y.file,R,N,k,F);continue}I(y.file,N,R,k,M,!1,F)}if(B(1/0),U){for(let T of U.values())if(T.n>1)for(let y=T.from;y<T.to;y++)n[y].mult??=T.n}};if(Pe(e,e.main)==="part"){if(e.files.get(e.main))n.push({part:e.main,color:16,m:[...Te],step:0,steps:[0],localStep:0,path:e.main,embedded:!0});return n}return p(e,e.main,Te,16,e.main,[],0,null),n}function at(e,t="main.ldr",n){return Ht(Je(e,t,{geometryText:!0}),n)}function Gt(e,t){let n=new Map,r=null,s=!1;for(let o of e.split(/\\r?\\n/)){let i=/^\\s*0\\s+FILE\\s+(.+)$/i.exec(o);if(i){if(!s)n.clear();s=!0,r=[],n.set(Y(i[1]),r);continue}if(/^\\s*0\\s+(NOFILE|!DATA)(\\s|$)/i.test(o)){if(!s)n.clear();s=!0,r=null;continue}if(!r){if(s)continue;r=[],n.set(Y(t),r)}let l=o.trim().replace(/\\s+/g," ");if(l)r.push(l)}return n}var _t=(e)=>{if(!e.startsWith("1 "))return null;let t=e.split(" ");return t.length>=15?Y(t.slice(14).join(" ")):null};function Wt(e){let t=2166136261,n=1523705862;for(let r=0;r<e.length;r++){let s=e.charCodeAt(r);t=Math.imul(t^s,16777619),n=Math.imul(n^s,16777629)^n>>>15}return(t>>>0).toString(16).padStart(8,"0")+(n>>>0).toString(16).padStart(8,"0")}function lt(e,t,n="main.ldr"){let r=Gt(e,n),s=new Map;for(let o of t){let i=Y(o);if(!r.has(i)||s.has(i))continue;let l=new Set([i]),a=[i];while(a.length)for(let p of r.get(a.pop())){let m=_t(p);if(m&&r.has(m)&&!l.has(m))l.add(m),a.push(m)}let c=[i,...[...l].filter((p)=>p!==i).sort()].map((p)=>"0 FILE "+(p===i?"":p)+`\n`+r.get(p).join(`\n`)).join(`\n`);s.set(i,`emb/${Wt(c)}.dat`)}return s}var ct=(e,t=0)=>Math.abs(e[t+7]-1)<0.001&&Math.abs(e[t+4])<0.001&&Math.abs(e[t+10])<0.001,ut=new WeakMap;function Fe(e,t){let n=ut.get(e);if(!n)ut.set(e,n=new Map);let r=n.get(t);if(r!==void 0)return r;let s=e.parts[t];if(!s)return n.set(t,null),null;let o=s.studs.length,i=new Float64Array(o*12),l=[],a=[];s.studs.forEach((h,d)=>{l.push(h[0]),a.push(h[1]);for(let C=0;C<12;C++)i[d*12+C]=h[2+C]});let c=null,p=0,m=0;if(s.mask){p=s.mask[0],m=s.mask[1];let h=s.mask[2];c=new Uint8Array(h.length);for(let d=0;d<h.length;d++)c[d]=h.charCodeAt(d)===49?1:0}return n.set(t,r={nStuds:o,studM:i,kind:l,color:a,mask:c,nx:p,nz:m}),r}var ie=1073741824;class Re{a;b;c;vals;used;mask;size=0;constructor(e=1024){let t=1024;while(t<e*2)t*=2;this.a=new Int32Array(t),this.b=new Int32Array(t),this.c=new Int32Array(t),this.vals=new Int32Array(t),this.used=new Uint8Array(t),this.mask=t-1}slot(e,t,n){let r=Math.imul(e,2654435761)^Math.imul(t,2246822507)^Math.imul(n,3266489909);return r^=r>>>15,r=Math.imul(r,739982445),r^=r>>>12,r&this.mask}get(e,t,n){let r=this.slot(e,t,n),s=this.used,o=this.a,i=this.b,l=this.c;for(;;){if(!s[r])return-1;if(o[r]===e&&i[r]===t&&l[r]===n)return this.vals[r];r=r+1&this.mask}}put(e,t,n,r){if((this.size+1)*2>this.used.length)this.grow();let s=this.slot(e,t,n),o=this.used,i=this.a,l=this.b,a=this.c;for(;;){if(!o[s])return o[s]=1,i[s]=e,l[s]=t,a[s]=n,this.vals[s]=r,this.size++,-1;if(i[s]===e&&l[s]===t&&a[s]===n){let c=this.vals[s];return this.vals[s]=r,c}s=s+1&this.mask}}grow(){let{a:e,b:t,c:n,vals:r,used:s}=this,o=s.length*2;this.a=new Int32Array(o),this.b=new Int32Array(o),this.c=new Int32Array(o),this.vals=new Int32Array(o),this.used=new Uint8Array(o),this.mask=o-1,this.size=0;for(let i=0;i<s.length;i++)if(s[i])this.put(e[i],t[i],n[i],r[i])}}var xe=(e,t,n)=>e>-ie&&e<ie&&t>-ie&&t<ie&&n>-ie&&n<ie,fe=2147483647;function Kt(e,t,n){let s=[],o=[],i=[],l=[],a=[],c=[],p=[],m=[],h=new Re(e.length*2),d=[],C=[];for(let v=0;v<e.length;v++){let w=e[v],P=w.m,V=t.parts[w.part];if(!V||!V.mask||!ct(P))continue;let I=V.bbox,B=1/0,T=-1/0,y=1/0,N=-1/0;for(let O=0;O<2;O++)for(let j=0;j<2;j++){let F=O?I[3]:I[0],G=j?I[5]:I[2],_=P[0]+P[3]*F+P[5]*G,Z=P[2]+P[9]*F+P[11]*G;if(_<B)B=_;if(_>T)T=_;if(Z<y)y=Z;if(Z>N)N=Z}let R=a.length;s.push(B),o.push(T),i.push(y),l.push(N),a.push(v),c.push(Fe(t,w.part)),p.push(I[0]),m.push(I[2]);let k=Math.round((P[1]+I[4])*2);for(let O=Math.floor(B/40);O<=Math.floor(T/40);O++)for(let j=Math.floor(y/40);j<=Math.floor(N/40);j++){if(!xe(k,O,j))continue;let F=C.length;C.push(R),d.push(h.put(k,O,j,F))}}let u=[0,5,-5,5,-5],b=[0,5,5,-5,-5],S=NaN,g=NaN,f=NaN,A=-1,z=(v,w,P,V)=>{let I=Math.round(w*2),B=Math.floor(v/40),T=Math.floor(P/40);if(!xe(I,B,T))return fe;let y=fe;if(I!==S||B!==g||T!==f)S=I,g=B,f=T,A=h.get(I,B,T);for(let N=A;N>=0;N=d[N]){let R=C[N];if(a[R]===V||!(v-6>=s[R]-0.5&&v+6<=o[R]+0.5&&P-6>=i[R]-0.5&&P+6<=l[R]+0.5))continue;let k=e[a[R]].m,O=c[R],j=p[R],F=m[R],G=v-k[0],_=w-k[1],Z=P-k[2],q=k[3]*G+k[6]*_+k[9]*Z,J=k[5]*G+k[8]*_+k[11]*Z,{nx:ee,nz:se,mask:ae}=O,oe=!0;for(let Q=0;Q<5;Q++){let te=Math.floor((q+u[Q]-j)/20),ne=Math.floor((J+b[Q]-F)/20);if(te<0||ne<0||te>=ee||ne>=se||ae[te*se+ne]!==1){oe=!1;break}}if(oe){if(!n)return 0;let Q=n[a[R]];if(Q<y)y=Q}}return y},x=0;for(let v of e){let w=Fe(t,v.part);if(w)x+=w.nStuds}let M=new Uint8Array(x),L=new Uint8Array(x),D=new Re(x),E=0,U=n?new Int32Array(x).fill(fe):void 0;for(let v=0,w=0;v<e.length;v++){let P=e[v],V=Fe(t,P.part);if(!V)continue;let I=P.m,B=V.studM,T=I[0],y=I[1],N=I[2],R=I[3],k=I[4],O=I[5],j=I[6],F=I[7],G=I[8],_=I[9],Z=I[10],q=I[11];for(let J=0;J<V.nStuds;J++,w++){let ee=J*12,se=B[ee+4],ae=B[ee+7],oe=B[ee+10];if(!(Math.abs(j*se+F*ae+G*oe-1)<0.001&&Math.abs(R*se+k*ae+O*oe)<0.001&&Math.abs(_*se+Z*ae+q*oe)<0.001))continue;L[w]=1;let Q=B[ee],te=B[ee+1],ne=B[ee+2],ke=T+R*Q+k*te+O*ne,De=y+j*Q+F*te+G*ne,Ue=N+_*Q+Z*te+q*ne,ze=z(ke,De,Ue,v);if(ze!==fe){if(M[w]=1,E++,U)U[w]=ze}let pe=Math.round(ke),me=Math.round(De),he=Math.round(Ue);if(!xe(pe,me,he))continue;if(!n){D.put(pe,me,he,1);continue}let Oe=n[v],Ne=D.get(pe,me,he);if(Ne<0||Oe<Ne)D.put(pe,me,he,Oe)}}let X=new Uint8Array(e.length),H=n?new Int32Array(e.length).fill(fe):void 0;for(let v=0;v<e.length;v++){let w=e[v],P=t.parts[w.part];if(!P||!P.under||!ct(w.m))continue;let V=P.bbox,I=Math.round((V[3]-V[0])/20),B=Math.round((V[5]-V[2])/20);if(!I||!B||I*B>4096)continue;let T=w.m,y=!0,N=0;for(let R=0;R<I&&y;R++)for(let k=0;k<B;k++){let O=V[0]+10+20*R,j=V[2]+10+20*k,F=T[0]+T[3]*O+T[5]*j,G=T[2]+T[9]*O+T[11]*j,_=Math.round(F),Z=Math.round(T[1]+V[4]),q=Math.round(G),J=xe(_,Z,q)?D.get(_,Z,q):-1;if(J<0){y=!1;break}if(J>N)N=J}if(y){if(X[v]=1,H)H[v]=N}}return{nStuds:x,studHidden:M,studUp:L,underHidden:X,studsHidden:E,studHideStep:U,underHideStep:H}}function Xt(e,t,n){let r=(a)=>n&&a.texPart&&t.parts[a.texPart]?a.texPart:a.part,s=e.map((a)=>({part:r(a),color:String(a.color),m:a.m,steps:a.steps})),o=s.map((a)=>it(a.steps)),i=[...new Set(o)].sort(),l=new Map(i.map((a,c)=>[a,c]));return{all:s,stepOf:o.map((a)=>l.get(a)),nSteps:i.length}}function ye(e,t,n=!0){let r=Xt(e,t,n);return Kt(r.all,t,r.nSteps>1?r.stepOf:void 0)}var Me="https://ldr-demo.vercel.app/cdn/v1/",Ae=new Map,we=new Map;function pt(e=Me,t=fetch){let n=Ae.get(e);if(!n)n=t(e+"parts.json").then((r)=>{if(!r.ok)throw Error(`ldr: parts CDN index ${r.status} (${e}parts.json)`);return r.json()}),n.catch(()=>Ae.delete(e)),Ae.set(e,n);return n}var Zt=(e)=>Array.isArray(e)&&e.length===3&&typeof e[0]==="number"&&typeof e[1]==="number"&&(e[2]==="f32"||e[2]==="u16"||e[2]==="u8"||e[2]==="u32"),ve=(e,t)=>Zt(e)?[e[0]+t,e[1],e[2]]:Array.isArray(e)?e.map((n)=>ve(n,t)):e&&typeof e==="object"?Object.fromEntries(Object.entries(e).map(([n,r])=>[n,ve(r,t)])):e;function Yt(e,t={}){let n=[],r=0,s={},o={};for(let h of e){let d=h.buffer;if(!d)throw Error("ldr: mergePacks needs packs from decodePack/loadPack");let C=new DataView(d).getUint32(0,!0),u=new Uint8Array(d,4+C),b=r;n.push(u),r+=u.byteLength;let S=(4-r%4)%4;if(S)n.push(new Uint8Array(S)),r+=S;for(let[g,f]of Object.entries(h.header.parts??{}))if(!(g in s))s[g]=ve(f,b);for(let[g,f]of Object.entries(h.header.studKinds??{}))if(!(g in o))o[g]=ve(f,b)}let i=e[0]?.header??{version:1,weld:!0},l=new TextEncoder().encode(JSON.stringify({...i,parts:s,studKinds:o,...t})),a=(4-(4+l.length)%4)%4,c=4+l.length+a,p=new Uint8Array(c+r);new DataView(p.buffer).setUint32(0,l.length+a,!0),p.set(l,4),p.fill(32,4+l.length,c);let m=c;for(let h of n)p.set(h,m),m+=h.byteLength;return de(p.buffer)}async function Jt(e,t={}){e=[...e];try{return await ft(e,t)}catch(n){let r=t.cdn??Me,s=t.fetch??fetch;Ae.delete(r);let o=(i,l)=>s(i,{...l,cache:"reload"});try{return await ft(e,{...t,fetch:o})}catch{throw n}}}async function ft(e,t){let n=t.cdn??Me,r=t.fetch??fetch,s=t.gap??16384,o=await pt(n,r),i=[...new Set([...e].map(Y))],l=[],a=[];for(let u of i){if(we.has(n+u))continue;let b=o.parts[u];if(b)a.push({name:u,off:b[0],len:b[1],file:b[2]??0});else l.push(u)}a.sort((u,b)=>u.file-b.file||u.off-b.off);let c=[];for(let u of a){let b=c[c.length-1];if(b&&b.file===u.file&&u.off-b.end<=s)b.end=Math.max(b.end,u.off+u.len),b.items.push(u);else c.push({file:u.file,start:u.off,end:u.off+u.len,items:[u]})}let p=0,m=0,h=async()=>{while(m<c.length){let u=c[m++],b=await r(new URL(o.archives[u.file],n).href,{headers:{Range:`bytes=${u.start}-${u.end-1}`}});if(!b.ok)throw Error(`ldr: parts CDN ${b.status}`);let S=new Uint8Array(await b.arrayBuffer());if(b.status===200)S=S.subarray(u.start,u.end);p+=S.byteLength;for(let g of u.items){let f=je(S.subarray(g.off-u.start,g.off-u.start+g.len)),A=f.buffer.slice(f.byteOffset,f.byteOffset+f.byteLength);we.set(n+g.name,de(A))}}};await Promise.all(Array.from({length:Math.min(t.concurrency??24,c.length)},h));let d=i.filter((u)=>we.has(n+u)).map((u)=>we.get(n+u));return{pack:d.length?Yt(d,{colors:o.colors}):de(qt(o.colors)),missing:l,requests:c.length,bytes:p}}function qt(e){let t=new TextEncoder().encode(JSON.stringify({version:1,weld:!0,parts:{},studKinds:{},colors:e})),n=(4-(4+t.length)%4)%4,r=new Uint8Array(4+t.length+n).fill(32);return new DataView(r.buffer).setUint32(0,t.length+n,!0),r.set(t,4),r.buffer}async function mt(e,t={}){let n=performance.now(),r=t.fetch??fetch,s=pt(t.cdn??Me,r);s.catch(()=>{});let o=t.text?e:await r(e).then((f)=>{if(!f.ok)throw Error(`ldr: ${f.status} fetching ${e}`);return f.text()}),i=performance.now(),l=t.name??(t.text?"main.ldr":decodeURIComponent(e.split(/[?#]/)[0].split("/").pop()||"main.ldr")),a=at(o,l,{looseGeometry:!1,callouts:t.callouts}),c=performance.now();t.onParsed?.(a),await s;let p=lt(o,new Set(a.filter((f)=>f.embedded).map((f)=>f.part)),l),{pack:m,missing:h,requests:d,bytes:C}=await Jt([...a.filter((f)=>!f.embedded).map((f)=>f.part),...p.values()],t),u=new Map([...p].map(([f,A])=>[A,f])),b=h.map((f)=>u.get(f)??f);for(let[f,A]of p){let z=m.header.parts[A];if(z)m.header.parts[f]=z}let S=performance.now(),g=t.cull?ye(a,m.header,t.textures!==!1):void 0;return{insts:a,pack:m,missing:b,requests:d,bytes:C,cull:g,timings:{fetchModel:i-n,parse:c-i,parts:S-c,...g?{cull:performance.now()-S}:{}}}}self.onmessage=async(e)=>{let{id:t,source:n,opts:r}=e.data;try{let s=await mt(n,{...r,cull:!1,onParsed:(p)=>self.postMessage({id:t,insts:p})}),o=s.pack.buffer;if(self.postMessage({id:t,buffer:o,missing:s.missing,requests:s.requests,bytes:s.bytes,timings:s.timings},[o]),!r.cull)return;let i=performance.now(),l=ye(s.insts,s.pack.header,r.textures!==!1),a=performance.now()-i,c=[];for(let p of[l.studHidden,l.studUp,l.underHidden,l.studHideStep,l.underHideStep])if(p)c.push(p.buffer);self.postMessage({id:t,cull:l,ms:a},c)}catch(s){self.postMessage({id:t,phase:"error",error:String(s?.message??s)})}};\n';
3709
3806
 
3710
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/cdn.ts
3807
+ // ../../../../../../../tmp/ldr-build-MHOtAg/src/cdn.ts
3711
3808
  var worker;
3712
3809
  var seq = 0;
3713
3810
  var pending = new Map;
@@ -3802,7 +3899,7 @@ async function loadModel(source, o = {}) {
3802
3899
  } else
3803
3900
  prep = await prepareModel(source, o);
3804
3901
  const t3 = performance.now();
3805
- const obj = createLdrObject(prep.insts, prep.pack, prep.cull ? { ...o, precomputedCull: prep.cull } : o);
3902
+ const obj = await createLdrObjectAsync(prep.insts, prep.pack, prep.cull ? { ...o, precomputedCull: prep.cull } : o);
3806
3903
  for (const m of prep.missing)
3807
3904
  if (!obj.stats.missing.includes(m))
3808
3905
  obj.stats.missing.push(m);
@@ -3816,7 +3913,7 @@ async function loadModel(source, o = {}) {
3816
3913
  timings: { ...prep.timings, parts: t3 - t0 - prep.timings.fetchModel - prep.timings.parse, build: t4 - t3, total: t4 - t0 }
3817
3914
  });
3818
3915
  }
3819
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/node/library.ts
3916
+ // ../../../../../../../tmp/ldr-build-MHOtAg/src/node/library.ts
3820
3917
  import { existsSync, readFileSync } from "fs";
3821
3918
  import { join } from "path";
3822
3919
  var xf = (m, x, y, z) => [m[3] * x + m[4] * y + m[5] * z + m[0], m[6] * x + m[7] * y + m[8] * z + m[1], m[9] * x + m[10] * y + m[11] * z + m[2]];
@@ -4067,11 +4164,11 @@ class Library {
4067
4164
  return insts;
4068
4165
  }
4069
4166
  }
4070
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/node/build-pack.ts
4167
+ // ../../../../../../../tmp/ldr-build-MHOtAg/src/node/build-pack.ts
4071
4168
  import fs3 from "node:fs";
4072
4169
  import path3 from "node:path";
4073
4170
 
4074
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/node/resolver.ts
4171
+ // ../../../../../../../tmp/ldr-build-MHOtAg/src/node/resolver.ts
4075
4172
  import fs from "node:fs";
4076
4173
  import path from "node:path";
4077
4174
  var TOP_STUD_RE = /^(stud|studa|stud2|stud2a|stud6|stud6a|stud10|stud15|stud2s|stud2s2|stud-logo\d*|stud2-logo\d*)\.dat$/i;
@@ -4343,11 +4440,11 @@ function collectDeps(lib, refs) {
4343
4440
  return out;
4344
4441
  }
4345
4442
 
4346
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/node/compile.ts
4443
+ // ../../../../../../../tmp/ldr-build-MHOtAg/src/node/compile.ts
4347
4444
  import fs2 from "node:fs";
4348
4445
  import path2 from "node:path";
4349
4446
 
4350
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/node/lod.ts
4447
+ // ../../../../../../../tmp/ldr-build-MHOtAg/src/node/lod.ts
4351
4448
  import { MeshoptSimplifier, MeshoptEncoder } from "meshoptimizer";
4352
4449
  await Promise.all([MeshoptSimplifier.ready, MeshoptEncoder.ready]);
4353
4450
  function reorderMesh(P, N, C, I) {
@@ -4539,7 +4636,7 @@ function lodChain(P, C, I) {
4539
4636
  return out;
4540
4637
  }
4541
4638
 
4542
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/node/compile.ts
4639
+ // ../../../../../../../tmp/ldr-build-MHOtAg/src/node/compile.ts
4543
4640
  function loadColors(root) {
4544
4641
  const map = new Map;
4545
4642
  for (const l of fs2.readFileSync(path2.join(root, "LDConfig.ldr"), "latin1").split(/\r?\n/)) {
@@ -5122,7 +5219,7 @@ function encodePack(parts, studKinds, weld, extra, options = {}) {
5122
5219
  return Buffer.concat([head, ...chunks.map((c) => new Uint8Array(c.buffer, c.byteOffset, c.byteLength))]);
5123
5220
  }
5124
5221
 
5125
- // ../../../../../../../tmp/ldr-build-vvPPS9/src/node/build-pack.ts
5222
+ // ../../../../../../../tmp/ldr-build-MHOtAg/src/node/build-pack.ts
5126
5223
  function buildPack(o) {
5127
5224
  const lib = new Library2(o.ldrawRoot);
5128
5225
  const refs = new Map;
@@ -5199,6 +5296,7 @@ export {
5199
5296
  REORIENT,
5200
5297
  Library2 as ResolverLibrary,
5201
5298
  buildLdrScene,
5299
+ buildLdrSceneAsync,
5202
5300
  buildPack,
5203
5301
  collectDeps,
5204
5302
  colorToken,
@@ -5210,6 +5308,7 @@ export {
5210
5308
  createInstancedConditionalEdges,
5211
5309
  createInstancedEdges,
5212
5310
  createLdrObject,
5311
+ createLdrObjectAsync,
5213
5312
  cullCore,
5214
5313
  decodePack,
5215
5314
  decompressPack,
package/dist/render.d.ts CHANGED
@@ -70,29 +70,21 @@ export declare function computeCulling(insts: Inst[], H: any): {
70
70
  }[];
71
71
  underHidden: boolean[];
72
72
  };
73
- export declare function buildLdrScene(insts: Inst[], pack: Pack, P: LdrParams, color: (c: string) => THREE.Color, mark: (k: string) => void): {
74
- root: THREE.Group;
75
- stats: any;
76
- setCull: (studs: boolean, under: boolean) => void;
77
- setSide: (front: boolean) => void;
78
- setEdges: (v: boolean) => void;
79
- setCond: (v: boolean) => void;
80
- setLod: (on: boolean) => void;
81
- setStep: (s: number | null, mask?: ArrayLike<number | boolean> | null) => {
82
- studsTotal: number;
83
- studsHidden: number;
84
- undersTotal: number;
85
- undersHidden: number;
86
- };
87
- box: THREE.Box3;
88
- texturesReady: Promise<void>;
89
- trimmed: {
90
- studs: boolean;
91
- under: boolean;
92
- };
93
- };
94
73
  /**
95
74
  * Builds (and caches on the pack) the shared BufferGeometries `buildLdrScene` will use, in time slices of about `sliceMs` that yield
96
75
  * to the event loop, until done or `stop()` returns true. Lets the main thread do this useful work while the load worker culls.
97
76
  */
77
+ /** Drive buildLdrSceneGen to completion without yielding (same as pre-Round-33 sync build). */
78
+ export declare function buildLdrScene(insts: Inst[], pack: Pack, P: LdrParams, color: (c: string) => THREE.Color, mark: (k: string) => void): any;
79
+ export type BuildLdrSceneAsyncOptions = {
80
+ /** Soft cap on contiguous main-thread work between yields (ms). Default 8. */
81
+ sliceMs?: number;
82
+ /** Called after each yield while the live root already holds finished batches (paint for TTFP). */
83
+ onSlice?: (root: THREE.Object3D) => void | Promise<void>;
84
+ };
85
+ /**
86
+ * Same scene as buildLdrScene, but yields to the event loop about every sliceMs so the main thread stays responsive
87
+ * and onSlice can render partial geometry for a fast time-to-first-pixel. Meshes are added to root as they are built.
88
+ */
89
+ export declare function buildLdrSceneAsync(insts: Inst[], pack: Pack, P: LdrParams, color: (c: string) => THREE.Color, mark: (k: string) => void, opts?: BuildLdrSceneAsyncOptions): Promise<any>;
98
90
  export declare function warmPackGeometry(pack: Pack, stop?: () => boolean, sliceMs?: number): Promise<void>;