@ifc-lite/renderer 1.30.0 → 1.32.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.
Files changed (38) hide show
  1. package/dist/aabb-edges.d.ts +6 -0
  2. package/dist/aabb-edges.d.ts.map +1 -0
  3. package/dist/aabb-edges.js +34 -0
  4. package/dist/aabb-edges.js.map +1 -0
  5. package/dist/camera-fit-policy.d.ts +6 -0
  6. package/dist/camera-fit-policy.d.ts.map +1 -1
  7. package/dist/camera-fit-policy.js +21 -1
  8. package/dist/camera-fit-policy.js.map +1 -1
  9. package/dist/deviation/deviation-pipeline.d.ts +15 -1
  10. package/dist/deviation/deviation-pipeline.d.ts.map +1 -1
  11. package/dist/deviation/deviation-pipeline.js +33 -16
  12. package/dist/deviation/deviation-pipeline.js.map +1 -1
  13. package/dist/deviation/deviation-shader.wgsl.d.ts +1 -1
  14. package/dist/deviation/deviation-shader.wgsl.d.ts.map +1 -1
  15. package/dist/deviation/deviation-shader.wgsl.js +11 -2
  16. package/dist/deviation/deviation-shader.wgsl.js.map +1 -1
  17. package/dist/index.d.ts +32 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +68 -1
  20. package/dist/index.js.map +1 -1
  21. package/dist/picking-manager.d.ts.map +1 -1
  22. package/dist/picking-manager.js +9 -7
  23. package/dist/picking-manager.js.map +1 -1
  24. package/dist/pointcloud/point-cloud-node.d.ts +13 -2
  25. package/dist/pointcloud/point-cloud-node.d.ts.map +1 -1
  26. package/dist/pointcloud/point-cloud-node.js +50 -20
  27. package/dist/pointcloud/point-cloud-node.js.map +1 -1
  28. package/dist/section-2d-overlay.d.ts +23 -0
  29. package/dist/section-2d-overlay.d.ts.map +1 -1
  30. package/dist/section-2d-overlay.js +97 -9
  31. package/dist/section-2d-overlay.js.map +1 -1
  32. package/dist/shaders/main.wgsl.d.ts +1 -1
  33. package/dist/shaders/main.wgsl.d.ts.map +1 -1
  34. package/dist/shaders/main.wgsl.js +14 -1
  35. package/dist/shaders/main.wgsl.js.map +1 -1
  36. package/dist/types.d.ts +6 -0
  37. package/dist/types.d.ts.map +1 -1
  38. package/package.json +2 -2
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Build a flat line-list (`[x,y,z, …]`, 12 edges = 24 vertices) for the 12 edges
3
+ * of a world-space AABB. Used to draw the clash-overlap wireframe box (#1277).
4
+ */
5
+ export declare function aabbEdgeLineList(min: readonly [number, number, number], max: readonly [number, number, number]): Float32Array;
6
+ //# sourceMappingURL=aabb-edges.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aabb-edges.d.ts","sourceRoot":"","sources":["../src/aabb-edges.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EACtC,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GACrC,YAAY,CAqBd"}
@@ -0,0 +1,34 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ /**
5
+ * Build a flat line-list (`[x,y,z, …]`, 12 edges = 24 vertices) for the 12 edges
6
+ * of a world-space AABB. Used to draw the clash-overlap wireframe box (#1277).
7
+ */
8
+ export function aabbEdgeLineList(min, max) {
9
+ const [x0, y0, z0] = min;
10
+ const [x1, y1, z1] = max;
11
+ // 8 corners
12
+ const c = [
13
+ [x0, y0, z0], [x1, y0, z0], [x1, y1, z0], [x0, y1, z0], // z0 face
14
+ [x0, y0, z1], [x1, y0, z1], [x1, y1, z1], [x0, y1, z1], // z1 face
15
+ ];
16
+ // 12 edges as corner-index pairs
17
+ const edges = [
18
+ [0, 1], [1, 2], [2, 3], [3, 0], // z0 ring
19
+ [4, 5], [5, 6], [6, 7], [7, 4], // z1 ring
20
+ [0, 4], [1, 5], [2, 6], [3, 7], // verticals
21
+ ];
22
+ const out = new Float32Array(edges.length * 2 * 3);
23
+ let o = 0;
24
+ for (const [a, b] of edges) {
25
+ out[o++] = c[a][0];
26
+ out[o++] = c[a][1];
27
+ out[o++] = c[a][2];
28
+ out[o++] = c[b][0];
29
+ out[o++] = c[b][1];
30
+ out[o++] = c[b][2];
31
+ }
32
+ return out;
33
+ }
34
+ //# sourceMappingURL=aabb-edges.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aabb-edges.js","sourceRoot":"","sources":["../src/aabb-edges.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,GAAsC,EACtC,GAAsC;IAEtC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;IACzB,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;IACzB,YAAY;IACZ,MAAM,CAAC,GAAG;QACR,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,UAAU;QAClE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,UAAU;KACnE,CAAC;IACF,iCAAiC;IACjC,MAAM,KAAK,GAAG;QACZ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU;QAC1C,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU;QAC1C,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY;KAC7C,CAAC;IACF,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACnD,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC;QAC3B,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -50,6 +50,12 @@ export interface PickFitPolicyOptions {
50
50
  * at the default; exposed for tests that pin the threshold behaviour.
51
51
  */
52
52
  linearAspectThreshold?: number;
53
+ /**
54
+ * Override the minimum longest-axis extent (world units) at/above which the
55
+ * linear policy is allowed to apply. Production should leave this at the
56
+ * default; exposed for tests that pin the size-floor behaviour.
57
+ */
58
+ linearMinLongest?: number;
53
59
  }
54
60
  /**
55
61
  * Compute the fit pose for a scene's bounding box. Pure function — no
@@ -1 +1 @@
1
- {"version":3,"file":"camera-fit-policy.d.ts","sourceRoot":"","sources":["../src/camera-fit-policy.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAqB3C,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,IAAI,CAAC;IACV,GAAG,EAAE,IAAI,CAAC;CACX;AAED,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEjD,MAAM,WAAW,SAAS;IACxB,qEAAqE;IACrE,IAAI,EAAE,aAAa,CAAC;IACpB,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,MAAM,EAAE,IAAI,CAAC;IACb,mCAAmC;IACnC,QAAQ,EAAE,IAAI,CAAC;IACf,kEAAkE;IAClE,EAAE,EAAE,IAAI,CAAC;IACT,sEAAsE;IACtE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,oBAAoB,GAC5B,SAAS,CAwFX"}
1
+ {"version":3,"file":"camera-fit-policy.d.ts","sourceRoot":"","sources":["../src/camera-fit-policy.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAoC3C,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,IAAI,CAAC;IACV,GAAG,EAAE,IAAI,CAAC;CACX;AAED,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEjD,MAAM,WAAW,SAAS;IACxB,qEAAqE;IACrE,IAAI,EAAE,aAAa,CAAC;IACpB,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,MAAM,EAAE,IAAI,CAAC;IACb,mCAAmC;IACnC,QAAQ,EAAE,IAAI,CAAC;IACf,kEAAkE;IAClE,EAAE,EAAE,IAAI,CAAC;IACT,sEAAsE;IACtE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,oBAAoB,GAC5B,SAAS,CA8FX"}
@@ -3,6 +3,20 @@
3
3
  * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
4
  /** Aspect ratio above which a model is treated as linear infrastructure. */
5
5
  const LINEAR_ASPECT_THRESHOLD = 50;
6
+ /**
7
+ * Minimum longest-axis extent (world units, i.e. metres) for the linear
8
+ * policy to apply. The linear "look down the longest axis from inside the
9
+ * bbox" pose only makes sense for genuine infrastructure (railway / road
10
+ * alignments are hundreds of metres). A small but high-aspect element — a
11
+ * single 4.86 m reinforcing bar is aspect ~130:1 — would otherwise get the
12
+ * linear pose, which places the camera *inside* its bounding box looking
13
+ * end-on, so the bar projects to a sub-pixel smear and reads as "nothing
14
+ * rendered" (issue #1350). Below this floor the compact SE-isometric pose
15
+ * frames the whole element and keeps it visible. Picked so the longest
16
+ * building elements (rebar, steel members, long beams ≲ tens of metres)
17
+ * stay compact while alignments (≥ hundreds of metres) stay linear.
18
+ */
19
+ const LINEAR_MIN_LONGEST = 100;
6
20
  /**
7
21
  * Target on-screen projection for the smallest non-degenerate dim, in
8
22
  * pixels. The linear-policy distance is chosen so the shortest meaningful
@@ -39,7 +53,13 @@ export function pickFitPolicy(bounds, options) {
39
53
  const shortest = Math.min(sizeX, sizeY, sizeZ);
40
54
  const aspect = longest / Math.max(shortest, longest * 1e-6);
41
55
  const threshold = options.linearAspectThreshold ?? LINEAR_ASPECT_THRESHOLD;
42
- if (aspect <= threshold) {
56
+ const minLongest = options.linearMinLongest ?? LINEAR_MIN_LONGEST;
57
+ // Compact unless the bbox is BOTH high-aspect AND large enough to be real
58
+ // infrastructure. The size floor stops a small high-aspect element (a
59
+ // single rebar / steel member) from getting the "look down the axis from
60
+ // inside the bbox" linear pose, which renders it end-on and invisible
61
+ // (issue #1350).
62
+ if (aspect <= threshold || longest < minLongest) {
43
63
  // Compact: reproduce the legacy SE isometric pose 1:1 so building
44
64
  // models frame exactly as before.
45
65
  const distance = longest * 2.0;
@@ -1 +1 @@
1
- {"version":3,"file":"camera-fit-policy.js","sourceRoot":"","sources":["../src/camera-fit-policy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"camera-fit-policy.js","sourceRoot":"","sources":["../src/camera-fit-policy.ts"],"names":[],"mappings":"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"}
@@ -21,7 +21,15 @@ export declare class DeviationPipeline {
21
21
  private bvhTriangleCount;
22
22
  private bvhNodeCount;
23
23
  private bvhBounds;
24
- private paramsBuffer;
24
+ /**
25
+ * One uniform buffer per `dispatch()` call within a compute batch. They
26
+ * MUST be distinct: every chunk's dispatch is recorded into one encoder and
27
+ * submitted once, but `queue.writeBuffer` runs on the queue BEFORE that
28
+ * single submit — so a single shared buffer would hold only the LAST
29
+ * chunk's params when every pass executes. Freed by `releaseTransientParams`
30
+ * after `onSubmittedWorkDone()`.
31
+ */
32
+ private transientParamsBuffers;
25
33
  constructor(device: GPUDevice);
26
34
  /**
27
35
  * Upload the per-triangle BVH to the GPU. Replaces any previous
@@ -44,6 +52,12 @@ export declare class DeviationPipeline {
44
52
  */
45
53
  dispatch(encoder: GPUCommandEncoder, input: DeviationDispatchInput): boolean;
46
54
  private disposeBvh;
55
+ /**
56
+ * Destroy the per-dispatch uniform buffers from the last compute batch.
57
+ * Call after `queue.onSubmittedWorkDone()` so the GPU is finished reading
58
+ * them. Safe to call repeatedly.
59
+ */
60
+ releaseTransientParams(): void;
47
61
  destroy(): void;
48
62
  }
49
63
  //# sourceMappingURL=deviation-pipeline.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"deviation-pipeline.d.ts","sourceRoot":"","sources":["../../src/deviation/deviation-pipeline.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAc3D,MAAM,WAAW,sBAAsB;IACrC;;;sCAGkC;IAClC,eAAe,EAAE,SAAS,CAAC;IAC3B,6DAA6D;IAC7D,gBAAgB,EAAE,SAAS,CAAC;IAC5B,mCAAmC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,cAAc,CAA0B;IAChD,OAAO,CAAC,eAAe,CAA0B;IACjD,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,SAAS,CAA4C;IAC7D,OAAO,CAAC,YAAY,CAA0B;gBAElC,MAAM,EAAE,SAAS;IAqB7B;;;;OAIG;IACH,SAAS,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI;IAuCvC,MAAM,IAAI,OAAO;IAIjB,WAAW,IAAI;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAA;KAAE;IAQvG;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,sBAAsB,GAAG,OAAO;IAmD5E,OAAO,CAAC,UAAU;IAOlB,OAAO,IAAI,IAAI;CAKhB"}
1
+ {"version":3,"file":"deviation-pipeline.d.ts","sourceRoot":"","sources":["../../src/deviation/deviation-pipeline.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAc3D,MAAM,WAAW,sBAAsB;IACrC;;;sCAGkC;IAClC,eAAe,EAAE,SAAS,CAAC;IAC3B,6DAA6D;IAC7D,gBAAgB,EAAE,SAAS,CAAC;IAC5B,mCAAmC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,cAAc,CAA0B;IAChD,OAAO,CAAC,eAAe,CAA0B;IACjD,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,SAAS,CAA4C;IAC7D;;;;;;;OAOG;IACH,OAAO,CAAC,sBAAsB,CAAmB;gBAErC,MAAM,EAAE,SAAS;IAqB7B;;;;OAIG;IACH,SAAS,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI;IAuCvC,MAAM,IAAI,OAAO;IAIjB,WAAW,IAAI;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAA;KAAE;IAQvG;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,sBAAsB,GAAG,OAAO;IAmD5E,OAAO,CAAC,UAAU;IAOlB;;;;OAIG;IACH,sBAAsB,IAAI,IAAI;IAK9B,OAAO,IAAI,IAAI;CAIhB"}
@@ -33,7 +33,15 @@ export class DeviationPipeline {
33
33
  bvhTriangleCount = 0;
34
34
  bvhNodeCount = 0;
35
35
  bvhBounds = null;
36
- paramsBuffer = null;
36
+ /**
37
+ * One uniform buffer per `dispatch()` call within a compute batch. They
38
+ * MUST be distinct: every chunk's dispatch is recorded into one encoder and
39
+ * submitted once, but `queue.writeBuffer` runs on the queue BEFORE that
40
+ * single submit — so a single shared buffer would hold only the LAST
41
+ * chunk's params when every pass executes. Freed by `releaseTransientParams`
42
+ * after `onSubmittedWorkDone()`.
43
+ */
44
+ transientParamsBuffers = [];
37
45
  constructor(device) {
38
46
  this.device = device;
39
47
  this.bindGroupLayout = device.createBindGroupLayout({
@@ -114,19 +122,19 @@ export class DeviationPipeline {
114
122
  return false;
115
123
  if (input.pointCount === 0)
116
124
  return true;
117
- // Reuse one instance-cached uniform buffer for the dispatch params.
118
- // Created lazily once; overwritten per chunk via writeBuffer. All
119
- // chunk dispatches are recorded into one encoder and submitted once,
120
- // and writeBuffer is queued in submission order relative to the
121
- // dispatches, so overwriting between chunks within the same submit is
122
- // safe (each chunk's bind group reads the value as enqueued).
123
- if (!this.paramsBuffer) {
124
- this.paramsBuffer = this.device.createBuffer({
125
- size: PARAMS_UNIFORM_BYTES,
126
- usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
127
- });
128
- }
129
- const paramsBuffer = this.paramsBuffer;
125
+ // A FRESH uniform buffer per chunk. `queue.writeBuffer` is ordered on the
126
+ // queue ahead of the single `submit` that runs every chunk's compute pass,
127
+ // so reusing one cached buffer left every pass reading the LAST chunk's
128
+ // `pointCount` the shorter final chunk and every full chunk then
129
+ // early-returned its tail (`pi >= params.pointCount`), leaving those
130
+ // points' deviation at its zero init → rendered at the ramp centre
131
+ // (white) regardless of their true distance. Distinct buffers keep each
132
+ // pass's params intact; they're freed in `releaseTransientParams()`.
133
+ const paramsBuffer = this.device.createBuffer({
134
+ size: PARAMS_UNIFORM_BYTES,
135
+ usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
136
+ });
137
+ this.transientParamsBuffers.push(paramsBuffer);
130
138
  const params = new Uint32Array(PARAMS_UNIFORM_BYTES / 4);
131
139
  const paramsF = new Float32Array(params.buffer);
132
140
  params[0] = input.pointCount;
@@ -164,10 +172,19 @@ export class DeviationPipeline {
164
172
  this.bvhNodesBuffer = null;
165
173
  this.trianglesBuffer = null;
166
174
  }
175
+ /**
176
+ * Destroy the per-dispatch uniform buffers from the last compute batch.
177
+ * Call after `queue.onSubmittedWorkDone()` so the GPU is finished reading
178
+ * them. Safe to call repeatedly.
179
+ */
180
+ releaseTransientParams() {
181
+ for (const b of this.transientParamsBuffers)
182
+ b.destroy();
183
+ this.transientParamsBuffers = [];
184
+ }
167
185
  destroy() {
168
186
  this.disposeBvh();
169
- this.paramsBuffer?.destroy();
170
- this.paramsBuffer = null;
187
+ this.releaseTransientParams();
171
188
  }
172
189
  }
173
190
  //# sourceMappingURL=deviation-pipeline.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"deviation-pipeline.js","sourceRoot":"","sources":["../../src/deviation/deviation-pipeline.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deviation-pipeline.js","sourceRoot":"","sources":["../../src/deviation/deviation-pipeline.ts"],"names":[],"mappings":"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"}
@@ -19,5 +19,5 @@
19
19
  * Workgroup size 64 (one wavefront / warp on most desktop GPUs).
20
20
  * Each invocation processes one point.
21
21
  */
22
- export declare const deviationShaderSource = "\nstruct BvhNode {\n aabbMinX: f32, aabbMinY: f32, aabbMinZ: f32,\n // High bit: leaf flag. Low 31 bits: leaf=triStart, internal=leftChildIdx.\n leafOrLeft: u32,\n aabbMaxX: f32, aabbMaxY: f32, aabbMaxZ: f32,\n // Leaf=triCount, internal=rightChildIdx.\n countOrRight: u32,\n}\n\nstruct DeviationParams {\n pointCount: u32,\n pointStrideF32: u32, // floats between successive points in positions buffer\n positionOffsetF32: u32, // float offset of vec3 position within a point\n // Optional clip range \u2014 when nonzero, signs above + below are kept\n // but values past \u00B1maxRange are clamped (saves shader work for\n // points far outside the model).\n maxRange: f32,\n // Reserved padding to keep the struct 16-byte aligned for std140.\n _pad0: u32, _pad1: u32, _pad2: u32, _pad3: u32,\n}\n\n@group(0) @binding(0) var<storage, read> bvhNodes: array<BvhNode>;\n@group(0) @binding(1) var<storage, read> triangles: array<f32>;\n@group(0) @binding(2) var<storage, read> positions: array<f32>;\n@group(0) @binding(3) var<storage, read_write> deviations: array<f32>;\n@group(0) @binding(4) var<uniform> params: DeviationParams;\n\nconst LEAF_FLAG: u32 = 0x80000000u;\nconst STACK_SIZE: u32 = 64u;\n\n// Squared distance from point p to AABB [aabbMin, aabbMax].\n// Returns 0 if p is inside the box.\nfn distSqPointAabb(\n px: f32, py: f32, pz: f32,\n ax: f32, ay: f32, az: f32,\n bx: f32, by: f32, bz: f32,\n) -> f32 {\n let dx = max(max(ax - px, 0.0), px - bx);\n let dy = max(max(ay - py, 0.0), py - by);\n let dz = max(max(az - pz, 0.0), pz - bz);\n return dx * dx + dy * dy + dz * dz;\n}\n\nstruct ClosestResult {\n point: vec3<f32>,\n distSq: f32,\n}\n\n// Ericson, Real-Time Collision Detection \u00A75.1.5: closest point on\n// a triangle to an arbitrary point in space. Branches over the\n// Voronoi regions of the triangle (3 verts, 3 edges, interior).\nfn closestPointOnTriangle(p: vec3<f32>, a: vec3<f32>, b: vec3<f32>, c: vec3<f32>) -> ClosestResult {\n let ab = b - a;\n let ac = c - a;\n let ap = p - a;\n let d1 = dot(ab, ap);\n let d2 = dot(ac, ap);\n if (d1 <= 0.0 && d2 <= 0.0) {\n let diff = p - a;\n return ClosestResult(a, dot(diff, diff));\n }\n let bp = p - b;\n let d3 = dot(ab, bp);\n let d4 = dot(ac, bp);\n if (d3 >= 0.0 && d4 <= d3) {\n let diff = p - b;\n return ClosestResult(b, dot(diff, diff));\n }\n let vc = d1 * d4 - d3 * d2;\n if (vc <= 0.0 && d1 >= 0.0 && d3 <= 0.0) {\n let v = d1 / (d1 - d3);\n let q = a + v * ab;\n let diff = p - q;\n return ClosestResult(q, dot(diff, diff));\n }\n let cp = p - c;\n let d5 = dot(ab, cp);\n let d6 = dot(ac, cp);\n if (d6 >= 0.0 && d5 <= d6) {\n let diff = p - c;\n return ClosestResult(c, dot(diff, diff));\n }\n let vb = d5 * d2 - d1 * d6;\n if (vb <= 0.0 && d2 >= 0.0 && d6 <= 0.0) {\n let w = d2 / (d2 - d6);\n let q = a + w * ac;\n let diff = p - q;\n return ClosestResult(q, dot(diff, diff));\n }\n let va = d3 * d6 - d5 * d4;\n if (va <= 0.0 && (d4 - d3) >= 0.0 && (d5 - d6) >= 0.0) {\n let w = (d4 - d3) / ((d4 - d3) + (d5 - d6));\n let q = b + w * (c - b);\n let diff = p - q;\n return ClosestResult(q, dot(diff, diff));\n }\n // Inside the face: barycentric (v, w).\n let denom = 1.0 / (va + vb + vc);\n let v = vb * denom;\n let w = vc * denom;\n let q = a + ab * v + ac * w;\n let diff = p - q;\n return ClosestResult(q, dot(diff, diff));\n}\n\n@compute @workgroup_size(64)\nfn cs_main(@builtin(global_invocation_id) gid: vec3<u32>) {\n let pi = gid.x;\n if (pi >= params.pointCount) {\n return;\n }\n let posOff = pi * params.pointStrideF32 + params.positionOffsetF32;\n let p = vec3<f32>(positions[posOff], positions[posOff + 1u], positions[posOff + 2u]);\n\n // Best squared distance across all triangles. Stored squared so\n // we can prune AABBs without taking sqrt every step.\n var bestDistSq: f32 = 1.0e30;\n var bestPoint: vec3<f32> = vec3<f32>(0.0);\n var bestNormal: vec3<f32> = vec3<f32>(0.0, 1.0, 0.0);\n\n // Stack-based BVH descent. Workgroup-uniform stack would let\n // siblings cooperate; for v1 a per-thread stack in private memory\n // is simpler and fast enough.\n var stack: array<u32, STACK_SIZE>;\n var sp: u32 = 0u;\n stack[sp] = 0u;\n sp = sp + 1u;\n\n loop {\n if (sp == 0u) { break; }\n sp = sp - 1u;\n let nodeIdx = stack[sp];\n let node = bvhNodes[nodeIdx];\n\n let aabbDistSq = distSqPointAabb(\n p.x, p.y, p.z,\n node.aabbMinX, node.aabbMinY, node.aabbMinZ,\n node.aabbMaxX, node.aabbMaxY, node.aabbMaxZ,\n );\n if (aabbDistSq >= bestDistSq) {\n continue;\n }\n\n let leafFlag = node.leafOrLeft & LEAF_FLAG;\n if (leafFlag != 0u) {\n let triStart = node.leafOrLeft & (~LEAF_FLAG);\n let triCount = node.countOrRight;\n var i: u32 = 0u;\n loop {\n if (i >= triCount) { break; }\n let triOff = (triStart + i) * 12u;\n let v0 = vec3<f32>(triangles[triOff], triangles[triOff + 1u], triangles[triOff + 2u]);\n let v1 = vec3<f32>(triangles[triOff + 3u], triangles[triOff + 4u], triangles[triOff + 5u]);\n let v2 = vec3<f32>(triangles[triOff + 6u], triangles[triOff + 7u], triangles[triOff + 8u]);\n let n = vec3<f32>(triangles[triOff + 9u], triangles[triOff + 10u], triangles[triOff + 11u]);\n let res = closestPointOnTriangle(p, v0, v1, v2);\n if (res.distSq < bestDistSq) {\n bestDistSq = res.distSq;\n bestPoint = res.point;\n bestNormal = n;\n }\n i = i + 1u;\n }\n } else {\n // Internal node: push both children. Sibling that's closer to\n // p first (top of stack) so we hit the tighter bound earlier.\n let leftIdx = node.leafOrLeft;\n let rightIdx = node.countOrRight;\n let lNode = bvhNodes[leftIdx];\n let rNode = bvhNodes[rightIdx];\n let lDist = distSqPointAabb(\n p.x, p.y, p.z,\n lNode.aabbMinX, lNode.aabbMinY, lNode.aabbMinZ,\n lNode.aabbMaxX, lNode.aabbMaxY, lNode.aabbMaxZ,\n );\n let rDist = distSqPointAabb(\n p.x, p.y, p.z,\n rNode.aabbMinX, rNode.aabbMinY, rNode.aabbMinZ,\n rNode.aabbMaxX, rNode.aabbMaxY, rNode.aabbMaxZ,\n );\n // Push the farther child first \u2192 closer popped first.\n if (sp + 2u <= STACK_SIZE) {\n if (lDist < rDist) {\n stack[sp] = rightIdx; sp = sp + 1u;\n stack[sp] = leftIdx; sp = sp + 1u;\n } else {\n stack[sp] = leftIdx; sp = sp + 1u;\n stack[sp] = rightIdx; sp = sp + 1u;\n }\n }\n }\n }\n\n // Signed distance: project (p - closestPoint) onto the closest\n // triangle's normal. Positive \u21D2 p is on the outward side.\n let toPoint = p - bestPoint;\n let dist = sqrt(bestDistSq);\n let s = sign(dot(toPoint, bestNormal));\n var signed: f32 = s * dist;\n\n // Optional clip: keeps the histogram + ramp focused on near-surface\n // points. Past \u00B1maxRange the value pegs at the edge.\n if (params.maxRange > 0.0) {\n let mr = params.maxRange;\n if (signed > mr) { signed = mr; }\n if (signed < -mr) { signed = -mr; }\n }\n\n deviations[pi] = signed;\n}\n";
22
+ export declare const deviationShaderSource = "\nstruct BvhNode {\n aabbMinX: f32, aabbMinY: f32, aabbMinZ: f32,\n // High bit: leaf flag. Low 31 bits: leaf=triStart, internal=leftChildIdx.\n leafOrLeft: u32,\n aabbMaxX: f32, aabbMaxY: f32, aabbMaxZ: f32,\n // Leaf=triCount, internal=rightChildIdx.\n countOrRight: u32,\n}\n\nstruct DeviationParams {\n pointCount: u32,\n pointStrideF32: u32, // floats between successive points in positions buffer\n positionOffsetF32: u32, // float offset of vec3 position within a point\n // Optional clip range \u2014 when nonzero, signs above + below are kept\n // but values past \u00B1maxRange are clamped (saves shader work for\n // points far outside the model).\n maxRange: f32,\n // Reserved padding to keep the struct 16-byte aligned for std140.\n _pad0: u32, _pad1: u32, _pad2: u32, _pad3: u32,\n}\n\n@group(0) @binding(0) var<storage, read> bvhNodes: array<BvhNode>;\n@group(0) @binding(1) var<storage, read> triangles: array<f32>;\n@group(0) @binding(2) var<storage, read> positions: array<f32>;\n@group(0) @binding(3) var<storage, read_write> deviations: array<f32>;\n@group(0) @binding(4) var<uniform> params: DeviationParams;\n\nconst LEAF_FLAG: u32 = 0x80000000u;\nconst STACK_SIZE: u32 = 64u;\n\n// Squared distance from point p to AABB [aabbMin, aabbMax].\n// Returns 0 if p is inside the box.\nfn distSqPointAabb(\n px: f32, py: f32, pz: f32,\n ax: f32, ay: f32, az: f32,\n bx: f32, by: f32, bz: f32,\n) -> f32 {\n let dx = max(max(ax - px, 0.0), px - bx);\n let dy = max(max(ay - py, 0.0), py - by);\n let dz = max(max(az - pz, 0.0), pz - bz);\n return dx * dx + dy * dy + dz * dz;\n}\n\nstruct ClosestResult {\n point: vec3<f32>,\n distSq: f32,\n}\n\n// Ericson, Real-Time Collision Detection \u00A75.1.5: closest point on\n// a triangle to an arbitrary point in space. Branches over the\n// Voronoi regions of the triangle (3 verts, 3 edges, interior).\nfn closestPointOnTriangle(p: vec3<f32>, a: vec3<f32>, b: vec3<f32>, c: vec3<f32>) -> ClosestResult {\n let ab = b - a;\n let ac = c - a;\n let ap = p - a;\n let d1 = dot(ab, ap);\n let d2 = dot(ac, ap);\n if (d1 <= 0.0 && d2 <= 0.0) {\n let diff = p - a;\n return ClosestResult(a, dot(diff, diff));\n }\n let bp = p - b;\n let d3 = dot(ab, bp);\n let d4 = dot(ac, bp);\n if (d3 >= 0.0 && d4 <= d3) {\n let diff = p - b;\n return ClosestResult(b, dot(diff, diff));\n }\n let vc = d1 * d4 - d3 * d2;\n if (vc <= 0.0 && d1 >= 0.0 && d3 <= 0.0) {\n let v = d1 / (d1 - d3);\n let q = a + v * ab;\n let diff = p - q;\n return ClosestResult(q, dot(diff, diff));\n }\n let cp = p - c;\n let d5 = dot(ab, cp);\n let d6 = dot(ac, cp);\n if (d6 >= 0.0 && d5 <= d6) {\n let diff = p - c;\n return ClosestResult(c, dot(diff, diff));\n }\n let vb = d5 * d2 - d1 * d6;\n if (vb <= 0.0 && d2 >= 0.0 && d6 <= 0.0) {\n let w = d2 / (d2 - d6);\n let q = a + w * ac;\n let diff = p - q;\n return ClosestResult(q, dot(diff, diff));\n }\n let va = d3 * d6 - d5 * d4;\n if (va <= 0.0 && (d4 - d3) >= 0.0 && (d5 - d6) >= 0.0) {\n let w = (d4 - d3) / ((d4 - d3) + (d5 - d6));\n let q = b + w * (c - b);\n let diff = p - q;\n return ClosestResult(q, dot(diff, diff));\n }\n // Inside the face: barycentric (v, w).\n let denom = 1.0 / (va + vb + vc);\n let v = vb * denom;\n let w = vc * denom;\n let q = a + ab * v + ac * w;\n let diff = p - q;\n return ClosestResult(q, dot(diff, diff));\n}\n\n@compute @workgroup_size(64)\nfn cs_main(@builtin(global_invocation_id) gid: vec3<u32>) {\n let pi = gid.x;\n if (pi >= params.pointCount) {\n return;\n }\n let posOff = pi * params.pointStrideF32 + params.positionOffsetF32;\n let p = vec3<f32>(positions[posOff], positions[posOff + 1u], positions[posOff + 2u]);\n\n // Best squared distance across all triangles. Stored squared so\n // we can prune AABBs without taking sqrt every step.\n var bestDistSq: f32 = 1.0e30;\n var bestPoint: vec3<f32> = vec3<f32>(0.0);\n var bestNormal: vec3<f32> = vec3<f32>(0.0, 1.0, 0.0);\n\n // Stack-based BVH descent. Workgroup-uniform stack would let\n // siblings cooperate; for v1 a per-thread stack in private memory\n // is simpler and fast enough.\n var stack: array<u32, STACK_SIZE>;\n var sp: u32 = 0u;\n stack[sp] = 0u;\n sp = sp + 1u;\n\n loop {\n if (sp == 0u) { break; }\n sp = sp - 1u;\n let nodeIdx = stack[sp];\n let node = bvhNodes[nodeIdx];\n\n let aabbDistSq = distSqPointAabb(\n p.x, p.y, p.z,\n node.aabbMinX, node.aabbMinY, node.aabbMinZ,\n node.aabbMaxX, node.aabbMaxY, node.aabbMaxZ,\n );\n if (aabbDistSq >= bestDistSq) {\n continue;\n }\n\n let leafFlag = node.leafOrLeft & LEAF_FLAG;\n if (leafFlag != 0u) {\n let triStart = node.leafOrLeft & (~LEAF_FLAG);\n let triCount = node.countOrRight;\n var i: u32 = 0u;\n loop {\n if (i >= triCount) { break; }\n let triOff = (triStart + i) * 12u;\n let v0 = vec3<f32>(triangles[triOff], triangles[triOff + 1u], triangles[triOff + 2u]);\n let v1 = vec3<f32>(triangles[triOff + 3u], triangles[triOff + 4u], triangles[triOff + 5u]);\n let v2 = vec3<f32>(triangles[triOff + 6u], triangles[triOff + 7u], triangles[triOff + 8u]);\n let n = vec3<f32>(triangles[triOff + 9u], triangles[triOff + 10u], triangles[triOff + 11u]);\n let res = closestPointOnTriangle(p, v0, v1, v2);\n if (res.distSq < bestDistSq) {\n bestDistSq = res.distSq;\n bestPoint = res.point;\n bestNormal = n;\n }\n i = i + 1u;\n }\n } else {\n // Internal node: push both children. Sibling that's closer to\n // p first (top of stack) so we hit the tighter bound earlier.\n let leftIdx = node.leafOrLeft;\n let rightIdx = node.countOrRight;\n let lNode = bvhNodes[leftIdx];\n let rNode = bvhNodes[rightIdx];\n let lDist = distSqPointAabb(\n p.x, p.y, p.z,\n lNode.aabbMinX, lNode.aabbMinY, lNode.aabbMinZ,\n lNode.aabbMaxX, lNode.aabbMaxY, lNode.aabbMaxZ,\n );\n let rDist = distSqPointAabb(\n p.x, p.y, p.z,\n rNode.aabbMinX, rNode.aabbMinY, rNode.aabbMinZ,\n rNode.aabbMaxX, rNode.aabbMaxY, rNode.aabbMaxZ,\n );\n // Push the farther child first \u2192 closer popped first.\n if (sp + 2u <= STACK_SIZE) {\n if (lDist < rDist) {\n stack[sp] = rightIdx; sp = sp + 1u;\n stack[sp] = leftIdx; sp = sp + 1u;\n } else {\n stack[sp] = leftIdx; sp = sp + 1u;\n stack[sp] = rightIdx; sp = sp + 1u;\n }\n }\n }\n }\n\n // Signed distance: project (p - closestPoint) onto the closest\n // triangle's normal. Positive means p is on the outward side.\n //\n // sign() returns 0 when (p - closestPoint) is perpendicular to the\n // normal -- i.e. the point is COPLANAR with the triangle but its closest\n // feature is an edge/vertex (a point beside a wall, an open door swung\n // into a wall's plane, a floor point laterally past the nearest floor\n // tri). That multiplied a genuinely large dist by 0 and painted far\n // points at the ramp centre (white). Treat the in-plane case as the\n // outward side so the magnitude still flags them.\n let toPoint = p - bestPoint;\n let dist = sqrt(bestDistSq);\n let nd = dot(toPoint, bestNormal);\n let s = select(-1.0, 1.0, nd >= 0.0);\n var signed: f32 = s * dist;\n\n // Optional clip: keeps the histogram + ramp focused on near-surface\n // points. Past \u00B1maxRange the value pegs at the edge.\n if (params.maxRange > 0.0) {\n let mr = params.maxRange;\n if (signed > mr) { signed = mr; }\n if (signed < -mr) { signed = -mr; }\n }\n\n deviations[pi] = signed;\n}\n";
23
23
  //# sourceMappingURL=deviation-shader.wgsl.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"deviation-shader.wgsl.d.ts","sourceRoot":"","sources":["../../src/deviation/deviation-shader.wgsl.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,eAAO,MAAM,qBAAqB,8kOAmNjC,CAAC"}
1
+ {"version":3,"file":"deviation-shader.wgsl.d.ts","sourceRoot":"","sources":["../../src/deviation/deviation-shader.wgsl.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,eAAO,MAAM,qBAAqB,smPA4NjC,CAAC"}
@@ -217,10 +217,19 @@ fn cs_main(@builtin(global_invocation_id) gid: vec3<u32>) {
217
217
  }
218
218
 
219
219
  // Signed distance: project (p - closestPoint) onto the closest
220
- // triangle's normal. Positive p is on the outward side.
220
+ // triangle's normal. Positive means p is on the outward side.
221
+ //
222
+ // sign() returns 0 when (p - closestPoint) is perpendicular to the
223
+ // normal -- i.e. the point is COPLANAR with the triangle but its closest
224
+ // feature is an edge/vertex (a point beside a wall, an open door swung
225
+ // into a wall's plane, a floor point laterally past the nearest floor
226
+ // tri). That multiplied a genuinely large dist by 0 and painted far
227
+ // points at the ramp centre (white). Treat the in-plane case as the
228
+ // outward side so the magnitude still flags them.
221
229
  let toPoint = p - bestPoint;
222
230
  let dist = sqrt(bestDistSq);
223
- let s = sign(dot(toPoint, bestNormal));
231
+ let nd = dot(toPoint, bestNormal);
232
+ let s = select(-1.0, 1.0, nd >= 0.0);
224
233
  var signed: f32 = s * dist;
225
234
 
226
235
  // Optional clip: keeps the histogram + ramp focused on near-surface
@@ -1 +1 @@
1
- {"version":3,"file":"deviation-shader.wgsl.js","sourceRoot":"","sources":["../../src/deviation/deviation-shader.wgsl.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmN/C,CAAC"}
1
+ {"version":3,"file":"deviation-shader.wgsl.js","sourceRoot":"","sources":["../../src/deviation/deviation-shader.wgsl.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4N/C,CAAC"}
package/dist/index.d.ts CHANGED
@@ -61,6 +61,7 @@ export declare class Renderer {
61
61
  private canvas;
62
62
  private sectionPlaneRenderer;
63
63
  private section2DOverlayRenderer;
64
+ private overlayLineColor;
64
65
  private symbolicFillPipeline;
65
66
  private symbolicTextPipeline;
66
67
  private postProcessor;
@@ -69,6 +70,9 @@ export declare class Renderer {
69
70
  private skyPass;
70
71
  private edlOptions;
71
72
  private pointCloudRenderer;
73
+ /** Set true at the end of `init()`; gates `whenReady()`. */
74
+ private ready;
75
+ private readyWaiters;
72
76
  private deviationPipeline;
73
77
  /**
74
78
  * Cache of which mesh-set the BVH was built from. We rebuild on
@@ -99,6 +103,16 @@ export declare class Renderer {
99
103
  * Initialize renderer
100
104
  */
101
105
  init(): Promise<void>;
106
+ /**
107
+ * Resolves once `init()` has finished and the GPU device + point-cloud
108
+ * renderer are usable. Callers that may run before init completes — e.g.
109
+ * dropping a point cloud immediately after the viewport mounts, before
110
+ * the async WebGPU init resolves — should `await renderer.whenReady()`
111
+ * before `beginPointCloudStream`, which otherwise throws
112
+ * "Renderer not initialized".
113
+ */
114
+ whenReady(): Promise<void>;
115
+ private markReady;
102
116
  /**
103
117
  * Replace all loaded point clouds with `assets`.
104
118
  *
@@ -406,6 +420,13 @@ export declare class Renderer {
406
420
  * Clear the 2D section overlay
407
421
  */
408
422
  clearSection2DOverlay(): void;
423
+ /**
424
+ * Set the colour of the overlay lines (annotation / alignment / grid) and the
425
+ * section-cut outline (RGBA, 0..1). Defaults to opaque black; theme it to keep
426
+ * lines legible on a dark canvas. The matching label colour is per-text via
427
+ * `SymbolicTextInput.color` on `uploadAnnotationTexts3D`.
428
+ */
429
+ setOverlayLineColor(color: readonly [number, number, number, number]): void;
409
430
  /**
410
431
  * Upload pre-lifted 3D line-list vertices for the standalone annotation
411
432
  * overlay. Each segment is `[x1, y1, z1, x2, y2, z2]` in world space.
@@ -448,6 +469,17 @@ export declare class Renderer {
448
469
  uploadGridLines3D(vertices: Float32Array): void;
449
470
  /** Clear the structural-grid overlay. */
450
471
  clearGridLines3D(): void;
472
+ /**
473
+ * Show (or clear) the clash-overlap box: the wireframe AABB of a focused
474
+ * clash, drawn in `color` so the overlap region reads as a distinct third
475
+ * colour next to the two glowing clash elements (#1277). Pass `null` to
476
+ * clear. `min`/`max` are world-space corners (clash works in world frame).
477
+ */
478
+ setClashOverlapBox(box: {
479
+ min: [number, number, number];
480
+ max: [number, number, number];
481
+ color: [number, number, number, number];
482
+ } | null): void;
451
483
  /**
452
484
  * Upload filled IfcAnnotation regions for the symbolic overlay
453
485
  * (issue #653). Pass an empty array to clear.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -13,6 +13,7 @@ export { Picker } from './picker.js';
13
13
  export { MathUtils } from './math.js';
14
14
  export { SectionPlaneRenderer } from './section-plane.js';
15
15
  export { Section2DOverlayRenderer } from './section-2d-overlay.js';
16
+ import { aabbEdgeLineList } from './aabb-edges.js';
16
17
  // IfcAnnotation overlay pipelines (3D world-space). Self-contained — caller
17
18
  // passes a GPUDevice + presentation format and invokes `.render(pass, viewProj)`
18
19
  // from inside an RGBA-blended pass. See packages/renderer/src/symbolic-overlay-pipelines.ts.
@@ -94,6 +95,9 @@ export class Renderer {
94
95
  canvas;
95
96
  sectionPlaneRenderer = null;
96
97
  section2DOverlayRenderer = null;
98
+ // Overlay/section-cut line colour, kept on the Renderer so it survives a
99
+ // pre-init call and a section2DOverlayRenderer re-creation (re-applied below).
100
+ overlayLineColor = [0, 0, 0, 1];
97
101
  // IfcAnnotation overlay pipelines (issue #653). Created on `init()` once
98
102
  // the device exists; nulled until then.
99
103
  symbolicFillPipeline = null;
@@ -111,6 +115,9 @@ export class Renderer {
111
115
  highQuality: true,
112
116
  };
113
117
  pointCloudRenderer = null;
118
+ /** Set true at the end of `init()`; gates `whenReady()`. */
119
+ ready = false;
120
+ readyWaiters = [];
114
121
  deviationPipeline = null;
115
122
  /**
116
123
  * Cache of which mesh-set the BVH was built from. We rebuild on
@@ -187,6 +194,8 @@ export class Renderer {
187
194
  this.picker = new Picker(this.device, width, height);
188
195
  this.sectionPlaneRenderer = new SectionPlaneRenderer(this.device.getDevice(), this.device.getFormat(), this.pipeline.getSampleCount());
189
196
  this.section2DOverlayRenderer = new Section2DOverlayRenderer(this.device.getDevice(), this.device.getFormat(), this.pipeline.getSampleCount());
197
+ // Re-apply any colour set before this (re)creation so it isn't lost.
198
+ this.section2DOverlayRenderer.setOverlayLineColor(this.overlayLineColor);
190
199
  // IfcAnnotation overlay pipelines (issue #653). Share the device +
191
200
  // presentation format AND the MSAA sample count + objectId attachment
192
201
  // shape with the rest of the renderer so they composite into the same
@@ -234,6 +243,27 @@ export class Renderer {
234
243
  },
235
244
  };
236
245
  });
246
+ this.markReady();
247
+ }
248
+ /**
249
+ * Resolves once `init()` has finished and the GPU device + point-cloud
250
+ * renderer are usable. Callers that may run before init completes — e.g.
251
+ * dropping a point cloud immediately after the viewport mounts, before
252
+ * the async WebGPU init resolves — should `await renderer.whenReady()`
253
+ * before `beginPointCloudStream`, which otherwise throws
254
+ * "Renderer not initialized".
255
+ */
256
+ whenReady() {
257
+ if (this.ready)
258
+ return Promise.resolve();
259
+ return new Promise((resolve) => { this.readyWaiters.push(resolve); });
260
+ }
261
+ markReady() {
262
+ this.ready = true;
263
+ const waiters = this.readyWaiters;
264
+ this.readyWaiters = [];
265
+ for (const w of waiters)
266
+ w();
237
267
  }
238
268
  /**
239
269
  * Replace all loaded point clouds with `assets`.
@@ -447,6 +477,8 @@ export class Renderer {
447
477
  // Otherwise the caller's "compute done" callback fires before
448
478
  // the deviation buffers are actually populated.
449
479
  await this.device.getDevice().queue.onSubmittedWorkDone();
480
+ // The GPU is done reading each chunk's params uniform — free them.
481
+ this.deviationPipeline.releaseTransientParams();
450
482
  this.requestRender();
451
483
  // Suggest a default half-range = max(0.01m, max-extent / 1000).
452
484
  // Tighter than the maxRange clip; gives the user a reasonable
@@ -1759,7 +1791,8 @@ export class Renderer {
1759
1791
  const overrideBatches = this.scene.getOverrideBatches();
1760
1792
  if (overrideBatches.length > 0) {
1761
1793
  pass.setPipeline(this.pipeline.getOverlayPipeline());
1762
- tplFlags[0] = 2; // set overlay bit for the duration of these draws
1794
+ // bit 1 = overlay; bit 5 (32) = emphasize (pop) see shader.
1795
+ tplFlags[0] = options.emphasizeOverrides ? (2 | 32) : 2;
1763
1796
  for (const batch of overrideBatches) {
1764
1797
  renderBatch(batch);
1765
1798
  }
@@ -2074,6 +2107,9 @@ export class Renderer {
2074
2107
  if (this.section2DOverlayRenderer?.hasGridLines3D()) {
2075
2108
  this.section2DOverlayRenderer.drawGridLines3D(pass, viewProj);
2076
2109
  }
2110
+ if (this.section2DOverlayRenderer?.hasClashBoxLines3D()) {
2111
+ this.section2DOverlayRenderer.drawClashBoxLines3D(pass, viewProj);
2112
+ }
2077
2113
  if (this.symbolicTextPipeline?.hasGeometry()) {
2078
2114
  // Pass viewport pixel dimensions so the shader can scale glyphs
2079
2115
  // to a constant on-screen size (BIMvision-style annotations)
@@ -2356,6 +2392,19 @@ export class Renderer {
2356
2392
  this.section2DOverlayRenderer.clearGeometry();
2357
2393
  }
2358
2394
  }
2395
+ /**
2396
+ * Set the colour of the overlay lines (annotation / alignment / grid) and the
2397
+ * section-cut outline (RGBA, 0..1). Defaults to opaque black; theme it to keep
2398
+ * lines legible on a dark canvas. The matching label colour is per-text via
2399
+ * `SymbolicTextInput.color` on `uploadAnnotationTexts3D`.
2400
+ */
2401
+ setOverlayLineColor(color) {
2402
+ // Persist on the Renderer so a pre-init call (and any later overlay
2403
+ // re-creation) keeps the colour — init() re-applies this.overlayLineColor.
2404
+ this.overlayLineColor = color;
2405
+ this.section2DOverlayRenderer?.setOverlayLineColor(color);
2406
+ this.requestRender();
2407
+ }
2359
2408
  /**
2360
2409
  * Upload pre-lifted 3D line-list vertices for the standalone annotation
2361
2410
  * overlay. Each segment is `[x1, y1, z1, x2, y2, z2]` in world space.
@@ -2487,6 +2536,24 @@ export class Renderer {
2487
2536
  this.requestRender();
2488
2537
  }
2489
2538
  }
2539
+ /**
2540
+ * Show (or clear) the clash-overlap box: the wireframe AABB of a focused
2541
+ * clash, drawn in `color` so the overlap region reads as a distinct third
2542
+ * colour next to the two glowing clash elements (#1277). Pass `null` to
2543
+ * clear. `min`/`max` are world-space corners (clash works in world frame).
2544
+ */
2545
+ setClashOverlapBox(box) {
2546
+ if (!this.section2DOverlayRenderer)
2547
+ return;
2548
+ if (!box) {
2549
+ this.section2DOverlayRenderer.clearClashBoxLines3D();
2550
+ this.requestRender();
2551
+ return;
2552
+ }
2553
+ this.section2DOverlayRenderer.setClashBoxLineColor(box.color);
2554
+ this.section2DOverlayRenderer.uploadClashBoxLines3D(aabbEdgeLineList(box.min, box.max));
2555
+ this.requestRender();
2556
+ }
2490
2557
  /**
2491
2558
  * Upload filled IfcAnnotation regions for the symbolic overlay
2492
2559
  * (issue #653). Pass an empty array to clear.