@ifc-lite/renderer 5.0.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 (280) 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-pass.d.ts +16 -0
  21. package/dist/edge-pass.d.ts.map +1 -1
  22. package/dist/edge-pass.js +75 -1
  23. package/dist/edge-pass.js.map +1 -1
  24. package/dist/entity-color-table.d.ts +140 -0
  25. package/dist/entity-color-table.d.ts.map +1 -0
  26. package/dist/entity-color-table.js +238 -0
  27. package/dist/entity-color-table.js.map +1 -0
  28. package/dist/gpu-upload-guard.d.ts +1 -1
  29. package/dist/gpu-upload-guard.js +1 -1
  30. package/dist/hover-mesh-cache.d.ts +29 -0
  31. package/dist/hover-mesh-cache.d.ts.map +1 -0
  32. package/dist/hover-mesh-cache.js +31 -0
  33. package/dist/hover-mesh-cache.js.map +1 -0
  34. package/dist/index.d.ts +14 -0
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +146 -161
  37. package/dist/index.js.map +1 -1
  38. package/dist/individual-mesh-upload.d.ts +24 -0
  39. package/dist/individual-mesh-upload.d.ts.map +1 -0
  40. package/dist/individual-mesh-upload.js +85 -0
  41. package/dist/individual-mesh-upload.js.map +1 -0
  42. package/dist/instanced-render.d.ts +19 -9
  43. package/dist/instanced-render.d.ts.map +1 -1
  44. package/dist/instanced-render.js +36 -24
  45. package/dist/instanced-render.js.map +1 -1
  46. package/dist/instanced-rte.d.ts +68 -7
  47. package/dist/instanced-rte.d.ts.map +1 -1
  48. package/dist/instanced-rte.js +98 -17
  49. package/dist/instanced-rte.js.map +1 -1
  50. package/dist/instanced-vertex-layout.d.ts +26 -0
  51. package/dist/instanced-vertex-layout.d.ts.map +1 -0
  52. package/dist/instanced-vertex-layout.js +61 -0
  53. package/dist/instanced-vertex-layout.js.map +1 -0
  54. package/dist/mesh-rte-uniforms.d.ts +4 -2
  55. package/dist/mesh-rte-uniforms.d.ts.map +1 -1
  56. package/dist/mesh-rte-uniforms.js +4 -2
  57. package/dist/mesh-rte-uniforms.js.map +1 -1
  58. package/dist/model-translation.d.ts.map +1 -1
  59. package/dist/model-translation.js +0 -7
  60. package/dist/model-translation.js.map +1 -1
  61. package/dist/outline-params.d.ts +45 -0
  62. package/dist/outline-params.d.ts.map +1 -0
  63. package/dist/outline-params.js +54 -0
  64. package/dist/outline-params.js.map +1 -0
  65. package/dist/overlay-routing.d.ts +8 -8
  66. package/dist/overlay-routing.js +2 -2
  67. package/dist/overlay-routing.js.map +1 -1
  68. package/dist/overlay-theme.d.ts +9 -3
  69. package/dist/overlay-theme.d.ts.map +1 -1
  70. package/dist/overlay-theme.js.map +1 -1
  71. package/dist/partial-batch-requests.d.ts +2 -2
  72. package/dist/pick-mesh-budget.d.ts +28 -0
  73. package/dist/pick-mesh-budget.d.ts.map +1 -0
  74. package/dist/pick-mesh-budget.js +74 -0
  75. package/dist/pick-mesh-budget.js.map +1 -0
  76. package/dist/picker-rte-uniforms.d.ts +7 -1
  77. package/dist/picker-rte-uniforms.d.ts.map +1 -1
  78. package/dist/picker-rte-uniforms.js +9 -1
  79. package/dist/picker-rte-uniforms.js.map +1 -1
  80. package/dist/picker.d.ts.map +1 -1
  81. package/dist/picker.js +15 -28
  82. package/dist/picker.js.map +1 -1
  83. package/dist/picking-manager.d.ts.map +1 -1
  84. package/dist/picking-manager.js +4 -47
  85. package/dist/picking-manager.js.map +1 -1
  86. package/dist/pipeline.d.ts +7 -1
  87. package/dist/pipeline.d.ts.map +1 -1
  88. package/dist/pipeline.js +37 -59
  89. package/dist/pipeline.js.map +1 -1
  90. package/dist/point-picker.d.ts.map +1 -1
  91. package/dist/point-picker.js +7 -2
  92. package/dist/point-picker.js.map +1 -1
  93. package/dist/pointcloud/point-cloud-node.js +1 -1
  94. package/dist/pointcloud/point-cloud-node.js.map +1 -1
  95. package/dist/pointcloud/point-cloud-renderer.d.ts.map +1 -1
  96. package/dist/pointcloud/point-cloud-renderer.js +3 -1
  97. package/dist/pointcloud/point-cloud-renderer.js.map +1 -1
  98. package/dist/pointcloud/point-cloud-uniforms.d.ts +5 -1
  99. package/dist/pointcloud/point-cloud-uniforms.d.ts.map +1 -1
  100. package/dist/pointcloud/point-cloud-uniforms.js +7 -1
  101. package/dist/pointcloud/point-cloud-uniforms.js.map +1 -1
  102. package/dist/post-pass-chain.d.ts +14 -1
  103. package/dist/post-pass-chain.d.ts.map +1 -1
  104. package/dist/post-pass-chain.js +31 -2
  105. package/dist/post-pass-chain.js.map +1 -1
  106. package/dist/raycast-engine.d.ts +5 -1
  107. package/dist/raycast-engine.d.ts.map +1 -1
  108. package/dist/raycast-engine.js +20 -8
  109. package/dist/raycast-engine.js.map +1 -1
  110. package/dist/raycast-point-cloud-query.d.ts +2 -0
  111. package/dist/raycast-point-cloud-query.d.ts.map +1 -1
  112. package/dist/raycast-point-cloud-query.js +7 -0
  113. package/dist/raycast-point-cloud-query.js.map +1 -1
  114. package/dist/raycast-source-curve-query.d.ts +13 -0
  115. package/dist/raycast-source-curve-query.d.ts.map +1 -0
  116. package/dist/raycast-source-curve-query.js +17 -0
  117. package/dist/raycast-source-curve-query.js.map +1 -0
  118. package/dist/reference-image-pipeline.d.ts.map +1 -1
  119. package/dist/reference-image-pipeline.js +4 -2
  120. package/dist/reference-image-pipeline.js.map +1 -1
  121. package/dist/relative-to-eye-abi.d.ts +36 -0
  122. package/dist/relative-to-eye-abi.d.ts.map +1 -0
  123. package/dist/relative-to-eye-abi.js +72 -0
  124. package/dist/relative-to-eye-abi.js.map +1 -0
  125. package/dist/relative-to-eye.d.ts +15 -35
  126. package/dist/relative-to-eye.d.ts.map +1 -1
  127. package/dist/relative-to-eye.js +46 -74
  128. package/dist/relative-to-eye.js.map +1 -1
  129. package/dist/render-stats.d.ts +5 -1
  130. package/dist/render-stats.d.ts.map +1 -1
  131. package/dist/render-stats.js +1 -1
  132. package/dist/render-stats.js.map +1 -1
  133. package/dist/renderer-overlays.d.ts.map +1 -1
  134. package/dist/renderer-overlays.js +3 -2
  135. package/dist/renderer-overlays.js.map +1 -1
  136. package/dist/scene-batch-rebuild.d.ts +1 -2
  137. package/dist/scene-batch-rebuild.d.ts.map +1 -1
  138. package/dist/scene-batch-rebuild.js +4 -8
  139. package/dist/scene-batch-rebuild.js.map +1 -1
  140. package/dist/scene-batch-upload.d.ts.map +1 -1
  141. package/dist/scene-batch-upload.js +7 -3
  142. package/dist/scene-batch-upload.js.map +1 -1
  143. package/dist/scene-contents.d.ts +1 -1
  144. package/dist/scene-contents.d.ts.map +1 -1
  145. package/dist/scene-derived-batches.d.ts +19 -64
  146. package/dist/scene-derived-batches.d.ts.map +1 -1
  147. package/dist/scene-derived-batches.js +16 -51
  148. package/dist/scene-derived-batches.js.map +1 -1
  149. package/dist/scene-device-recovery.d.ts +3 -3
  150. package/dist/scene-device-recovery.d.ts.map +1 -1
  151. package/dist/scene-device-recovery.js +12 -9
  152. package/dist/scene-device-recovery.js.map +1 -1
  153. package/dist/scene-geometry.d.ts +6 -6
  154. package/dist/scene-geometry.d.ts.map +1 -1
  155. package/dist/scene-geometry.js +8 -9
  156. package/dist/scene-geometry.js.map +1 -1
  157. package/dist/scene-instance-bounds.d.ts +1 -1
  158. package/dist/scene-instance-bounds.d.ts.map +1 -1
  159. package/dist/scene-instance-bounds.js +4 -16
  160. package/dist/scene-instance-bounds.js.map +1 -1
  161. package/dist/scene-instance-materialization.d.ts.map +1 -1
  162. package/dist/scene-instance-materialization.js +4 -4
  163. package/dist/scene-instance-materialization.js.map +1 -1
  164. package/dist/scene-instance-translation.d.ts +6 -10
  165. package/dist/scene-instance-translation.d.ts.map +1 -1
  166. package/dist/scene-instance-translation.js +9 -31
  167. package/dist/scene-instance-translation.js.map +1 -1
  168. package/dist/scene-instance-types.d.ts +11 -2
  169. package/dist/scene-instance-types.d.ts.map +1 -1
  170. package/dist/scene-instance-types.js +7 -1
  171. package/dist/scene-instance-types.js.map +1 -1
  172. package/dist/scene-model-translation.d.ts +1 -2
  173. package/dist/scene-model-translation.d.ts.map +1 -1
  174. package/dist/scene-model-translation.js +4 -3
  175. package/dist/scene-model-translation.js.map +1 -1
  176. package/dist/scene.d.ts +43 -38
  177. package/dist/scene.d.ts.map +1 -1
  178. package/dist/scene.js +121 -129
  179. package/dist/scene.js.map +1 -1
  180. package/dist/section-2d-line-buffer.d.ts +2 -2
  181. package/dist/section-2d-line-buffer.d.ts.map +1 -1
  182. package/dist/section-2d-line-buffer.js +10 -11
  183. package/dist/section-2d-line-buffer.js.map +1 -1
  184. package/dist/section-2d-overlay.d.ts +6 -4
  185. package/dist/section-2d-overlay.d.ts.map +1 -1
  186. package/dist/section-2d-overlay.js +45 -21
  187. package/dist/section-2d-overlay.js.map +1 -1
  188. package/dist/section-2d-types.d.ts +1 -1
  189. package/dist/section-2d-types.d.ts.map +1 -1
  190. package/dist/section-2d-types.js +1 -1
  191. package/dist/section-2d-types.js.map +1 -1
  192. package/dist/section-plane.d.ts.map +1 -1
  193. package/dist/section-plane.js +3 -1
  194. package/dist/section-plane.js.map +1 -1
  195. package/dist/selection-mask-pass.d.ts +85 -0
  196. package/dist/selection-mask-pass.d.ts.map +1 -0
  197. package/dist/selection-mask-pass.js +170 -0
  198. package/dist/selection-mask-pass.js.map +1 -0
  199. package/dist/selection-mask-pipelines.d.ts +57 -0
  200. package/dist/selection-mask-pipelines.d.ts.map +1 -0
  201. package/dist/selection-mask-pipelines.js +150 -0
  202. package/dist/selection-mask-pipelines.js.map +1 -0
  203. package/dist/selection-outline-frame.d.ts +47 -0
  204. package/dist/selection-outline-frame.d.ts.map +1 -0
  205. package/dist/selection-outline-frame.js +122 -0
  206. package/dist/selection-outline-frame.js.map +1 -0
  207. package/dist/shaders/depth-reconstruct.wgsl.d.ts +7 -2
  208. package/dist/shaders/depth-reconstruct.wgsl.d.ts.map +1 -1
  209. package/dist/shaders/depth-reconstruct.wgsl.js +8 -3
  210. package/dist/shaders/depth-reconstruct.wgsl.js.map +1 -1
  211. package/dist/shaders/edges.wgsl.d.ts +18 -0
  212. package/dist/shaders/edges.wgsl.d.ts.map +1 -1
  213. package/dist/shaders/edges.wgsl.js +99 -0
  214. package/dist/shaders/edges.wgsl.js.map +1 -1
  215. package/dist/shaders/entity-color-table.wgsl.d.ts +2 -0
  216. package/dist/shaders/entity-color-table.wgsl.d.ts.map +1 -0
  217. package/dist/shaders/entity-color-table.wgsl.js +85 -0
  218. package/dist/shaders/entity-color-table.wgsl.js.map +1 -0
  219. package/dist/shaders/main.wgsl.d.ts +1 -1
  220. package/dist/shaders/main.wgsl.d.ts.map +1 -1
  221. package/dist/shaders/main.wgsl.js +45 -113
  222. package/dist/shaders/main.wgsl.js.map +1 -1
  223. package/dist/shaders/mesh-uniforms.wgsl.d.ts +2 -0
  224. package/dist/shaders/mesh-uniforms.wgsl.d.ts.map +1 -0
  225. package/dist/shaders/mesh-uniforms.wgsl.js +53 -0
  226. package/dist/shaders/mesh-uniforms.wgsl.js.map +1 -0
  227. package/dist/shaders/section-2d-overlay.wgsl.d.ts +1 -0
  228. package/dist/shaders/section-2d-overlay.wgsl.d.ts.map +1 -1
  229. package/dist/shaders/section-2d-overlay.wgsl.js +3 -2
  230. package/dist/shaders/section-2d-overlay.wgsl.js.map +1 -1
  231. package/dist/shaders/selection-mask.wgsl.d.ts +16 -0
  232. package/dist/shaders/selection-mask.wgsl.d.ts.map +1 -0
  233. package/dist/shaders/selection-mask.wgsl.js +138 -0
  234. package/dist/shaders/selection-mask.wgsl.js.map +1 -0
  235. package/dist/shaders/shadow.wgsl.d.ts +1 -1
  236. package/dist/shaders/shadow.wgsl.d.ts.map +1 -1
  237. package/dist/shaders/shadow.wgsl.js +3 -3
  238. package/dist/shadow-occluders.d.ts.map +1 -1
  239. package/dist/shadow-occluders.js +1 -0
  240. package/dist/shadow-occluders.js.map +1 -1
  241. package/dist/shadow-pass.d.ts +0 -1
  242. package/dist/shadow-pass.d.ts.map +1 -1
  243. package/dist/shadow-pass.js +26 -32
  244. package/dist/shadow-pass.js.map +1 -1
  245. package/dist/shadow-types.d.ts +3 -0
  246. package/dist/shadow-types.d.ts.map +1 -1
  247. package/dist/shadow-types.js.map +1 -1
  248. package/dist/snap-detector.d.ts +5 -0
  249. package/dist/snap-detector.d.ts.map +1 -1
  250. package/dist/snap-detector.js.map +1 -1
  251. package/dist/source-curve-clipping.d.ts +7 -0
  252. package/dist/source-curve-clipping.d.ts.map +1 -0
  253. package/dist/source-curve-clipping.js +165 -0
  254. package/dist/source-curve-clipping.js.map +1 -0
  255. package/dist/source-curve-snap.d.ts +49 -0
  256. package/dist/source-curve-snap.d.ts.map +1 -0
  257. package/dist/source-curve-snap.js +197 -0
  258. package/dist/source-curve-snap.js.map +1 -0
  259. package/dist/symbolic-overlay-pipelines.d.ts +1 -1
  260. package/dist/symbolic-overlay-pipelines.d.ts.map +1 -1
  261. package/dist/symbolic-overlay-pipelines.js +13 -22
  262. package/dist/symbolic-overlay-pipelines.js.map +1 -1
  263. package/dist/symbolic-text-rte.d.ts +16 -0
  264. package/dist/symbolic-text-rte.d.ts.map +1 -0
  265. package/dist/symbolic-text-rte.js +37 -0
  266. package/dist/symbolic-text-rte.js.map +1 -0
  267. package/dist/textured-vertices.d.ts.map +1 -1
  268. package/dist/textured-vertices.js +2 -3
  269. package/dist/textured-vertices.js.map +1 -1
  270. package/dist/types.d.ts +10 -0
  271. package/dist/types.d.ts.map +1 -1
  272. package/dist/visual-enhancement.d.ts +0 -4
  273. package/dist/visual-enhancement.d.ts.map +1 -1
  274. package/dist/visual-enhancement.js +0 -5
  275. package/dist/visual-enhancement.js.map +1 -1
  276. package/dist/xray-alpha.d.ts +7 -3
  277. package/dist/xray-alpha.d.ts.map +1 -1
  278. package/dist/xray-alpha.js +11 -7
  279. package/dist/xray-alpha.js.map +1 -1
  280. package/package.json +4 -4
@@ -12,20 +12,33 @@ export declare const SWAP_ZUP_TO_YUP: Mat4;
12
12
  * [64..67] entityId (u32)
13
13
  * [68..83] rgba (4 f32)
14
14
  * [84..87] flags (u32 — bit 0 = selected; bit 1 = hidden)
15
+ *
16
+ * Static between edits: the camera-relative anchor lives in a separate
17
+ * per-template stream (`instanced-rte.ts`), not in this record (#6393).
15
18
  */
16
- export declare const INSTANCE_STRIDE_BYTES = 120;
19
+ export declare const INSTANCE_STRIDE_BYTES = 88;
17
20
  /** Byte offset of the rgba colour within an instance record (patched by lens/IDS overlays). */
18
21
  export declare const INSTANCE_COLOR_OFFSET = 68;
19
22
  /** Byte offset of the flags u32 within an instance record (patched by selection/visibility). */
20
23
  export declare const INSTANCE_FLAGS_OFFSET = 84;
21
- /** V2: two vec4 lanes hold a split Y-up source anchor on CPU, submission delta on GPU. */
22
- export declare const INSTANCE_ANCHOR_HIGH_OFFSET = 88;
23
- export declare const INSTANCE_ANCHOR_LOW_OFFSET = 104;
24
24
  /** flags bit 0 — this occurrence is selected (blue highlight in the shader). */
25
25
  export declare const INSTANCE_FLAG_SELECTED = 1;
26
26
  /** flags bit 1 — this occurrence is hidden (hide/isolate); the shader discards it
27
27
  * in both the render and pick passes so it neither draws nor is pickable. */
28
28
  export declare const INSTANCE_FLAG_HIDDEN = 2;
29
+ /** #5984: flags bit 2 / 3 — this occurrence authors a metallic / roughness,
30
+ * quantized to unorm8 in bits 16-23 / 24-31 of the same lane. The IFNS shard
31
+ * carries the finish per occurrence (trailing field 2), but every instanced
32
+ * draw shares ONE uniform material row, so the finish has to ride the
33
+ * instance record; the flags lane already reaches the fragment stage flat,
34
+ * so no stride, vertex layout or picker/shadow pipeline changes. */
35
+ export declare const INSTANCE_FLAG_METALLIC = 4;
36
+ export declare const INSTANCE_FLAG_ROUGHNESS = 8;
37
+ /** Every flags bit the finish owns; a selection/visibility rewrite keeps them. */
38
+ export declare const INSTANCE_FINISH_FLAGS_MASK = 4294901772;
39
+ /** Pack an occurrence's authored finish into its flags lane (see above). An
40
+ * unauthored field sets no bit, so the shader keeps the renderer default. */
41
+ export declare function packInstanceFinish(metallic?: number, roughness?: number): number;
29
42
  /**
30
43
  * Compose the per-occurrence render matrix `SWAP · rel_k · T(origin)` that maps a
31
44
  * template's LOCAL vertex (relative to `origin`, native IFC frame) into WebGL
@@ -71,7 +84,7 @@ export interface InstancedRenderTemplate {
71
84
  * piece", never "how is it drawn". */
72
85
  itemIds?: Uint32Array;
73
86
  /** f64 Y-up occurrence source anchors, xyz per instance-buffer record.
74
- * The GPU record is refreshed from this sidecar as an RTE delta per draw. */
87
+ * The per-template RTE delta stream is derived from this sidecar. */
75
88
  canonicalAnchors: Float64Array;
76
89
  /** Matrix translations paired with canonicalAnchors so interactive placement
77
90
  * preserves the authoritative f64 source anchor. */
@@ -82,10 +95,7 @@ export interface InstancedRenderTemplate {
82
95
  * into `dv` at `byteOffset`. Little-endian to match the GPU buffer + the IFNS
83
96
  * decoder. Exposed for the unit test.
84
97
  */
85
- export declare function writeInstanceRecord(dv: DataView, byteOffset: number, instanceMatrix: Float32Array, entityId: number, color: readonly [number, number, number, number], flags?: number, anchor?: readonly [number, number, number]): void;
86
- /** Write V2's split source-anchor lanes without touching selection/colour fields.
87
- * The renderer overwrites the GPU copy per submission with an RTE delta. */
88
- export declare function writeInstanceAnchor(dv: DataView, byteOffset: number, anchor: readonly [number, number, number]): void;
98
+ export declare function writeInstanceRecord(dv: DataView, byteOffset: number, instanceMatrix: Float32Array, entityId: number, color: readonly [number, number, number, number], flags?: number): void;
89
99
  /**
90
100
  * Turn a decoded IFNS shard into render-ready templates. Each template's
91
101
  * occurrences are grouped and their `SWAP · rel_k · T(origin)` matrices +
@@ -1 +1 @@
1
- {"version":3,"file":"instanced-render.d.ts","sourceRoot":"","sources":["../src/instanced-render.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"instanced-render.d.ts","sourceRoot":"","sources":["../src/instanced-render.ts"],"names":[],"mappings":"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"}
@@ -25,11 +25,13 @@
25
25
  * Rust (`verify_recomposition`), this lands instanced + flat geometry in one
26
26
  * frame. (See instanced-render.test.ts for the GPU-free proof.)
27
27
  *
28
- * PRECISION: the GPU record remains an f32 matrix for V1 rendering, but the
29
- * decoded template origin is f64. V2 appends high/low lanes to the record.
30
- * CPU records retain a split world anchor, while each render submission replaces
31
- * the GPU copy with the f64 drawable-minus-camera delta. This keeps colour,
32
- * picking, and shadows in one precision contract without GPU world subtraction.
28
+ * PRECISION: the GPU record remains an f32 matrix, but the decoded template
29
+ * origin is f64. The record carries no anchor: `canonicalAnchors` (f64, one
30
+ * xyz per occurrence) is the source of truth, and each template's separate
31
+ * delta stream (`instanced-rte.ts`, vertex slot 2) receives the f64
32
+ * drawable-minus-camera split per camera change. This keeps colour, picking,
33
+ * shadows and the selection mask in one precision contract without GPU world
34
+ * subtraction, and keeps the per-frame upload to one write per template (#6393).
33
35
  */
34
36
  import { MathUtils } from './math.js';
35
37
  import { OPAQUE_ALPHA_CUTOFF } from './overlay-routing.js';
@@ -54,20 +56,41 @@ export const SWAP_ZUP_TO_YUP = {
54
56
  * [64..67] entityId (u32)
55
57
  * [68..83] rgba (4 f32)
56
58
  * [84..87] flags (u32 — bit 0 = selected; bit 1 = hidden)
59
+ *
60
+ * Static between edits: the camera-relative anchor lives in a separate
61
+ * per-template stream (`instanced-rte.ts`), not in this record (#6393).
57
62
  */
58
- export const INSTANCE_STRIDE_BYTES = 120;
63
+ export const INSTANCE_STRIDE_BYTES = 88;
59
64
  /** Byte offset of the rgba colour within an instance record (patched by lens/IDS overlays). */
60
65
  export const INSTANCE_COLOR_OFFSET = 68;
61
66
  /** Byte offset of the flags u32 within an instance record (patched by selection/visibility). */
62
67
  export const INSTANCE_FLAGS_OFFSET = 84;
63
- /** V2: two vec4 lanes hold a split Y-up source anchor on CPU, submission delta on GPU. */
64
- export const INSTANCE_ANCHOR_HIGH_OFFSET = 88;
65
- export const INSTANCE_ANCHOR_LOW_OFFSET = 104;
66
68
  /** flags bit 0 — this occurrence is selected (blue highlight in the shader). */
67
69
  export const INSTANCE_FLAG_SELECTED = 1;
68
70
  /** flags bit 1 — this occurrence is hidden (hide/isolate); the shader discards it
69
71
  * in both the render and pick passes so it neither draws nor is pickable. */
70
72
  export const INSTANCE_FLAG_HIDDEN = 2;
73
+ /** #5984: flags bit 2 / 3 — this occurrence authors a metallic / roughness,
74
+ * quantized to unorm8 in bits 16-23 / 24-31 of the same lane. The IFNS shard
75
+ * carries the finish per occurrence (trailing field 2), but every instanced
76
+ * draw shares ONE uniform material row, so the finish has to ride the
77
+ * instance record; the flags lane already reaches the fragment stage flat,
78
+ * so no stride, vertex layout or picker/shadow pipeline changes. */
79
+ export const INSTANCE_FLAG_METALLIC = 4;
80
+ export const INSTANCE_FLAG_ROUGHNESS = 8;
81
+ /** Every flags bit the finish owns; a selection/visibility rewrite keeps them. */
82
+ export const INSTANCE_FINISH_FLAGS_MASK = 0xffff000c;
83
+ /** Pack an occurrence's authored finish into its flags lane (see above). An
84
+ * unauthored field sets no bit, so the shader keeps the renderer default. */
85
+ export function packInstanceFinish(metallic, roughness) {
86
+ const unorm8 = (v) => Math.round(Math.min(1, Math.max(0, v)) * 255);
87
+ let bits = 0;
88
+ if (metallic !== undefined && Number.isFinite(metallic))
89
+ bits |= INSTANCE_FLAG_METALLIC | (unorm8(metallic) << 16);
90
+ if (roughness !== undefined && Number.isFinite(roughness))
91
+ bits |= INSTANCE_FLAG_ROUGHNESS | (unorm8(roughness) << 24);
92
+ return bits >>> 0;
93
+ }
71
94
  /** Transpose a row-major mat4 (the IFNS / `DecodedInstance.transform` convention)
72
95
  * into a column-major `Mat4` (MathUtils / WGSL convention). */
73
96
  function rowMajorToColMajor(rm) {
@@ -117,7 +140,7 @@ export function composeInstanceAnchor(transformRowMajor, origin) {
117
140
  * into `dv` at `byteOffset`. Little-endian to match the GPU buffer + the IFNS
118
141
  * decoder. Exposed for the unit test.
119
142
  */
120
- export function writeInstanceRecord(dv, byteOffset, instanceMatrix, entityId, color, flags = 0, anchor = [instanceMatrix[12], instanceMatrix[13], instanceMatrix[14]]) {
143
+ export function writeInstanceRecord(dv, byteOffset, instanceMatrix, entityId, color, flags = 0) {
121
144
  for (let j = 0; j < 16; j++) {
122
145
  dv.setFloat32(byteOffset + j * 4, instanceMatrix[j], true);
123
146
  }
@@ -126,18 +149,6 @@ export function writeInstanceRecord(dv, byteOffset, instanceMatrix, entityId, co
126
149
  dv.setFloat32(byteOffset + INSTANCE_COLOR_OFFSET + j * 4, color[j], true);
127
150
  }
128
151
  dv.setUint32(byteOffset + INSTANCE_FLAGS_OFFSET, flags >>> 0, true);
129
- writeInstanceAnchor(dv, byteOffset, anchor);
130
- }
131
- /** Write V2's split source-anchor lanes without touching selection/colour fields.
132
- * The renderer overwrites the GPU copy per submission with an RTE delta. */
133
- export function writeInstanceAnchor(dv, byteOffset, anchor) {
134
- for (let axis = 0; axis < 3; axis++) {
135
- const high = Math.fround(anchor[axis]);
136
- dv.setFloat32(byteOffset + INSTANCE_ANCHOR_HIGH_OFFSET + axis * 4, high, true);
137
- dv.setFloat32(byteOffset + INSTANCE_ANCHOR_LOW_OFFSET + axis * 4, Math.fround(anchor[axis] - high), true);
138
- }
139
- dv.setFloat32(byteOffset + INSTANCE_ANCHOR_HIGH_OFFSET + 12, 0, true);
140
- dv.setFloat32(byteOffset + INSTANCE_ANCHOR_LOW_OFFSET + 12, 0, true);
141
152
  }
142
153
  /**
143
154
  * Turn a decoded IFNS shard into render-ready templates. Each template's
@@ -183,8 +194,9 @@ export function prepareInstancedRender(shard) {
183
194
  const inst = insts[i];
184
195
  const mat = composeInstanceMatrix(inst.transform, tmpl.origin);
185
196
  const anchor = composeInstanceAnchor(inst.transform, tmpl.origin);
186
- // flags = 0: every occurrence starts unselected.
187
- writeInstanceRecord(dv, i * INSTANCE_STRIDE_BYTES, mat, inst.entityId, inst.color, 0, anchor);
197
+ // Every occurrence starts unselected; the flags carry only its finish (#5984).
198
+ const flags = packInstanceFinish(inst.metallic, inst.roughness);
199
+ writeInstanceRecord(dv, i * INSTANCE_STRIDE_BYTES, mat, inst.entityId, inst.color, flags);
188
200
  entityIds[i] = inst.entityId >>> 0;
189
201
  canonicalAnchors.set(anchor, i * 3);
190
202
  canonicalMatrixTranslations.set([mat[12], mat[13], mat[14]], i * 3);
@@ -1 +1 @@
1
- {"version":3,"file":"instanced-render.js","sourceRoot":"","sources":["../src/instanced-render.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"instanced-render.js","sourceRoot":"","sources":["../src/instanced-render.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,78 @@
1
+ /**
2
+ * Camera-relative instance deltas shared by colour, pick, shadow and the
3
+ * selection mask.
4
+ *
5
+ * Each instanced template owns an {@link InstancedRteDeltaStream}: a vertex
6
+ * buffer (slot 2 of `INSTANCED_VERTEX_BUFFERS`) holding one split
7
+ * `(drawable - camera)` high/low vec4 pair per occurrence, packed on the CPU
8
+ * in f64 from `canonicalAnchors`. It is kept apart from the static instance
9
+ * record so a camera move rewrites it with ONE `writeBuffer` per template
10
+ * rather than one 32-byte write per occurrence per pass, which on a model
11
+ * with ~45K instanced occurrences was tens of thousands of queue writes per
12
+ * frame and most of the submit latency (#6393).
13
+ *
14
+ * QUEUE ORDERING. `writeBuffer` is ordered before the next `queue.submit`,
15
+ * not before the individual pass that reads it, so a stream holds exactly one
16
+ * camera's deltas per submission. Every pass that shares a submission must
17
+ * therefore use the same camera: the colour pass, the shadow depth pre-pass
18
+ * and the selection mask are all encoded into the frame's one encoder with
19
+ * `relativeToEyeFrame.getCameraWorld()`, and the picker records and submits
20
+ * its own encoder. The per-stream camera cache is what turns those three
21
+ * same-frame calls into one upload; two different cameras inside ONE
22
+ * submission would make the earlier pass read the later camera's deltas.
23
+ */
1
24
  import { type WorldPoint } from './relative-to-eye.js';
25
+ /** Bytes per occurrence in a delta stream: high vec4 + low vec4. */
26
+ export declare const INSTANCED_RTE_DELTA_STRIDE_BYTES = 32;
27
+ /** A contiguous `[first, first + count)` instance range, drawn via `firstInstance`. */
28
+ export interface InstanceRun {
29
+ readonly first: number;
30
+ readonly count: number;
31
+ }
32
+ /** One template's GPU delta stream plus the camera it currently holds. */
33
+ export interface InstancedRteDeltaStream {
34
+ /** VERTEX | COPY_DST, `instanceCount * 32` bytes, bound at vertex slot 2. */
35
+ readonly buffer: GPUBuffer;
36
+ /** CPU staging, 8 floats per occurrence at `instance * 8`. */
37
+ readonly scratch: Float32Array;
38
+ /** Camera whose deltas `buffer` holds, or null when it must be rewritten. */
39
+ camera: WorldPoint | null;
40
+ /** Drawable runs for `camera` (out-of-envelope occurrences excluded). */
41
+ runs: readonly InstanceRun[];
42
+ }
2
43
  export interface InstancedRteTemplate {
3
- instanceBuffer: GPUBuffer;
4
44
  instanceCount: number;
5
45
  /** Canonical f64 Y-up drawable origins, xyz for each instance. */
6
46
  canonicalAnchors: Float64Array;
47
+ rteDeltas: InstancedRteDeltaStream;
7
48
  }
49
+ /** Allocate a template's delta stream; it holds no camera until first uploaded. */
50
+ export declare function createInstancedRteDeltaStream(device: GPUDevice, instanceCount: number): InstancedRteDeltaStream;
51
+ /** Force the next upload to repack every occurrence (its canonical anchors changed). */
52
+ export declare function invalidateInstancedRteDeltas(stream: InstancedRteDeltaStream): void;
8
53
  /**
9
- * Refresh per-instance `(drawable - camera)` lanes for one GPU submission.
54
+ * Bring each template's delta stream to `camera` and return its drawable runs
55
+ * (one list per template, in order).
56
+ *
57
+ * This is the sole writer of the delta streams. It applies the shared f64
58
+ * boundary/envelope check before any f32 rounding, so a colour, picker,
59
+ * shadow or mask pass cannot independently subtract two large rounded
60
+ * origins on the GPU. An occurrence outside the camera-relative envelope
61
+ * cannot be rasterised this frame and its lanes stay stale, so it is left out
62
+ * of the runs; draw them with `drawInstanceRuns` (#6128).
10
63
  *
11
- * This is intentionally the sole writer of the V2 lanes after upload. It
12
- * applies the shared f64 boundary/envelope check before any f32 rounding, so
13
- * a colour, picker or shadow pass cannot independently subtract two large
14
- * rounded origins on the GPU.
64
+ * A stream already holding `camera` (exact component equality) returns its
65
+ * cached runs with no queue write; otherwise the packed span from the first
66
+ * run's start to the last run's end is uploaded in one `writeBuffer` (#6393).
67
+ * See the module comment for the one-camera-per-submission contract.
68
+ */
69
+ export declare function uploadInstancedRteDeltas(device: GPUDevice, templates: readonly InstancedRteTemplate[], camera: WorldPoint): (readonly InstanceRun[])[];
70
+ /**
71
+ * Visit instances `0..count-1` in order and group those for which `drawable`
72
+ * returns true into maximal contiguous runs. `drawable` is called exactly once
73
+ * per instance, so it may also perform that instance's packing.
15
74
  */
16
- export declare function uploadInstancedRteDeltas(device: GPUDevice, templates: readonly InstancedRteTemplate[], camera: WorldPoint): void;
75
+ export declare function collectInstanceRuns(count: number, drawable: (instance: number) => boolean): InstanceRun[];
76
+ /** Draw the refreshed instance runs of the bound buffers; returns the draw-call count. */
77
+ export declare function drawInstanceRuns(pass: GPURenderPassEncoder, indexCount: number, runs: readonly InstanceRun[]): number;
17
78
  //# sourceMappingURL=instanced-rte.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"instanced-rte.d.ts","sourceRoot":"","sources":["../src/instanced-rte.ts"],"names":[],"mappings":"AAUA,OAAO,EAAwB,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAE7E,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,SAAS,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,kEAAkE;IAClE,gBAAgB,EAAE,YAAY,CAAC;CAChC;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,SAAS,oBAAoB,EAAE,EAC1C,MAAM,EAAE,UAAU,GACjB,IAAI,CAoBN"}
1
+ {"version":3,"file":"instanced-rte.d.ts","sourceRoot":"","sources":["../src/instanced-rte.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAA2B,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEhF,oEAAoE;AACpE,eAAO,MAAM,gCAAgC,KAAK,CAAC;AAGnD,uFAAuF;AACvF,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,0EAA0E;AAC1E,MAAM,WAAW,uBAAuB;IACtC,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,6EAA6E;IAC7E,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IAC1B,yEAAyE;IACzE,IAAI,EAAE,SAAS,WAAW,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,kEAAkE;IAClE,gBAAgB,EAAE,YAAY,CAAC;IAC/B,SAAS,EAAE,uBAAuB,CAAC;CACpC;AAED,mFAAmF;AACnF,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,GAAG,uBAAuB,CAO/G;AAED,wFAAwF;AACxF,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,uBAAuB,GAAG,IAAI,CAElF;AAKD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,SAAS,oBAAoB,EAAE,EAC1C,MAAM,EAAE,UAAU,GACjB,CAAC,SAAS,WAAW,EAAE,CAAC,EAAE,CA+B5B;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,GAAG,WAAW,EAAE,CAazG;AAED,0FAA0F;AAC1F,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,oBAAoB,EAC1B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,SAAS,WAAW,EAAE,GAC3B,MAAM,CAGR"}
@@ -1,32 +1,113 @@
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
- /** Camera-relative instance-record uploads shared by colour, pick and shadow. */
5
- import { INSTANCE_ANCHOR_HIGH_OFFSET, INSTANCE_STRIDE_BYTES, } from './instanced-render.js';
6
- import { packRteDrawableDelta } from './relative-to-eye.js';
7
4
  /**
8
- * Refresh per-instance `(drawable - camera)` lanes for one GPU submission.
5
+ * Camera-relative instance deltas shared by colour, pick, shadow and the
6
+ * selection mask.
9
7
  *
10
- * This is intentionally the sole writer of the V2 lanes after upload. It
11
- * applies the shared f64 boundary/envelope check before any f32 rounding, so
12
- * a colour, picker or shadow pass cannot independently subtract two large
13
- * rounded origins on the GPU.
8
+ * Each instanced template owns an {@link InstancedRteDeltaStream}: a vertex
9
+ * buffer (slot 2 of `INSTANCED_VERTEX_BUFFERS`) holding one split
10
+ * `(drawable - camera)` high/low vec4 pair per occurrence, packed on the CPU
11
+ * in f64 from `canonicalAnchors`. It is kept apart from the static instance
12
+ * record so a camera move rewrites it with ONE `writeBuffer` per template
13
+ * rather than one 32-byte write per occurrence per pass, which on a model
14
+ * with ~45K instanced occurrences was tens of thousands of queue writes per
15
+ * frame and most of the submit latency (#6393).
16
+ *
17
+ * QUEUE ORDERING. `writeBuffer` is ordered before the next `queue.submit`,
18
+ * not before the individual pass that reads it, so a stream holds exactly one
19
+ * camera's deltas per submission. Every pass that shares a submission must
20
+ * therefore use the same camera: the colour pass, the shadow depth pre-pass
21
+ * and the selection mask are all encoded into the frame's one encoder with
22
+ * `relativeToEyeFrame.getCameraWorld()`, and the picker records and submits
23
+ * its own encoder. The per-stream camera cache is what turns those three
24
+ * same-frame calls into one upload; two different cameras inside ONE
25
+ * submission would make the earlier pass read the later camera's deltas.
26
+ */
27
+ import { tryPackRteDrawableDelta } from './relative-to-eye.js';
28
+ /** Bytes per occurrence in a delta stream: high vec4 + low vec4. */
29
+ export const INSTANCED_RTE_DELTA_STRIDE_BYTES = 32;
30
+ const DELTA_FLOATS = INSTANCED_RTE_DELTA_STRIDE_BYTES / 4;
31
+ /** Allocate a template's delta stream; it holds no camera until first uploaded. */
32
+ export function createInstancedRteDeltaStream(device, instanceCount) {
33
+ const buffer = device.createBuffer({
34
+ label: 'instanced-rte-deltas',
35
+ size: Math.max(1, instanceCount) * INSTANCED_RTE_DELTA_STRIDE_BYTES,
36
+ usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,
37
+ });
38
+ return { buffer, scratch: new Float32Array(instanceCount * DELTA_FLOATS), camera: null, runs: [] };
39
+ }
40
+ /** Force the next upload to repack every occurrence (its canonical anchors changed). */
41
+ export function invalidateInstancedRteDeltas(stream) {
42
+ stream.camera = null;
43
+ }
44
+ const sameCamera = (a, b) => a !== null && a[0] === b[0] && a[1] === b[1] && a[2] === b[2];
45
+ /**
46
+ * Bring each template's delta stream to `camera` and return its drawable runs
47
+ * (one list per template, in order).
48
+ *
49
+ * This is the sole writer of the delta streams. It applies the shared f64
50
+ * boundary/envelope check before any f32 rounding, so a colour, picker,
51
+ * shadow or mask pass cannot independently subtract two large rounded
52
+ * origins on the GPU. An occurrence outside the camera-relative envelope
53
+ * cannot be rasterised this frame and its lanes stay stale, so it is left out
54
+ * of the runs; draw them with `drawInstanceRuns` (#6128).
55
+ *
56
+ * A stream already holding `camera` (exact component equality) returns its
57
+ * cached runs with no queue write; otherwise the packed span from the first
58
+ * run's start to the last run's end is uploaded in one `writeBuffer` (#6393).
59
+ * See the module comment for the one-camera-per-submission contract.
14
60
  */
15
61
  export function uploadInstancedRteDeltas(device, templates, camera) {
16
- const packed = new Float32Array(8);
17
- for (const template of templates) {
62
+ return templates.map((template) => {
18
63
  if (template.canonicalAnchors.length !== template.instanceCount * 3) {
19
64
  throw new RangeError('Instanced RTE anchors do not match the instance-buffer record count.');
20
65
  }
21
- for (let instance = 0; instance < template.instanceCount; instance++) {
66
+ const stream = template.rteDeltas;
67
+ if (sameCamera(stream.camera, camera))
68
+ return stream.runs;
69
+ const anchors = template.canonicalAnchors;
70
+ const runs = collectInstanceRuns(template.instanceCount, (instance) => {
22
71
  const source = instance * 3;
23
- packRteDrawableDelta([
24
- template.canonicalAnchors[source],
25
- template.canonicalAnchors[source + 1],
26
- template.canonicalAnchors[source + 2],
27
- ], camera, packed, 0);
28
- device.queue.writeBuffer(template.instanceBuffer, instance * INSTANCE_STRIDE_BYTES + INSTANCE_ANCHOR_HIGH_OFFSET, packed);
72
+ return tryPackRteDrawableDelta([anchors[source], anchors[source + 1], anchors[source + 2]], camera, stream.scratch, instance * DELTA_FLOATS);
73
+ });
74
+ if (runs.length > 0) {
75
+ const first = runs[0].first;
76
+ const last = runs[runs.length - 1];
77
+ const end = last.first + last.count;
78
+ device.queue.writeBuffer(stream.buffer, first * INSTANCED_RTE_DELTA_STRIDE_BYTES, stream.scratch.subarray(first * DELTA_FLOATS, end * DELTA_FLOATS));
79
+ }
80
+ stream.camera = [camera[0], camera[1], camera[2]];
81
+ stream.runs = runs;
82
+ return runs;
83
+ });
84
+ }
85
+ /**
86
+ * Visit instances `0..count-1` in order and group those for which `drawable`
87
+ * returns true into maximal contiguous runs. `drawable` is called exactly once
88
+ * per instance, so it may also perform that instance's packing.
89
+ */
90
+ export function collectInstanceRuns(count, drawable) {
91
+ const runs = [];
92
+ let runStart = -1;
93
+ for (let instance = 0; instance < count; instance++) {
94
+ if (drawable(instance)) {
95
+ if (runStart < 0)
96
+ runStart = instance;
97
+ }
98
+ else if (runStart >= 0) {
99
+ runs.push({ first: runStart, count: instance - runStart });
100
+ runStart = -1;
29
101
  }
30
102
  }
103
+ if (runStart >= 0)
104
+ runs.push({ first: runStart, count: count - runStart });
105
+ return runs;
106
+ }
107
+ /** Draw the refreshed instance runs of the bound buffers; returns the draw-call count. */
108
+ export function drawInstanceRuns(pass, indexCount, runs) {
109
+ for (const run of runs)
110
+ pass.drawIndexed(indexCount, run.count, 0, 0, run.first);
111
+ return runs.length;
31
112
  }
32
113
  //# sourceMappingURL=instanced-rte.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"instanced-rte.js","sourceRoot":"","sources":["../src/instanced-rte.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D,iFAAiF;AAEjF,OAAO,EACL,2BAA2B,EAC3B,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,oBAAoB,EAAmB,MAAM,sBAAsB,CAAC;AAS7E;;;;;;;GAOG;AACH,MAAM,UAAU,wBAAwB,CACtC,MAAiB,EACjB,SAA0C,EAC1C,MAAkB;IAElB,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IACnC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,QAAQ,CAAC,gBAAgB,CAAC,MAAM,KAAK,QAAQ,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;YACpE,MAAM,IAAI,UAAU,CAAC,sEAAsE,CAAC,CAAC;QAC/F,CAAC;QACD,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC,aAAa,EAAE,QAAQ,EAAE,EAAE,CAAC;YACrE,MAAM,MAAM,GAAG,QAAQ,GAAG,CAAC,CAAC;YAC5B,oBAAoB,CAAC;gBACnB,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAE;gBAClC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAE;gBACtC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAE;aACvC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YACtB,MAAM,CAAC,KAAK,CAAC,WAAW,CACtB,QAAQ,CAAC,cAAc,EACvB,QAAQ,GAAG,qBAAqB,GAAG,2BAA2B,EAC9D,MAAM,CACP,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"instanced-rte.js","sourceRoot":"","sources":["../src/instanced-rte.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Vertex buffers every instanced pipeline reads:
3
+ *
4
+ * - slot 0: the template's 28-byte vertex (pos + normal + entityId; that
5
+ * per-vertex entityId is unused, the per-instance one wins, but it keeps
6
+ * slot 0 identical to the flat layout);
7
+ * - slot 1 (stepMode 'instance'): the static per-occurrence record, the mat4
8
+ * as four column vec4s, entityId, rgba and flags (`INSTANCE_STRIDE_BYTES`);
9
+ * - slot 2 (stepMode 'instance'): the per-template camera-relative delta
10
+ * stream (`instanced-rte.ts`), the split drawable-minus-camera high/low
11
+ * vec4s, rewritten in ONE upload per template when the camera moves (#6393).
12
+ *
13
+ * One definition for every pipeline that draws instanced geometry: the main
14
+ * opaque / transparent instanced pipelines in `pipeline.ts`, the
15
+ * selection/hover mask (#5745), the shadow depth pass and the picker. A
16
+ * pipeline whose shader reads only some of these locations (the shadow and
17
+ * pick shaders skip normal, colour, ...) still uses this layout: WebGPU
18
+ * permits layout attributes the shader does not consume, and sharing it means
19
+ * a mask, a shadow or a pick can never read a record the colour pass laid out
20
+ * differently. `selection-mask-instanced-bindings.test.ts` pins it against
21
+ * every shader's `InstanceInput`.
22
+ */
23
+ export declare const INSTANCED_VERTEX_BUFFERS: GPUVertexBufferLayout[];
24
+ /** Vertex-buffer slot of the per-template RTE delta stream (slot 2 above). */
25
+ export declare const INSTANCED_RTE_DELTA_SLOT = 2;
26
+ //# sourceMappingURL=instanced-vertex-layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instanced-vertex-layout.d.ts","sourceRoot":"","sources":["../src/instanced-vertex-layout.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,wBAAwB,EAAE,qBAAqB,EA8B3D,CAAC;AAEF,8EAA8E;AAC9E,eAAO,MAAM,wBAAwB,IAAI,CAAC"}
@@ -0,0 +1,61 @@
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
+ import { INSTANCE_STRIDE_BYTES } from './instanced-render.js';
5
+ import { INSTANCED_RTE_DELTA_STRIDE_BYTES } from './instanced-rte.js';
6
+ /**
7
+ * Vertex buffers every instanced pipeline reads:
8
+ *
9
+ * - slot 0: the template's 28-byte vertex (pos + normal + entityId; that
10
+ * per-vertex entityId is unused, the per-instance one wins, but it keeps
11
+ * slot 0 identical to the flat layout);
12
+ * - slot 1 (stepMode 'instance'): the static per-occurrence record, the mat4
13
+ * as four column vec4s, entityId, rgba and flags (`INSTANCE_STRIDE_BYTES`);
14
+ * - slot 2 (stepMode 'instance'): the per-template camera-relative delta
15
+ * stream (`instanced-rte.ts`), the split drawable-minus-camera high/low
16
+ * vec4s, rewritten in ONE upload per template when the camera moves (#6393).
17
+ *
18
+ * One definition for every pipeline that draws instanced geometry: the main
19
+ * opaque / transparent instanced pipelines in `pipeline.ts`, the
20
+ * selection/hover mask (#5745), the shadow depth pass and the picker. A
21
+ * pipeline whose shader reads only some of these locations (the shadow and
22
+ * pick shaders skip normal, colour, ...) still uses this layout: WebGPU
23
+ * permits layout attributes the shader does not consume, and sharing it means
24
+ * a mask, a shadow or a pick can never read a record the colour pass laid out
25
+ * differently. `selection-mask-instanced-bindings.test.ts` pins it against
26
+ * every shader's `InstanceInput`.
27
+ */
28
+ export const INSTANCED_VERTEX_BUFFERS = [
29
+ {
30
+ arrayStride: 28,
31
+ attributes: [
32
+ { shaderLocation: 0, offset: 0, format: 'float32x3' }, // position
33
+ { shaderLocation: 1, offset: 12, format: 'float32x3' }, // normal
34
+ { shaderLocation: 2, offset: 24, format: 'uint32' }, // entityId (unused here)
35
+ ],
36
+ },
37
+ {
38
+ arrayStride: INSTANCE_STRIDE_BYTES,
39
+ stepMode: 'instance',
40
+ attributes: [
41
+ { shaderLocation: 3, offset: 0, format: 'float32x4' }, // instMat col0
42
+ { shaderLocation: 4, offset: 16, format: 'float32x4' }, // col1
43
+ { shaderLocation: 5, offset: 32, format: 'float32x4' }, // col2
44
+ { shaderLocation: 6, offset: 48, format: 'float32x4' }, // col3
45
+ { shaderLocation: 7, offset: 64, format: 'uint32' }, // entityId
46
+ { shaderLocation: 8, offset: 68, format: 'float32x4' }, // rgba
47
+ { shaderLocation: 9, offset: 84, format: 'uint32' }, // flags (bit 0 = selected, bit 1 = hidden)
48
+ ],
49
+ },
50
+ {
51
+ arrayStride: INSTANCED_RTE_DELTA_STRIDE_BYTES,
52
+ stepMode: 'instance',
53
+ attributes: [
54
+ { shaderLocation: 10, offset: 0, format: 'float32x4' }, // drawable - camera, high
55
+ { shaderLocation: 11, offset: 16, format: 'float32x4' }, // drawable - camera, low
56
+ ],
57
+ },
58
+ ];
59
+ /** Vertex-buffer slot of the per-template RTE delta stream (slot 2 above). */
60
+ export const INSTANCED_RTE_DELTA_SLOT = 2;
61
+ //# sourceMappingURL=instanced-vertex-layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instanced-vertex-layout.js","sourceRoot":"","sources":["../src/instanced-vertex-layout.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,gCAAgC,EAAE,MAAM,oBAAoB,CAAC;AAEtE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAA4B;IAC/D;QACE,WAAW,EAAE,EAAE;QACf,UAAU,EAAE;YACV,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,WAAW;YAClE,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,SAAS;YACjE,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,yBAAyB;SAC/E;KACF;IACD;QACE,WAAW,EAAE,qBAAqB;QAClC,QAAQ,EAAE,UAAU;QACpB,UAAU,EAAE;YACV,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,eAAe;YACtE,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,OAAO;YAC/D,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,OAAO;YAC/D,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,OAAO;YAC/D,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,WAAW;YAChE,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,OAAO;YAC/D,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,2CAA2C;SACjG;KACF;IACD;QACE,WAAW,EAAE,gCAAgC;QAC7C,QAAQ,EAAE,UAAU;QACpB,UAAU,EAAE;YACV,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,0BAA0B;YAClF,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,yBAAyB;SACnF;KACF;CACF,CAAC;AAEF,8EAA8E;AAC9E,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC"}
@@ -8,7 +8,7 @@
8
8
  */
9
9
  import type { ClipBox } from './types.js';
10
10
  import { type RelativeToEyeFrame } from './relative-to-eye.js';
11
- export declare const MESH_UNIFORM_FLOATS = 92;
11
+ export declare const MESH_UNIFORM_FLOATS = 96;
12
12
  export declare const MESH_UNIFORM_BYTES: number;
13
13
  export declare const MESH_UNIFORM_OFFSET: {
14
14
  readonly viewProj: 0;
@@ -22,6 +22,8 @@ export declare const MESH_UNIFORM_OFFSET: {
22
22
  readonly rteViewProj: 60;
23
23
  readonly drawableDelta: 76;
24
24
  readonly rteCameraOrigin: 84;
25
+ /** vec4<u32>: per-draw colour-table anchor + mode bits (entity-color-table.ts, #6076). */
26
+ readonly overrideParams: 92;
25
27
  };
26
28
  /** flags.x: vertex and fragment values are camera-relative RTE coordinates. */
27
29
  export declare const MESH_FLAG_RTE_DRAWABLE: number;
@@ -42,6 +44,6 @@ export interface MeshSectionPlane {
42
44
  * cut/crop boundary and an entire several-decimetre quantisation cell.
43
45
  */
44
46
  export declare function packRteFragmentSpace(frame: RelativeToEyeFrame, section: MeshSectionPlane | null | undefined, clipBox: ClipBox | null | undefined, out: Float32Array): void;
45
- /** Pack the shared camera high/low lanes used by V2 instance anchors. */
47
+ /** Pack the shared camera high/low lanes used by instanced RTE shaders. */
46
48
  export declare function packRteCameraOrigin(frame: RelativeToEyeFrame, out: Float32Array): void;
47
49
  //# sourceMappingURL=mesh-rte-uniforms.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mesh-rte-uniforms.d.ts","sourceRoot":"","sources":["../src/mesh-rte-uniforms.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAiB,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG9E,eAAO,MAAM,mBAAmB,KAAK,CAAC;AACtC,eAAO,MAAM,kBAAkB,QAAuD,CAAC;AAEvF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;CAYtB,CAAC;AAEX,+EAA+E;AAC/E,eAAO,MAAM,sBAAsB,QAAU,CAAC;AAE9C,gEAAgE;AAChE,eAAO,MAAM,sBAAsB,QAA6D,CAAC;AAEjG,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,kBAAkB,EACzB,OAAO,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,EAC5C,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,EACnC,GAAG,EAAE,YAAY,GAChB,IAAI,CAkBN;AAED,yEAAyE;AACzE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,kBAAkB,EAAE,GAAG,EAAE,YAAY,GAAG,IAAI,CAKtF"}
1
+ {"version":3,"file":"mesh-rte-uniforms.d.ts","sourceRoot":"","sources":["../src/mesh-rte-uniforms.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAiB,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG9E,eAAO,MAAM,mBAAmB,KAAK,CAAC;AACtC,eAAO,MAAM,kBAAkB,QAAuD,CAAC;AAEvF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;IAY9B,0FAA0F;;CAElF,CAAC;AAEX,+EAA+E;AAC/E,eAAO,MAAM,sBAAsB,QAAU,CAAC;AAE9C,gEAAgE;AAChE,eAAO,MAAM,sBAAsB,QAA6D,CAAC;AAEjG,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,kBAAkB,EACzB,OAAO,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,EAC5C,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,EACnC,GAAG,EAAE,YAAY,GAChB,IAAI,CAkBN;AAED,2EAA2E;AAC3E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,kBAAkB,EAAE,GAAG,EAAE,YAAY,GAAG,IAAI,CAKtF"}
@@ -3,7 +3,7 @@
3
3
  * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
4
  import { packRteOrigin } from './relative-to-eye.js';
5
5
  import { packRteClipBox, rtePlaneDistance } from './rte-clip-space.js';
6
- export const MESH_UNIFORM_FLOATS = 92;
6
+ export const MESH_UNIFORM_FLOATS = 96;
7
7
  export const MESH_UNIFORM_BYTES = MESH_UNIFORM_FLOATS * Float32Array.BYTES_PER_ELEMENT;
8
8
  export const MESH_UNIFORM_OFFSET = {
9
9
  viewProj: 0,
@@ -17,6 +17,8 @@ export const MESH_UNIFORM_OFFSET = {
17
17
  rteViewProj: 60,
18
18
  drawableDelta: 76,
19
19
  rteCameraOrigin: 84,
20
+ /** vec4<u32>: per-draw colour-table anchor + mode bits (entity-color-table.ts, #6076). */
21
+ overrideParams: 92,
20
22
  };
21
23
  /** flags.x: vertex and fragment values are camera-relative RTE coordinates. */
22
24
  export const MESH_FLAG_RTE_DRAWABLE = 1 << 16;
@@ -50,7 +52,7 @@ export function packRteFragmentSpace(frame, section, clipBox, out) {
50
52
  const clipOffset = MESH_UNIFORM_OFFSET.clipBoxMin;
51
53
  packRteClipBox(clipBox, eye, out, clipOffset);
52
54
  }
53
- /** Pack the shared camera high/low lanes used by V2 instance anchors. */
55
+ /** Pack the shared camera high/low lanes used by instanced RTE shaders. */
54
56
  export function packRteCameraOrigin(frame, out) {
55
57
  if (out.length < MESH_UNIFORM_FLOATS) {
56
58
  throw new RangeError(`Mesh RTE uniform needs ${MESH_UNIFORM_FLOATS} floats.`);