@ifc-lite/renderer 3.1.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/README.md +22 -0
- 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/appearance-preview.d.ts +2 -0
- package/dist/appearance-preview.d.ts.map +1 -1
- package/dist/appearance-preview.js +4 -0
- package/dist/appearance-preview.js.map +1 -1
- package/dist/camera-animation-immediate.d.ts +5 -0
- package/dist/camera-animation-immediate.d.ts.map +1 -0
- package/dist/camera-animation-immediate.js +16 -0
- package/dist/camera-animation-immediate.js.map +1 -0
- package/dist/camera-animation.d.ts +3 -9
- package/dist/camera-animation.d.ts.map +1 -1
- package/dist/camera-animation.js +14 -9
- package/dist/camera-animation.js.map +1 -1
- 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-recovery.d.ts +60 -0
- package/dist/device-recovery.d.ts.map +1 -0
- package/dist/device-recovery.js +153 -0
- package/dist/device-recovery.js.map +1 -0
- package/dist/device.d.ts +2 -0
- package/dist/device.d.ts.map +1 -1
- package/dist/device.js +13 -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 +95 -0
- package/dist/gpu-upload-guard.d.ts.map +1 -0
- package/dist/gpu-upload-guard.js +88 -0
- package/dist/gpu-upload-guard.js.map +1 -0
- package/dist/index.d.ts +71 -41
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +340 -375
- package/dist/index.js.map +1 -1
- package/dist/instanced-override-color.d.ts +8 -0
- package/dist/instanced-override-color.d.ts.map +1 -1
- package/dist/instanced-override-color.js +10 -0
- package/dist/instanced-override-color.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/merged-mesh-extract.d.ts.map +1 -1
- package/dist/merged-mesh-extract.js +5 -0
- package/dist/merged-mesh-extract.js.map +1 -1
- 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 +40 -2
- package/dist/model-translation.d.ts.map +1 -1
- package/dist/model-translation.js +152 -17
- 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 +10 -1
- package/dist/picking-manager.d.ts.map +1 -1
- package/dist/picking-manager.js +57 -21
- 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 +3 -1
- package/dist/reference-images.d.ts.map +1 -1
- package/dist/reference-images.js +15 -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 +15 -3
- package/dist/renderer-overlays.d.ts.map +1 -1
- package/dist/renderer-overlays.js +46 -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 +5 -2
- package/dist/renderer-symbolic-overlays.d.ts.map +1 -1
- package/dist/renderer-symbolic-overlays.js +36 -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-appearance-preview.d.ts +2 -0
- package/dist/scene-appearance-preview.d.ts.map +1 -1
- package/dist/scene-appearance-preview.js +9 -0
- package/dist/scene-appearance-preview.js.map +1 -1
- package/dist/scene-authored-owner.d.ts +10 -0
- package/dist/scene-authored-owner.d.ts.map +1 -1
- package/dist/scene-authored-owner.js +44 -5
- package/dist/scene-authored-owner.js.map +1 -1
- package/dist/scene-batch-rebuild.d.ts +18 -0
- package/dist/scene-batch-rebuild.d.ts.map +1 -0
- package/dist/scene-batch-rebuild.js +49 -0
- package/dist/scene-batch-rebuild.js.map +1 -0
- package/dist/scene-batch-upload.d.ts +4 -1
- package/dist/scene-batch-upload.d.ts.map +1 -1
- package/dist/scene-batch-upload.js +31 -38
- package/dist/scene-batch-upload.js.map +1 -1
- package/dist/scene-bucket-routing.d.ts +21 -0
- package/dist/scene-bucket-routing.d.ts.map +1 -0
- package/dist/scene-bucket-routing.js +44 -0
- package/dist/scene-bucket-routing.js.map +1 -0
- package/dist/scene-contents.d.ts +8 -0
- package/dist/scene-contents.d.ts.map +1 -1
- package/dist/scene-derived-mesh-provenance.d.ts +13 -0
- package/dist/scene-derived-mesh-provenance.d.ts.map +1 -0
- package/dist/scene-derived-mesh-provenance.js +30 -0
- package/dist/scene-derived-mesh-provenance.js.map +1 -0
- package/dist/scene-device-recovery.d.ts +103 -0
- package/dist/scene-device-recovery.d.ts.map +1 -0
- package/dist/scene-device-recovery.js +295 -0
- package/dist/scene-device-recovery.js.map +1 -0
- 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-geometry.d.ts +1 -0
- package/dist/scene-geometry.d.ts.map +1 -1
- package/dist/scene-geometry.js +3 -23
- package/dist/scene-geometry.js.map +1 -1
- 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 +13 -1
- package/dist/scene-model-translation.d.ts.map +1 -1
- package/dist/scene-model-translation.js +23 -1
- package/dist/scene-model-translation.js.map +1 -1
- package/dist/scene-precision.d.ts +16 -0
- package/dist/scene-precision.d.ts.map +1 -0
- package/dist/scene-precision.js +73 -0
- package/dist/scene-precision.js.map +1 -0
- 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 +42 -39
- package/dist/scene.d.ts.map +1 -1
- package/dist/scene.js +258 -375
- 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
package/dist/device.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../src/device.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAClC,gEAAgE;IAChE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,iBAAiB,CAAkB;IAC3C,OAAO,CAAC,UAAU,CAAa;IAC/B,4DAA4D;IAC5D,qBAAqB,EAAE,MAAM,CAAK;IAClC,oBAAoB,EAAE,MAAM,CAAM;IAElC;;;;;;;;OAQG;IACH,OAAO,CAAC,iBAAiB,CAAsE;IAC/F,4EAA4E;IAC5E,OAAO,CAAC,eAAe,CAAkB;IACzC,0EAA0E;IAC1E,OAAO,CAAC,mBAAmB,CAAoC;IAE/D;;OAEG;IACG,IAAI,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../src/device.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAClC,gEAAgE;IAChE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,iBAAiB,CAAkB;IAC3C,OAAO,CAAC,UAAU,CAAa;IAC/B,4DAA4D;IAC5D,qBAAqB,EAAE,MAAM,CAAK;IAClC,oBAAoB,EAAE,MAAM,CAAM;IAElC;;;;;;;;OAQG;IACH,OAAO,CAAC,iBAAiB,CAAsE;IAC/F,4EAA4E;IAC5E,OAAO,CAAC,eAAe,CAAkB;IACzC,0EAA0E;IAC1E,OAAO,CAAC,cAAc,CAAa;IACnC,0EAA0E;IAC1E,OAAO,CAAC,mBAAmB,CAAoC;IAE/D;;OAEG;IACG,IAAI,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IA4KpD;;;OAGG;IACH,gBAAgB,IAAI,IAAI;IAoBxB;;OAEG;IACH,gBAAgB,IAAI,OAAO;IAM3B;;OAEG;IACH,iBAAiB,IAAI,IAAI;IAIzB;;;OAGG;IACH,aAAa,IAAI,OAAO;IAWxB;;;OAGG;IACH,iBAAiB,IAAI,UAAU,GAAG,IAAI;IAgBtC,SAAS,IAAI,SAAS;IAOtB;;;;;OAKG;IACH,YAAY,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GAAG,IAAI;IAIhF;;;;OAIG;IACH,sBAAsB,IAAI,MAAM;IAIhC;;;;;;OAMG;IACH,cAAc,IAAI,mBAAmB,GAAG,IAAI;IAI5C;;;;;;;;;OASG;IACH,wBAAwB,IAAI,OAAO;IAInC,UAAU,IAAI,gBAAgB;IAO9B,SAAS,IAAI,gBAAgB;IAI7B,aAAa,IAAI,OAAO;IAIxB;;;;;;;;OAQG;IACH,OAAO,IAAI,IAAI;CAoBhB"}
|
package/dist/device.js
CHANGED
|
@@ -26,12 +26,15 @@ export class WebGPUDevice {
|
|
|
26
26
|
deviceLostHandler = null;
|
|
27
27
|
/** Guards against firing the handler more than once for a single device. */
|
|
28
28
|
deviceLostFired = false;
|
|
29
|
+
/** Invalidates delayed `lost` settlements from a superseded GPUDevice. */
|
|
30
|
+
deviceLifetime = 0;
|
|
29
31
|
/** See `getAdapterInfo()`. Null until `init()` succeeds in reading it. */
|
|
30
32
|
adapterInfoSnapshot = null;
|
|
31
33
|
/**
|
|
32
34
|
* Initialize WebGPU device and canvas context
|
|
33
35
|
*/
|
|
34
36
|
async init(canvas) {
|
|
37
|
+
const deviceLifetime = ++this.deviceLifetime;
|
|
35
38
|
// Each init() begins a fresh GPUDevice lifetime. Clear the once-per-device
|
|
36
39
|
// guard so a destroy()+init() re-entry can still report a later loss (the
|
|
37
40
|
// previous device's `lost` promise already resolved and set this true).
|
|
@@ -166,6 +169,12 @@ export class WebGPUDevice {
|
|
|
166
169
|
const deviceWithLost = this.device;
|
|
167
170
|
if (deviceWithLost.lost) {
|
|
168
171
|
deviceWithLost.lost.then((info) => {
|
|
172
|
+
// A destroyed GPUDevice is allowed to settle its `lost` promise after
|
|
173
|
+
// this wrapper has already initialized a replacement. Never let that
|
|
174
|
+
// stale settlement invalidate the replacement context or notify its
|
|
175
|
+
// recovery subscriber (#4885).
|
|
176
|
+
if (deviceLifetime !== this.deviceLifetime)
|
|
177
|
+
return;
|
|
169
178
|
const reason = info.reason ?? 'unknown';
|
|
170
179
|
console.warn('[WebGPU] Device lost:', info.message, `(reason: ${reason})`);
|
|
171
180
|
this.contextConfigured = false;
|
|
@@ -193,7 +202,7 @@ export class WebGPUDevice {
|
|
|
193
202
|
this.context.configure({
|
|
194
203
|
device: this.device,
|
|
195
204
|
format: this.format,
|
|
196
|
-
usage: GPUTextureUsage.RENDER_ATTACHMENT,
|
|
205
|
+
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.COPY_SRC,
|
|
197
206
|
alphaMode: 'premultiplied',
|
|
198
207
|
});
|
|
199
208
|
this.contextConfigured = true;
|
|
@@ -319,6 +328,9 @@ export class WebGPUDevice {
|
|
|
319
328
|
* rendering until a fresh `init()`. Idempotent — safe to call more than once.
|
|
320
329
|
*/
|
|
321
330
|
destroy() {
|
|
331
|
+
// Invalidate the current GPUDevice before asking it to destroy. Its `lost`
|
|
332
|
+
// promise settles asynchronously and may otherwise race a later init().
|
|
333
|
+
this.deviceLifetime++;
|
|
322
334
|
if (this.device) {
|
|
323
335
|
try {
|
|
324
336
|
this.device.destroy();
|
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":"AAAA;;+DAE+D;AA0B/D,sDAAsD;AACtD,kDAAkD;AAClD,MAAM,eAAe,GAAG,aAAa,CAAC;AAEtC,6EAA6E;AAC7E,qDAAqD;AACrD,EAAE;AACF,6EAA6E;AAC7E,wEAAwE;AACxE,wEAAwE;AACxE,6EAA6E;AAC7E,qEAAqE;AACrE,6EAA6E;AAC7E,2EAA2E;AAC3E,4EAA4E;AAC5E,wEAAwE;AACxE,mEAAmE;AACnE,4EAA4E;AAC5E,MAAM,mBAAmB,GAAG,SAAS,CAAC;AAEtC;;;GAGG;AACH,MAAM,OAAO,kBAAkB;IACrB,WAAW,GAA4B,IAAI,GAAG,EAAE,CAAC;IACjD,YAAY,GAAiB,EAAE,CAAC,CAAC,qCAAqC;IACtE,UAAU,GAAW,CAAC,CAAC;IAE/B;;;;;;;OAOG;IACH,aAAa,CAAC,OAAe,EAAE,YAAoB;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC,MAAM,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QACxD,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;QAC5C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,wEAAwE;IACxE,YAAY,CAAC,OAAe,EAAE,oBAA4B;QACxD,kBAAkB;QAClB,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,yCAAyC,OAAO,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,OAAO,oBAAoB,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,oBAAoB,GAAG,CAAC,EAAE,CAAC;YACnH,MAAM,IAAI,KAAK,CAAC,sDAAsD,oBAAoB,cAAc,OAAO,EAAE,CAAC,CAAC;QACrH,CAAC;QAED,mCAAmC;QACnC,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,8BAA8B,OAAO,mCAAmC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YACxG,OAAO,QAAQ,CAAC,MAAM,CAAC;QACzB,CAAC;QAED,qBAAqB;QACrB,IAAI,IAAI,CAAC,UAAU,GAAG,oBAAoB,GAAG,eAAe,EAAE,CAAC;YAC7D,MAAM,IAAI,KAAK,CACb,0EAA0E;gBAC1E,mBAAmB,IAAI,CAAC,UAAU,4BAA4B,oBAAoB,IAAI;gBACtF,kCAAkC,CACnC,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;QAC/B,MAAM,KAAK,GAAe,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,oBAAoB,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;QAE5G,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,0CAA0C;QAC1C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;QAEtD,uEAAuE;QACvE,yEAAyE;QACzE,wDAAwD;QACxD,IAAI,CAAC,UAAU,GAAG,MAAM,GAAG,oBAAoB,GAAG,CAAC,GAAG,mBAAmB,CAAC;QAE1E,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,0EAA0E;IAC1E,YAAY,CAAC,OAAe,EAAE,KAAa,EAAE,GAAW;QACtD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,OAAO,EAAE,CAAC,CAAC;QAC5F,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,GAAG,KAAK,IAAI,GAAG,GAAG,KAAK,CAAC,oBAAoB,EAAE,CAAC;YACvH,MAAM,IAAI,KAAK,CAAC,gDAAgD,KAAK,KAAK,GAAG,QAAQ,OAAO,EAAE,CAAC,CAAC;QAClG,CAAC;QACD,IAAI,KAAK,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;YAClC,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC;QAC/B,CAAC;aAAM,IAAI,KAAK,KAAK,KAAK,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,0CAA0C,OAAO,wCAAwC,CAAC,CAAC;QAC7G,CAAC;QACD,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC;IAC3B,CAAC;IAED,yEAAyE;IACzE,mBAAmB,CAAC,OAAe,EAAE,KAAa,EAAE,GAAW;QAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,OAAO,EAAE,CAAC,CAAC;QAC5F,MAAM,UAAU,GAAG,KAAK,CAAC,oBAAoB,GAAG,mBAAmB,CAAC;QACpE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,KAAK,CAAC,oBAAoB,GAAG,CAAC,IAAI,GAAG,GAAG,KAAK,IAAI,GAAG,GAAG,UAAU,EAAE,CAAC;YACpI,MAAM,IAAI,KAAK,CAAC,8CAA8C,KAAK,KAAK,GAAG,QAAQ,OAAO,EAAE,CAAC,CAAC;QAChG,CAAC;QACD,IAAI,KAAK,KAAK,KAAK,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,wCAAwC,OAAO,+CAA+C,CAAC,CAAC;QAClH,CAAC;QACD,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC;IAC3B,CAAC;IAED;;;;;OAKG;IACH,sBAAsB,CAAC,OAAe,EAAE,KAAa,EAAE,GAAW,EAAE,SAAiB;QACnF,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,qDAAqD,OAAO,EAAE,CAAC,CAAC;QAC5F,MAAM,UAAU,GAAG,KAAK,CAAC,oBAAoB,GAAG,mBAAmB,CAAC;QACpE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC;eACjF,KAAK,GAAG,KAAK,CAAC,oBAAoB,GAAG,CAAC,IAAI,GAAG,GAAG,KAAK,IAAI,GAAG,GAAG,UAAU;eACzE,SAAS,GAAG,KAAK,IAAI,SAAS,GAAG,GAAG,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,gDAAgD,KAAK,KAAK,GAAG,QAAQ,OAAO,EAAE,CAAC,CAAC;QAClG,CAAC;QACD,IAAI,KAAK,KAAK,KAAK,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,4CAA4C,OAAO,+CAA+C,CAAC,CAAC;QACtH,CAAC;QACD,OAAO,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;IAClC,CAAC;IAED;;;;OAIG;IACH,eAAe,CAAC,OAAe;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,yDAAyD,OAAO,EAAE,CAAC,CAAC;YACjF,OAAO;QACT,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;QACzE,2DAA2D;IAC7D,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,OAAe,EAAE,SAAiB;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,iCAAiC,SAAS,+BAA+B,OAAO,EAAE,CAAC,CAAC;QACtG,CAAC;QACD,OAAO,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;IAClC,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,QAAgB;QAC3B,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,2DAA2D;QAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,IAAI,CAAC;QACd,CAAC;QAED,4DAA4D;QAC5D,MAAM,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;YACtC,wCAAwC;YACxC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO;YACL,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,SAAS,EAAE,OAAO;SACnB,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,mBAAmB,CAAC,QAAgB;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC3C,OAAO,MAAM,EAAE,OAAO,IAAI,IAAI,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,OAAe;QACvB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,IAAI,CAAC;IACvD,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,OAAe;QACtB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACH,gBAAgB,CAAC,OAAe;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,IAAI,KAAK,CAAC,cAAc,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAC/C,OAAO;YACL,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,cAAc;YAC1C,GAAG,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,YAAY;SACvC,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,QAAgB,EAAE,OAAe;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACzB,MAAM,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC;QACxC,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;IACtB,CAAC;IAEO,WAAW,CAAC,KAAiB,EAAE,OAAe;QACpD,OAAO,KAAK,CAAC,cAAc,KAAK,IAAI;eAC/B,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;eACzB,OAAO,IAAI,KAAK,CAAC,cAAc;eAC/B,OAAO,IAAI,KAAK,CAAC,YAAY,CAAC;IACrC,CAAC;IAED;;;OAGG;IACK,iBAAiB,CAAC,QAAgB;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC;QACjC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAErC,8CAA8C;QAC9C,IAAI,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAE7C,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,IAAI,EAAE,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QAE3B,oDAAoD;QACpD,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1C,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;gBACnC,EAAE,GAAG,GAAG,CAAC;YACX,CAAC;iBAAM,CAAC;gBACN,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;YACf,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC;CACF;AAED,yCAAyC;AACzC,+DAA+D;AAC/D,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,EAAE,CAAC"}
|
|
@@ -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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
/**
|
|
5
|
+
* The ONE way the renderer creates a GPU buffer pre-filled with static
|
|
6
|
+
* geometry (vertex, index and per-instance data) — issue #5429.
|
|
7
|
+
*
|
|
8
|
+
* Why `queue.writeBuffer` and never `createBuffer({ mappedAtCreation: true })`:
|
|
9
|
+
* on Chromium (Chrome / Edge / WebView2, D3D12), a mapped-at-creation buffer
|
|
10
|
+
* keeps a shared-memory copy of its FULL contents mapped into both the
|
|
11
|
+
* renderer and the GPU process for as long as the buffer lives, even after
|
|
12
|
+
* `unmap()`. That region is charged to system commit but appears in neither
|
|
13
|
+
* process's private bytes, so a loaded scene carried an invisible second copy
|
|
14
|
+
* of all its resident geometry (≈1.1 GB per 1 GiB uploaded in the issue's
|
|
15
|
+
* standalone repro; ~6 GB for a 50-file federation). `writeBuffer` into a
|
|
16
|
+
* plain `COPY_DST` buffer stages through a transient transfer allocation and
|
|
17
|
+
* keeps nothing alive afterwards.
|
|
18
|
+
*
|
|
19
|
+
* It also removes this path's synchronous `RangeError` ("createBuffer failed,
|
|
20
|
+
* size (…) is too large for the implementation when mappedAtCreation ==
|
|
21
|
+
* true"): Chromium throws that only when it cannot back the mapping, and a
|
|
22
|
+
* buffer created without `mappedAtCreation` has no mapping to back. A real
|
|
23
|
+
* GPU out-of-memory still reports the way it always did for the device-side
|
|
24
|
+
* allocation — asynchronously, as a `GPUOutOfMemoryError` through the
|
|
25
|
+
* device's error scopes / `uncapturederror`.
|
|
26
|
+
*
|
|
27
|
+
* Alignment is this helper's job, not the caller's. `writeBuffer` throws an
|
|
28
|
+
* `OperationError` DOMException when the byte count is not a multiple of 4,
|
|
29
|
+
* and `gpu-upload-guard.ts`'s `isDeviceLossThrow` classifies EVERY
|
|
30
|
+
* DOMException as a device loss — so one odd-length upload (a u16 index list
|
|
31
|
+
* with an odd count, say) would falsely latch the whole session as lost.
|
|
32
|
+
* The buffer size is therefore rounded up to 4 bytes (minimum 4), and an
|
|
33
|
+
* unaligned payload is copied into a zero-padded staging array first. The
|
|
34
|
+
* padding lies past every `indexCount` / vertex count the caller draws with,
|
|
35
|
+
* so it is never read.
|
|
36
|
+
*
|
|
37
|
+
* `writeBuffer` copies `data` before it returns (WebGPU spec: the contents
|
|
38
|
+
* are captured at call time), so callers may reuse or drop their CPU array
|
|
39
|
+
* immediately, exactly as they could after `unmap()`.
|
|
40
|
+
*/
|
|
41
|
+
export function createStaticGpuBuffer(device, data, usage) {
|
|
42
|
+
const bytes = ArrayBuffer.isView(data)
|
|
43
|
+
? new Uint8Array(data.buffer, data.byteOffset, data.byteLength)
|
|
44
|
+
: new Uint8Array(data);
|
|
45
|
+
const size = alignedUploadSize(bytes.byteLength);
|
|
46
|
+
const buffer = device.createBuffer({ size, usage: usage | GPUBufferUsage.COPY_DST });
|
|
47
|
+
if (bytes.byteLength === 0)
|
|
48
|
+
return buffer;
|
|
49
|
+
try {
|
|
50
|
+
const payload = bytes.byteLength === size ? bytes : padTo(bytes, size);
|
|
51
|
+
device.queue.writeBuffer(buffer, 0, payload);
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
// Never orphan the allocation: the caller only learns about buffers this
|
|
55
|
+
// function RETURNS, so one that failed to fill is ours to release.
|
|
56
|
+
buffer.destroy();
|
|
57
|
+
throw error;
|
|
58
|
+
}
|
|
59
|
+
return buffer;
|
|
60
|
+
}
|
|
61
|
+
/** Byte size allocated for a payload of `byteLength`: 4-aligned, never 0. */
|
|
62
|
+
function alignedUploadSize(byteLength) {
|
|
63
|
+
return Math.max(4, Math.ceil(byteLength / 4) * 4);
|
|
64
|
+
}
|
|
65
|
+
function padTo(bytes, size) {
|
|
66
|
+
const padded = new Uint8Array(size);
|
|
67
|
+
padded.set(bytes);
|
|
68
|
+
return padded;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=gpu-static-upload.js.map
|