@ifc-lite/renderer 3.2.0 → 4.2.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.
- package/dist/aabb-edges.d.ts +10 -0
- package/dist/aabb-edges.d.ts.map +1 -1
- package/dist/aabb-edges.js +13 -0
- package/dist/aabb-edges.js.map +1 -1
- package/dist/ao-params.d.ts +85 -0
- package/dist/ao-params.d.ts.map +1 -0
- package/dist/ao-params.js +109 -0
- package/dist/ao-params.js.map +1 -0
- package/dist/ao-pass.d.ts +47 -0
- package/dist/ao-pass.d.ts.map +1 -0
- package/dist/ao-pass.js +157 -0
- package/dist/ao-pass.js.map +1 -0
- package/dist/camera-matrices.d.ts +3 -0
- package/dist/camera-matrices.d.ts.map +1 -1
- package/dist/camera-matrices.js +12 -1
- package/dist/camera-matrices.js.map +1 -1
- package/dist/camera-orientation.d.ts +62 -0
- package/dist/camera-orientation.d.ts.map +1 -0
- package/dist/camera-orientation.js +155 -0
- package/dist/camera-orientation.js.map +1 -0
- package/dist/camera-projection.d.ts +3 -1
- package/dist/camera-projection.d.ts.map +1 -1
- package/dist/camera-projection.js +26 -20
- package/dist/camera-projection.js.map +1 -1
- package/dist/camera-surface-zoom.d.ts +32 -0
- package/dist/camera-surface-zoom.d.ts.map +1 -0
- package/dist/camera-surface-zoom.js +37 -0
- package/dist/camera-surface-zoom.js.map +1 -0
- package/dist/camera.d.ts +32 -61
- package/dist/camera.d.ts.map +1 -1
- package/dist/camera.js +71 -167
- package/dist/camera.js.map +1 -1
- package/dist/clash-solid-pipeline.d.ts +9 -3
- package/dist/clash-solid-pipeline.d.ts.map +1 -1
- package/dist/clash-solid-pipeline.js +31 -8
- package/dist/clash-solid-pipeline.js.map +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +4 -3
- package/dist/constants.js.map +1 -1
- package/dist/depth-reconstruct.d.ts +43 -0
- package/dist/depth-reconstruct.d.ts.map +1 -0
- package/dist/depth-reconstruct.js +35 -0
- package/dist/depth-reconstruct.js.map +1 -0
- package/dist/device.js +1 -1
- package/dist/device.js.map +1 -1
- package/dist/environment.d.ts +26 -15
- package/dist/environment.d.ts.map +1 -1
- package/dist/environment.js +24 -13
- package/dist/environment.js.map +1 -1
- package/dist/federation-registry.d.ts +16 -0
- package/dist/federation-registry.d.ts.map +1 -1
- package/dist/federation-registry.js +80 -9
- package/dist/federation-registry.js.map +1 -1
- package/dist/gpu-static-upload.d.ts +39 -0
- package/dist/gpu-static-upload.d.ts.map +1 -0
- package/dist/gpu-static-upload.js +70 -0
- package/dist/gpu-static-upload.js.map +1 -0
- package/dist/gpu-upload-guard.d.ts +12 -23
- package/dist/gpu-upload-guard.d.ts.map +1 -1
- package/dist/gpu-upload-guard.js +12 -26
- package/dist/gpu-upload-guard.js.map +1 -1
- package/dist/index.d.ts +29 -21
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +201 -252
- package/dist/index.js.map +1 -1
- package/dist/instanced-render.d.ts +22 -2
- package/dist/instanced-render.d.ts.map +1 -1
- package/dist/instanced-render.js +47 -10
- package/dist/instanced-render.js.map +1 -1
- package/dist/instanced-rte.d.ts +17 -0
- package/dist/instanced-rte.d.ts.map +1 -0
- package/dist/instanced-rte.js +32 -0
- package/dist/instanced-rte.js.map +1 -0
- package/dist/mesh-rte-uniforms.d.ts +46 -0
- package/dist/mesh-rte-uniforms.d.ts.map +1 -0
- package/dist/mesh-rte-uniforms.js +59 -0
- package/dist/mesh-rte-uniforms.js.map +1 -0
- package/dist/model-bounds-tracker.d.ts +7 -0
- package/dist/model-bounds-tracker.d.ts.map +1 -1
- package/dist/model-bounds-tracker.js +16 -5
- package/dist/model-bounds-tracker.js.map +1 -1
- package/dist/model-translation.d.ts +1 -1
- package/dist/model-translation.d.ts.map +1 -1
- package/dist/model-translation.js +50 -2
- package/dist/model-translation.js.map +1 -1
- package/dist/pick-rte-snapshot.d.ts +7 -0
- package/dist/pick-rte-snapshot.d.ts.map +1 -0
- package/dist/pick-rte-snapshot.js +15 -0
- package/dist/pick-rte-snapshot.js.map +1 -0
- package/dist/pick-types.d.ts +17 -0
- package/dist/pick-types.d.ts.map +1 -0
- package/dist/pick-types.js +5 -0
- package/dist/pick-types.js.map +1 -0
- package/dist/pick-uniforms.d.ts +6 -0
- package/dist/pick-uniforms.d.ts.map +1 -1
- package/dist/pick-uniforms.js +22 -18
- package/dist/pick-uniforms.js.map +1 -1
- package/dist/pick-world-position.d.ts +18 -0
- package/dist/pick-world-position.d.ts.map +1 -0
- package/dist/pick-world-position.js +21 -0
- package/dist/pick-world-position.js.map +1 -0
- package/dist/picker-readbacks.d.ts +6 -0
- package/dist/picker-readbacks.d.ts.map +1 -0
- package/dist/picker-readbacks.js +20 -0
- package/dist/picker-readbacks.js.map +1 -0
- package/dist/picker-rte-uniforms.d.ts +6 -0
- package/dist/picker-rte-uniforms.d.ts.map +1 -0
- package/dist/picker-rte-uniforms.js +41 -0
- package/dist/picker-rte-uniforms.js.map +1 -0
- package/dist/picker.d.ts +6 -7
- package/dist/picker.d.ts.map +1 -1
- package/dist/picker.js +88 -115
- package/dist/picker.js.map +1 -1
- package/dist/picking-manager.d.ts +8 -0
- package/dist/picking-manager.d.ts.map +1 -1
- package/dist/picking-manager.js +46 -19
- package/dist/picking-manager.js.map +1 -1
- package/dist/pipeline.d.ts +1 -7
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +17 -20
- package/dist/pipeline.js.map +1 -1
- package/dist/point-picker.d.ts +5 -1
- package/dist/point-picker.d.ts.map +1 -1
- package/dist/point-picker.js +49 -9
- package/dist/point-picker.js.map +1 -1
- package/dist/pointcloud/point-cloud-handle-ids.d.ts +22 -0
- package/dist/pointcloud/point-cloud-handle-ids.d.ts.map +1 -0
- package/dist/pointcloud/point-cloud-handle-ids.js +31 -0
- package/dist/pointcloud/point-cloud-handle-ids.js.map +1 -0
- package/dist/pointcloud/point-cloud-node.d.ts +14 -6
- package/dist/pointcloud/point-cloud-node.d.ts.map +1 -1
- package/dist/pointcloud/point-cloud-node.js.map +1 -1
- package/dist/pointcloud/point-cloud-pick-sources.d.ts +47 -0
- package/dist/pointcloud/point-cloud-pick-sources.d.ts.map +1 -0
- package/dist/pointcloud/point-cloud-pick-sources.js +32 -0
- package/dist/pointcloud/point-cloud-pick-sources.js.map +1 -0
- package/dist/pointcloud/point-cloud-placement.d.ts.map +1 -1
- package/dist/pointcloud/point-cloud-placement.js +20 -5
- package/dist/pointcloud/point-cloud-placement.js.map +1 -1
- package/dist/pointcloud/point-cloud-ray-transform.d.ts +78 -4
- package/dist/pointcloud/point-cloud-ray-transform.d.ts.map +1 -1
- package/dist/pointcloud/point-cloud-ray-transform.js +31 -84
- package/dist/pointcloud/point-cloud-ray-transform.js.map +1 -1
- package/dist/pointcloud/point-cloud-renderer.d.ts +21 -19
- package/dist/pointcloud/point-cloud-renderer.d.ts.map +1 -1
- package/dist/pointcloud/point-cloud-renderer.js +46 -52
- package/dist/pointcloud/point-cloud-renderer.js.map +1 -1
- package/dist/pointcloud/point-cloud-stream-lifecycle.d.ts +44 -0
- package/dist/pointcloud/point-cloud-stream-lifecycle.d.ts.map +1 -0
- package/dist/pointcloud/point-cloud-stream-lifecycle.js +44 -0
- package/dist/pointcloud/point-cloud-stream-lifecycle.js.map +1 -0
- package/dist/pointcloud/point-cloud-uniforms.d.ts +5 -0
- package/dist/pointcloud/point-cloud-uniforms.d.ts.map +1 -1
- package/dist/pointcloud/point-cloud-uniforms.js +55 -44
- package/dist/pointcloud/point-cloud-uniforms.js.map +1 -1
- package/dist/pointcloud/point-cloud-visibility.d.ts +10 -0
- package/dist/pointcloud/point-cloud-visibility.d.ts.map +1 -0
- package/dist/pointcloud/point-cloud-visibility.js +18 -0
- package/dist/pointcloud/point-cloud-visibility.js.map +1 -0
- package/dist/pointcloud/point-pipeline.d.ts +4 -9
- package/dist/pointcloud/point-pipeline.d.ts.map +1 -1
- package/dist/pointcloud/point-pipeline.js +4 -9
- package/dist/pointcloud/point-pipeline.js.map +1 -1
- package/dist/pointcloud/point-shader.wgsl.d.ts +1 -21
- package/dist/pointcloud/point-shader.wgsl.d.ts.map +1 -1
- package/dist/pointcloud/point-shader.wgsl.js +25 -5
- package/dist/pointcloud/point-shader.wgsl.js.map +1 -1
- package/dist/post-pass-chain.d.ts +38 -0
- package/dist/post-pass-chain.d.ts.map +1 -0
- package/dist/post-pass-chain.js +99 -0
- package/dist/post-pass-chain.js.map +1 -0
- package/dist/post-processor.d.ts +12 -26
- package/dist/post-processor.d.ts.map +1 -1
- package/dist/post-processor.js +14 -72
- package/dist/post-processor.js.map +1 -1
- package/dist/raycast-engine.d.ts +7 -5
- package/dist/raycast-engine.d.ts.map +1 -1
- package/dist/raycast-engine.js +17 -20
- package/dist/raycast-engine.js.map +1 -1
- package/dist/raycast-point-cloud-query.d.ts +1 -1
- package/dist/raycast-point-cloud-query.d.ts.map +1 -1
- package/dist/reference-image-pipeline.d.ts +1 -1
- package/dist/reference-image-pipeline.d.ts.map +1 -1
- package/dist/reference-image-pipeline.js +25 -7
- package/dist/reference-image-pipeline.js.map +1 -1
- package/dist/reference-images.d.ts +1 -1
- package/dist/reference-images.d.ts.map +1 -1
- package/dist/reference-images.js +13 -5
- package/dist/reference-images.js.map +1 -1
- package/dist/relative-to-eye.d.ts +146 -0
- package/dist/relative-to-eye.d.ts.map +1 -0
- package/dist/relative-to-eye.js +326 -0
- package/dist/relative-to-eye.js.map +1 -0
- package/dist/render-section-draw.d.ts +11 -0
- package/dist/render-section-draw.d.ts.map +1 -1
- package/dist/render-section-draw.js +6 -3
- package/dist/render-section-draw.js.map +1 -1
- package/dist/renderer-color-readback.d.ts +50 -0
- package/dist/renderer-color-readback.d.ts.map +1 -0
- package/dist/renderer-color-readback.js +145 -0
- package/dist/renderer-color-readback.js.map +1 -0
- package/dist/renderer-overlays.d.ts +12 -3
- package/dist/renderer-overlays.d.ts.map +1 -1
- package/dist/renderer-overlays.js +33 -20
- package/dist/renderer-overlays.js.map +1 -1
- package/dist/renderer-screenshot.d.ts +4 -0
- package/dist/renderer-screenshot.d.ts.map +1 -0
- package/dist/renderer-screenshot.js +17 -0
- package/dist/renderer-screenshot.js.map +1 -0
- package/dist/renderer-symbolic-overlays.d.ts +4 -2
- package/dist/renderer-symbolic-overlays.d.ts.map +1 -1
- package/dist/renderer-symbolic-overlays.js +33 -13
- package/dist/renderer-symbolic-overlays.js.map +1 -1
- package/dist/renderer-viewport.d.ts +45 -0
- package/dist/renderer-viewport.d.ts.map +1 -1
- package/dist/renderer-viewport.js +44 -0
- package/dist/renderer-viewport.js.map +1 -1
- package/dist/rte-clip-space.d.ts +12 -0
- package/dist/rte-clip-space.d.ts.map +1 -0
- package/dist/rte-clip-space.js +22 -0
- package/dist/rte-clip-space.js.map +1 -0
- package/dist/rte-frustum.d.ts +24 -0
- package/dist/rte-frustum.d.ts.map +1 -0
- package/dist/rte-frustum.js +45 -0
- package/dist/rte-frustum.js.map +1 -0
- package/dist/scene-batch-upload.d.ts.map +1 -1
- package/dist/scene-batch-upload.js +14 -38
- package/dist/scene-batch-upload.js.map +1 -1
- package/dist/scene-device-recovery.d.ts.map +1 -1
- package/dist/scene-device-recovery.js +5 -9
- package/dist/scene-device-recovery.js.map +1 -1
- package/dist/scene-finalize-regroup.d.ts +54 -0
- package/dist/scene-finalize-regroup.d.ts.map +1 -0
- package/dist/scene-finalize-regroup.js +136 -0
- package/dist/scene-finalize-regroup.js.map +1 -0
- package/dist/scene-instance-bounds.d.ts +12 -0
- package/dist/scene-instance-bounds.d.ts.map +1 -0
- package/dist/scene-instance-bounds.js +48 -0
- package/dist/scene-instance-bounds.js.map +1 -0
- package/dist/scene-instance-materialization.d.ts +4 -1
- package/dist/scene-instance-materialization.d.ts.map +1 -1
- package/dist/scene-instance-materialization.js +21 -6
- package/dist/scene-instance-materialization.js.map +1 -1
- package/dist/scene-instance-translation.d.ts +17 -0
- package/dist/scene-instance-translation.d.ts.map +1 -0
- package/dist/scene-instance-translation.js +50 -0
- package/dist/scene-instance-translation.js.map +1 -0
- package/dist/scene-instance-types.d.ts +6 -0
- package/dist/scene-instance-types.d.ts.map +1 -1
- package/dist/scene-model-translation.d.ts +2 -0
- package/dist/scene-model-translation.d.ts.map +1 -1
- package/dist/scene-model-translation.js +1 -1
- package/dist/scene-model-translation.js.map +1 -1
- package/dist/scene-rect-select.d.ts +11 -1
- package/dist/scene-rect-select.d.ts.map +1 -1
- package/dist/scene-rect-select.js +7 -4
- package/dist/scene-rect-select.js.map +1 -1
- package/dist/scene.d.ts +17 -19
- package/dist/scene.d.ts.map +1 -1
- package/dist/scene.js +109 -238
- package/dist/scene.js.map +1 -1
- package/dist/section-2d-lift.d.ts +10 -2
- package/dist/section-2d-lift.d.ts.map +1 -1
- package/dist/section-2d-lift.js +14 -6
- package/dist/section-2d-lift.js.map +1 -1
- package/dist/section-2d-line-buffer.d.ts +12 -4
- package/dist/section-2d-line-buffer.d.ts.map +1 -1
- package/dist/section-2d-line-buffer.js +59 -33
- package/dist/section-2d-line-buffer.js.map +1 -1
- package/dist/section-2d-overlay.d.ts +18 -72
- package/dist/section-2d-overlay.d.ts.map +1 -1
- package/dist/section-2d-overlay.js +72 -103
- package/dist/section-2d-overlay.js.map +1 -1
- package/dist/section-2d-types.d.ts +38 -0
- package/dist/section-2d-types.d.ts.map +1 -0
- package/dist/section-2d-types.js +6 -0
- package/dist/section-2d-types.js.map +1 -0
- package/dist/section-cap-pipelines.d.ts +6 -0
- package/dist/section-cap-pipelines.d.ts.map +1 -0
- package/dist/section-cap-pipelines.js +87 -0
- package/dist/section-cap-pipelines.js.map +1 -0
- package/dist/section-plane-geometry.d.ts +24 -0
- package/dist/section-plane-geometry.d.ts.map +1 -0
- package/dist/section-plane-geometry.js +93 -0
- package/dist/section-plane-geometry.js.map +1 -0
- package/dist/section-plane.d.ts +23 -24
- package/dist/section-plane.d.ts.map +1 -1
- package/dist/section-plane.js +58 -174
- package/dist/section-plane.js.map +1 -1
- package/dist/shaders/ao.wgsl.d.ts +2 -0
- package/dist/shaders/ao.wgsl.d.ts.map +1 -0
- package/dist/shaders/ao.wgsl.js +234 -0
- package/dist/shaders/ao.wgsl.js.map +1 -0
- package/dist/shaders/color-transfer.wgsl.d.ts +26 -0
- package/dist/shaders/color-transfer.wgsl.d.ts.map +1 -0
- package/dist/shaders/color-transfer.wgsl.js +53 -0
- package/dist/shaders/color-transfer.wgsl.js.map +1 -0
- package/dist/shaders/depth-reconstruct.wgsl.d.ts +16 -0
- package/dist/shaders/depth-reconstruct.wgsl.d.ts.map +1 -0
- package/dist/shaders/depth-reconstruct.wgsl.js +69 -0
- package/dist/shaders/depth-reconstruct.wgsl.js.map +1 -0
- package/dist/shaders/main-rte-shadow.wgsl.d.ts +4 -0
- package/dist/shaders/main-rte-shadow.wgsl.d.ts.map +1 -0
- package/dist/shaders/main-rte-shadow.wgsl.js +54 -0
- package/dist/shaders/main-rte-shadow.wgsl.js.map +1 -0
- package/dist/shaders/main.wgsl.d.ts +1 -6
- package/dist/shaders/main.wgsl.d.ts.map +1 -1
- package/dist/shaders/main.wgsl.js +110 -159
- package/dist/shaders/main.wgsl.js.map +1 -1
- package/dist/shaders/relative-to-eye.wgsl.d.ts +12 -0
- package/dist/shaders/relative-to-eye.wgsl.d.ts.map +1 -0
- package/dist/shaders/relative-to-eye.wgsl.js +40 -0
- package/dist/shaders/relative-to-eye.wgsl.js.map +1 -0
- package/dist/shaders/section-2d-overlay.wgsl.d.ts +28 -12
- package/dist/shaders/section-2d-overlay.wgsl.d.ts.map +1 -1
- package/dist/shaders/section-2d-overlay.wgsl.js +40 -13
- package/dist/shaders/section-2d-overlay.wgsl.js.map +1 -1
- package/dist/shaders/shadow.wgsl.d.ts +1 -1
- package/dist/shaders/shadow.wgsl.d.ts.map +1 -1
- package/dist/shaders/shadow.wgsl.js +25 -7
- package/dist/shaders/shadow.wgsl.js.map +1 -1
- package/dist/shaders/sky.wgsl.d.ts +1 -11
- package/dist/shaders/sky.wgsl.d.ts.map +1 -1
- package/dist/shaders/sky.wgsl.js +17 -19
- package/dist/shaders/sky.wgsl.js.map +1 -1
- package/dist/shaders/symbolic-overlay.wgsl.d.ts +2 -9
- package/dist/shaders/symbolic-overlay.wgsl.d.ts.map +1 -1
- package/dist/shaders/symbolic-overlay.wgsl.js +88 -17
- package/dist/shaders/symbolic-overlay.wgsl.js.map +1 -1
- package/dist/shaders/textured.wgsl.d.ts.map +1 -1
- package/dist/shaders/textured.wgsl.js +11 -9
- package/dist/shaders/textured.wgsl.js.map +1 -1
- package/dist/shadow-light-matrix.d.ts +7 -0
- package/dist/shadow-light-matrix.d.ts.map +1 -1
- package/dist/shadow-light-matrix.js +11 -0
- package/dist/shadow-light-matrix.js.map +1 -1
- package/dist/shadow-occluder-batches.d.ts +10 -0
- package/dist/shadow-occluder-batches.d.ts.map +1 -0
- package/dist/shadow-occluder-batches.js +39 -0
- package/dist/shadow-occluder-batches.js.map +1 -0
- package/dist/shadow-occluders.d.ts.map +1 -1
- package/dist/shadow-occluders.js +4 -0
- package/dist/shadow-occluders.js.map +1 -1
- package/dist/shadow-pass.d.ts +5 -51
- package/dist/shadow-pass.d.ts.map +1 -1
- package/dist/shadow-pass.js +49 -45
- package/dist/shadow-pass.js.map +1 -1
- package/dist/shadow-types.d.ts +39 -0
- package/dist/shadow-types.d.ts.map +1 -0
- package/dist/shadow-types.js +15 -0
- package/dist/shadow-types.js.map +1 -0
- package/dist/symbolic-overlay-geometry.d.ts +7 -0
- package/dist/symbolic-overlay-geometry.d.ts.map +1 -0
- package/dist/symbolic-overlay-geometry.js +43 -0
- package/dist/symbolic-overlay-geometry.js.map +1 -0
- package/dist/symbolic-overlay-pipelines.d.ts +24 -36
- package/dist/symbolic-overlay-pipelines.d.ts.map +1 -1
- package/dist/symbolic-overlay-pipelines.js +175 -182
- package/dist/symbolic-overlay-pipelines.js.map +1 -1
- package/dist/symbolic-text-atlas.d.ts +21 -0
- package/dist/symbolic-text-atlas.d.ts.map +1 -1
- package/dist/symbolic-text-atlas.js +29 -1
- package/dist/symbolic-text-atlas.js.map +1 -1
- package/dist/types.d.ts +20 -26
- package/dist/types.d.ts.map +1 -1
- package/dist/visual-enhancement.d.ts +23 -1
- package/dist/visual-enhancement.d.ts.map +1 -1
- package/dist/visual-enhancement.js +38 -12
- package/dist/visual-enhancement.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* View-space reconstruction from the scene depth buffer, for screen-space
|
|
3
|
+
* passes that have no normal or position target (ambient occlusion, #5384).
|
|
4
|
+
*
|
|
5
|
+
* The depth attachment holds reverse-Z device depth (1 at the near plane,
|
|
6
|
+
* cleared to 0), produced by `MathUtils.perspectiveReverseZ` (infinite far
|
|
7
|
+
* plane) or `MathUtils.orthographicReverseZ`. Both are handled by one
|
|
8
|
+
* formula over four projection-matrix entries rather than a mode switch, so
|
|
9
|
+
* a pass never has to know which camera mode drew the frame:
|
|
10
|
+
*
|
|
11
|
+
* device depth d = (m10 * z + m14) / (m11 * z + m15) (z = view-space z, < 0)
|
|
12
|
+
* => z = (m14 - d * m15) / (d * m11 - m10)
|
|
13
|
+
*
|
|
14
|
+
* and the view-space x/y follow from NDC and the clip w (`m11 * z + m15`):
|
|
15
|
+
*
|
|
16
|
+
* x = (ndcX * w - m12) / m0, y = (ndcY * w - m13) / m5
|
|
17
|
+
*
|
|
18
|
+
* (`m8`/`m9` are zero in both projections.) `shaders/depth-reconstruct.wgsl.ts`
|
|
19
|
+
* is the WGSL twin of these functions; the unit tests round-trip real
|
|
20
|
+
* projection matrices through the TS side.
|
|
21
|
+
*/
|
|
22
|
+
import type { Mat4 } from './types.js';
|
|
23
|
+
/** The projection entries the reconstruction needs, packed as two vec4s. */
|
|
24
|
+
export interface DepthReconstructParams {
|
|
25
|
+
/** `[m10, m11, m14, m15]`: device depth to view-space z. */
|
|
26
|
+
depth: [number, number, number, number];
|
|
27
|
+
/** `[m0, m5, m12, m13]`: NDC x/y (with clip w) to view-space x/y. */
|
|
28
|
+
xy: [number, number, number, number];
|
|
29
|
+
}
|
|
30
|
+
/** Extract the reconstruction params from a (column-major) projection matrix. */
|
|
31
|
+
export declare function depthReconstructParams(projection: Mat4): DepthReconstructParams;
|
|
32
|
+
/** View-space z (negative in front of the camera) of a device depth value. */
|
|
33
|
+
export declare function viewZFromDepth(depth: number, p: DepthReconstructParams): number;
|
|
34
|
+
/** Clip-space w at view-space z: the view distance in perspective, 1 in ortho. */
|
|
35
|
+
export declare function clipWFromViewZ(viewZ: number, p: DepthReconstructParams): number;
|
|
36
|
+
/** View-space position of an NDC point at a device depth. */
|
|
37
|
+
export declare function viewPositionFromDepth(ndcX: number, ndcY: number, depth: number, p: DepthReconstructParams): [number, number, number];
|
|
38
|
+
/**
|
|
39
|
+
* Pixels per world unit at clip w = 1, for a drawing buffer `heightPx` tall.
|
|
40
|
+
* A world-space length `r` at clip w spans `r * scale / w` pixels.
|
|
41
|
+
*/
|
|
42
|
+
export declare function pixelsPerWorldUnit(projection: Mat4, heightPx: number): number;
|
|
43
|
+
//# sourceMappingURL=depth-reconstruct.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"depth-reconstruct.d.ts","sourceRoot":"","sources":["../src/depth-reconstruct.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,4EAA4E;AAC5E,MAAM,WAAW,sBAAsB;IACrC,4DAA4D;IAC5D,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,qEAAqE;IACrE,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAED,iFAAiF;AACjF,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,IAAI,GAAG,sBAAsB,CAM/E;AAED,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,sBAAsB,GAAG,MAAM,CAG/E;AAED,kFAAkF;AAClF,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,sBAAsB,GAAG,MAAM,CAE/E;AAED,6DAA6D;AAC7D,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,CAAC,EAAE,sBAAsB,GACxB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAK1B;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE7E"}
|
|
@@ -0,0 +1,35 @@
|
|
|
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
|
+
/** Extract the reconstruction params from a (column-major) projection matrix. */
|
|
5
|
+
export function depthReconstructParams(projection) {
|
|
6
|
+
const m = projection.m;
|
|
7
|
+
return {
|
|
8
|
+
depth: [m[10], m[11], m[14], m[15]],
|
|
9
|
+
xy: [m[0], m[5], m[12], m[13]],
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
/** View-space z (negative in front of the camera) of a device depth value. */
|
|
13
|
+
export function viewZFromDepth(depth, p) {
|
|
14
|
+
const [m10, m11, m14, m15] = p.depth;
|
|
15
|
+
return (m14 - depth * m15) / (depth * m11 - m10);
|
|
16
|
+
}
|
|
17
|
+
/** Clip-space w at view-space z: the view distance in perspective, 1 in ortho. */
|
|
18
|
+
export function clipWFromViewZ(viewZ, p) {
|
|
19
|
+
return p.depth[1] * viewZ + p.depth[3];
|
|
20
|
+
}
|
|
21
|
+
/** View-space position of an NDC point at a device depth. */
|
|
22
|
+
export function viewPositionFromDepth(ndcX, ndcY, depth, p) {
|
|
23
|
+
const z = viewZFromDepth(depth, p);
|
|
24
|
+
const w = clipWFromViewZ(z, p);
|
|
25
|
+
const [m0, m5, m12, m13] = p.xy;
|
|
26
|
+
return [(ndcX * w - m12) / m0, (ndcY * w - m13) / m5, z];
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Pixels per world unit at clip w = 1, for a drawing buffer `heightPx` tall.
|
|
30
|
+
* A world-space length `r` at clip w spans `r * scale / w` pixels.
|
|
31
|
+
*/
|
|
32
|
+
export function pixelsPerWorldUnit(projection, heightPx) {
|
|
33
|
+
return 0.5 * heightPx * projection.m[5];
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=depth-reconstruct.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"depth-reconstruct.js","sourceRoot":"","sources":["../src/depth-reconstruct.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAkC/D,iFAAiF;AACjF,MAAM,UAAU,sBAAsB,CAAC,UAAgB;IACrD,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;IACvB,OAAO;QACL,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACnC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;KAC/B,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,cAAc,CAAC,KAAa,EAAE,CAAyB;IACrE,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;IACrC,OAAO,CAAC,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AACnD,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,cAAc,CAAC,KAAa,EAAE,CAAyB;IACrE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,qBAAqB,CACnC,IAAY,EACZ,IAAY,EACZ,KAAa,EACb,CAAyB;IAEzB,MAAM,CAAC,GAAG,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACnC,MAAM,CAAC,GAAG,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;IAChC,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,UAAgB,EAAE,QAAgB;IACnE,OAAO,GAAG,GAAG,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,CAAC"}
|
package/dist/device.js
CHANGED
|
@@ -202,7 +202,7 @@ export class WebGPUDevice {
|
|
|
202
202
|
this.context.configure({
|
|
203
203
|
device: this.device,
|
|
204
204
|
format: this.format,
|
|
205
|
-
usage: GPUTextureUsage.RENDER_ATTACHMENT,
|
|
205
|
+
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC,
|
|
206
206
|
alphaMode: 'premultiplied',
|
|
207
207
|
});
|
|
208
208
|
this.contextConfigured = true;
|
package/dist/device.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device.js","sourceRoot":"","sources":["../src/device.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"device.js","sourceRoot":"","sources":["../src/device.ts"],"names":[],"mappings":"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"}
|
package/dist/environment.d.ts
CHANGED
|
@@ -2,10 +2,14 @@
|
|
|
2
2
|
* Lighting environment for the main shading pipelines and the procedural
|
|
3
3
|
* sky pass.
|
|
4
4
|
*
|
|
5
|
-
* Every field is optional
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
5
|
+
* Every field is optional. The default rig is a one-sided sun from the side
|
|
6
|
+
* the default camera sees, a hemisphere ambient strong enough to keep faces
|
|
7
|
+
* turned away from it at roughly 40-50% of the key, a fill from the opposite
|
|
8
|
+
* side and 0.85 exposure (#5382). The geometry shader converts these
|
|
9
|
+
* intensities to linear irradiance (`IRRADIANCE_CALIBRATION` in
|
|
10
|
+
* `shaders/main.wgsl.ts`), so the default rig lights a sun-facing horizontal
|
|
11
|
+
* surface at unit irradiance (by luma; the near-neutral sky leaves each
|
|
12
|
+
* channel within about 1.5% of that).
|
|
9
13
|
*
|
|
10
14
|
* Directions are in viewer/world space (Y-up). `sunDirection` points TOWARD
|
|
11
15
|
* the sun, matching the shader's `dot(N, sunDirection)` convention.
|
|
@@ -23,27 +27,34 @@ export interface LightingEnvironment {
|
|
|
23
27
|
/** Unit vector toward the sun (Y-up viewer space). Normalized defensively. */
|
|
24
28
|
sunDirection?: [number, number, number];
|
|
25
29
|
sunColor?: Vec3Color;
|
|
26
|
-
/** Diffuse strength of the sun term (
|
|
30
|
+
/** Diffuse strength of the one-sided sun term (default 0.4). */
|
|
27
31
|
sunIntensity?: number;
|
|
28
|
-
/**
|
|
32
|
+
/**
|
|
33
|
+
* Hemisphere-ambient sky colour (default [0.34, 0.35, 0.36]). Kept close to
|
|
34
|
+
* neutral: the ambient carries almost half of the key light, so a strongly
|
|
35
|
+
* blue sky would tint every sunlit white surface.
|
|
36
|
+
*/
|
|
29
37
|
skyColor?: Vec3Color;
|
|
30
|
-
/** Hemisphere-ambient ground colour (
|
|
38
|
+
/** Hemisphere-ambient ground colour (default [0.24, 0.2, 0.17], a warm bounce). */
|
|
31
39
|
groundColor?: Vec3Color;
|
|
32
|
-
/**
|
|
40
|
+
/**
|
|
41
|
+
* Hemisphere ambient strength (default 0.775). This is what lights faces
|
|
42
|
+
* turned away from the sun, so it sets how dark the shaded side and cast
|
|
43
|
+
* shadows read.
|
|
44
|
+
*/
|
|
33
45
|
ambientIntensity?: number;
|
|
34
|
-
/**
|
|
46
|
+
/** Strength of the fill bouncing in from the side opposite the sun (default 0.1). */
|
|
35
47
|
fillIntensity?: number;
|
|
36
|
-
/** Rim-light strength (
|
|
48
|
+
/** Rim-light strength, a fixed light from -Z (default 0.05). */
|
|
37
49
|
rimIntensity?: number;
|
|
38
50
|
/**
|
|
39
51
|
* Sun terminator softness — the diffuse "wrap" that lifts the light/shadow
|
|
40
52
|
* boundary off a hard `max(N·L, 0)` toward wrap-around lighting. 0 is a crisp
|
|
41
|
-
* terminator (hard shadows); larger values soften it (overcast look).
|
|
42
|
-
*
|
|
43
|
-
* Clamped to [0, 1] on resolve.
|
|
53
|
+
* terminator (hard shadows); larger values soften it (overcast look). Default
|
|
54
|
+
* 0.3. Clamped to [0, 1] on resolve.
|
|
44
55
|
*/
|
|
45
56
|
sunSoftness?: number;
|
|
46
|
-
/**
|
|
57
|
+
/** Exposure multiplier on the light, before highlight roll-off (default 0.85). */
|
|
47
58
|
exposure?: number;
|
|
48
59
|
/**
|
|
49
60
|
* Draw the procedural sky background. When false (default) the frame
|
|
@@ -67,7 +78,7 @@ export type ResolvedEnvironment = Required<Omit<LightingEnvironment, 'sky'>> & {
|
|
|
67
78
|
* night → twilight → golden hour → day.
|
|
68
79
|
*/
|
|
69
80
|
export declare function deriveSkyGradient(sunElevation: number): SkyGradient;
|
|
70
|
-
/** Fill in defaults;
|
|
81
|
+
/** Fill in defaults; `env` undefined/empty resolves to the default rig. */
|
|
71
82
|
export declare function resolveEnvironment(env?: LightingEnvironment): ResolvedEnvironment;
|
|
72
83
|
/** Byte size of the packed environment UBO (must match the WGSL struct). */
|
|
73
84
|
export declare const ENVIRONMENT_UNIFORM_SIZE = 80;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"AAIA
|
|
1
|
+
{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAEjD,MAAM,WAAW,WAAW;IAC1B,0BAA0B;IAC1B,MAAM,EAAE,SAAS,CAAC;IAClB,kCAAkC;IAClC,OAAO,EAAE,SAAS,CAAC;IACnB,gCAAgC;IAChC,MAAM,EAAE,SAAS,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,8EAA8E;IAC9E,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,mFAAmF;IACnF,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qFAAqF;IACrF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;CAC5B;AAED,wDAAwD;AACxD,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC,GAAG;IAC7E,GAAG,EAAE,WAAW,CAAC;CAClB,CAAC;AA8DF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,WAAW,CAqDnE;AAED,2EAA2E;AAC3E,wBAAgB,kBAAkB,CAAC,GAAG,CAAC,EAAE,mBAAmB,GAAG,mBAAmB,CAqBjF;AAED,4EAA4E;AAC5E,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,mBAAmB,EACxB,GAAG,CAAC,EAAE,YAAY,GACjB,YAAY,CAuBd"}
|
package/dist/environment.js
CHANGED
|
@@ -1,10 +1,16 @@
|
|
|
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
|
-
/**
|
|
4
|
+
/**
|
|
5
|
+
* Default sun direction, normalized: (-0.45, 1, 0.6) / |…|.
|
|
6
|
+
*
|
|
7
|
+
* The default camera looks from +X+Z, so it sees the +X and +Z faces. This
|
|
8
|
+
* sun lights +Z and leaves +X in shade, so the opening view has a lit side
|
|
9
|
+
* and a shaded side (#5382). The previous (0.5, 1, 0.3) lit both.
|
|
10
|
+
*/
|
|
5
11
|
const DEFAULT_SUN_DIR = (() => {
|
|
6
|
-
const len = Math.hypot(0.
|
|
7
|
-
return [0.
|
|
12
|
+
const len = Math.hypot(-0.45, 1.0, 0.6);
|
|
13
|
+
return [-0.45 / len, 1.0 / len, 0.6 / len];
|
|
8
14
|
})();
|
|
9
15
|
/**
|
|
10
16
|
* Unit sun direction, falling back to {@link DEFAULT_SUN_DIR} for any input
|
|
@@ -69,16 +75,21 @@ export function deriveSkyGradient(sunElevation) {
|
|
|
69
75
|
};
|
|
70
76
|
// Ground tones stay near-neutral grey: BIM cameras spend most of their
|
|
71
77
|
// time looking DOWN, so the below-horizon colour fills the screen — a
|
|
72
|
-
// warm "earth" tone reads as a mud-brown background there.
|
|
78
|
+
// warm "earth" tone reads as a mud-brown background there. They are
|
|
79
|
+
// lifted (same channel ratios, higher magnitude — not blended toward the
|
|
80
|
+
// warm horizon hue) relative to the previous values so a downward view
|
|
81
|
+
// reads as a lighter neutral fill rather than a dreary mid-grey wall
|
|
82
|
+
// (#5583); the shader also widens the horizon→ground falloff so this is a
|
|
83
|
+
// gradient, not a hard cut.
|
|
73
84
|
const golden = {
|
|
74
85
|
zenith: [0.18, 0.32, 0.56],
|
|
75
86
|
horizon: [0.95, 0.55, 0.28],
|
|
76
|
-
ground: [0.
|
|
87
|
+
ground: [0.176, 0.168, 0.168],
|
|
77
88
|
};
|
|
78
89
|
const day = {
|
|
79
90
|
zenith: [0.18, 0.40, 0.78],
|
|
80
91
|
horizon: [0.66, 0.78, 0.90],
|
|
81
|
-
ground: [0.
|
|
92
|
+
ground: [0.252, 0.261, 0.27],
|
|
82
93
|
};
|
|
83
94
|
// sin(altitude) stops: night below -0.21 (~-12°), twilight to ~0,
|
|
84
95
|
// golden to ~0.17 (~10°), full day above ~0.35 (~20°).
|
|
@@ -103,19 +114,19 @@ export function deriveSkyGradient(sunElevation) {
|
|
|
103
114
|
};
|
|
104
115
|
return g;
|
|
105
116
|
}
|
|
106
|
-
/** Fill in defaults;
|
|
117
|
+
/** Fill in defaults; `env` undefined/empty resolves to the default rig. */
|
|
107
118
|
export function resolveEnvironment(env) {
|
|
108
119
|
const sunDirection = normalized(env?.sunDirection ?? DEFAULT_SUN_DIR);
|
|
109
120
|
const derived = deriveSkyGradient(sunDirection[1]);
|
|
110
121
|
return {
|
|
111
122
|
sunDirection,
|
|
112
123
|
sunColor: env?.sunColor ?? [1, 1, 1],
|
|
113
|
-
sunIntensity: env?.sunIntensity ?? 0.
|
|
114
|
-
skyColor: env?.skyColor ?? [0.
|
|
115
|
-
groundColor: env?.groundColor ?? [0.
|
|
116
|
-
ambientIntensity: env?.ambientIntensity ?? 0.
|
|
117
|
-
fillIntensity: env?.fillIntensity ?? 0.
|
|
118
|
-
rimIntensity: env?.rimIntensity ?? 0.
|
|
124
|
+
sunIntensity: env?.sunIntensity ?? 0.4,
|
|
125
|
+
skyColor: env?.skyColor ?? [0.34, 0.35, 0.36],
|
|
126
|
+
groundColor: env?.groundColor ?? [0.24, 0.2, 0.17],
|
|
127
|
+
ambientIntensity: env?.ambientIntensity ?? 0.775,
|
|
128
|
+
fillIntensity: env?.fillIntensity ?? 0.1,
|
|
129
|
+
rimIntensity: env?.rimIntensity ?? 0.05,
|
|
119
130
|
sunSoftness: clamp01(env?.sunSoftness ?? 0.3),
|
|
120
131
|
exposure: env?.exposure ?? 0.85,
|
|
121
132
|
skyEnabled: env?.skyEnabled ?? false,
|
package/dist/environment.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"AAAA;;+DAE+D;
|
|
1
|
+
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,8 @@ export interface ModelRange {
|
|
|
12
12
|
modelId: string;
|
|
13
13
|
offset: number;
|
|
14
14
|
maxExpressId: number;
|
|
15
|
+
reservedMaxExpressId: number;
|
|
16
|
+
publishedStart: number | null;
|
|
15
17
|
}
|
|
16
18
|
export interface GlobalIdLookup {
|
|
17
19
|
modelId: string;
|
|
@@ -34,6 +36,19 @@ export declare class FederationRegistry {
|
|
|
34
36
|
* @returns The offset to add to all expressIds for this model
|
|
35
37
|
*/
|
|
36
38
|
registerModel(modelId: string, maxExpressId: number): number;
|
|
39
|
+
/** Reserve a fixed local-ID envelope before progressive publication. */
|
|
40
|
+
reserveModel(modelId: string, reservedMaxExpressId: number): number;
|
|
41
|
+
/** Publish the next contiguous owned local range inside a reservation. */
|
|
42
|
+
publishRange(modelId: string, start: number, end: number): void;
|
|
43
|
+
/** Publish derived/overlay IDs from the separately reserved headroom. */
|
|
44
|
+
publishOverlayRange(modelId: string, start: number, end: number): void;
|
|
45
|
+
/**
|
|
46
|
+
* Resolve an owned overlay range while it is still detached from its
|
|
47
|
+
* mutation transaction. This validates the exact range that will be
|
|
48
|
+
* publishable, but deliberately does not make it pickable or owned yet.
|
|
49
|
+
* Callers must publish it only after the backing records commit.
|
|
50
|
+
*/
|
|
51
|
+
previewOverlayGlobalId(modelId: string, start: number, end: number, expressId: number): number;
|
|
37
52
|
/**
|
|
38
53
|
* Unregister a model (when removed from viewer)
|
|
39
54
|
* Note: The offset space is NOT reclaimed to avoid invalidating any
|
|
@@ -88,6 +103,7 @@ export declare class FederationRegistry {
|
|
|
88
103
|
* Clear all registrations (for full reset)
|
|
89
104
|
*/
|
|
90
105
|
clear(): void;
|
|
106
|
+
private isPublished;
|
|
91
107
|
/**
|
|
92
108
|
* Binary search to find the range that could contain a globalId
|
|
93
109
|
* Returns the range with the largest offset that is <= globalId
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"federation-registry.d.ts","sourceRoot":"","sources":["../src/federation-registry.ts"],"names":[],"mappings":"AAIA;;;;;;;;;GASG;AAEH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"federation-registry.d.ts","sourceRoot":"","sources":["../src/federation-registry.ts"],"names":[],"mappings":"AAIA;;;;;;;;;GASG;AAEH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAsBD;;;GAGG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,WAAW,CAAsC;IACzD,OAAO,CAAC,YAAY,CAAoB;IACxC,OAAO,CAAC,UAAU,CAAa;IAE/B;;;;;;;OAOG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM;IAQ5D,wEAAwE;IACxE,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,GAAG,MAAM;IAyCnE,0EAA0E;IAC1E,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAc/D,yEAAyE;IACzE,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAatE;;;;;OAKG;IACH,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAe9F;;;;OAIG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAYtC;;;OAGG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAWtD;;;OAGG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAwBrD;;;OAGG;IACH,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAKpD;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIzC;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIlC;;OAEG;IACH,WAAW,IAAI,MAAM,EAAE;IAIvB;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;;OAGG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAUxE;;;OAGG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAOrD;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb,OAAO,CAAC,WAAW;IAOnB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;CAsB1B;AAID,eAAO,MAAM,kBAAkB,oBAA2B,CAAC"}
|
|
@@ -36,12 +36,21 @@ export class FederationRegistry {
|
|
|
36
36
|
* @returns The offset to add to all expressIds for this model
|
|
37
37
|
*/
|
|
38
38
|
registerModel(modelId, maxExpressId) {
|
|
39
|
+
const existing = this.modelRanges.get(modelId);
|
|
40
|
+
if (existing)
|
|
41
|
+
return existing.offset;
|
|
42
|
+
const offset = this.reserveModel(modelId, maxExpressId);
|
|
43
|
+
this.publishRange(modelId, 0, maxExpressId);
|
|
44
|
+
return offset;
|
|
45
|
+
}
|
|
46
|
+
/** Reserve a fixed local-ID envelope before progressive publication. */
|
|
47
|
+
reserveModel(modelId, reservedMaxExpressId) {
|
|
39
48
|
// Validate inputs
|
|
40
49
|
if (!modelId || typeof modelId !== 'string') {
|
|
41
50
|
throw new Error(`[FederationRegistry] Invalid modelId: ${modelId}`);
|
|
42
51
|
}
|
|
43
|
-
if (typeof
|
|
44
|
-
throw new Error(`[FederationRegistry] Invalid
|
|
52
|
+
if (typeof reservedMaxExpressId !== 'number' || !Number.isFinite(reservedMaxExpressId) || reservedMaxExpressId < 0) {
|
|
53
|
+
throw new Error(`[FederationRegistry] Invalid reservedMaxExpressId: ${reservedMaxExpressId} for model ${modelId}`);
|
|
45
54
|
}
|
|
46
55
|
// Check for duplicate registration
|
|
47
56
|
if (this.modelRanges.has(modelId)) {
|
|
@@ -50,13 +59,13 @@ export class FederationRegistry {
|
|
|
50
59
|
return existing.offset;
|
|
51
60
|
}
|
|
52
61
|
// Check for overflow
|
|
53
|
-
if (this.nextOffset +
|
|
62
|
+
if (this.nextOffset + reservedMaxExpressId > MAX_SAFE_OFFSET) {
|
|
54
63
|
throw new Error(`[FederationRegistry] Cannot register model: would exceed safe ID limit. ` +
|
|
55
|
-
`Current offset: ${this.nextOffset}, model max ID: ${
|
|
64
|
+
`Current offset: ${this.nextOffset}, reserved model max ID: ${reservedMaxExpressId}. ` +
|
|
56
65
|
`Please unload some models first.`);
|
|
57
66
|
}
|
|
58
67
|
const offset = this.nextOffset;
|
|
59
|
-
const range = { modelId, offset, maxExpressId };
|
|
68
|
+
const range = { modelId, offset, maxExpressId: -1, reservedMaxExpressId, publishedStart: null };
|
|
60
69
|
this.modelRanges.set(modelId, range);
|
|
61
70
|
this.sortedRanges.push(range);
|
|
62
71
|
// Keep sorted by offset for binary search
|
|
@@ -64,9 +73,60 @@ export class FederationRegistry {
|
|
|
64
73
|
// Next model starts after this model's range (+1 gap for safety), plus
|
|
65
74
|
// reserved headroom for mutation-overlay ids allocated into this model's
|
|
66
75
|
// own space after load (see OVERLAY_ID_HEADROOM above).
|
|
67
|
-
this.nextOffset = offset +
|
|
76
|
+
this.nextOffset = offset + reservedMaxExpressId + 1 + OVERLAY_ID_HEADROOM;
|
|
68
77
|
return offset;
|
|
69
78
|
}
|
|
79
|
+
/** Publish the next contiguous owned local range inside a reservation. */
|
|
80
|
+
publishRange(modelId, start, end) {
|
|
81
|
+
const range = this.modelRanges.get(modelId);
|
|
82
|
+
if (!range)
|
|
83
|
+
throw new Error(`[FederationRegistry] Cannot publish unknown model ${modelId}`);
|
|
84
|
+
if (!Number.isInteger(start) || !Number.isInteger(end) || start < 0 || end < start || end > range.reservedMaxExpressId) {
|
|
85
|
+
throw new Error(`[FederationRegistry] Invalid published range ${start}..${end} for ${modelId}`);
|
|
86
|
+
}
|
|
87
|
+
if (range.publishedStart === null) {
|
|
88
|
+
range.publishedStart = start;
|
|
89
|
+
}
|
|
90
|
+
else if (start !== range.maxExpressId + 1) {
|
|
91
|
+
throw new Error(`[FederationRegistry] Published IDs for ${modelId} must be contiguous and source ordered`);
|
|
92
|
+
}
|
|
93
|
+
range.maxExpressId = end;
|
|
94
|
+
}
|
|
95
|
+
/** Publish derived/overlay IDs from the separately reserved headroom. */
|
|
96
|
+
publishOverlayRange(modelId, start, end) {
|
|
97
|
+
const range = this.modelRanges.get(modelId);
|
|
98
|
+
if (!range)
|
|
99
|
+
throw new Error(`[FederationRegistry] Cannot publish unknown model ${modelId}`);
|
|
100
|
+
const overlayEnd = range.reservedMaxExpressId + OVERLAY_ID_HEADROOM;
|
|
101
|
+
if (!Number.isInteger(start) || !Number.isInteger(end) || start < range.reservedMaxExpressId + 1 || end < start || end > overlayEnd) {
|
|
102
|
+
throw new Error(`[FederationRegistry] Invalid overlay range ${start}..${end} for ${modelId}`);
|
|
103
|
+
}
|
|
104
|
+
if (start !== range.maxExpressId + 1) {
|
|
105
|
+
throw new Error(`[FederationRegistry] Overlay IDs for ${modelId} must extend published ownership contiguously`);
|
|
106
|
+
}
|
|
107
|
+
range.maxExpressId = end;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Resolve an owned overlay range while it is still detached from its
|
|
111
|
+
* mutation transaction. This validates the exact range that will be
|
|
112
|
+
* publishable, but deliberately does not make it pickable or owned yet.
|
|
113
|
+
* Callers must publish it only after the backing records commit.
|
|
114
|
+
*/
|
|
115
|
+
previewOverlayGlobalId(modelId, start, end, expressId) {
|
|
116
|
+
const range = this.modelRanges.get(modelId);
|
|
117
|
+
if (!range)
|
|
118
|
+
throw new Error(`[FederationRegistry] Cannot preview unknown model ${modelId}`);
|
|
119
|
+
const overlayEnd = range.reservedMaxExpressId + OVERLAY_ID_HEADROOM;
|
|
120
|
+
if (!Number.isInteger(start) || !Number.isInteger(end) || !Number.isInteger(expressId)
|
|
121
|
+
|| start < range.reservedMaxExpressId + 1 || end < start || end > overlayEnd
|
|
122
|
+
|| expressId < start || expressId > end) {
|
|
123
|
+
throw new Error(`[FederationRegistry] Invalid overlay preview ${start}..${end} for ${modelId}`);
|
|
124
|
+
}
|
|
125
|
+
if (start !== range.maxExpressId + 1) {
|
|
126
|
+
throw new Error(`[FederationRegistry] Overlay preview for ${modelId} must extend published ownership contiguously`);
|
|
127
|
+
}
|
|
128
|
+
return range.offset + expressId;
|
|
129
|
+
}
|
|
70
130
|
/**
|
|
71
131
|
* Unregister a model (when removed from viewer)
|
|
72
132
|
* Note: The offset space is NOT reclaimed to avoid invalidating any
|
|
@@ -91,6 +151,9 @@ export class FederationRegistry {
|
|
|
91
151
|
if (!range) {
|
|
92
152
|
return expressId;
|
|
93
153
|
}
|
|
154
|
+
if (!this.isPublished(range, expressId)) {
|
|
155
|
+
throw new Error(`[FederationRegistry] Local ID ${expressId} is not published for model ${modelId}`);
|
|
156
|
+
}
|
|
94
157
|
return expressId + range.offset;
|
|
95
158
|
}
|
|
96
159
|
/**
|
|
@@ -108,7 +171,7 @@ export class FederationRegistry {
|
|
|
108
171
|
}
|
|
109
172
|
// Verify the globalId is actually within this model's range
|
|
110
173
|
const localId = globalId - range.offset;
|
|
111
|
-
if (
|
|
174
|
+
if (!this.isPublished(range, localId)) {
|
|
112
175
|
// globalId is in the gap between models
|
|
113
176
|
return null;
|
|
114
177
|
}
|
|
@@ -157,8 +220,10 @@ export class FederationRegistry {
|
|
|
157
220
|
const range = this.modelRanges.get(modelId);
|
|
158
221
|
if (!range)
|
|
159
222
|
return null;
|
|
223
|
+
if (range.publishedStart === null)
|
|
224
|
+
return null;
|
|
160
225
|
return {
|
|
161
|
-
start: range.offset,
|
|
226
|
+
start: range.offset + range.publishedStart,
|
|
162
227
|
end: range.offset + range.maxExpressId,
|
|
163
228
|
};
|
|
164
229
|
}
|
|
@@ -171,7 +236,7 @@ export class FederationRegistry {
|
|
|
171
236
|
if (!range)
|
|
172
237
|
return false;
|
|
173
238
|
const localId = globalId - range.offset;
|
|
174
|
-
return
|
|
239
|
+
return this.isPublished(range, localId);
|
|
175
240
|
}
|
|
176
241
|
/**
|
|
177
242
|
* Clear all registrations (for full reset)
|
|
@@ -181,6 +246,12 @@ export class FederationRegistry {
|
|
|
181
246
|
this.sortedRanges = [];
|
|
182
247
|
this.nextOffset = 0;
|
|
183
248
|
}
|
|
249
|
+
isPublished(range, localId) {
|
|
250
|
+
return range.publishedStart !== null
|
|
251
|
+
&& Number.isInteger(localId)
|
|
252
|
+
&& localId >= range.publishedStart
|
|
253
|
+
&& localId <= range.maxExpressId;
|
|
254
|
+
}
|
|
184
255
|
/**
|
|
185
256
|
* Binary search to find the range that could contain a globalId
|
|
186
257
|
* Returns the range with the largest offset that is <= globalId
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"federation-registry.js","sourceRoot":"","sources":["../src/federation-registry.ts"],"names":[],"mappings":"AAAA;;+DAE+D;
|
|
1
|
+
{"version":3,"file":"federation-registry.js","sourceRoot":"","sources":["../src/federation-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The ONE way the renderer creates a GPU buffer pre-filled with static
|
|
3
|
+
* geometry (vertex, index and per-instance data) — issue #5429.
|
|
4
|
+
*
|
|
5
|
+
* Why `queue.writeBuffer` and never `createBuffer({ mappedAtCreation: true })`:
|
|
6
|
+
* on Chromium (Chrome / Edge / WebView2, D3D12), a mapped-at-creation buffer
|
|
7
|
+
* keeps a shared-memory copy of its FULL contents mapped into both the
|
|
8
|
+
* renderer and the GPU process for as long as the buffer lives, even after
|
|
9
|
+
* `unmap()`. That region is charged to system commit but appears in neither
|
|
10
|
+
* process's private bytes, so a loaded scene carried an invisible second copy
|
|
11
|
+
* of all its resident geometry (≈1.1 GB per 1 GiB uploaded in the issue's
|
|
12
|
+
* standalone repro; ~6 GB for a 50-file federation). `writeBuffer` into a
|
|
13
|
+
* plain `COPY_DST` buffer stages through a transient transfer allocation and
|
|
14
|
+
* keeps nothing alive afterwards.
|
|
15
|
+
*
|
|
16
|
+
* It also removes this path's synchronous `RangeError` ("createBuffer failed,
|
|
17
|
+
* size (…) is too large for the implementation when mappedAtCreation ==
|
|
18
|
+
* true"): Chromium throws that only when it cannot back the mapping, and a
|
|
19
|
+
* buffer created without `mappedAtCreation` has no mapping to back. A real
|
|
20
|
+
* GPU out-of-memory still reports the way it always did for the device-side
|
|
21
|
+
* allocation — asynchronously, as a `GPUOutOfMemoryError` through the
|
|
22
|
+
* device's error scopes / `uncapturederror`.
|
|
23
|
+
*
|
|
24
|
+
* Alignment is this helper's job, not the caller's. `writeBuffer` throws an
|
|
25
|
+
* `OperationError` DOMException when the byte count is not a multiple of 4,
|
|
26
|
+
* and `gpu-upload-guard.ts`'s `isDeviceLossThrow` classifies EVERY
|
|
27
|
+
* DOMException as a device loss — so one odd-length upload (a u16 index list
|
|
28
|
+
* with an odd count, say) would falsely latch the whole session as lost.
|
|
29
|
+
* The buffer size is therefore rounded up to 4 bytes (minimum 4), and an
|
|
30
|
+
* unaligned payload is copied into a zero-padded staging array first. The
|
|
31
|
+
* padding lies past every `indexCount` / vertex count the caller draws with,
|
|
32
|
+
* so it is never read.
|
|
33
|
+
*
|
|
34
|
+
* `writeBuffer` copies `data` before it returns (WebGPU spec: the contents
|
|
35
|
+
* are captured at call time), so callers may reuse or drop their CPU array
|
|
36
|
+
* immediately, exactly as they could after `unmap()`.
|
|
37
|
+
*/
|
|
38
|
+
export declare function createStaticGpuBuffer(device: GPUDevice, data: ArrayBufferView | ArrayBuffer, usage: GPUBufferUsageFlags): GPUBuffer;
|
|
39
|
+
//# sourceMappingURL=gpu-static-upload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gpu-static-upload.d.ts","sourceRoot":"","sources":["../src/gpu-static-upload.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,eAAe,GAAG,WAAW,EACnC,KAAK,EAAE,mBAAmB,GACzB,SAAS,CAiBX"}
|