@ifc-lite/renderer 6.3.3 → 6.5.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 (223) hide show
  1. package/dist/camera-animation.d.ts +7 -1
  2. package/dist/camera-animation.d.ts.map +1 -1
  3. package/dist/camera-animation.js +19 -3
  4. package/dist/camera-animation.js.map +1 -1
  5. package/dist/camera-fit-geometry.d.ts +47 -0
  6. package/dist/camera-fit-geometry.d.ts.map +1 -0
  7. package/dist/camera-fit-geometry.js +44 -0
  8. package/dist/camera-fit-geometry.js.map +1 -0
  9. package/dist/camera-framing.d.ts +27 -21
  10. package/dist/camera-framing.d.ts.map +1 -1
  11. package/dist/camera-framing.js +47 -44
  12. package/dist/camera-framing.js.map +1 -1
  13. package/dist/camera-preset-view.d.ts +18 -0
  14. package/dist/camera-preset-view.d.ts.map +1 -1
  15. package/dist/camera-preset-view.js +42 -0
  16. package/dist/camera-preset-view.js.map +1 -1
  17. package/dist/camera.d.ts +14 -1
  18. package/dist/camera.d.ts.map +1 -1
  19. package/dist/camera.js +14 -2
  20. package/dist/camera.js.map +1 -1
  21. package/dist/clip-types.d.ts +35 -0
  22. package/dist/clip-types.d.ts.map +1 -0
  23. package/dist/clip-types.js +5 -0
  24. package/dist/clip-types.js.map +1 -0
  25. package/dist/device-recovery.js +11 -1
  26. package/dist/device-recovery.js.map +1 -1
  27. package/dist/device.d.ts +4 -4
  28. package/dist/device.js +9 -9
  29. package/dist/device.js.map +1 -1
  30. package/dist/extra-clip-planes.d.ts +57 -0
  31. package/dist/extra-clip-planes.d.ts.map +1 -0
  32. package/dist/extra-clip-planes.js +161 -0
  33. package/dist/extra-clip-planes.js.map +1 -0
  34. package/dist/gpu-counters.d.ts +4 -2
  35. package/dist/gpu-counters.d.ts.map +1 -1
  36. package/dist/gpu-counters.js +9 -6
  37. package/dist/gpu-counters.js.map +1 -1
  38. package/dist/index.d.ts +19 -5
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +69 -90
  41. package/dist/index.js.map +1 -1
  42. package/dist/mesh-rte-uniforms.d.ts +7 -3
  43. package/dist/mesh-rte-uniforms.d.ts.map +1 -1
  44. package/dist/mesh-rte-uniforms.js +16 -2
  45. package/dist/mesh-rte-uniforms.js.map +1 -1
  46. package/dist/opaque-visibility-commands.d.ts +3 -0
  47. package/dist/opaque-visibility-commands.d.ts.map +1 -0
  48. package/dist/opaque-visibility-commands.js +11 -0
  49. package/dist/opaque-visibility-commands.js.map +1 -0
  50. package/dist/opaque-visibility-pass.d.ts +37 -0
  51. package/dist/opaque-visibility-pass.d.ts.map +1 -0
  52. package/dist/opaque-visibility-pass.js +230 -0
  53. package/dist/opaque-visibility-pass.js.map +1 -0
  54. package/dist/pick-types.d.ts +5 -1
  55. package/dist/pick-types.d.ts.map +1 -1
  56. package/dist/picker-rte-uniforms.d.ts +1 -1
  57. package/dist/picker-rte-uniforms.d.ts.map +1 -1
  58. package/dist/picker-rte-uniforms.js +4 -2
  59. package/dist/picker-rte-uniforms.js.map +1 -1
  60. package/dist/picker-shaders.d.ts +5 -0
  61. package/dist/picker-shaders.d.ts.map +1 -0
  62. package/dist/picker-shaders.js +157 -0
  63. package/dist/picker-shaders.js.map +1 -0
  64. package/dist/picker.d.ts +3 -0
  65. package/dist/picker.d.ts.map +1 -1
  66. package/dist/picker.js +43 -133
  67. package/dist/picker.js.map +1 -1
  68. package/dist/pipeline.d.ts +5 -9
  69. package/dist/pipeline.d.ts.map +1 -1
  70. package/dist/pipeline.js +34 -29
  71. package/dist/pipeline.js.map +1 -1
  72. package/dist/point-picker.d.ts +2 -1
  73. package/dist/point-picker.d.ts.map +1 -1
  74. package/dist/point-picker.js +12 -4
  75. package/dist/point-picker.js.map +1 -1
  76. package/dist/pointcloud/point-cloud-renderer.d.ts +4 -4
  77. package/dist/pointcloud/point-cloud-renderer.d.ts.map +1 -1
  78. package/dist/pointcloud/point-cloud-renderer.js +1 -1
  79. package/dist/pointcloud/point-cloud-renderer.js.map +1 -1
  80. package/dist/pointcloud/point-cloud-uniforms.d.ts +3 -1
  81. package/dist/pointcloud/point-cloud-uniforms.d.ts.map +1 -1
  82. package/dist/pointcloud/point-cloud-uniforms.js +3 -1
  83. package/dist/pointcloud/point-cloud-uniforms.js.map +1 -1
  84. package/dist/pointcloud/point-pipeline.d.ts +3 -1
  85. package/dist/pointcloud/point-pipeline.d.ts.map +1 -1
  86. package/dist/pointcloud/point-pipeline.js +4 -1
  87. package/dist/pointcloud/point-pipeline.js.map +1 -1
  88. package/dist/pointcloud/point-shader.wgsl.d.ts +1 -1
  89. package/dist/pointcloud/point-shader.wgsl.d.ts.map +1 -1
  90. package/dist/pointcloud/point-shader.wgsl.js +8 -0
  91. package/dist/pointcloud/point-shader.wgsl.js.map +1 -1
  92. package/dist/post-pass-chain.d.ts +1 -0
  93. package/dist/post-pass-chain.d.ts.map +1 -1
  94. package/dist/post-pass-chain.js +1 -0
  95. package/dist/post-pass-chain.js.map +1 -1
  96. package/dist/quantized-lifecycle.d.ts +6 -0
  97. package/dist/quantized-lifecycle.d.ts.map +1 -0
  98. package/dist/quantized-lifecycle.js +19 -0
  99. package/dist/quantized-lifecycle.js.map +1 -0
  100. package/dist/raycast-engine.d.ts.map +1 -1
  101. package/dist/raycast-engine.js +3 -2
  102. package/dist/raycast-engine.js.map +1 -1
  103. package/dist/render-section-draw.d.ts +5 -0
  104. package/dist/render-section-draw.d.ts.map +1 -1
  105. package/dist/render-section-draw.js +59 -25
  106. package/dist/render-section-draw.js.map +1 -1
  107. package/dist/render-section-plane.d.ts +5 -33
  108. package/dist/render-section-plane.d.ts.map +1 -1
  109. package/dist/render-section-plane.js +8 -175
  110. package/dist/render-section-plane.js.map +1 -1
  111. package/dist/renderer-frame-timing.d.ts +1 -0
  112. package/dist/renderer-frame-timing.d.ts.map +1 -1
  113. package/dist/renderer-frame-timing.js +8 -1
  114. package/dist/renderer-frame-timing.js.map +1 -1
  115. package/dist/renderer-overlays.d.ts +8 -2
  116. package/dist/renderer-overlays.d.ts.map +1 -1
  117. package/dist/renderer-overlays.js +22 -45
  118. package/dist/renderer-overlays.js.map +1 -1
  119. package/dist/scene-raycaster.d.ts +1 -1
  120. package/dist/scene-raycaster.d.ts.map +1 -1
  121. package/dist/scene-raycaster.js +18 -44
  122. package/dist/scene-raycaster.js.map +1 -1
  123. package/dist/scene-rect-select.d.ts.map +1 -1
  124. package/dist/scene-rect-select.js +2 -1
  125. package/dist/scene-rect-select.js.map +1 -1
  126. package/dist/section-2d-lift.d.ts +25 -0
  127. package/dist/section-2d-lift.d.ts.map +1 -1
  128. package/dist/section-2d-lift.js +35 -0
  129. package/dist/section-2d-lift.js.map +1 -1
  130. package/dist/section-2d-overlay.d.ts +41 -12
  131. package/dist/section-2d-overlay.d.ts.map +1 -1
  132. package/dist/section-2d-overlay.js +121 -179
  133. package/dist/section-2d-overlay.js.map +1 -1
  134. package/dist/section-2d-types.d.ts +2 -0
  135. package/dist/section-2d-types.d.ts.map +1 -1
  136. package/dist/section-cap-geometry.d.ts +33 -0
  137. package/dist/section-cap-geometry.d.ts.map +1 -0
  138. package/dist/section-cap-geometry.js +137 -0
  139. package/dist/section-cap-geometry.js.map +1 -0
  140. package/dist/section-cap-set.d.ts +60 -0
  141. package/dist/section-cap-set.d.ts.map +1 -0
  142. package/dist/section-cap-set.js +212 -0
  143. package/dist/section-cap-set.js.map +1 -0
  144. package/dist/section-cap-style.d.ts +3 -0
  145. package/dist/section-cap-style.d.ts.map +1 -1
  146. package/dist/section-cap-style.js.map +1 -1
  147. package/dist/section-cap-upload.d.ts +16 -0
  148. package/dist/section-cap-upload.d.ts.map +1 -0
  149. package/dist/section-cap-upload.js +52 -0
  150. package/dist/section-cap-upload.js.map +1 -0
  151. package/dist/section-exclusions.d.ts +26 -0
  152. package/dist/section-exclusions.d.ts.map +1 -0
  153. package/dist/section-exclusions.js +95 -0
  154. package/dist/section-exclusions.js.map +1 -0
  155. package/dist/section-plane-frames.d.ts +48 -0
  156. package/dist/section-plane-frames.d.ts.map +1 -0
  157. package/dist/section-plane-frames.js +49 -0
  158. package/dist/section-plane-frames.js.map +1 -0
  159. package/dist/section-plane-resolve.d.ts +63 -0
  160. package/dist/section-plane-resolve.d.ts.map +1 -0
  161. package/dist/section-plane-resolve.js +200 -0
  162. package/dist/section-plane-resolve.js.map +1 -0
  163. package/dist/selection-mask-pass.d.ts +2 -0
  164. package/dist/selection-mask-pass.d.ts.map +1 -1
  165. package/dist/selection-mask-pass.js +16 -4
  166. package/dist/selection-mask-pass.js.map +1 -1
  167. package/dist/selection-mask-pipelines.d.ts +5 -1
  168. package/dist/selection-mask-pipelines.d.ts.map +1 -1
  169. package/dist/selection-mask-pipelines.js +27 -3
  170. package/dist/selection-mask-pipelines.js.map +1 -1
  171. package/dist/selection-outline-frame.d.ts +3 -1
  172. package/dist/selection-outline-frame.d.ts.map +1 -1
  173. package/dist/selection-outline-frame.js +2 -1
  174. package/dist/selection-outline-frame.js.map +1 -1
  175. package/dist/shaders/depth-nudge.wgsl.d.ts +2 -2
  176. package/dist/shaders/depth-nudge.wgsl.d.ts.map +1 -1
  177. package/dist/shaders/depth-nudge.wgsl.js +1 -18
  178. package/dist/shaders/depth-nudge.wgsl.js.map +1 -1
  179. package/dist/shaders/main.wgsl.d.ts +1 -1
  180. package/dist/shaders/main.wgsl.d.ts.map +1 -1
  181. package/dist/shaders/main.wgsl.js +9 -1
  182. package/dist/shaders/main.wgsl.js.map +1 -1
  183. package/dist/shaders/mesh-uniforms.wgsl.d.ts +1 -1
  184. package/dist/shaders/mesh-uniforms.wgsl.d.ts.map +1 -1
  185. package/dist/shaders/mesh-uniforms.wgsl.js +11 -3
  186. package/dist/shaders/mesh-uniforms.wgsl.js.map +1 -1
  187. package/dist/shaders/opaque-visibility.wgsl.d.ts +11 -0
  188. package/dist/shaders/opaque-visibility.wgsl.d.ts.map +1 -0
  189. package/dist/shaders/opaque-visibility.wgsl.js +55 -0
  190. package/dist/shaders/opaque-visibility.wgsl.js.map +1 -0
  191. package/dist/shaders/section-2d-overlay.wgsl.d.ts +11 -5
  192. package/dist/shaders/section-2d-overlay.wgsl.d.ts.map +1 -1
  193. package/dist/shaders/section-2d-overlay.wgsl.js +31 -5
  194. package/dist/shaders/section-2d-overlay.wgsl.js.map +1 -1
  195. package/dist/shaders/selection-mask.wgsl.d.ts +1 -1
  196. package/dist/shaders/selection-mask.wgsl.d.ts.map +1 -1
  197. package/dist/shaders/selection-mask.wgsl.js +10 -4
  198. package/dist/shaders/selection-mask.wgsl.js.map +1 -1
  199. package/dist/shaders/shadow.wgsl.d.ts +1 -1
  200. package/dist/shaders/shadow.wgsl.d.ts.map +1 -1
  201. package/dist/shaders/shadow.wgsl.js +22 -7
  202. package/dist/shaders/shadow.wgsl.js.map +1 -1
  203. package/dist/shaders/symbolic-overlay.wgsl.d.ts +1 -1
  204. package/dist/shaders/symbolic-overlay.wgsl.d.ts.map +1 -1
  205. package/dist/shadow-occluders.d.ts.map +1 -1
  206. package/dist/shadow-occluders.js +4 -0
  207. package/dist/shadow-occluders.js.map +1 -1
  208. package/dist/shadow-pass.d.ts +2 -5
  209. package/dist/shadow-pass.d.ts.map +1 -1
  210. package/dist/shadow-pass.js +17 -17
  211. package/dist/shadow-pass.js.map +1 -1
  212. package/dist/shadow-types.d.ts +7 -0
  213. package/dist/shadow-types.d.ts.map +1 -1
  214. package/dist/shadow-types.js.map +1 -1
  215. package/dist/source-curve-clipping.d.ts.map +1 -1
  216. package/dist/source-curve-clipping.js +7 -1
  217. package/dist/source-curve-clipping.js.map +1 -1
  218. package/dist/source-curve-snap.d.ts.map +1 -1
  219. package/dist/source-curve-snap.js +2 -1
  220. package/dist/source-curve-snap.js.map +1 -1
  221. package/dist/types.d.ts +12 -16
  222. package/dist/types.d.ts.map +1 -1
  223. package/package.json +3 -3
@@ -0,0 +1,49 @@
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
+ * Where every section plane is in the scene (#7545), for the UI to mark it.
6
+ *
7
+ * The renderer resolves a cardinal plane's slider percentage into a world plane
8
+ * (its own bounds, the building rotation); nothing outside it can do that
9
+ * exactly. So the viewer's name tags, outlines and drag handle ask for the
10
+ * planes' world-space frames, resolved the way the last frame resolved them.
11
+ * Pure: it holds no GPU object.
12
+ */
13
+ import { planeBasis } from './section-plane-basis.js';
14
+ import { resolveSectionPlaneGeometry } from './section-plane-resolve.js';
15
+ /** The anchor and quad of `dot(p, normal) = distance` across `bounds`, matching the preview quad's size. */
16
+ export function planeFrameGeometry(normal, distance, bounds) {
17
+ const [nx, ny, nz] = normal;
18
+ const { min, max } = bounds;
19
+ const cx = (min.x + max.x) / 2;
20
+ const cy = (min.y + max.y) / 2;
21
+ const cz = (min.z + max.z) / 2;
22
+ const k = distance - (cx * nx + cy * ny + cz * nz);
23
+ const anchor = [cx + nx * k, cy + ny * k, cz + nz * k];
24
+ const { tangent: t, bitangent: b } = planeBasis([nx, ny, nz]);
25
+ const half = 0.55 * Math.hypot(max.x - min.x, max.y - min.y, max.z - min.z);
26
+ const corner = (st, sb) => [
27
+ anchor[0] + t[0] * half * st + b[0] * half * sb,
28
+ anchor[1] + t[1] * half * st + b[1] * half * sb,
29
+ anchor[2] + t[2] * half * st + b[2] * half * sb,
30
+ ];
31
+ return { anchor, corners: [corner(-1, -1), corner(1, -1), corner(1, 1), corner(-1, 1)] };
32
+ }
33
+ /** Every plane of `input`, enabled or not, primary first. Seven extras at most, as the renderer clips. */
34
+ export function resolveSectionPlaneFrames(input) {
35
+ const frames = [];
36
+ const add = (plane, primary) => {
37
+ const { normal, distance } = resolveSectionPlaneGeometry(plane, input.bounds.min, input.bounds.max, input.buildingRotation);
38
+ frames.push({
39
+ id: plane.id ?? null, primary, enabled: plane.enabled, flipped: plane.flipped === true,
40
+ normal, distance, ...planeFrameGeometry(normal, distance, input.bounds),
41
+ });
42
+ };
43
+ if (input.primary)
44
+ add(input.primary, true);
45
+ for (const plane of input.extras.slice(0, 7))
46
+ add(plane, false);
47
+ return frames;
48
+ }
49
+ //# sourceMappingURL=section-plane-frames.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section-plane-frames.js","sourceRoot":"","sources":["../src/section-plane-frames.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * How one `SectionPlane` becomes the world-space plane the shaders clip on,
3
+ * lifted out of `resolveSectionPlaneFrame` so the primary plane and the cutting
4
+ * planes beyond it (#7545) are resolved by the very same code: a cardinal
5
+ * plane's slider range, the building rotation and the explicit-normal guards
6
+ * are not written twice.
7
+ */
8
+ import type { ExtraClipPlane } from './clip-types.js';
9
+ import type { SectionPlane } from './types.js';
10
+ type Xyz = {
11
+ x: number;
12
+ y: number;
13
+ z: number;
14
+ };
15
+ /**
16
+ * The distance range an AABB spans along `normal`: the min and max of
17
+ * `dot(corner, normal)` over the eight corners (issue #2447).
18
+ *
19
+ * This is the quantity a section slider has to travel over, because the plane
20
+ * the shader clips against is `dot(worldPos, normal) = distance`. Reading the
21
+ * range off one axis of the AABB instead is only the same quantity when
22
+ * `normal` IS that unit axis; on a rotated building it is short by up to
23
+ * `(1 - cos45) * extent` at each end, so the slider's 0-100% cannot reach the
24
+ * model's extremes (a 40 x 20 footprint cut on `side` at 45 degrees spans 40
25
+ * units where the true extent along the normal is 42.426).
26
+ *
27
+ * When `normal` IS a unit axis the loop collapses to that axis's extent
28
+ * bit-for-bit (`x * 1 + y * 0 + z * 0 === x` for finite inputs), so unrotated
29
+ * models are unaffected.
30
+ *
31
+ * Exported so the 2D cap upload can share the one formula instead of carrying
32
+ * a second copy — see `RendererOverlays.uploadSection2DOverlay`, which passes
33
+ * the un-rotated axis normal on purpose.
34
+ */
35
+ export declare function projectedBoundsRange(boundsMin: {
36
+ x: number;
37
+ y: number;
38
+ z: number;
39
+ }, boundsMax: {
40
+ x: number;
41
+ y: number;
42
+ z: number;
43
+ }, normal: readonly [number, number, number]): {
44
+ min: number;
45
+ max: number;
46
+ };
47
+ /**
48
+ * The normal and distance one section plane clips on. `explicit` reports that
49
+ * the caller's own `normal` + `distance` were used (a face pick) rather than the
50
+ * cardinal axis and slider position.
51
+ */
52
+ export declare function resolveSectionPlaneGeometry(plane: SectionPlane, boundsMin: Xyz, boundsMax: Xyz, buildingRotation: number | undefined): {
53
+ normal: [number, number, number];
54
+ distance: number;
55
+ explicit: boolean;
56
+ };
57
+ /**
58
+ * Every ENABLED plane of `planes` as an `ExtraClipPlane`, resolved against the
59
+ * same bounds and rotation as the primary plane; at most `limit` of them.
60
+ */
61
+ export declare function resolveExtraSectionPlanes(planes: readonly SectionPlane[] | undefined, boundsMin: Xyz, boundsMax: Xyz, buildingRotation: number | undefined, limit: number): ExtraClipPlane[];
62
+ export {};
63
+ //# sourceMappingURL=section-plane-resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section-plane-resolve.d.ts","sourceRoot":"","sources":["../src/section-plane-resolve.ts"],"names":[],"mappings":"AAIA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,KAAK,GAAG,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,oBAAoB,CAChC,SAAS,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAC9C,SAAS,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAC9C,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAC1C;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAa9B;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CACvC,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,GAAG,EACd,SAAS,EAAE,GAAG,EACd,gBAAgB,EAAE,MAAM,GAAG,SAAS,GACrC;IAAE,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAkJ3E;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACrC,MAAM,EAAE,SAAS,YAAY,EAAE,GAAG,SAAS,EAC3C,SAAS,EAAE,GAAG,EACd,SAAS,EAAE,GAAG,EACd,gBAAgB,EAAE,MAAM,GAAG,SAAS,EACpC,KAAK,EAAE,MAAM,GACd,cAAc,EAAE,CASlB"}
@@ -0,0 +1,200 @@
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
+ * The distance range an AABB spans along `normal`: the min and max of
6
+ * `dot(corner, normal)` over the eight corners (issue #2447).
7
+ *
8
+ * This is the quantity a section slider has to travel over, because the plane
9
+ * the shader clips against is `dot(worldPos, normal) = distance`. Reading the
10
+ * range off one axis of the AABB instead is only the same quantity when
11
+ * `normal` IS that unit axis; on a rotated building it is short by up to
12
+ * `(1 - cos45) * extent` at each end, so the slider's 0-100% cannot reach the
13
+ * model's extremes (a 40 x 20 footprint cut on `side` at 45 degrees spans 40
14
+ * units where the true extent along the normal is 42.426).
15
+ *
16
+ * When `normal` IS a unit axis the loop collapses to that axis's extent
17
+ * bit-for-bit (`x * 1 + y * 0 + z * 0 === x` for finite inputs), so unrotated
18
+ * models are unaffected.
19
+ *
20
+ * Exported so the 2D cap upload can share the one formula instead of carrying
21
+ * a second copy — see `RendererOverlays.uploadSection2DOverlay`, which passes
22
+ * the un-rotated axis normal on purpose.
23
+ */
24
+ export function projectedBoundsRange(boundsMin, boundsMax, normal) {
25
+ let min = Infinity;
26
+ let max = -Infinity;
27
+ for (const x of [boundsMin.x, boundsMax.x]) {
28
+ for (const y of [boundsMin.y, boundsMax.y]) {
29
+ for (const z of [boundsMin.z, boundsMax.z]) {
30
+ const d = x * normal[0] + y * normal[1] + z * normal[2];
31
+ if (d < min)
32
+ min = d;
33
+ if (d > max)
34
+ max = d;
35
+ }
36
+ }
37
+ }
38
+ return { min, max };
39
+ }
40
+ /**
41
+ * The normal and distance one section plane clips on. `explicit` reports that
42
+ * the caller's own `normal` + `distance` were used (a face pick) rather than the
43
+ * cardinal axis and slider position.
44
+ */
45
+ export function resolveSectionPlaneGeometry(plane, boundsMin, boundsMax, buildingRotation) {
46
+ const explicitNormal = plane.normal;
47
+ const explicitDistance = plane.distance;
48
+ // `SectionPlane.normal` / `.distance` are caller-supplied public
49
+ // `RenderOptions` surface (the face-pick / arbitrary-plane path from
50
+ // #243), so every component has to clear finiteness before it can reach
51
+ // the clip uniform and `_activePickSection` (#2442). Only `distance`
52
+ // used to be checked: an `Infinity` component then made `len` infinite,
53
+ // `len > 1e-6` true, and `normal = [NaN, NaN, NaN]` was written straight
54
+ // into both the draw and the GPU pick. A rejected plane degrades to the
55
+ // cardinal-axis preset below, which is always a usable plane.
56
+ const hasExplicitPlane = explicitNormal !== undefined &&
57
+ explicitDistance !== undefined &&
58
+ Number.isFinite(explicitDistance) &&
59
+ Number.isFinite(explicitNormal[0]) &&
60
+ Number.isFinite(explicitNormal[1]) &&
61
+ Number.isFinite(explicitNormal[2]);
62
+ let normal;
63
+ let distance;
64
+ if (hasExplicitPlane) {
65
+ // Defensive renormalisation in case the caller passed a
66
+ // non-unit vector (e.g. mesh face normals quantised by
67
+ // the geometry pipeline).
68
+ const nx = explicitNormal[0];
69
+ const ny = explicitNormal[1];
70
+ const nz = explicitNormal[2];
71
+ const len = Math.sqrt(nx * nx + ny * ny + nz * nz);
72
+ // Finite components are not enough: `1e200` squares to `Infinity`,
73
+ // so `len` can still overflow and `len > 1e-6` is true for it,
74
+ // yielding `normal = [0, 0, 0]` and `distance = 0` (#2442). Both the
75
+ // overflow and the degenerate near-zero vector take the documented
76
+ // [0, 1, 0] fallback.
77
+ if (Number.isFinite(len) && len > 1e-6) {
78
+ normal = [nx / len, ny / len, nz / len];
79
+ distance = explicitDistance / len;
80
+ }
81
+ else {
82
+ normal = [0, 1, 0];
83
+ distance = explicitDistance;
84
+ }
85
+ }
86
+ else {
87
+ // Cardinal-axis preset path (unchanged behaviour).
88
+ // down = Y axis (horizontal cut), front = Z axis, side = X axis
89
+ normal = [0, 0, 0];
90
+ if (plane.axis === 'side')
91
+ normal[0] = 1; // X axis
92
+ else if (plane.axis === 'down')
93
+ normal[1] = 1; // Y axis (horizontal)
94
+ else
95
+ normal[2] = 1; // Z axis (front)
96
+ // Apply building rotation if present (rotate normal around Y axis)
97
+ // Building rotation is in X-Y plane (Z is up in IFC, Y is up in WebGL)
98
+ //
99
+ // The angle must also be FINITE (#2442). It is model-derived, not
100
+ // authored by us — `rotation_angle_about_z` on the resolved IfcSite
101
+ // placement — and a malformed placement direction whose components
102
+ // overflow to Infinity (`IFCDIRECTION((0.,0.,1.0E400))`, which the
103
+ // STEP tokenizer parses to `inf`) normalises to a NaN matrix, so
104
+ // the pre-pass emits `atan2(NaN, NaN)` = NaN and nothing on the way
105
+ // to `RenderOptions` filters it. `Math.cos` is NaN for both NaN and
106
+ // Infinity, and the `rlen > 0.0001` guard below is FALSE for NaN,
107
+ // so it would reach `projectedBoundsRange`, `distance` and the clip
108
+ // uniform — the failure #2442 fixed on the explicit-plane sibling.
109
+ // Non-finite degrades to no rotation: the cardinal preset the axis
110
+ // already describes.
111
+ if (buildingRotation !== undefined &&
112
+ buildingRotation !== 0 &&
113
+ Number.isFinite(buildingRotation)) {
114
+ const cosR = Math.cos(buildingRotation);
115
+ const sinR = Math.sin(buildingRotation);
116
+ // Rotate normal vector around Y axis (vertical)
117
+ // For X-Z plane rotation: x' = x*cos - z*sin, z' = x*sin + z*cos, y' = y
118
+ const x = normal[0];
119
+ const z = normal[2];
120
+ normal[0] = x * cosR - z * sinR;
121
+ normal[2] = x * sinR + z * cosR;
122
+ // Normalize to maintain unit length
123
+ const rlen = Math.sqrt(normal[0] * normal[0] + normal[1] * normal[1] + normal[2] * normal[2]);
124
+ if (rlen > 0.0001) {
125
+ normal[0] /= rlen;
126
+ normal[1] /= rlen;
127
+ normal[2] /= rlen;
128
+ }
129
+ }
130
+ // Get the range the slider travels over. The renderer's own `boundsMin/Max`
131
+ // are computed from the GPU vertex buffers this frame, so
132
+ // they are guaranteed to be in the same Y-up world space as
133
+ // `input.worldPos` in the shader. `plane.min/max`
134
+ // comes from the UI via `coordinateInfo.shiftedBounds` and can
135
+ // be stale during streaming or outright wrong during model
136
+ // load (initialised to {0,0,0} before the first bounds update)
137
+ // — using those directly was the cause of the "slider moves
138
+ // 1% and the whole model disappears" bug.
139
+ //
140
+ // Policy: always use the renderer's own bounds for the Y-up
141
+ // range. Only honour the UI override when it is a valid,
142
+ // non-degenerate range that lies INSIDE the actual mesh
143
+ // bounds (e.g. storey filtering from the level picker).
144
+ //
145
+ // The range must be measured along the normal the plane actually
146
+ // cuts with, not along the cardinal axis it was derived from: the
147
+ // shader clips on `dot(worldPos, normal)`, so on a rotated building
148
+ // an axis-aligned extent leaves an unreachable wedge at each end of
149
+ // the slider (#2447). `projectedBoundsRange` is the axis extent
150
+ // exactly when the normal is still that unit axis.
151
+ const projected = projectedBoundsRange(boundsMin, boundsMax, normal);
152
+ let minVal = projected.min;
153
+ let maxVal = projected.max;
154
+ // The UI override arrives in AXIS-ALIGNED elevation units
155
+ // (`coordinateInfo.shiftedBounds`), while the range above is a plane
156
+ // distance. Those coincide only while the resolved normal is still
157
+ // the positive unit axis the override is expressed along — true for
158
+ // any unrotated model, and true for `axis: 'down'` at every rotation
159
+ // (a Y-axis building rotation leaves [0,1,0] fixed). Outside that,
160
+ // honouring the override would silently compare metres-along-Y
161
+ // against a distance-along-a-tilted-normal, so it is skipped and the
162
+ // full projected range stands (#2447).
163
+ const axisComponent = plane.axis === 'side' ? 0 : plane.axis === 'down' ? 1 : 2;
164
+ const overrideUnitsMatch = Math.abs(normal[axisComponent] - 1) <= 1e-6 &&
165
+ Math.abs(normal[(axisComponent + 1) % 3]) <= 1e-6 &&
166
+ Math.abs(normal[(axisComponent + 2) % 3]) <= 1e-6;
167
+ const uiMin = plane.min;
168
+ const uiMax = plane.max;
169
+ if (overrideUnitsMatch &&
170
+ Number.isFinite(uiMin) &&
171
+ Number.isFinite(uiMax) &&
172
+ uiMax - uiMin > 1e-6 &&
173
+ uiMin >= minVal - 1e-3 &&
174
+ uiMax <= maxVal + 1e-3) {
175
+ minVal = uiMin;
176
+ maxVal = uiMax;
177
+ }
178
+ // Calculate plane distance from position percentage
179
+ const range = maxVal - minVal;
180
+ distance = minVal + (plane.position / 100) * range;
181
+ }
182
+ return { normal, distance, explicit: hasExplicitPlane };
183
+ }
184
+ /**
185
+ * Every ENABLED plane of `planes` as an `ExtraClipPlane`, resolved against the
186
+ * same bounds and rotation as the primary plane; at most `limit` of them.
187
+ */
188
+ export function resolveExtraSectionPlanes(planes, boundsMin, boundsMax, buildingRotation, limit) {
189
+ const out = [];
190
+ for (const plane of planes ?? []) {
191
+ if (!plane.enabled)
192
+ continue;
193
+ if (out.length >= limit)
194
+ break;
195
+ const { normal, distance } = resolveSectionPlaneGeometry(plane, boundsMin, boundsMax, buildingRotation);
196
+ out.push({ normal, distance, flipped: plane.flipped === true, ...(plane.id !== undefined ? { id: plane.id } : {}) });
197
+ }
198
+ return out;
199
+ }
200
+ //# sourceMappingURL=section-plane-resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section-plane-resolve.js","sourceRoot":"","sources":["../src/section-plane-resolve.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAe/D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,oBAAoB,CAChC,SAA8C,EAC9C,SAA8C,EAC9C,MAAyC;IAEzC,IAAI,GAAG,GAAG,QAAQ,CAAC;IACnB,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC;IACpB,KAAK,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,KAAK,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;YACzC,KAAK,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACxD,IAAI,CAAC,GAAG,GAAG;oBAAE,GAAG,GAAG,CAAC,CAAC;gBACrB,IAAI,CAAC,GAAG,GAAG;oBAAE,GAAG,GAAG,CAAC,CAAC;YACzB,CAAC;QACL,CAAC;IACL,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AACxB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CACvC,KAAmB,EACnB,SAAc,EACd,SAAc,EACd,gBAAoC;IAEpC,MAAM,cAAc,GAAK,KAAK,CAAC,MAAM,CAAC;IACtC,MAAM,gBAAgB,GAAG,KAAK,CAAC,QAAQ,CAAC;IACxC,iEAAiE;IACjE,qEAAqE;IACrE,wEAAwE;IACxE,qEAAqE;IACrE,wEAAwE;IACxE,yEAAyE;IACzE,wEAAwE;IACxE,8DAA8D;IAC9D,MAAM,gBAAgB,GAClB,cAAc,KAAK,SAAS;QAC5B,gBAAgB,KAAK,SAAS;QAC9B,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACjC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IAEvC,IAAI,MAAgC,CAAC;IACrC,IAAI,QAAgB,CAAC;IAErB,IAAI,gBAAgB,EAAE,CAAC;QACnB,wDAAwD;QACxD,uDAAuD;QACvD,0BAA0B;QAC1B,MAAM,EAAE,GAAG,cAAe,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,EAAE,GAAG,cAAe,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,EAAE,GAAG,cAAe,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACnD,mEAAmE;QACnE,+DAA+D;QAC/D,qEAAqE;QACrE,mEAAmE;QACnE,sBAAsB;QACtB,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,IAAI,EAAE,CAAC;YACrC,MAAM,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC;YACxC,QAAQ,GAAG,gBAAiB,GAAG,GAAG,CAAC;QACvC,CAAC;aAAM,CAAC;YACJ,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACnB,QAAQ,GAAG,gBAAiB,CAAC;QACjC,CAAC;IACL,CAAC;SAAM,CAAC;QACJ,mDAAmD;QACnD,gEAAgE;QAChE,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACnB,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;YAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAQ,SAAS;aACrD,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;YAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAG,sBAAsB;;YAClE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAA8C,iBAAiB;QAElF,mEAAmE;QACnE,uEAAuE;QACvE,EAAE;QACF,kEAAkE;QAClE,oEAAoE;QACpE,mEAAmE;QACnE,mEAAmE;QACnE,iEAAiE;QACjE,oEAAoE;QACpE,oEAAoE;QACpE,kEAAkE;QAClE,oEAAoE;QACpE,mEAAmE;QACnE,mEAAmE;QACnE,qBAAqB;QACrB,IACI,gBAAgB,KAAK,SAAS;YAC9B,gBAAgB,KAAK,CAAC;YACtB,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EACnC,CAAC;YACC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YACxC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YACxC,gDAAgD;YAChD,yEAAyE;YACzE,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACpB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACpB,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC;YAChC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC;YAChC,oCAAoC;YACpC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9F,IAAI,IAAI,GAAG,MAAM,EAAE,CAAC;gBAChB,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;gBAClB,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;gBAClB,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;YACtB,CAAC;QACL,CAAC;QAED,4EAA4E;QAC5E,0DAA0D;QAC1D,4DAA4D;QAC5D,kDAAkD;QAClD,+DAA+D;QAC/D,2DAA2D;QAC3D,+DAA+D;QAC/D,4DAA4D;QAC5D,0CAA0C;QAC1C,EAAE;QACF,4DAA4D;QAC5D,yDAAyD;QACzD,wDAAwD;QACxD,wDAAwD;QACxD,EAAE;QACF,iEAAiE;QACjE,kEAAkE;QAClE,oEAAoE;QACpE,oEAAoE;QACpE,gEAAgE;QAChE,mDAAmD;QACnD,MAAM,SAAS,GAAG,oBAAoB,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QACrE,IAAI,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC;QAC3B,IAAI,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC;QAE3B,0DAA0D;QAC1D,qEAAqE;QACrE,mEAAmE;QACnE,oEAAoE;QACpE,qEAAqE;QACrE,mEAAmE;QACnE,+DAA+D;QAC/D,qEAAqE;QACrE,uCAAuC;QACvC,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChF,MAAM,kBAAkB,GACpB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI;YAC3C,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI;YACjD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;QACtD,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;QACxB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC;QACxB,IACI,kBAAkB;YAClB,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YACtB,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YACrB,KAAgB,GAAI,KAAgB,GAAG,IAAI;YAC3C,KAAgB,IAAI,MAAM,GAAG,IAAI;YACjC,KAAgB,IAAI,MAAM,GAAG,IAAI,EACpC,CAAC;YACC,MAAM,GAAG,KAAe,CAAC;YACzB,MAAM,GAAG,KAAe,CAAC;QAC7B,CAAC;QAED,oDAAoD;QACpD,MAAM,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;QAC9B,QAAQ,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC;IACvD,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;AAC5D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CACrC,MAA2C,EAC3C,SAAc,EACd,SAAc,EACd,gBAAoC,EACpC,KAAa;IAEb,MAAM,GAAG,GAAqB,EAAE,CAAC;IACjC,KAAK,MAAM,KAAK,IAAI,MAAM,IAAI,EAAE,EAAE,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,OAAO;YAAE,SAAS;QAC7B,IAAI,GAAG,CAAC,MAAM,IAAI,KAAK;YAAE,MAAM;QAC/B,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,2BAA2B,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC;QACxG,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,KAAK,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACzH,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC"}
@@ -30,6 +30,7 @@ export interface SelectionMaskFrame {
30
30
  hovered: readonly HoveredMesh[];
31
31
  /** GPU-instanced occurrences to outline (#5745); absent or null when none are selected or hovered. */
32
32
  instanced?: InstancedMaskFrame | null;
33
+ geometricVisibility?: GPUBindGroup;
33
34
  }
34
35
  export interface SelectionMaskViews {
35
36
  visibleView: GPUTextureView;
@@ -40,6 +41,7 @@ export declare class SelectionMaskPass {
40
41
  private readonly meshBindGroupLayout;
41
42
  private readonly sampleCount;
42
43
  private readonly pipelines;
44
+ private geometricPipelines;
43
45
  /** Built on the first frame with an instanced selection or hover. */
44
46
  private instanced;
45
47
  private targets;
@@ -1 +1 @@
1
- {"version":3,"file":"selection-mask-pass.d.ts","sourceRoot":"","sources":["../src/selection-mask-pass.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,OAAO,EAML,KAAK,kBAAkB,EAGxB,MAAM,+BAA+B,CAAC;AAYvC,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,SAAS,CAAC;IACxB,WAAW,EAAE,SAAS,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,YAAY,CAAC;CACzB;AAED;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,GAAG,CAC1D;IAAE,SAAS,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,GACjD;IAAE,SAAS,CAAC,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,YAAY,CAAA;CAAE,CACpD,CAAC;AAEF,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,SAAS,EAAE,cAAc,CAAC;IAC1B,kFAAkF;IAClF,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;IACpC,6EAA6E;IAC7E,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IAChC,sGAAsG;IACtG,SAAS,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,cAAc,CAAC;IAC5B,OAAO,EAAE,cAAc,CAAC;CACzB;AAeD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAqB;IACzD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAC1C,qEAAqE;IACrE,OAAO,CAAC,SAAS,CAAuC;IACxD,OAAO,CAAC,OAAO,CAA4B;IAC3C,gFAAgF;IAChF,OAAO,CAAC,aAAa,CAAwD;IAC7E,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM;IAgB9F,4FAA4F;IAC5F,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,kBAAkB,EAAE,UAAU,GAAG,SAAS,GAAG,WAAW,CAAC,GAAG,OAAO;IAI9F,MAAM,CAAC,KAAK,EAAE,kBAAkB,GAAG,kBAAkB;IAgDrD,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,UAAU;IAsBlB,OAAO,CAAC,aAAa;IAoBrB,OAAO,CAAC,cAAc;IAOtB,+EAA+E;IAC/E,OAAO,IAAI,IAAI;CAShB"}
1
+ {"version":3,"file":"selection-mask-pass.d.ts","sourceRoot":"","sources":["../src/selection-mask-pass.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,OAAO,EAOL,KAAK,kBAAkB,EAGxB,MAAM,+BAA+B,CAAC;AAavC,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,SAAS,CAAC;IACxB,WAAW,EAAE,SAAS,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,YAAY,CAAC;CACzB;AAED;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,GAAG,CAC1D;IAAE,SAAS,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,GACjD;IAAE,SAAS,CAAC,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,YAAY,CAAA;CAAE,CACpD,CAAC;AAEF,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,SAAS,EAAE,cAAc,CAAC;IAC1B,kFAAkF;IAClF,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;IACpC,6EAA6E;IAC7E,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IAChC,sGAAsG;IACtG,SAAS,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACtC,mBAAmB,CAAC,EAAE,YAAY,CAAC;CACpC;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,cAAc,CAAC;IAC5B,OAAO,EAAE,cAAc,CAAC;CACzB;AAeD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAqB;IACzD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAC1C,OAAO,CAAC,kBAAkB,CAA8B;IACxD,qEAAqE;IACrE,OAAO,CAAC,SAAS,CAAuC;IACxD,OAAO,CAAC,OAAO,CAA4B;IAC3C,gFAAgF;IAChF,OAAO,CAAC,aAAa,CAAwD;IAC7E,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM;IAiB9F,4FAA4F;IAC5F,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,kBAAkB,EAAE,UAAU,GAAG,SAAS,GAAG,WAAW,CAAC,GAAG,OAAO;IAI9F,MAAM,CAAC,KAAK,EAAE,kBAAkB,GAAG,kBAAkB;IAoDrD,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,UAAU;IAsBlB,OAAO,CAAC,aAAa;IAoBrB,OAAO,CAAC,cAAc;IAOtB,+EAA+E;IAC/E,OAAO,IAAI,IAAI;CAUhB"}
@@ -1,6 +1,7 @@
1
1
  /* This Source Code Form is subject to the terms of the Mozilla Public
2
2
  * License, v. 2.0. If a copy of the MPL was not distributed with this
3
3
  * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ import { sectionExclusions, withSectionExclusions } from './section-exclusions.js';
4
5
  /**
5
6
  * Selection/hover mask pass (#5390): draws the selected and hovered
6
7
  * meshes into two resolved targets the edge
@@ -25,7 +26,8 @@
25
26
  import { renderPassTimestampWrites } from './renderer-frame-timing.js';
26
27
  import { mainShaderSource } from './shaders/main.wgsl.js';
27
28
  import { selectionMaskFragmentSource } from './shaders/selection-mask.wgsl.js';
28
- import { createMaskPipelines, InstancedSelectionMask, isInstancedMaskEmpty, MASK_ALL_FORMAT, MASK_VISIBLE_FORMAT, } from './selection-mask-pipelines.js';
29
+ import { createMaskPipelines, createGeometricMaskPipelines, InstancedSelectionMask, isInstancedMaskEmpty, MASK_ALL_FORMAT, MASK_VISIBLE_FORMAT, } from './selection-mask-pipelines.js';
30
+ import { OPAQUE_VISIBILITY_GROUP } from './shaders/opaque-visibility.wgsl.js';
29
31
  /** The regular (non-instanced) mesh vertex layout `vs_main` reads. */
30
32
  const MESH_VERTEX_BUFFERS = [{
31
33
  arrayStride: 28,
@@ -40,6 +42,7 @@ export class SelectionMaskPass {
40
42
  meshBindGroupLayout;
41
43
  sampleCount;
42
44
  pipelines;
45
+ geometricPipelines = null;
43
46
  /** Built on the first frame with an instanced selection or hover. */
44
47
  instanced = null;
45
48
  targets = null;
@@ -48,9 +51,10 @@ export class SelectionMaskPass {
48
51
  destroyed = false;
49
52
  constructor(device, meshBindGroupLayout, sampleCount) {
50
53
  this.device = device.getDevice();
54
+ sectionExclusions(this.device).retain();
51
55
  this.meshBindGroupLayout = meshBindGroupLayout;
52
56
  this.sampleCount = sampleCount;
53
- const layout = this.device.createPipelineLayout({ bindGroupLayouts: [this.meshBindGroupLayout] });
57
+ const layout = this.device.createPipelineLayout({ bindGroupLayouts: withSectionExclusions(this.device, [this.meshBindGroupLayout]) });
54
58
  const vertexModule = this.device.createShaderModule({ label: 'selection-mask-vs', code: mainShaderSource });
55
59
  const fragmentModule = this.device.createShaderModule({
56
60
  label: 'selection-mask-fs',
@@ -86,15 +90,22 @@ export class SelectionMaskPass {
86
90
  }],
87
91
  ...(visible ? { depthStencilAttachment: { view: frame.depthView, depthReadOnly: true, stencilReadOnly: true } } : {}),
88
92
  });
89
- pass.setPipeline(this.pipelines[kind]);
93
+ if (visible && frame.geometricVisibility) {
94
+ this.geometricPipelines ??= createGeometricMaskPipelines(this.device, this.meshBindGroupLayout, this.sampleCount);
95
+ pass.setPipeline(this.geometricPipelines[kind]);
96
+ pass.setBindGroup(OPAQUE_VISIBILITY_GROUP, frame.geometricVisibility);
97
+ }
98
+ else
99
+ pass.setPipeline(this.pipelines[kind]);
90
100
  for (const mesh of meshes) {
101
+ pass.setBindGroup(3, sectionExclusions(this.device).bindGroup);
91
102
  pass.setBindGroup(0, mesh.bindGroup);
92
103
  pass.setVertexBuffer(0, mesh.vertexBuffer);
93
104
  pass.setIndexBuffer(mesh.indexBuffer, 'uint32');
94
105
  pass.drawIndexed(mesh.indexCount, 1, 0, 0, 0);
95
106
  }
96
107
  if (instanced && instancedFrame) {
97
- instanced.draw(pass, kind, kind === 'hoverVisible' ? instancedFrame.hovered : instancedFrame.selected);
108
+ instanced.draw(pass, kind, kind === 'hoverVisible' ? instancedFrame.hovered : instancedFrame.selected, frame.geometricVisibility);
98
109
  }
99
110
  pass.end();
100
111
  };
@@ -170,6 +181,7 @@ export class SelectionMaskPass {
170
181
  this.hoverUniforms = [];
171
182
  this.instanced?.destroy();
172
183
  this.instanced = null;
184
+ sectionExclusions(this.device).release();
173
185
  }
174
186
  }
175
187
  //# sourceMappingURL=selection-mask-pass.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"selection-mask-pass.js","sourceRoot":"","sources":["../src/selection-mask-pass.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"selection-mask-pass.js","sourceRoot":"","sources":["../src/selection-mask-pass.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ export declare const MASK_ALL_FORMAT: GPUTextureFormat;
5
5
  /** Which mask output a draw writes. */
6
6
  export type MaskKind = 'selectedVisible' | 'hoverVisible' | 'selectedAll';
7
7
  export type MaskPipelines = Record<MaskKind, GPURenderPipeline>;
8
+ export declare function createGeometricMaskPipelines(device: GPUDevice, meshLayout: GPUBindGroupLayout, samples: number, hoverLayout?: GPUBindGroupLayout): MaskPipelines;
8
9
  /** The three mask pipelines over one vertex stage and one fragment module. */
9
10
  export declare function createMaskPipelines(device: GPUDevice, labelPrefix: string, layout: GPUPipelineLayout, vertex: GPUVertexState, fragmentModule: GPUShaderModule, sampleCount: number): MaskPipelines;
10
11
  /** What the instanced mask draws of a template: its geometry and its instance records. */
@@ -38,6 +39,9 @@ export declare function isInstancedMaskEmpty(frame: InstancedMaskFrame | null |
38
39
  * frame that has an instanced selection or hover.
39
40
  */
40
41
  export declare class InstancedSelectionMask {
42
+ private geometricPipelines;
43
+ private readonly hoverLayout;
44
+ private readonly sampleCount;
41
45
  private readonly device;
42
46
  private readonly pipelines;
43
47
  private readonly meshBindGroupLayout;
@@ -51,7 +55,7 @@ export declare class InstancedSelectionMask {
51
55
  /** Upload this frame's uniforms. Call once per frame, before `draw`. */
52
56
  prepare(frame: InstancedMaskFrame): void;
53
57
  /** Draw `templates` into the open mask pass, one instanced draw per in-envelope run. */
54
- draw(pass: GPURenderPassEncoder, kind: MaskKind, templates: readonly InstancedMaskTemplate[]): void;
58
+ draw(pass: GPURenderPassEncoder, kind: MaskKind, templates: readonly InstancedMaskTemplate[], geometricVisibility?: GPUBindGroup): void;
55
59
  destroy(): void;
56
60
  }
57
61
  //# sourceMappingURL=selection-mask-pipelines.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"selection-mask-pipelines.d.ts","sourceRoot":"","sources":["../src/selection-mask-pipelines.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAQtE,eAAO,MAAM,mBAAmB,EAAE,gBAA6B,CAAC;AAChE,eAAO,MAAM,eAAe,EAAE,gBAA4B,CAAC;AAQ3D,uCAAuC;AACvC,MAAM,MAAM,QAAQ,GAAG,iBAAiB,GAAG,cAAc,GAAG,aAAa,CAAC;AAE1E,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;AAQhE,8EAA8E;AAC9E,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,cAAc,EACtB,cAAc,EAAE,eAAe,EAC/B,WAAW,EAAE,MAAM,GAClB,aAAa,CAgBf;AAED,0FAA0F;AAC1F,MAAM,MAAM,qBAAqB,GAAG,IAAI,CACtC,oBAAoB,EACpB,cAAc,GAAG,aAAa,GAAG,YAAY,GAAG,gBAAgB,GAAG,eAAe,GAAG,kBAAkB,GAAG,WAAW,CACtH,CAAC;AAEF,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,QAAQ,EAAE,YAAY,CAAC;IACvB;;;;;OAKG;IACH,SAAS,EAAE,UAAU,CAAC;IACtB,0DAA0D;IAC1D,QAAQ,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAC3C,qFAAqF;IACrF,OAAO,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAC1C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,yDAAyD;AACzD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAE1F;AAED;;;;;GAKG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAC1C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAqB;IACzD,OAAO,CAAC,WAAW,CAA+D;IAClF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAY;IACxC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAe;IAC9C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;IACnD,+DAA+D;IAC/D,OAAO,CAAC,IAAI,CAA4D;gBAE5D,MAAM,EAAE,SAAS,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM;IAiC3F,wEAAwE;IACxE,OAAO,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;IAyBxC,wFAAwF;IACxF,IAAI,CAAC,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,qBAAqB,EAAE,GAAG,IAAI;IAcnG,OAAO,IAAI,IAAI;CAMhB"}
1
+ {"version":3,"file":"selection-mask-pipelines.d.ts","sourceRoot":"","sources":["../src/selection-mask-pipelines.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAUtE,eAAO,MAAM,mBAAmB,EAAE,gBAA6B,CAAC;AAChE,eAAO,MAAM,eAAe,EAAE,gBAA4B,CAAC;AAQ3D,uCAAuC;AACvC,MAAM,MAAM,QAAQ,GAAG,iBAAiB,GAAG,cAAc,GAAG,aAAa,CAAC;AAE1E,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;AAEhE,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,kBAAkB,GAAG,aAAa,CAQhK;AAQD,8EAA8E;AAC9E,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,cAAc,EACtB,cAAc,EAAE,eAAe,EAC/B,WAAW,EAAE,MAAM,GAClB,aAAa,CAgBf;AAED,0FAA0F;AAC1F,MAAM,MAAM,qBAAqB,GAAG,IAAI,CACtC,oBAAoB,EACpB,cAAc,GAAG,aAAa,GAAG,YAAY,GAAG,gBAAgB,GAAG,eAAe,GAAG,kBAAkB,GAAG,WAAW,CACtH,CAAC;AAEF,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,QAAQ,EAAE,YAAY,CAAC;IACvB;;;;;OAKG;IACH,SAAS,EAAE,UAAU,CAAC;IACtB,0DAA0D;IAC1D,QAAQ,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAC3C,qFAAqF;IACrF,OAAO,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAC1C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,yDAAyD;AACzD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAE1F;AAED;;;;;GAKG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,kBAAkB,CAA8B;IACxD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAC1C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAqB;IACzD,OAAO,CAAC,WAAW,CAA+D;IAClF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAY;IACxC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAe;IAC9C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;IACnD,+DAA+D;IAC/D,OAAO,CAAC,IAAI,CAA4D;gBAE5D,MAAM,EAAE,SAAS,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM;IAmC3F,wEAAwE;IACxE,OAAO,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;IAyBxC,wFAAwF;IACxF,IAAI,CAAC,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,qBAAqB,EAAE,EAAE,mBAAmB,CAAC,EAAE,YAAY,GAAG,IAAI;IAkBvI,OAAO,IAAI,IAAI;CAMhB"}
@@ -1,6 +1,7 @@
1
1
  /* This Source Code Form is subject to the terms of the Mozilla Public
2
2
  * License, v. 2.0. If a copy of the MPL was not distributed with this
3
3
  * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ import { sectionExclusions, withSectionExclusions } from './section-exclusions.js';
4
5
  /**
5
6
  * The selection/hover mask pipelines (#5390), and the instanced variant that
6
7
  * outlines GPU-instanced occurrences (#5745): repeated windows, doors,
@@ -21,6 +22,8 @@ import { INSTANCED_RTE_DELTA_SLOT, INSTANCED_VERTEX_BUFFERS } from './instanced-
21
22
  import { drawInstanceRuns, uploadInstancedRteDeltas } from './instanced-rte.js';
22
23
  import { mainShaderSource } from './shaders/main.wgsl.js';
23
24
  import { PIPELINE_CONSTANTS } from './constants.js';
25
+ import { opaqueVisibilityLayout } from './opaque-visibility-pass.js';
26
+ import { OPAQUE_VISIBILITY_GROUP } from './shaders/opaque-visibility.wgsl.js';
24
27
  import { SELECTION_MASK_HOVER_GROUP, selectionMaskFragmentSource, } from './shaders/selection-mask.wgsl.js';
25
28
  export const MASK_VISIBLE_FORMAT = 'rg8unorm';
26
29
  export const MASK_ALL_FORMAT = 'r8unorm';
@@ -29,6 +32,15 @@ const ADDITIVE_BLEND = {
29
32
  color: { srcFactor: 'one', dstFactor: 'one' },
30
33
  alpha: { srcFactor: 'one', dstFactor: 'one' },
31
34
  };
35
+ export function createGeometricMaskPipelines(device, meshLayout, samples, hoverLayout) {
36
+ const instanced = hoverLayout !== undefined;
37
+ const layout = device.createPipelineLayout({ bindGroupLayouts: withSectionExclusions(device, [meshLayout, hoverLayout ?? device.createBindGroupLayout({ entries: [] }), opaqueVisibilityLayout(device, samples)]) });
38
+ const vertex = {
39
+ module: device.createShaderModule({ code: mainShaderSource.replace('@location(8) @interpolate(linear)', '@location(8) @interpolate(linear, sample)') }),
40
+ entryPoint: instanced ? 'vs_instanced' : 'vs_main', buffers: instanced ? INSTANCED_VERTEX_BUFFERS : [INSTANCED_VERTEX_BUFFERS[0]],
41
+ };
42
+ return createMaskPipelines(device, 'geometric-mask', layout, vertex, device.createShaderModule({ code: selectionMaskFragmentSource(instanced, samples) }), samples);
43
+ }
32
44
  const MASK_OUTPUTS = {
33
45
  selectedVisible: { label: 'selected-visible', entryPoint: 'fs_mask_selected_visible', format: MASK_VISIBLE_FORMAT },
34
46
  hoverVisible: { label: 'hover-visible', entryPoint: 'fs_mask_hover_visible', format: MASK_VISIBLE_FORMAT },
@@ -63,6 +75,9 @@ export function isInstancedMaskEmpty(frame) {
63
75
  * frame that has an instanced selection or hover.
64
76
  */
65
77
  export class InstancedSelectionMask {
78
+ geometricPipelines = null;
79
+ hoverLayout;
80
+ sampleCount;
66
81
  device;
67
82
  pipelines;
68
83
  meshBindGroupLayout;
@@ -73,16 +88,18 @@ export class InstancedSelectionMask {
73
88
  /** This frame's drawable runs per template, from `prepare`. */
74
89
  runs = new Map();
75
90
  constructor(device, meshBindGroupLayout, sampleCount) {
91
+ this.sampleCount = sampleCount;
76
92
  this.device = device;
77
93
  this.meshBindGroupLayout = meshBindGroupLayout;
78
94
  const hoverLayout = device.createBindGroupLayout({
79
95
  label: 'selection-mask-instanced-hover-bgl',
80
96
  entries: [{ binding: 0, visibility: GPUShaderStage.FRAGMENT, buffer: { type: 'uniform' } }],
81
97
  });
98
+ this.hoverLayout = hoverLayout;
82
99
  const groups = [];
83
100
  groups[0] = meshBindGroupLayout;
84
101
  groups[SELECTION_MASK_HOVER_GROUP] = hoverLayout;
85
- const layout = device.createPipelineLayout({ label: 'selection-mask-instanced-layout', bindGroupLayouts: groups });
102
+ const layout = device.createPipelineLayout({ label: 'selection-mask-instanced-layout', bindGroupLayouts: withSectionExclusions(device, groups) });
86
103
  const vertex = {
87
104
  module: device.createShaderModule({ label: 'selection-mask-instanced-vs', code: mainShaderSource }),
88
105
  entryPoint: 'vs_instanced',
@@ -129,10 +146,17 @@ export class InstancedSelectionMask {
129
146
  this.runs = new Map(templates.map((t, i) => [t, runs[i]]));
130
147
  }
131
148
  /** Draw `templates` into the open mask pass, one instanced draw per in-envelope run. */
132
- draw(pass, kind, templates) {
149
+ draw(pass, kind, templates, geometricVisibility) {
133
150
  if (templates.length === 0 || !this.meshUniform)
134
151
  return;
135
- pass.setPipeline(this.pipelines[kind]);
152
+ if (geometricVisibility && kind !== 'selectedAll') {
153
+ this.geometricPipelines ??= createGeometricMaskPipelines(this.device, this.meshBindGroupLayout, this.sampleCount, this.hoverLayout);
154
+ pass.setPipeline(this.geometricPipelines[kind]);
155
+ pass.setBindGroup(OPAQUE_VISIBILITY_GROUP, geometricVisibility);
156
+ }
157
+ else
158
+ pass.setPipeline(this.pipelines[kind]);
159
+ pass.setBindGroup(3, sectionExclusions(this.device).bindGroup);
136
160
  pass.setBindGroup(0, this.meshUniform.bindGroup);
137
161
  pass.setBindGroup(SELECTION_MASK_HOVER_GROUP, this.hoverBindGroup);
138
162
  for (const t of templates) {
@@ -1 +1 @@
1
- {"version":3,"file":"selection-mask-pipelines.js","sourceRoot":"","sources":["../src/selection-mask-pipelines.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"selection-mask-pipelines.js","sourceRoot":"","sources":["../src/selection-mask-pipelines.ts"],"names":[],"mappings":"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"}