@ifc-lite/renderer 4.2.0 → 6.0.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 (307) hide show
  1. package/dist/camera-projection.d.ts +2 -0
  2. package/dist/camera-projection.d.ts.map +1 -1
  3. package/dist/camera-projection.js +46 -0
  4. package/dist/camera-projection.js.map +1 -1
  5. package/dist/chunk-grid.d.ts +21 -0
  6. package/dist/chunk-grid.d.ts.map +1 -1
  7. package/dist/chunk-grid.js +25 -7
  8. package/dist/chunk-grid.js.map +1 -1
  9. package/dist/clash-solid-pipeline.d.ts.map +1 -1
  10. package/dist/clash-solid-pipeline.js +4 -2
  11. package/dist/clash-solid-pipeline.js.map +1 -1
  12. package/dist/deviation/deviation-computer.d.ts +4 -0
  13. package/dist/deviation/deviation-computer.d.ts.map +1 -1
  14. package/dist/deviation/deviation-computer.js +20 -0
  15. package/dist/deviation/deviation-computer.js.map +1 -1
  16. package/dist/deviation/deviation-readback.d.ts +18 -0
  17. package/dist/deviation/deviation-readback.d.ts.map +1 -0
  18. package/dist/deviation/deviation-readback.js +67 -0
  19. package/dist/deviation/deviation-readback.js.map +1 -0
  20. package/dist/edge-params.d.ts +43 -0
  21. package/dist/edge-params.d.ts.map +1 -0
  22. package/dist/edge-params.js +63 -0
  23. package/dist/edge-params.js.map +1 -0
  24. package/dist/edge-pass.d.ts +54 -0
  25. package/dist/edge-pass.d.ts.map +1 -0
  26. package/dist/edge-pass.js +185 -0
  27. package/dist/edge-pass.js.map +1 -0
  28. package/dist/entity-color-table.d.ts +140 -0
  29. package/dist/entity-color-table.d.ts.map +1 -0
  30. package/dist/entity-color-table.js +238 -0
  31. package/dist/entity-color-table.js.map +1 -0
  32. package/dist/gpu-upload-guard.d.ts +1 -1
  33. package/dist/gpu-upload-guard.js +1 -1
  34. package/dist/hover-mesh-cache.d.ts +29 -0
  35. package/dist/hover-mesh-cache.d.ts.map +1 -0
  36. package/dist/hover-mesh-cache.js +31 -0
  37. package/dist/hover-mesh-cache.js.map +1 -0
  38. package/dist/index.d.ts +43 -14
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +196 -189
  41. package/dist/index.js.map +1 -1
  42. package/dist/individual-mesh-upload.d.ts +24 -0
  43. package/dist/individual-mesh-upload.d.ts.map +1 -0
  44. package/dist/individual-mesh-upload.js +85 -0
  45. package/dist/individual-mesh-upload.js.map +1 -0
  46. package/dist/instanced-render.d.ts +22 -12
  47. package/dist/instanced-render.d.ts.map +1 -1
  48. package/dist/instanced-render.js +39 -27
  49. package/dist/instanced-render.js.map +1 -1
  50. package/dist/instanced-rte.d.ts +68 -7
  51. package/dist/instanced-rte.d.ts.map +1 -1
  52. package/dist/instanced-rte.js +98 -17
  53. package/dist/instanced-rte.js.map +1 -1
  54. package/dist/instanced-vertex-layout.d.ts +26 -0
  55. package/dist/instanced-vertex-layout.d.ts.map +1 -0
  56. package/dist/instanced-vertex-layout.js +61 -0
  57. package/dist/instanced-vertex-layout.js.map +1 -0
  58. package/dist/mesh-material.d.ts +26 -0
  59. package/dist/mesh-material.d.ts.map +1 -0
  60. package/dist/mesh-material.js +52 -0
  61. package/dist/mesh-material.js.map +1 -0
  62. package/dist/mesh-rte-uniforms.d.ts +5 -2
  63. package/dist/mesh-rte-uniforms.d.ts.map +1 -1
  64. package/dist/mesh-rte-uniforms.js +5 -2
  65. package/dist/mesh-rte-uniforms.js.map +1 -1
  66. package/dist/model-translation.d.ts.map +1 -1
  67. package/dist/model-translation.js +0 -7
  68. package/dist/model-translation.js.map +1 -1
  69. package/dist/outline-params.d.ts +45 -0
  70. package/dist/outline-params.d.ts.map +1 -0
  71. package/dist/outline-params.js +54 -0
  72. package/dist/outline-params.js.map +1 -0
  73. package/dist/overlay-routing.d.ts +8 -8
  74. package/dist/overlay-routing.js +2 -2
  75. package/dist/overlay-routing.js.map +1 -1
  76. package/dist/overlay-theme-uniforms.d.ts +54 -0
  77. package/dist/overlay-theme-uniforms.d.ts.map +1 -0
  78. package/dist/overlay-theme-uniforms.js +89 -0
  79. package/dist/overlay-theme-uniforms.js.map +1 -0
  80. package/dist/overlay-theme.d.ts +79 -0
  81. package/dist/overlay-theme.d.ts.map +1 -0
  82. package/dist/overlay-theme.js +24 -0
  83. package/dist/overlay-theme.js.map +1 -0
  84. package/dist/partial-batch-requests.d.ts +2 -2
  85. package/dist/pick-mesh-budget.d.ts +28 -0
  86. package/dist/pick-mesh-budget.d.ts.map +1 -0
  87. package/dist/pick-mesh-budget.js +74 -0
  88. package/dist/pick-mesh-budget.js.map +1 -0
  89. package/dist/picker-rte-uniforms.d.ts +7 -1
  90. package/dist/picker-rte-uniforms.d.ts.map +1 -1
  91. package/dist/picker-rte-uniforms.js +9 -1
  92. package/dist/picker-rte-uniforms.js.map +1 -1
  93. package/dist/picker.d.ts.map +1 -1
  94. package/dist/picker.js +15 -28
  95. package/dist/picker.js.map +1 -1
  96. package/dist/picking-manager.d.ts.map +1 -1
  97. package/dist/picking-manager.js +4 -47
  98. package/dist/picking-manager.js.map +1 -1
  99. package/dist/pipeline.d.ts +9 -1
  100. package/dist/pipeline.d.ts.map +1 -1
  101. package/dist/pipeline.js +47 -70
  102. package/dist/pipeline.js.map +1 -1
  103. package/dist/point-picker.d.ts.map +1 -1
  104. package/dist/point-picker.js +7 -2
  105. package/dist/point-picker.js.map +1 -1
  106. package/dist/pointcloud/point-cloud-node.js +1 -1
  107. package/dist/pointcloud/point-cloud-node.js.map +1 -1
  108. package/dist/pointcloud/point-cloud-renderer.d.ts.map +1 -1
  109. package/dist/pointcloud/point-cloud-renderer.js +3 -1
  110. package/dist/pointcloud/point-cloud-renderer.js.map +1 -1
  111. package/dist/pointcloud/point-cloud-uniforms.d.ts +5 -1
  112. package/dist/pointcloud/point-cloud-uniforms.d.ts.map +1 -1
  113. package/dist/pointcloud/point-cloud-uniforms.js +7 -1
  114. package/dist/pointcloud/point-cloud-uniforms.js.map +1 -1
  115. package/dist/post-pass-chain.d.ts +15 -2
  116. package/dist/post-pass-chain.d.ts.map +1 -1
  117. package/dist/post-pass-chain.js +49 -14
  118. package/dist/post-pass-chain.js.map +1 -1
  119. package/dist/raycast-engine.d.ts +5 -1
  120. package/dist/raycast-engine.d.ts.map +1 -1
  121. package/dist/raycast-engine.js +20 -8
  122. package/dist/raycast-engine.js.map +1 -1
  123. package/dist/raycast-point-cloud-query.d.ts +2 -0
  124. package/dist/raycast-point-cloud-query.d.ts.map +1 -1
  125. package/dist/raycast-point-cloud-query.js +7 -0
  126. package/dist/raycast-point-cloud-query.js.map +1 -1
  127. package/dist/raycast-source-curve-query.d.ts +13 -0
  128. package/dist/raycast-source-curve-query.d.ts.map +1 -0
  129. package/dist/raycast-source-curve-query.js +17 -0
  130. package/dist/raycast-source-curve-query.js.map +1 -0
  131. package/dist/reference-image-pipeline.d.ts.map +1 -1
  132. package/dist/reference-image-pipeline.js +4 -2
  133. package/dist/reference-image-pipeline.js.map +1 -1
  134. package/dist/relative-to-eye-abi.d.ts +36 -0
  135. package/dist/relative-to-eye-abi.d.ts.map +1 -0
  136. package/dist/relative-to-eye-abi.js +72 -0
  137. package/dist/relative-to-eye-abi.js.map +1 -0
  138. package/dist/relative-to-eye.d.ts +15 -35
  139. package/dist/relative-to-eye.d.ts.map +1 -1
  140. package/dist/relative-to-eye.js +46 -74
  141. package/dist/relative-to-eye.js.map +1 -1
  142. package/dist/render-stats.d.ts +5 -1
  143. package/dist/render-stats.d.ts.map +1 -1
  144. package/dist/render-stats.js +1 -1
  145. package/dist/render-stats.js.map +1 -1
  146. package/dist/renderer-overlays.d.ts +8 -7
  147. package/dist/renderer-overlays.d.ts.map +1 -1
  148. package/dist/renderer-overlays.js +14 -16
  149. package/dist/renderer-overlays.js.map +1 -1
  150. package/dist/scene-batch-rebuild.d.ts +1 -2
  151. package/dist/scene-batch-rebuild.d.ts.map +1 -1
  152. package/dist/scene-batch-rebuild.js +4 -8
  153. package/dist/scene-batch-rebuild.js.map +1 -1
  154. package/dist/scene-batch-upload.d.ts.map +1 -1
  155. package/dist/scene-batch-upload.js +7 -3
  156. package/dist/scene-batch-upload.js.map +1 -1
  157. package/dist/scene-contents.d.ts +1 -1
  158. package/dist/scene-contents.d.ts.map +1 -1
  159. package/dist/scene-derived-batches.d.ts +19 -64
  160. package/dist/scene-derived-batches.d.ts.map +1 -1
  161. package/dist/scene-derived-batches.js +16 -51
  162. package/dist/scene-derived-batches.js.map +1 -1
  163. package/dist/scene-device-recovery.d.ts +3 -3
  164. package/dist/scene-device-recovery.d.ts.map +1 -1
  165. package/dist/scene-device-recovery.js +12 -9
  166. package/dist/scene-device-recovery.js.map +1 -1
  167. package/dist/scene-geometry.d.ts +6 -6
  168. package/dist/scene-geometry.d.ts.map +1 -1
  169. package/dist/scene-geometry.js +8 -9
  170. package/dist/scene-geometry.js.map +1 -1
  171. package/dist/scene-instance-bounds.d.ts +1 -1
  172. package/dist/scene-instance-bounds.d.ts.map +1 -1
  173. package/dist/scene-instance-bounds.js +4 -16
  174. package/dist/scene-instance-bounds.js.map +1 -1
  175. package/dist/scene-instance-materialization.d.ts.map +1 -1
  176. package/dist/scene-instance-materialization.js +4 -4
  177. package/dist/scene-instance-materialization.js.map +1 -1
  178. package/dist/scene-instance-translation.d.ts +6 -10
  179. package/dist/scene-instance-translation.d.ts.map +1 -1
  180. package/dist/scene-instance-translation.js +9 -31
  181. package/dist/scene-instance-translation.js.map +1 -1
  182. package/dist/scene-instance-types.d.ts +11 -2
  183. package/dist/scene-instance-types.d.ts.map +1 -1
  184. package/dist/scene-instance-types.js +7 -1
  185. package/dist/scene-instance-types.js.map +1 -1
  186. package/dist/scene-model-translation.d.ts +1 -2
  187. package/dist/scene-model-translation.d.ts.map +1 -1
  188. package/dist/scene-model-translation.js +4 -3
  189. package/dist/scene-model-translation.js.map +1 -1
  190. package/dist/scene.d.ts +44 -30
  191. package/dist/scene.d.ts.map +1 -1
  192. package/dist/scene.js +121 -129
  193. package/dist/scene.js.map +1 -1
  194. package/dist/section-2d-line-buffer.d.ts +2 -2
  195. package/dist/section-2d-line-buffer.d.ts.map +1 -1
  196. package/dist/section-2d-line-buffer.js +10 -11
  197. package/dist/section-2d-line-buffer.js.map +1 -1
  198. package/dist/section-2d-overlay.d.ts +6 -4
  199. package/dist/section-2d-overlay.d.ts.map +1 -1
  200. package/dist/section-2d-overlay.js +45 -21
  201. package/dist/section-2d-overlay.js.map +1 -1
  202. package/dist/section-2d-types.d.ts +1 -1
  203. package/dist/section-2d-types.d.ts.map +1 -1
  204. package/dist/section-2d-types.js +1 -1
  205. package/dist/section-2d-types.js.map +1 -1
  206. package/dist/section-plane.d.ts +3 -0
  207. package/dist/section-plane.d.ts.map +1 -1
  208. package/dist/section-plane.js +18 -25
  209. package/dist/section-plane.js.map +1 -1
  210. package/dist/selection-mask-pass.d.ts +85 -0
  211. package/dist/selection-mask-pass.d.ts.map +1 -0
  212. package/dist/selection-mask-pass.js +170 -0
  213. package/dist/selection-mask-pass.js.map +1 -0
  214. package/dist/selection-mask-pipelines.d.ts +57 -0
  215. package/dist/selection-mask-pipelines.d.ts.map +1 -0
  216. package/dist/selection-mask-pipelines.js +150 -0
  217. package/dist/selection-mask-pipelines.js.map +1 -0
  218. package/dist/selection-outline-frame.d.ts +47 -0
  219. package/dist/selection-outline-frame.d.ts.map +1 -0
  220. package/dist/selection-outline-frame.js +122 -0
  221. package/dist/selection-outline-frame.js.map +1 -0
  222. package/dist/shaders/color-transfer.wgsl.d.ts +5 -3
  223. package/dist/shaders/color-transfer.wgsl.d.ts.map +1 -1
  224. package/dist/shaders/color-transfer.wgsl.js +5 -3
  225. package/dist/shaders/color-transfer.wgsl.js.map +1 -1
  226. package/dist/shaders/depth-reconstruct.wgsl.d.ts +7 -2
  227. package/dist/shaders/depth-reconstruct.wgsl.d.ts.map +1 -1
  228. package/dist/shaders/depth-reconstruct.wgsl.js +8 -3
  229. package/dist/shaders/depth-reconstruct.wgsl.js.map +1 -1
  230. package/dist/shaders/edges.wgsl.d.ts +20 -0
  231. package/dist/shaders/edges.wgsl.d.ts.map +1 -0
  232. package/dist/shaders/edges.wgsl.js +257 -0
  233. package/dist/shaders/edges.wgsl.js.map +1 -0
  234. package/dist/shaders/entity-color-table.wgsl.d.ts +2 -0
  235. package/dist/shaders/entity-color-table.wgsl.d.ts.map +1 -0
  236. package/dist/shaders/entity-color-table.wgsl.js +85 -0
  237. package/dist/shaders/entity-color-table.wgsl.js.map +1 -0
  238. package/dist/shaders/main.wgsl.d.ts +1 -1
  239. package/dist/shaders/main.wgsl.d.ts.map +1 -1
  240. package/dist/shaders/main.wgsl.js +107 -171
  241. package/dist/shaders/main.wgsl.js.map +1 -1
  242. package/dist/shaders/mesh-uniforms.wgsl.d.ts +2 -0
  243. package/dist/shaders/mesh-uniforms.wgsl.d.ts.map +1 -0
  244. package/dist/shaders/mesh-uniforms.wgsl.js +53 -0
  245. package/dist/shaders/mesh-uniforms.wgsl.js.map +1 -0
  246. package/dist/shaders/section-2d-overlay.wgsl.d.ts +1 -0
  247. package/dist/shaders/section-2d-overlay.wgsl.d.ts.map +1 -1
  248. package/dist/shaders/section-2d-overlay.wgsl.js +3 -2
  249. package/dist/shaders/section-2d-overlay.wgsl.js.map +1 -1
  250. package/dist/shaders/selection-mask.wgsl.d.ts +16 -0
  251. package/dist/shaders/selection-mask.wgsl.d.ts.map +1 -0
  252. package/dist/shaders/selection-mask.wgsl.js +138 -0
  253. package/dist/shaders/selection-mask.wgsl.js.map +1 -0
  254. package/dist/shaders/shadow.wgsl.d.ts +1 -1
  255. package/dist/shaders/shadow.wgsl.d.ts.map +1 -1
  256. package/dist/shaders/shadow.wgsl.js +3 -3
  257. package/dist/shaders/specular.wgsl.d.ts +34 -0
  258. package/dist/shaders/specular.wgsl.d.ts.map +1 -0
  259. package/dist/shaders/specular.wgsl.js +134 -0
  260. package/dist/shaders/specular.wgsl.js.map +1 -0
  261. package/dist/shadow-occluders.d.ts.map +1 -1
  262. package/dist/shadow-occluders.js +1 -0
  263. package/dist/shadow-occluders.js.map +1 -1
  264. package/dist/shadow-pass.d.ts +0 -1
  265. package/dist/shadow-pass.d.ts.map +1 -1
  266. package/dist/shadow-pass.js +26 -32
  267. package/dist/shadow-pass.js.map +1 -1
  268. package/dist/shadow-types.d.ts +3 -0
  269. package/dist/shadow-types.d.ts.map +1 -1
  270. package/dist/shadow-types.js.map +1 -1
  271. package/dist/snap-detector.d.ts +5 -0
  272. package/dist/snap-detector.d.ts.map +1 -1
  273. package/dist/snap-detector.js.map +1 -1
  274. package/dist/source-curve-clipping.d.ts +7 -0
  275. package/dist/source-curve-clipping.d.ts.map +1 -0
  276. package/dist/source-curve-clipping.js +165 -0
  277. package/dist/source-curve-clipping.js.map +1 -0
  278. package/dist/source-curve-snap.d.ts +49 -0
  279. package/dist/source-curve-snap.d.ts.map +1 -0
  280. package/dist/source-curve-snap.js +197 -0
  281. package/dist/source-curve-snap.js.map +1 -0
  282. package/dist/symbolic-overlay-pipelines.d.ts +1 -1
  283. package/dist/symbolic-overlay-pipelines.d.ts.map +1 -1
  284. package/dist/symbolic-overlay-pipelines.js +13 -22
  285. package/dist/symbolic-overlay-pipelines.js.map +1 -1
  286. package/dist/symbolic-text-rte.d.ts +16 -0
  287. package/dist/symbolic-text-rte.d.ts.map +1 -0
  288. package/dist/symbolic-text-rte.js +37 -0
  289. package/dist/symbolic-text-rte.js.map +1 -0
  290. package/dist/textured-vertices.d.ts.map +1 -1
  291. package/dist/textured-vertices.js +2 -3
  292. package/dist/textured-vertices.js.map +1 -1
  293. package/dist/types.d.ts +10 -0
  294. package/dist/types.d.ts.map +1 -1
  295. package/dist/visual-enhancement.d.ts +10 -7
  296. package/dist/visual-enhancement.d.ts.map +1 -1
  297. package/dist/visual-enhancement.js +9 -8
  298. package/dist/visual-enhancement.js.map +1 -1
  299. package/dist/xray-alpha.d.ts +7 -3
  300. package/dist/xray-alpha.d.ts.map +1 -1
  301. package/dist/xray-alpha.js +11 -7
  302. package/dist/xray-alpha.js.map +1 -1
  303. package/package.json +4 -4
  304. package/dist/post-processor.d.ts +0 -46
  305. package/dist/post-processor.d.ts.map +0 -1
  306. package/dist/post-processor.js +0 -295
  307. package/dist/post-processor.js.map +0 -1
@@ -2,10 +2,6 @@ import { type AoQuality } from './ao-params.js';
2
2
  import type { VisualEnhancementOptions, ContactShadingQuality, SeparationLinesQuality } from './types.js';
3
3
  export type ResolvedVisualEnhancement = {
4
4
  enabled: boolean;
5
- edgeContrast: {
6
- enabled: boolean;
7
- intensity: number;
8
- };
9
5
  contactShading: {
10
6
  quality: ContactShadingQuality;
11
7
  /** [0, 1]. */
@@ -22,10 +18,16 @@ export type ResolvedVisualEnhancement = {
22
18
  radius: number;
23
19
  };
24
20
  };
25
- /** Accepted `separationLines.radius`, in pixels. */
21
+ /**
22
+ * Accepted `separationLines.radius`, in pixels: the tap distance the edge
23
+ * pass (#5385) offsets its cardinal and (at `high` quality) diagonal
24
+ * samples by. Widened from 1-2 to 1-3 when the pass gained diagonal taps and
25
+ * a normal-crease/silhouette test alongside the entity-id test, so `high`
26
+ * quality has room to space its 8 taps out from the 4-tap `low` default.
27
+ */
26
28
  export declare const SEPARATION_RADIUS_RANGE_PX: {
27
29
  readonly min: 1;
28
- readonly max: 2;
30
+ readonly max: 3;
29
31
  };
30
32
  /**
31
33
  * Resolves per-frame `VisualEnhancementOptions` against the last-resolved
@@ -45,7 +47,8 @@ export declare class VisualEnhancementResolver {
45
47
  export interface LivePostEffects {
46
48
  /** The quality to run ambient occlusion at, or null when it does not run. */
47
49
  ambientOcclusion: AoQuality | null;
48
- separationLines: boolean;
50
+ /** The edge pass (#5385): entity-id, normal-crease and silhouette lines. Option name stays `separationLines`. */
51
+ edges: boolean;
49
52
  }
50
53
  /**
51
54
  * The post passes to run this frame: those the options ask for, while
@@ -1 +1 @@
1
- {"version":3,"file":"visual-enhancement.d.ts","sourceRoot":"","sources":["../src/visual-enhancement.ts"],"names":[],"mappings":"AAIA,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,KAAK,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAE1G,MAAM,MAAM,yBAAyB,GAAG;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE;QACV,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,cAAc,EAAE;QACZ,OAAO,EAAE,qBAAqB,CAAC;QAC/B,cAAc;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,6CAA6C;QAC7C,MAAM,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,eAAe,EAAE;QACb,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,sBAAsB,CAAC;QAChC,cAAc;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,mDAAmD;QACnD,MAAM,EAAE,MAAM,CAAC;KAClB,CAAC;CACL,CAAC;AAEF,oDAAoD;AACpD,eAAO,MAAM,0BAA0B;;;CAA8B,CAAC;AAWtE;;;;;;;;;GASG;AACH,qBAAa,yBAAyB;IAClC,OAAO,CAAC,KAAK,CAKX;IAEF,OAAO,CAAC,OAAO,CAAC,EAAE,wBAAwB,GAAG,yBAAyB;CA+BzE;AAED,sCAAsC;AACtC,MAAM,WAAW,eAAe;IAC5B,6EAA6E;IAC7E,gBAAgB,EAAE,SAAS,GAAG,IAAI,CAAC;IACnC,eAAe,EAAE,OAAO,CAAC;CAC5B;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,yBAAyB,EAAE,WAAW,EAAE,OAAO,GAAG,eAAe,CAOpG"}
1
+ {"version":3,"file":"visual-enhancement.d.ts","sourceRoot":"","sources":["../src/visual-enhancement.ts"],"names":[],"mappings":"AAIA,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,KAAK,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAE1G,MAAM,MAAM,yBAAyB,GAAG;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE;QACZ,OAAO,EAAE,qBAAqB,CAAC;QAC/B,cAAc;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,6CAA6C;QAC7C,MAAM,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,eAAe,EAAE;QACb,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,sBAAsB,CAAC;QAChC,cAAc;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,mDAAmD;QACnD,MAAM,EAAE,MAAM,CAAC;KAClB,CAAC;CACL,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B;;;CAA8B,CAAC;AAWtE;;;;;;;;;GASG;AACH,qBAAa,yBAAyB;IAClC,OAAO,CAAC,KAAK,CAIX;IAEF,OAAO,CAAC,OAAO,CAAC,EAAE,wBAAwB,GAAG,yBAAyB;CA2BzE;AAED,sCAAsC;AACtC,MAAM,WAAW,eAAe;IAC5B,6EAA6E;IAC7E,gBAAgB,EAAE,SAAS,GAAG,IAAI,CAAC;IACnC,iHAAiH;IACjH,KAAK,EAAE,OAAO,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,yBAAyB,EAAE,WAAW,EAAE,OAAO,GAAG,eAAe,CAOpG"}
@@ -2,8 +2,14 @@
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
4
  import { AO_RADIUS_RANGE } from './ao-params.js';
5
- /** Accepted `separationLines.radius`, in pixels. */
6
- export const SEPARATION_RADIUS_RANGE_PX = { min: 1, max: 2 };
5
+ /**
6
+ * Accepted `separationLines.radius`, in pixels: the tap distance the edge
7
+ * pass (#5385) offsets its cardinal and (at `high` quality) diagonal
8
+ * samples by. Widened from 1-2 to 1-3 when the pass gained diagonal taps and
9
+ * a normal-crease/silhouette test alongside the entity-id test, so `high`
10
+ * quality has room to space its 8 taps out from the 4-tap `low` default.
11
+ */
12
+ export const SEPARATION_RADIUS_RANGE_PX = { min: 1, max: 3 };
7
13
  /**
8
14
  * `value` clamped to [min, max]; a missing or non-finite value keeps
9
15
  * `previous` (which is already in range).
@@ -26,7 +32,6 @@ function clampOr(value, previous, min, max) {
26
32
  export class VisualEnhancementResolver {
27
33
  state = {
28
34
  enabled: true,
29
- edgeContrast: { enabled: true, intensity: 1.0 },
30
35
  contactShading: { quality: 'off', intensity: 0.8, radius: 1.0 },
31
36
  separationLines: { enabled: true, quality: 'low', intensity: 0.5, radius: 1.0 },
32
37
  };
@@ -37,10 +42,6 @@ export class VisualEnhancementResolver {
37
42
  const prev = this.state;
38
43
  const merged = {
39
44
  enabled: options.enabled ?? prev.enabled,
40
- edgeContrast: {
41
- enabled: options.edgeContrast?.enabled ?? prev.edgeContrast.enabled,
42
- intensity: options.edgeContrast?.intensity ?? prev.edgeContrast.intensity,
43
- },
44
45
  contactShading: {
45
46
  quality: options.contactShading?.quality ?? prev.contactShading.quality,
46
47
  intensity: clampOr(options.contactShading?.intensity, prev.contactShading.intensity, 0, 1),
@@ -66,7 +67,7 @@ export function livePostEffects(ve, effectsLive) {
66
67
  const aoQuality = ve.contactShading.quality;
67
68
  return {
68
69
  ambientOcclusion: live && aoQuality !== 'off' ? aoQuality : null,
69
- separationLines: live && ve.separationLines.enabled && ve.separationLines.quality !== 'off',
70
+ edges: live && ve.separationLines.enabled && ve.separationLines.quality !== 'off',
70
71
  };
71
72
  }
72
73
  //# sourceMappingURL=visual-enhancement.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"visual-enhancement.js","sourceRoot":"","sources":["../src/visual-enhancement.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"visual-enhancement.js","sourceRoot":"","sources":["../src/visual-enhancement.ts"],"names":[],"mappings":"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"}
@@ -60,12 +60,16 @@ export declare function alphaSlotSuffix(groupIndex: number): string;
60
60
  * `:remaining` after it — so this looks for the segment, not the tail. */
61
61
  export declare const ALPHA_SLOT_KEY: RegExp;
62
62
  /**
63
- * Per-frame X-Ray state: a snapshot of the caller's `transparencyOverrides` /
64
- * `ghostExceptIds` plus the resolution rules that read them.
63
+ * X-Ray state: a snapshot of the caller's `transparencyOverrides` /
64
+ * `ghostExceptIds` plus the resolution rules that read them. The renderer keeps
65
+ * one across frames until `XRayEpochTracker` reports a change, so the per-batch
66
+ * results below are paid once per X-Ray edit, not once per frame.
65
67
  *
66
68
  * Snapshotting matters: the renderer classifies a batch (opaque vs transparent
67
69
  * pipeline) and writes its uniform at two different points in the frame, and a
68
- * caller mutating its map in between would desync the two.
70
+ * caller mutating its map in between would desync the two. The sets are copied
71
+ * too, because a kept resolution outlives the frame whose sets it was given,
72
+ * and `XRayEpochTracker` only watches the sets passed since.
69
73
  */
70
74
  export declare class XRayAlpha {
71
75
  /** False when no override and no ghost set is active — every resolver is then
@@ -1 +1 @@
1
- {"version":3,"file":"xray-alpha.d.ts","sourceRoot":"","sources":["../src/xray-alpha.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD,iEAAiE;AACjE,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CAClD;AAED,4EAA4E;AAC5E,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAClB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAM5C;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;2EAE2E;AAC3E,eAAO,MAAM,cAAc,QAAiB,CAAC;AAE7C;;;;;;;GAOG;AACH,qBAAa,SAAS;IACpB;6EACyE;IACzE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;IACvD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6B;IACzD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsB;IAG/C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAyE;gBAExF,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAAC;IAS3E;;;;OAIG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAStD;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAKzD;;;;;;OAMG;IACH,cAAc,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE,GAAG,IAAI;IAK5E;;;OAGG;IACH,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE,GAAG,IAAI;IAK1E,OAAO,CAAC,OAAO;CAgDhB;AA8BD;;;;;;GAMG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,SAAS,CAAoC;IACrD,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,QAAQ,CAA0B;IAE1C;;;;;;OAMG;IACH,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,kBAAkB,GAAE,WAAW,CAAC,MAAM,CAAmB,GAAG,MAAM;IAsBjG,UAAU,IAAI,MAAM;CAGrB"}
1
+ {"version":3,"file":"xray-alpha.d.ts","sourceRoot":"","sources":["../src/xray-alpha.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD,iEAAiE;AACjE,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CAClD;AAED,4EAA4E;AAC5E,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAClB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAM5C;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;2EAE2E;AAC3E,eAAO,MAAM,cAAc,QAAiB,CAAC;AAE7C;;;;;;;;;;;GAWG;AACH,qBAAa,SAAS;IACpB;6EACyE;IACzE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA6B;IACvD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6B;IACzD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsB;IAG/C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAyE;gBAExF,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAAC;IAS3E;;;;OAIG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAStD;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAKzD;;;;;;OAMG;IACH,cAAc,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE,GAAG,IAAI;IAK5E;;;OAGG;IACH,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE,GAAG,IAAI;IAK1E,OAAO,CAAC,OAAO;CAgDhB;AA8BD;;;;;;GAMG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,SAAS,CAAoC;IACrD,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,QAAQ,CAA0B;IAE1C;;;;;;OAMG;IACH,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,kBAAkB,GAAE,WAAW,CAAC,MAAM,CAAmB,GAAG,MAAM;IAsBjG,UAAU,IAAI,MAAM;CAGrB"}
@@ -32,12 +32,16 @@ export function alphaSlotSuffix(groupIndex) {
32
32
  * `:remaining` after it — so this looks for the segment, not the tail. */
33
33
  export const ALPHA_SLOT_KEY = /:x\d+(?::|$)/;
34
34
  /**
35
- * Per-frame X-Ray state: a snapshot of the caller's `transparencyOverrides` /
36
- * `ghostExceptIds` plus the resolution rules that read them.
35
+ * X-Ray state: a snapshot of the caller's `transparencyOverrides` /
36
+ * `ghostExceptIds` plus the resolution rules that read them. The renderer keeps
37
+ * one across frames until `XRayEpochTracker` reports a change, so the per-batch
38
+ * results below are paid once per X-Ray edit, not once per frame.
37
39
  *
38
40
  * Snapshotting matters: the renderer classifies a batch (opaque vs transparent
39
41
  * pipeline) and writes its uniform at two different points in the frame, and a
40
- * caller mutating its map in between would desync the two.
42
+ * caller mutating its map in between would desync the two. The sets are copied
43
+ * too, because a kept resolution outlives the frame whose sets it was given,
44
+ * and `XRayEpochTracker` only watches the sets passed since.
41
45
  */
42
46
  export class XRayAlpha {
43
47
  /** False when no override and no ghost set is active — every resolver is then
@@ -47,15 +51,15 @@ export class XRayAlpha {
47
51
  ghostExcept;
48
52
  ghostAlpha;
49
53
  selected;
50
- // Resolved-per-batch results for THIS frame. Classification and the uniform
51
- // write both need them, and recomputing would walk every id twice per batch.
54
+ // Resolved-per-batch results. Classification and the uniform write both need
55
+ // them each frame, and recomputing would walk every id twice per batch.
52
56
  batchCache = new WeakMap();
53
57
  constructor(options, selectedExpressIds) {
54
58
  const src = options.transparencyOverrides;
55
59
  this.overrides = src != null && src.size > 0 ? new Map(src) : null;
56
- this.ghostExcept = options.ghostExceptIds ?? null;
60
+ this.ghostExcept = options.ghostExceptIds != null ? new Set(options.ghostExceptIds) : null;
57
61
  this.ghostAlpha = options.ghostAlpha ?? DEFAULT_GHOST_ALPHA;
58
- this.selected = selectedExpressIds;
62
+ this.selected = new Set(selectedExpressIds);
59
63
  this.active = this.overrides != null || this.ghostExcept != null;
60
64
  }
61
65
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"xray-alpha.js","sourceRoot":"","sources":["../src/xray-alpha.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AA8B/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAc3D;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC;AAE5C;mFACmF;AACnF,MAAM,eAAe,GAAG,IAAI,CAAC;AAE7B;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,UAAkB;IAChD,OAAO,KAAK,UAAU,EAAE,CAAC;AAC3B,CAAC;AAED;;2EAE2E;AAC3E,MAAM,CAAC,MAAM,cAAc,GAAG,cAAc,CAAC;AAE7C;;;;;;;GAOG;AACH,MAAM,OAAO,SAAS;IACpB;6EACyE;IAChE,MAAM,CAAU;IACR,SAAS,CAA6B;IACtC,WAAW,CAA6B;IACxC,UAAU,CAAS;IACnB,QAAQ,CAAsB;IAC/C,4EAA4E;IAC5E,6EAA6E;IAC5D,UAAU,GAAG,IAAI,OAAO,EAA0D,CAAC;IAEpG,YAAY,OAAsB,EAAE,kBAAuC;QACzE,MAAM,GAAG,GAAG,OAAO,CAAC,qBAAqB,CAAC;QAC1C,IAAI,CAAC,SAAS,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACnE,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC;QAClD,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,mBAAmB,CAAC;QAC5D,IAAI,CAAC,QAAQ,GAAG,kBAAkB,CAAC;QACnC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC;IACnE,CAAC;IAED;;;;OAIG;IACH,SAAS,CAAC,SAAiB,EAAE,QAAgB;QAC3C,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,QAAQ,CAAC;QAClC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,OAAO,QAAQ,CAAC;QAClD,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,SAAS;YAAE,OAAO,CAAC,CAAC;QAC9B,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,OAAO,IAAI,CAAC,UAAU,CAAC;QACzF,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,KAAqB,EAAE,QAAgB;QAC9C,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,QAAQ,CAAC;QAClC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC;IAC7C,CAAC;IAED;;;;;;OAMG;IACH,cAAc,CAAC,KAAqB,EAAE,QAAgB;QACpD,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC;IAC9C,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,GAAqB,EAAE,QAAgB;QAClD,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAC9B,OAAO,gBAAgB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;IACrE,CAAC;IAEO,OAAO,CAAC,KAAqB,EAAE,QAAgB;QACrD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;QACxC,0EAA0E;QAC1E,4EAA4E;QAC5E,wEAAwE;QACxE,wEAAwE;QACxE,EAAE;QACF,4EAA4E;QAC5E,2EAA2E;QAC3E,wEAAwE;QACxE,6EAA6E;QAC7E,sEAAsE;QACtE,IAAI,GAAG,GAAG,QAAQ,CAAC;QACnB,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,YAAY,GAAG,KAAK,CAAC;QACzB,IAAI,SAAS,GAAoB,IAAI,CAAC;QACtC,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACnC,IAAI,KAAK,GAAG,QAAQ,CAAC;YACrB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;gBACnC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;oBACpB,KAAK,GAAG,CAAC,CAAC;oBACV,IAAI,CAAC,GAAG,GAAG;wBAAE,GAAG,GAAG,CAAC,CAAC;gBACvB,CAAC;qBAAM,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBAClE,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;oBACxB,IAAI,IAAI,CAAC,UAAU,GAAG,GAAG;wBAAE,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;gBACnD,CAAC;YACH,CAAC;YACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,eAAe,CAAC,CAAC;YAChD,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,QAAQ,GAAG,GAAG,CAAC;gBACf,YAAY,GAAG,IAAI,CAAC;YACtB,CAAC;iBAAM,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAC5B,sEAAsE;gBACtE,oEAAoE;gBACpE,IAAI,SAAS,KAAK,IAAI;oBAAE,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC;qBACrC,IAAI,SAAS,CAAC,MAAM,GAAG,0BAA0B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC;oBAAE,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC1G,CAAC;QACH,CAAC;QACD,MAAM,KAAK,GAAG,SAAS,KAAK,IAAI,IAAI,SAAS,CAAC,MAAM,GAAG,0BAA0B,CAAC;QAClF,MAAM,QAAQ,GAAG;YACf,KAAK,EAAE,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG;YACxC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;SAChG,CAAC;QACF,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACrC,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CACvB,GAAqB,EACrB,OAAsC;IAEtC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC5C,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,eAAe,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClB,sEAAsE;YACtE,uEAAuE;YACvE,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK;gBAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,IAAI,KAAK,CAAC,IAAI,IAAI,0BAA0B;gBAAE,OAAO,IAAI,CAAC;YAC1D,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAChC,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;AAC/D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,OAAO,gBAAgB;IACnB,OAAO,GAAG,CAAC,CAAC;IACZ,SAAS,GAA+B,IAAI,CAAC;IAC7C,WAAW,GAAuB,IAAI,CAAC;IACvC,UAAU,GAAG,mBAAmB,CAAC;IACjC,QAAQ,GAAgB,IAAI,GAAG,EAAE,CAAC;IAE1C;;;;;;OAMG;IACH,MAAM,CAAC,OAAsB,EAAE,qBAA0C,eAAe;QACtF,MAAM,GAAG,GAAG,OAAO,CAAC,qBAAqB,CAAC;QAC1C,MAAM,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QACtD,MAAM,KAAK,GAAG,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC;QAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,IAAI,mBAAmB,CAAC;QACxD,MAAM,MAAM,GAAG,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC;QAC7C,MAAM,gBAAgB,GAAG,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9E,MAAM,OAAO,GACX,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACrC,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC;YAC1C,KAAK,KAAK,IAAI,CAAC,UAAU;YACzB,CAAC,MAAM,IAAI,gBAAgB,CAAC,CAAC;QAC/B,IAAI,gBAAgB;YAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAClE,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC7C,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACjD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QAC1B,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF;AAED,MAAM,eAAe,GAAwB,IAAI,GAAG,EAAU,CAAC;AAE/D,SAAS,cAAc,CACrB,IAAwC,EACxC,QAA4C;IAE5C,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,CAAC,uBAAuB;IAC3D,IAAI,IAAI,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACrD,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9C,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;QAC/B,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,KAAK;YAAE,OAAO,KAAK,CAAC;IAC/C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,gBAAgB,CACvB,IAAgC,EAChC,QAAoC;IAEpC,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,IAAI,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACrD,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9C,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,OAAO,KAAK,CAAC;IACtC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"xray-alpha.js","sourceRoot":"","sources":["../src/xray-alpha.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ifc-lite/renderer",
3
- "version": "4.2.0",
3
+ "version": "6.0.0",
4
4
  "description": "WebGPU renderer for IFC-Lite",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -13,12 +13,12 @@
13
13
  }
14
14
  },
15
15
  "dependencies": {
16
- "@ifc-lite/geometry": "^7.5.1",
16
+ "@ifc-lite/geometry": "^7.6.0",
17
17
  "@ifc-lite/spatial": "^1.15.0"
18
18
  },
19
19
  "devDependencies": {
20
- "@webgpu/types": "^0.1.72",
21
- "tsx": "^4.23.13",
20
+ "@webgpu/types": "^0.1.74",
21
+ "tsx": "^4.23.15",
22
22
  "typescript": "^6.0.3"
23
23
  },
24
24
  "license": "MPL-2.0",
@@ -1,46 +0,0 @@
1
- /**
2
- * Separation-line overlay: a fullscreen pass that darkens pixels where a
3
- * neighbour belongs to a different entity AND the depth creases or steps
4
- * there, so abutting elements read as separate parts.
5
- *
6
- * Ambient occlusion used to share this pass as "contact shading"; it now
7
- * lives in `ao-pass.ts` (#5384).
8
- */
9
- import { WebGPUDevice } from './device.js';
10
- export type PostProcessQuality = 'low' | 'high';
11
- export interface SeparationLinePassOptions {
12
- targetView: GPUTextureView;
13
- depthView: GPUTextureView;
14
- objectIdView: GPUTextureView;
15
- quality: PostProcessQuality;
16
- /** Tap distance in pixels at `high` quality; `low` always uses 1. */
17
- radius: number;
18
- intensity: number;
19
- }
20
- export declare class PostProcessor {
21
- private _device;
22
- private colorFormat;
23
- private isMultisampled;
24
- private uniformBuffer;
25
- private uniformStaging;
26
- private uniformF32;
27
- private uniformU32;
28
- private bindGroupLayout;
29
- private pipeline;
30
- private cachedBindGroup;
31
- private cachedDepthView;
32
- private cachedObjectIdView;
33
- constructor(device: WebGPUDevice, sampleCount: number);
34
- /**
35
- * Draw the separation lines over `targetView` in a fullscreen overlay pass.
36
- */
37
- apply(commandEncoder: GPUCommandEncoder, options: SeparationLinePassOptions): void;
38
- private destroyed;
39
- /**
40
- * Destroy all GPU resources held by this post-processor.
41
- * After calling this method the post-processor is no longer usable.
42
- * Safe to call multiple times.
43
- */
44
- destroy(): void;
45
- }
46
- //# sourceMappingURL=post-processor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"post-processor.d.ts","sourceRoot":"","sources":["../src/post-processor.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,MAAM,CAAC;AAEhD,MAAM,WAAW,yBAAyB;IACtC,UAAU,EAAE,cAAc,CAAC;IAC3B,SAAS,EAAE,cAAc,CAAC;IAC1B,YAAY,EAAE,cAAc,CAAC;IAC7B,OAAO,EAAE,kBAAkB,CAAC;IAC5B,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,aAAa;IACtB,OAAO,CAAC,OAAO,CAAY;IAC3B,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,UAAU,CAAe;IACjC,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,eAAe,CAA6B;IACpD,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,kBAAkB,CAA+B;gBAE7C,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM;IAwOrD;;OAEG;IACH,KAAK,CAAC,cAAc,EAAE,iBAAiB,EAAE,OAAO,EAAE,yBAAyB,GAAG,IAAI;IAmClF,OAAO,CAAC,SAAS,CAAS;IAE1B;;;;OAIG;IACH,OAAO,IAAI,IAAI;CAQlB"}
@@ -1,295 +0,0 @@
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
- export class PostProcessor {
5
- _device;
6
- colorFormat;
7
- isMultisampled;
8
- uniformBuffer;
9
- uniformStaging;
10
- uniformF32;
11
- uniformU32;
12
- bindGroupLayout;
13
- pipeline;
14
- cachedBindGroup = null;
15
- cachedDepthView = null;
16
- cachedObjectIdView = null;
17
- constructor(device, sampleCount) {
18
- this._device = device.getDevice();
19
- this.colorFormat = device.getFormat();
20
- this.isMultisampled = sampleCount > 1;
21
- this.uniformStaging = new ArrayBuffer(16);
22
- this.uniformF32 = new Float32Array(this.uniformStaging);
23
- this.uniformU32 = new Uint32Array(this.uniformStaging);
24
- this.uniformBuffer = this._device.createBuffer({
25
- size: 16,
26
- usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
27
- });
28
- this.bindGroupLayout = this._device.createBindGroupLayout({
29
- entries: [
30
- {
31
- binding: 0,
32
- visibility: GPUShaderStage.FRAGMENT,
33
- texture: { sampleType: 'depth', viewDimension: '2d', multisampled: this.isMultisampled },
34
- },
35
- {
36
- binding: 1,
37
- visibility: GPUShaderStage.FRAGMENT,
38
- texture: { sampleType: 'unfilterable-float', viewDimension: '2d', multisampled: this.isMultisampled },
39
- },
40
- {
41
- binding: 2,
42
- visibility: GPUShaderStage.FRAGMENT,
43
- buffer: { type: 'uniform' },
44
- },
45
- ],
46
- });
47
- const depthTexDecl = this.isMultisampled
48
- ? '@group(0) @binding(0) var depthTex: texture_depth_multisampled_2d;'
49
- : '@group(0) @binding(0) var depthTex: texture_depth_2d;';
50
- const idTexDecl = this.isMultisampled
51
- ? '@group(0) @binding(1) var idTex: texture_multisampled_2d<f32>;'
52
- : '@group(0) @binding(1) var idTex: texture_2d<f32>;';
53
- const depthLoadExpr = this.isMultisampled
54
- ? 'textureLoad(depthTex, c, 0u)'
55
- : 'textureLoad(depthTex, c, 0)';
56
- const idLoadExpr = this.isMultisampled
57
- ? 'textureLoad(idTex, c, 0u)'
58
- : 'textureLoad(idTex, c, 0)';
59
- const shader = this._device.createShaderModule({
60
- code: `
61
- struct Params {
62
- seamRadiusPx: f32,
63
- seamIntensity: f32,
64
- highQuality: u32,
65
- _pad: u32,
66
- }
67
-
68
- ${depthTexDecl}
69
- ${idTexDecl}
70
- @group(0) @binding(2) var<uniform> params: Params;
71
-
72
- struct VsOut {
73
- @builtin(position) pos: vec4<f32>,
74
- }
75
-
76
- @vertex
77
- fn vs_main(@builtin(vertex_index) v: u32) -> VsOut {
78
- var o: VsOut;
79
- var p = array<vec2<f32>, 3>(
80
- vec2<f32>(-1.0, -3.0),
81
- vec2<f32>(-1.0, 1.0),
82
- vec2<f32>( 3.0, 1.0)
83
- );
84
- o.pos = vec4<f32>(p[v], 0.0, 1.0);
85
- return o;
86
- }
87
-
88
- fn sampleDepthClamped(ip: vec2<i32>, dims: vec2<i32>) -> f32 {
89
- let c = vec2<i32>(clamp(ip.x, 0, dims.x - 1), clamp(ip.y, 0, dims.y - 1));
90
- return ${depthLoadExpr};
91
- }
92
-
93
- fn decodeId24(encoded: vec4<f32>) -> u32 {
94
- let r = u32(round(encoded.r * 255.0)) & 255u;
95
- let g = u32(round(encoded.g * 255.0)) & 255u;
96
- let b = u32(round(encoded.b * 255.0)) & 255u;
97
- return (r << 16u) | (g << 8u) | b;
98
- }
99
-
100
- fn sampleIdClamped(ip: vec2<i32>, dims: vec2<i32>) -> u32 {
101
- let c = vec2<i32>(clamp(ip.x, 0, dims.x - 1), clamp(ip.y, 0, dims.y - 1));
102
- return decodeId24(${idLoadExpr});
103
- }
104
-
105
- @fragment
106
- fn fs_main(@builtin(position) fragPos: vec4<f32>) -> @location(0) vec4<f32> {
107
- let dimsU = textureDimensions(depthTex);
108
- let dims = vec2<i32>(i32(dimsU.x), i32(dimsU.y));
109
- let p = vec2<i32>(i32(fragPos.x), i32(fragPos.y));
110
-
111
- let center = sampleDepthClamped(p, dims);
112
- if (center <= 0.00001) {
113
- return vec4<f32>(0.0, 0.0, 0.0, 0.0);
114
- }
115
-
116
- var seam = 0.0;
117
- {
118
- let idCenter = sampleIdClamped(p, dims);
119
- if (idCenter != 0u) {
120
- let rs = max(1, i32(params.seamRadiusPx));
121
- let idX1 = sampleIdClamped(p + vec2<i32>( rs, 0), dims);
122
- let idX0 = sampleIdClamped(p + vec2<i32>(-rs, 0), dims);
123
- let idY1 = sampleIdClamped(p + vec2<i32>(0, rs), dims);
124
- let idY0 = sampleIdClamped(p + vec2<i32>(0, -rs), dims);
125
-
126
- // Sample depths at same positions to filter coplanar entity boundaries.
127
- // Coplanar surfaces from different entities only differ by the z-hash
128
- // anti-z-fighting offset (~2.5e-4 relative). Two complementary gates:
129
- // - slope-aware first difference: depth-DISCONTINUOUS edges
130
- // (silhouettes, one surface occluding another).
131
- // - per-axis second difference > 3e-4: depth-CONTINUOUS creases
132
- // (wall/wall and floor/wall corners). At a corner the depth slope
133
- // changes across the seam, so |d(+r) + d(-r) - 2*center| measures
134
- // the slope mismatch; it stays at the z-hash offset (<= 2.55e-4)
135
- // for coplanar continuations. The old first-difference-only gate
136
- // flickered around its threshold along corners -> DASHED lines.
137
- // Known accepted edges of this gate: a coplanar feature narrower than
138
- // 2*rs px puts BOTH taps on the other entity (sum of two hash offsets,
139
- // up to 5.1e-4, can fire) — narrow inter-entity features deserve a seam
140
- // line anyway. In ortho the z-hash offset shrinks with the scene-fitted
141
- // far-near range, so large ortho views fall back to the 5e-4 gate.
142
- let sX1 = sampleDepthClamped(p + vec2<i32>( rs, 0), dims);
143
- let sX0 = sampleDepthClamped(p + vec2<i32>(-rs, 0), dims);
144
- let sY1 = sampleDepthClamped(p + vec2<i32>(0, rs), dims);
145
- let sY0 = sampleDepthClamped(p + vec2<i32>(0, -rs), dims);
146
- let depthRef = max(center, 0.0001);
147
- let depthRelThreshold = 5e-4;
148
- let creaseRelThreshold = 3e-4;
149
- let creaseX = abs(sX1 + sX0 - 2.0 * center) / depthRef > creaseRelThreshold;
150
- let creaseY = abs(sY1 + sY0 - 2.0 * center) / depthRef > creaseRelThreshold;
151
-
152
- // Discontinuity gate, slope-aware: a depth jump only counts as an
153
- // occlusion edge when it clearly exceeds the in-plane slope measured
154
- // on the OPPOSITE side of the pixel (2x asymmetry) on top of the
155
- // absolute floor. A flush coplanar joint viewed at a grazing angle
156
- // carries a huge per-pixel slope that used to trip the absolute
157
- // threshold and draw noisy dashed lines across floors/walls; its
158
- // jumps are symmetric, so the asymmetry test suppresses it. Genuine
159
- // silhouettes jump far beyond the opposite-side slope. Features whose
160
- // depth step shrinks below the local slope are sub-pixel at that
161
- // angle anyway, so fading their line out is the correct behaviour.
162
- let jX1 = abs(sX1 - center) / depthRef;
163
- let jX0 = abs(sX0 - center) / depthRef;
164
- let jY1 = abs(sY1 - center) / depthRef;
165
- let jY0 = abs(sY0 - center) / depthRef;
166
- let discX1 = jX1 > max(depthRelThreshold, 2.0 * jX0);
167
- let discX0 = jX0 > max(depthRelThreshold, 2.0 * jX1);
168
- let discY1 = jY1 > max(depthRelThreshold, 2.0 * jY0);
169
- let discY0 = jY0 > max(depthRelThreshold, 2.0 * jY1);
170
-
171
- let edge4Count =
172
- f32(idX1 != idCenter && idX1 != 0u && (creaseX || discX1)) +
173
- f32(idX0 != idCenter && idX0 != 0u && (creaseX || discX0)) +
174
- f32(idY1 != idCenter && idY1 != 0u && (creaseY || discY1)) +
175
- f32(idY0 != idCenter && idY0 != 0u && (creaseY || discY0));
176
- seam = edge4Count * 0.25;
177
-
178
- if (params.highQuality == 1u) {
179
- let idD1 = sampleIdClamped(p + vec2<i32>( rs, rs), dims);
180
- let idD2 = sampleIdClamped(p + vec2<i32>(-rs, rs), dims);
181
- let idD3 = sampleIdClamped(p + vec2<i32>( rs, -rs), dims);
182
- let idD4 = sampleIdClamped(p + vec2<i32>(-rs, -rs), dims);
183
- let sD1 = sampleDepthClamped(p + vec2<i32>( rs, rs), dims);
184
- let sD2 = sampleDepthClamped(p + vec2<i32>(-rs, rs), dims);
185
- let sD3 = sampleDepthClamped(p + vec2<i32>( rs, -rs), dims);
186
- let sD4 = sampleDepthClamped(p + vec2<i32>(-rs, -rs), dims);
187
- // Same crease + slope-aware discontinuity gates along the diagonals.
188
- let creaseD1 = abs(sD1 + sD4 - 2.0 * center) / depthRef > creaseRelThreshold;
189
- let creaseD2 = abs(sD2 + sD3 - 2.0 * center) / depthRef > creaseRelThreshold;
190
- let jD1 = abs(sD1 - center) / depthRef;
191
- let jD2 = abs(sD2 - center) / depthRef;
192
- let jD3 = abs(sD3 - center) / depthRef;
193
- let jD4 = abs(sD4 - center) / depthRef;
194
- let discD1 = jD1 > max(depthRelThreshold, 2.0 * jD4);
195
- let discD4 = jD4 > max(depthRelThreshold, 2.0 * jD1);
196
- let discD2 = jD2 > max(depthRelThreshold, 2.0 * jD3);
197
- let discD3 = jD3 > max(depthRelThreshold, 2.0 * jD2);
198
- let edgeDiagCount =
199
- f32(idD1 != idCenter && idD1 != 0u && (creaseD1 || discD1)) +
200
- f32(idD2 != idCenter && idD2 != 0u && (creaseD2 || discD2)) +
201
- f32(idD3 != idCenter && idD3 != 0u && (creaseD2 || discD3)) +
202
- f32(idD4 != idCenter && idD4 != 0u && (creaseD1 || discD4));
203
- let edgeDiag = edgeDiagCount * 0.25;
204
- seam = max(seam, (seam + edgeDiag) * 0.5);
205
- }
206
- }
207
- }
208
-
209
- let seamDarken = clamp(seam * params.seamIntensity, 0.0, 0.35);
210
- return vec4<f32>(0.0, 0.0, 0.0, seamDarken);
211
- }
212
- `,
213
- });
214
- this.pipeline = this._device.createRenderPipeline({
215
- layout: this._device.createPipelineLayout({ bindGroupLayouts: [this.bindGroupLayout] }),
216
- vertex: {
217
- module: shader,
218
- entryPoint: 'vs_main',
219
- },
220
- fragment: {
221
- module: shader,
222
- entryPoint: 'fs_main',
223
- targets: [{
224
- format: this.colorFormat,
225
- blend: {
226
- color: {
227
- srcFactor: 'zero',
228
- dstFactor: 'one-minus-src-alpha',
229
- },
230
- alpha: {
231
- srcFactor: 'zero',
232
- dstFactor: 'one',
233
- },
234
- },
235
- }],
236
- },
237
- primitive: {
238
- topology: 'triangle-list',
239
- cullMode: 'none',
240
- },
241
- });
242
- }
243
- /**
244
- * Draw the separation lines over `targetView` in a fullscreen overlay pass.
245
- */
246
- apply(commandEncoder, options) {
247
- if (this.destroyed)
248
- return;
249
- const highQuality = options.quality === 'high';
250
- this.uniformF32[0] = highQuality ? options.radius : 1.0;
251
- this.uniformF32[1] = options.intensity;
252
- this.uniformU32[2] = highQuality ? 1 : 0;
253
- this.uniformU32[3] = 0;
254
- this._device.queue.writeBuffer(this.uniformBuffer, 0, this.uniformStaging);
255
- if (this.cachedDepthView !== options.depthView || this.cachedObjectIdView !== options.objectIdView || this.cachedBindGroup === null) {
256
- this.cachedBindGroup = this._device.createBindGroup({
257
- layout: this.bindGroupLayout,
258
- entries: [
259
- { binding: 0, resource: options.depthView },
260
- { binding: 1, resource: options.objectIdView },
261
- { binding: 2, resource: { buffer: this.uniformBuffer } },
262
- ],
263
- });
264
- this.cachedDepthView = options.depthView;
265
- this.cachedObjectIdView = options.objectIdView;
266
- }
267
- const pass = commandEncoder.beginRenderPass({
268
- colorAttachments: [{
269
- view: options.targetView,
270
- loadOp: 'load',
271
- storeOp: 'store',
272
- }],
273
- });
274
- pass.setPipeline(this.pipeline);
275
- pass.setBindGroup(0, this.cachedBindGroup);
276
- pass.draw(3, 1, 0, 0);
277
- pass.end();
278
- }
279
- destroyed = false;
280
- /**
281
- * Destroy all GPU resources held by this post-processor.
282
- * After calling this method the post-processor is no longer usable.
283
- * Safe to call multiple times.
284
- */
285
- destroy() {
286
- if (this.destroyed)
287
- return;
288
- this.destroyed = true;
289
- this.uniformBuffer.destroy();
290
- this.cachedBindGroup = null;
291
- this.cachedDepthView = null;
292
- this.cachedObjectIdView = null;
293
- }
294
- }
295
- //# sourceMappingURL=post-processor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"post-processor.js","sourceRoot":"","sources":["../src/post-processor.ts"],"names":[],"mappings":"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"}