@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
|
@@ -0,0 +1,326 @@
|
|
|
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 renderer's relative-to-eye (RTE) coordinate contract.
|
|
6
|
+
*
|
|
7
|
+
* IFC source coordinates are JavaScript numbers (IEEE-754 f64). They must
|
|
8
|
+
* stay that way through placement, bounds, picking and measurement. A GPU
|
|
9
|
+
* vertex, however, is f32; at a national-grid offset its least significant
|
|
10
|
+
* bit is much larger than an edge or a cursor snap tolerance. The only
|
|
11
|
+
* f32 conversion allowed at the render boundary is therefore this split:
|
|
12
|
+
*
|
|
13
|
+
* drawableMinusCamera = deltaHigh + deltaLow
|
|
14
|
+
* eyeRelative = (local + deltaHigh) + deltaLow
|
|
15
|
+
*
|
|
16
|
+
* The delta is formed in CPU f64 before either lane is rounded. This avoids
|
|
17
|
+
* losing a source residual when two independently rounded large origins are
|
|
18
|
+
* subtracted in f32.
|
|
19
|
+
*
|
|
20
|
+
* This module deliberately owns both the CPU packing layout and the matching
|
|
21
|
+
* WGSL declarations (in `shaders/relative-to-eye.wgsl.ts`). Pass migrations
|
|
22
|
+
* must consume this frame; no render path may create a competing camera
|
|
23
|
+
* rebase. `worldToRelative` is also the CPU counterpart for ray, snap and
|
|
24
|
+
* measure code: it uses f64 subtraction and never round-trips through a GPU
|
|
25
|
+
* buffer.
|
|
26
|
+
*/
|
|
27
|
+
import { MathUtils } from './math.js';
|
|
28
|
+
import { relativeToEyeWgsl } from './shaders/relative-to-eye.wgsl.js';
|
|
29
|
+
/** Two f32 vec4 lanes holding one f64-like origin. The w components are 0. */
|
|
30
|
+
export const RTE_ORIGIN_FLOATS = 8;
|
|
31
|
+
/** Translation-free `mat4x4 viewProj`; camera position stays CPU f64 only. */
|
|
32
|
+
export const RTE_FRAME_FLOATS = 16;
|
|
33
|
+
/** Largest supported source/world coordinate component, in canonical Y-up metres. */
|
|
34
|
+
export const MAX_RTE_SOURCE_ABS_METRES = 1_000_000_000;
|
|
35
|
+
/** Largest source-origin delta accepted by a single camera RTE frame. */
|
|
36
|
+
export const MAX_RTE_EYE_RELATIVE_METRES = 1_000_000;
|
|
37
|
+
/**
|
|
38
|
+
* Largest local-coordinate magnitude accepted for a precision-sensitive
|
|
39
|
+
* drawable. At 8,192 m an f32 ULP remains below one millimetre; larger
|
|
40
|
+
* extents must be partitioned into separate anchors rather than silently
|
|
41
|
+
* turning centimetre geometry into coarse local floats.
|
|
42
|
+
*/
|
|
43
|
+
export const MAX_RTE_LOCAL_METRES = 8_192;
|
|
44
|
+
/** Exact byte layout shared by the CPU writer and the WGSL RTE structs. */
|
|
45
|
+
export const RTE_UNIFORM_LAYOUT = {
|
|
46
|
+
frame: [
|
|
47
|
+
{ name: 'viewProj', type: 'mat4x4<f32>', byteOffset: 0, byteSize: 64 },
|
|
48
|
+
],
|
|
49
|
+
drawable: [
|
|
50
|
+
{ name: 'drawableDeltaHigh', type: 'vec4<f32>', byteOffset: 0, byteSize: 16 },
|
|
51
|
+
{ name: 'drawableDeltaLow', type: 'vec4<f32>', byteOffset: 16, byteSize: 16 },
|
|
52
|
+
],
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Reflect the deliberately small RTE WGSL ABI. The production source has no
|
|
56
|
+
* nested structs or arrays here, so accepting either would conceal inserted
|
|
57
|
+
* padding. Unsupported syntax is a contract failure, not a parser fallback.
|
|
58
|
+
*/
|
|
59
|
+
export function reflectRteUniformStruct(source, structName) {
|
|
60
|
+
const match = new RegExp(`struct\\s+${structName}\\s*\\{([\\s\\S]*?)\\}`).exec(source);
|
|
61
|
+
if (!match)
|
|
62
|
+
throw new Error(`RTE WGSL struct ${structName} is missing.`);
|
|
63
|
+
const fields = [];
|
|
64
|
+
let byteOffset = 0;
|
|
65
|
+
for (const rawLine of match[1].split('\n')) {
|
|
66
|
+
const line = rawLine.replace(/\/\/.*$/, '').trim();
|
|
67
|
+
if (!line)
|
|
68
|
+
continue;
|
|
69
|
+
const field = /^(\w+)\s*:\s*(mat4x4<f32>|vec4<f32>)\s*,?$/.exec(line);
|
|
70
|
+
if (!field)
|
|
71
|
+
throw new Error(`Unsupported RTE WGSL field: ${line}`);
|
|
72
|
+
const name = field[1];
|
|
73
|
+
const type = field[2];
|
|
74
|
+
if (!name || (type !== 'mat4x4<f32>' && type !== 'vec4<f32>')) {
|
|
75
|
+
throw new Error(`Invalid RTE WGSL field: ${line}`);
|
|
76
|
+
}
|
|
77
|
+
const byteSize = type === 'mat4x4<f32>' ? 64 : 16;
|
|
78
|
+
byteOffset = Math.ceil(byteOffset / 16) * 16;
|
|
79
|
+
fields.push({ name, type, byteOffset, byteSize });
|
|
80
|
+
byteOffset += byteSize;
|
|
81
|
+
}
|
|
82
|
+
return fields;
|
|
83
|
+
}
|
|
84
|
+
/** Fail loudly if source edits drift from the CPU writer's exact ABI. */
|
|
85
|
+
export function assertRteUniformAbi(source = relativeToEyeWgsl) {
|
|
86
|
+
for (const [structName, expected] of [
|
|
87
|
+
['RteFrameUniform', RTE_UNIFORM_LAYOUT.frame],
|
|
88
|
+
['RteDrawableUniform', RTE_UNIFORM_LAYOUT.drawable],
|
|
89
|
+
]) {
|
|
90
|
+
const actual = reflectRteUniformStruct(source, structName);
|
|
91
|
+
if (actual.length !== expected.length || actual.some((field, index) => {
|
|
92
|
+
const want = expected[index];
|
|
93
|
+
return field.name !== want.name || field.type !== want.type
|
|
94
|
+
|| field.byteOffset !== want.byteOffset || field.byteSize !== want.byteSize;
|
|
95
|
+
})) {
|
|
96
|
+
throw new Error(`RTE WGSL ${structName} does not match the CPU uniform ABI.`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// Layout reflection alone cannot prove floating-point association. This is
|
|
100
|
+
// an executable shader-source invariant, separate from ABI reflection.
|
|
101
|
+
if (!source.includes('(local + highDelta) + lowDelta')
|
|
102
|
+
|| source.includes('local + (highDelta + lowDelta)')) {
|
|
103
|
+
throw new Error('RTE WGSL must evaluate (local + highDelta) + lowDelta.');
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Split one finite f64 coordinate into two f32 values. The residual is also
|
|
108
|
+
* rounded to f32 because it is consumed by WGSL, and the pair is returned as
|
|
109
|
+
* ordinary numbers so callers cannot accidentally retain a mutable buffer.
|
|
110
|
+
*/
|
|
111
|
+
export function splitFloat64ForRte(value) {
|
|
112
|
+
if (!Number.isFinite(value)) {
|
|
113
|
+
throw new RangeError(`RTE origins must be finite f64 coordinates; received ${value}.`);
|
|
114
|
+
}
|
|
115
|
+
if (Math.abs(value) > MAX_RTE_SOURCE_ABS_METRES) {
|
|
116
|
+
throw new RangeError(`RTE origin ${value} exceeds the supported ±${MAX_RTE_SOURCE_ABS_METRES} m source envelope.`);
|
|
117
|
+
}
|
|
118
|
+
const high = Math.fround(value);
|
|
119
|
+
if (!Number.isFinite(high)) {
|
|
120
|
+
throw new RangeError(`RTE origin ${value} exceeds the finite f32 GPU range.`);
|
|
121
|
+
}
|
|
122
|
+
return [high, Math.fround(value - high)];
|
|
123
|
+
}
|
|
124
|
+
/** Validate a source/world f64 point before any subtraction changes its meaning. */
|
|
125
|
+
function validateRteSourcePoint(point) {
|
|
126
|
+
for (let axis = 0; axis < 3; axis++)
|
|
127
|
+
splitFloat64ForRte(point[axis]);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Pack a drawable origin relative to a source f64 camera position. Shadow
|
|
131
|
+
* submissions use this same boundary check/packing as colour and pick paths.
|
|
132
|
+
*/
|
|
133
|
+
export function packRteDrawableDelta(origin, cameraWorld, out, floatOffset) {
|
|
134
|
+
validateRteSourcePoint(origin);
|
|
135
|
+
// A finite delta alone is not enough: without validating the camera in the
|
|
136
|
+
// same source envelope, two equally invalid large coordinates could cancel.
|
|
137
|
+
validateRteSourcePoint(cameraWorld);
|
|
138
|
+
const delta = [0, 0, 0];
|
|
139
|
+
for (let axis = 0; axis < 3; axis++) {
|
|
140
|
+
delta[axis] = origin[axis] - cameraWorld[axis];
|
|
141
|
+
if (!Number.isFinite(delta[axis]) || Math.abs(delta[axis]) > MAX_RTE_EYE_RELATIVE_METRES) {
|
|
142
|
+
throw new RangeError(`RTE drawable origin exceeds the ±${MAX_RTE_EYE_RELATIVE_METRES} m camera-relative envelope on axis ${axis}.`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
packRteOrigin(delta, out, floatOffset);
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Pack an f64 world origin as two vec4<f32>s at `floatOffset`. The empty w
|
|
149
|
+
* lanes are explicitly cleared so a reused uniform scratch buffer cannot
|
|
150
|
+
* leak unrelated data into a future WGSL struct revision.
|
|
151
|
+
*/
|
|
152
|
+
export function packRteOrigin(origin, out, floatOffset = 0) {
|
|
153
|
+
if (out.length < floatOffset + RTE_ORIGIN_FLOATS) {
|
|
154
|
+
throw new RangeError(`RTE origin needs ${RTE_ORIGIN_FLOATS} floats at offset ${floatOffset}.`);
|
|
155
|
+
}
|
|
156
|
+
for (let axis = 0; axis < 3; axis++) {
|
|
157
|
+
const [high, low] = splitFloat64ForRte(origin[axis]);
|
|
158
|
+
out[floatOffset + axis] = high;
|
|
159
|
+
out[floatOffset + 4 + axis] = low;
|
|
160
|
+
}
|
|
161
|
+
out[floatOffset + 3] = 0;
|
|
162
|
+
out[floatOffset + 7] = 0;
|
|
163
|
+
}
|
|
164
|
+
/** Read back the f64 approximation represented by a packed RTE origin. */
|
|
165
|
+
export function unpackRteOrigin(packed, floatOffset = 0) {
|
|
166
|
+
if (packed.length < floatOffset + RTE_ORIGIN_FLOATS) {
|
|
167
|
+
throw new RangeError(`RTE origin needs ${RTE_ORIGIN_FLOATS} floats at offset ${floatOffset}.`);
|
|
168
|
+
}
|
|
169
|
+
return [
|
|
170
|
+
packed[floatOffset] + packed[floatOffset + 4],
|
|
171
|
+
packed[floatOffset + 1] + packed[floatOffset + 5],
|
|
172
|
+
packed[floatOffset + 2] + packed[floatOffset + 6],
|
|
173
|
+
];
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Remove only the camera translation from a view matrix. Projection remains
|
|
177
|
+
* untouched (including its depth translation); "translation-free" means no
|
|
178
|
+
* world/eye translation is baked into `viewProj`, not a projection with its
|
|
179
|
+
* near-plane term removed.
|
|
180
|
+
*/
|
|
181
|
+
export function translationFreeViewProjection(projection, view) {
|
|
182
|
+
const orientationOnly = new Float32Array(view.m);
|
|
183
|
+
orientationOnly[12] = 0;
|
|
184
|
+
orientationOnly[13] = 0;
|
|
185
|
+
orientationOnly[14] = 0;
|
|
186
|
+
return MathUtils.multiply(projection, { m: orientationOnly });
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* The one camera-owned RTE frame. It carries f64 camera source coordinates and
|
|
190
|
+
* a translation-free view-projection that consumes eye-relative positions. It
|
|
191
|
+
* intentionally has no model/drawable state: each
|
|
192
|
+
* draw packs an f64 camera-relative delta through `packDrawableOrigin`.
|
|
193
|
+
*/
|
|
194
|
+
export class RelativeToEyeFrame {
|
|
195
|
+
cameraWorld = [0, 0, 0];
|
|
196
|
+
viewProj = MathUtils.identity();
|
|
197
|
+
renderEpoch = 0;
|
|
198
|
+
available = true;
|
|
199
|
+
/** Unsupported camera poses must never expose a previous frame as current. */
|
|
200
|
+
invalidate() { this.available = false; this.renderEpoch++; }
|
|
201
|
+
isAvailable() { return this.available; }
|
|
202
|
+
requireAvailable() {
|
|
203
|
+
if (!this.available)
|
|
204
|
+
throw new RangeError('RTE camera frame is outside the supported envelope.');
|
|
205
|
+
}
|
|
206
|
+
/** Update the frame from the f64 camera pose and the normal camera matrices. */
|
|
207
|
+
update(camera, projection, view) {
|
|
208
|
+
const cameraWorld = [camera.x, camera.y, camera.z];
|
|
209
|
+
validateRteSourcePoint(cameraWorld);
|
|
210
|
+
const viewProj = translationFreeViewProjection(projection, view);
|
|
211
|
+
if (!viewProj.m.every(Number.isFinite))
|
|
212
|
+
throw new RangeError('RTE matrix must be finite.');
|
|
213
|
+
// Publish atomically: a rejected update changes neither epoch nor inputs.
|
|
214
|
+
this.cameraWorld = cameraWorld;
|
|
215
|
+
this.viewProj = viewProj;
|
|
216
|
+
this.available = true;
|
|
217
|
+
this.renderEpoch++;
|
|
218
|
+
}
|
|
219
|
+
/** f64 source camera position; copied so an external caller cannot mutate it. */
|
|
220
|
+
getCameraWorld() {
|
|
221
|
+
this.requireAvailable();
|
|
222
|
+
return [...this.cameraWorld];
|
|
223
|
+
}
|
|
224
|
+
/** The projection to use after WGSL has made a vertex relative to this eye. */
|
|
225
|
+
getViewProjection() {
|
|
226
|
+
this.requireAvailable();
|
|
227
|
+
return { m: new Float32Array(this.viewProj.m) };
|
|
228
|
+
}
|
|
229
|
+
/** Monotonic snapshot identity for asynchronous GPU work and readback. */
|
|
230
|
+
getRenderEpoch() {
|
|
231
|
+
return this.renderEpoch;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Capture immutable frame inputs before queuing asynchronous GPU work.
|
|
235
|
+
* A later camera update mutates this frame but cannot rewrite the captured
|
|
236
|
+
* camera origin or matrix used to decode that work's readback.
|
|
237
|
+
*/
|
|
238
|
+
snapshot() {
|
|
239
|
+
this.requireAvailable();
|
|
240
|
+
return new RelativeToEyeSnapshot(this.renderEpoch, this.cameraWorld, this.viewProj);
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Pack the translation-free `viewProj`, matching `RteFrameUniform` in WGSL.
|
|
244
|
+
* The camera stays CPU f64 only; each drawable supplies its already-split
|
|
245
|
+
* f64 camera-relative delta through the separate per-draw uniform.
|
|
246
|
+
*/
|
|
247
|
+
packUniforms(out, floatOffset = 0) {
|
|
248
|
+
this.requireAvailable();
|
|
249
|
+
if (out.length < floatOffset + RTE_FRAME_FLOATS) {
|
|
250
|
+
throw new RangeError(`RTE frame needs ${RTE_FRAME_FLOATS} floats at offset ${floatOffset}.`);
|
|
251
|
+
}
|
|
252
|
+
out.set(this.viewProj.m, floatOffset + RTE_UNIFORM_LAYOUT.frame[0].byteOffset / 4);
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Pack a drawable's f64 camera-relative origin into the per-draw layout.
|
|
256
|
+
* The GPU must never subtract independently rounded absolute origins again.
|
|
257
|
+
* This payload is camera-dependent and is invalid after any camera reframe.
|
|
258
|
+
*/
|
|
259
|
+
packDrawableOrigin(origin, out, floatOffset = 0) {
|
|
260
|
+
this.requireAvailable();
|
|
261
|
+
// Validate the original source origin before subtraction: a camera at the
|
|
262
|
+
// boundary could otherwise make an out-of-range drawable look harmless.
|
|
263
|
+
packRteDrawableDelta(origin, this.cameraWorld, out, floatOffset);
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* CPU side of the contract for ray casting, snapping and measurement.
|
|
267
|
+
* Keep this f64 subtraction separate from the f32 emulation helper below:
|
|
268
|
+
* callers that are not writing a GPU uniform should retain all source
|
|
269
|
+
* precision.
|
|
270
|
+
*/
|
|
271
|
+
worldToRelative(world) {
|
|
272
|
+
this.requireAvailable();
|
|
273
|
+
return [
|
|
274
|
+
world[0] - this.cameraWorld[0],
|
|
275
|
+
world[1] - this.cameraWorld[1],
|
|
276
|
+
world[2] - this.cameraWorld[2],
|
|
277
|
+
];
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
/** An immutable RTE frame captured for one render submission/readback. */
|
|
281
|
+
export class RelativeToEyeSnapshot {
|
|
282
|
+
renderEpoch;
|
|
283
|
+
cameraWorld;
|
|
284
|
+
viewProj;
|
|
285
|
+
constructor(renderEpoch, cameraWorld, viewProj) {
|
|
286
|
+
this.renderEpoch = renderEpoch;
|
|
287
|
+
this.cameraWorld = [...cameraWorld];
|
|
288
|
+
this.viewProj = { m: new Float32Array(viewProj.m) };
|
|
289
|
+
}
|
|
290
|
+
getCameraWorld() {
|
|
291
|
+
return [...this.cameraWorld];
|
|
292
|
+
}
|
|
293
|
+
getViewProjection() {
|
|
294
|
+
return { m: new Float32Array(this.viewProj.m) };
|
|
295
|
+
}
|
|
296
|
+
packDrawableOrigin(origin, out, floatOffset = 0) {
|
|
297
|
+
packRteDrawableDelta(origin, this.cameraWorld, out, floatOffset);
|
|
298
|
+
}
|
|
299
|
+
worldToRelative(world) {
|
|
300
|
+
return [
|
|
301
|
+
world[0] - this.cameraWorld[0],
|
|
302
|
+
world[1] - this.cameraWorld[1],
|
|
303
|
+
world[2] - this.cameraWorld[2],
|
|
304
|
+
];
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* f32-faithful reference for the WGSL origin subtraction. Tests use it to
|
|
309
|
+
* prove the actual GPU arithmetic order rather than merely checking that the
|
|
310
|
+
* high/low arrays contain plausible values.
|
|
311
|
+
*/
|
|
312
|
+
export function rteRelativePositionF32(local, drawableDeltaPacked) {
|
|
313
|
+
if (drawableDeltaPacked.length < RTE_ORIGIN_FLOATS) {
|
|
314
|
+
throw new RangeError('RTE relative position requires one packed drawable-camera delta.');
|
|
315
|
+
}
|
|
316
|
+
const result = [0, 0, 0];
|
|
317
|
+
for (let axis = 0; axis < 3; axis++) {
|
|
318
|
+
const highDelta = drawableDeltaPacked[axis];
|
|
319
|
+
const lowDelta = drawableDeltaPacked[axis + 4];
|
|
320
|
+
// Match WGSL exactly: a local template may span kilometres, so folding
|
|
321
|
+
// low into high before adding local can lose the low residual.
|
|
322
|
+
result[axis] = Math.fround(Math.fround(Math.fround(local[axis]) + highDelta) + lowDelta);
|
|
323
|
+
}
|
|
324
|
+
return result;
|
|
325
|
+
}
|
|
326
|
+
//# sourceMappingURL=relative-to-eye.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relative-to-eye.js","sourceRoot":"","sources":["../src/relative-to-eye.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
*/
|
|
21
21
|
import type { SectionPlaneRenderer } from './section-plane.js';
|
|
22
22
|
import type { Section2DOverlayRenderer } from './section-2d-overlay.js';
|
|
23
|
+
import type { RelativeToEyeFrame } from './relative-to-eye.js';
|
|
23
24
|
import type { RenderOptions } from './types.js';
|
|
24
25
|
/** World-space AABB in the renderer's Y-up frame. */
|
|
25
26
|
export type ModelBounds = {
|
|
@@ -38,8 +39,18 @@ export type ModelBounds = {
|
|
|
38
39
|
export interface SectionDrawContext {
|
|
39
40
|
options: RenderOptions;
|
|
40
41
|
viewProj: Float32Array;
|
|
42
|
+
/** The camera-owned f64/RTE frame used by the preview gizmo. */
|
|
43
|
+
relativeToEyeFrame?: RelativeToEyeFrame;
|
|
44
|
+
rteViewProj?: Float32Array;
|
|
45
|
+
rteCamera?: readonly [number, number, number];
|
|
41
46
|
/** The bounds this frame resolved the section slider against. */
|
|
42
47
|
modelBounds: ModelBounds | null;
|
|
48
|
+
/**
|
|
49
|
+
* Drawing-buffer px per CSS px (default 1). The cap hatch is laid out in
|
|
50
|
+
* fragment coordinates, so its CSS-px spacing and width scale by this to
|
|
51
|
+
* look the same on a HiDPI buffer (#5383).
|
|
52
|
+
*/
|
|
53
|
+
pixelRatio?: number;
|
|
43
54
|
}
|
|
44
55
|
/**
|
|
45
56
|
* Draw the section-plane gizmo and, when the section is active, the cut cap.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-section-draw.d.ts","sourceRoot":"","sources":["../src/render-section-draw.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAExE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,qDAAqD;AACrD,MAAM,MAAM,WAAW,GAAG;IACtB,GAAG,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACzC,GAAG,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5C,CAAC;AAEF,oEAAoE;AACpE,MAAM,WAAW,kBAAkB;IAC/B,OAAO,EAAE,aAAa,CAAC;IACvB,QAAQ,EAAE,YAAY,CAAC;IACvB,iEAAiE;IACjE,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"render-section-draw.d.ts","sourceRoot":"","sources":["../src/render-section-draw.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAExE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,qDAAqD;AACrD,MAAM,MAAM,WAAW,GAAG;IACtB,GAAG,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACzC,GAAG,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5C,CAAC;AAEF,oEAAoE;AACpE,MAAM,WAAW,kBAAkB;IAC/B,OAAO,EAAE,aAAa,CAAC;IACvB,QAAQ,EAAE,YAAY,CAAC;IACvB,gEAAgE;IAChE,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,WAAW,CAAC,EAAE,YAAY,CAAC;IAC3B,SAAS,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,iEAAiE;IACjE,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAC/B,IAAI,EAAE,oBAAoB,EAC1B,KAAK,EAAE,oBAAoB,GAAG,IAAI,EAClC,GAAG,EAAE,wBAAwB,GAAG,IAAI,EACpC,GAAG,EAAE,kBAAkB,GACxB,IAAI,CAkEN"}
|
|
@@ -17,6 +17,7 @@ export function drawSectionOverlays(pass, gizmo, cap, ctx) {
|
|
|
17
17
|
axis: options.sectionPlane.axis,
|
|
18
18
|
position: options.sectionPlane.position,
|
|
19
19
|
bounds: modelBounds,
|
|
20
|
+
relativeToEyeFrame: ctx.relativeToEyeFrame,
|
|
20
21
|
viewProj,
|
|
21
22
|
isPreview: !options.sectionPlane.enabled, // Preview mode when not enabled
|
|
22
23
|
min: options.sectionPlane.min,
|
|
@@ -40,12 +41,14 @@ export function drawSectionOverlays(pass, gizmo, cap, ctx) {
|
|
|
40
41
|
const o = options.sectionPlane;
|
|
41
42
|
const showFills = o.showCap !== false;
|
|
42
43
|
const showOutlines = o.showOutlines !== false;
|
|
43
|
-
const style = { ...DEFAULT_CAP_STYLE, ...
|
|
44
|
+
const style = { ...DEFAULT_CAP_STYLE, ...o.capStyle };
|
|
44
45
|
cap.draw(pass, {
|
|
45
46
|
axis: o.axis,
|
|
46
47
|
position: o.position,
|
|
47
48
|
bounds: modelBounds,
|
|
48
49
|
viewProj,
|
|
50
|
+
rteViewProj: ctx.rteViewProj,
|
|
51
|
+
rteCamera: ctx.rteCamera,
|
|
49
52
|
min: o.min,
|
|
50
53
|
max: o.max,
|
|
51
54
|
showFills,
|
|
@@ -54,9 +57,9 @@ export function drawSectionOverlays(pass, gizmo, cap, ctx) {
|
|
|
54
57
|
fillColor: style.fillColor,
|
|
55
58
|
strokeColor: style.strokeColor,
|
|
56
59
|
patternId: HATCH_PATTERN_IDS[style.pattern],
|
|
57
|
-
spacingPx: style.spacingPx,
|
|
60
|
+
spacingPx: style.spacingPx * (ctx.pixelRatio ?? 1),
|
|
58
61
|
angleRad: style.angleRad,
|
|
59
|
-
widthPx: style.widthPx,
|
|
62
|
+
widthPx: style.widthPx * (ctx.pixelRatio ?? 1),
|
|
60
63
|
secondaryAngleRad: style.secondaryAngleRad,
|
|
61
64
|
} : undefined,
|
|
62
65
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-section-draw.js","sourceRoot":"","sources":["../src/render-section-draw.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAyB/D,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"render-section-draw.js","sourceRoot":"","sources":["../src/render-section-draw.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAyB/D,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AA4B9E;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAC/B,IAA0B,EAC1B,KAAkC,EAClC,GAAoC,EACpC,GAAuB;IAEvB,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,GAAG,CAAC;IAE/C,6EAA6E;IAC7E,kFAAkF;IAClF,IAAI,OAAO,CAAC,YAAY,IAAI,KAAK,IAAI,WAAW,EAAE,CAAC;QAC/C,KAAK,CAAC,IAAI,CACN,IAAI,EACJ;YACI,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,IAAI;YAC/B,QAAQ,EAAE,OAAO,CAAC,YAAY,CAAC,QAAQ;YACvC,MAAM,EAAE,WAAW;YACnB,kBAAkB,EAAE,GAAG,CAAC,kBAAkB;YAC1C,QAAQ;YACR,SAAS,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,gCAAgC;YAC1E,GAAG,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG;YAC7B,GAAG,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG;YAC7B,sDAAsD;YACtD,oDAAoD;YACpD,yDAAyD;YACzD,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,MAAM;YACnC,QAAQ,EAAE,OAAO,CAAC,YAAY,CAAC,QAAQ;SAC1C,CACJ,CAAC;QAEF,gEAAgE;QAChE,gEAAgE;QAChE,+DAA+D;QAC/D,2DAA2D;QAC3D,uDAAuD;QACvD,4DAA4D;QAC5D,2DAA2D;QAC3D,2DAA2D;QAC3D,6CAA6C;QAC7C,IAAI,OAAO,CAAC,YAAY,CAAC,OAAO,IAAI,GAAG,EAAE,WAAW,EAAE,EAAE,CAAC;YACrD,MAAM,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;YAC/B,MAAM,SAAS,GAAM,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC;YACzC,MAAM,YAAY,GAAG,CAAC,CAAC,YAAY,KAAK,KAAK,CAAC;YAC9C,MAAM,KAAK,GAAG,EAAE,GAAG,iBAAiB,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;YACtD,GAAG,CAAC,IAAI,CACJ,IAAI,EACJ;gBACI,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,MAAM,EAAE,WAAW;gBACnB,QAAQ;gBACR,WAAW,EAAE,GAAG,CAAC,WAAW;gBAC5B,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,GAAG,EAAE,CAAC,CAAC,GAAG;gBACV,GAAG,EAAE,CAAC,CAAC,GAAG;gBACV,SAAS;gBACT,YAAY;gBACZ,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;oBAClB,SAAS,EAAI,KAAK,CAAC,SAAS;oBAC5B,WAAW,EAAE,KAAK,CAAC,WAAW;oBAC9B,SAAS,EAAI,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC;oBAC7C,SAAS,EAAI,KAAK,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,CAAC;oBACpD,QAAQ,EAAK,KAAK,CAAC,QAAQ;oBAC3B,OAAO,EAAM,KAAK,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,CAAC;oBAClD,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;iBAC7C,CAAC,CAAC,CAAC,SAAS;aAChB,CACJ,CAAC;QACN,CAAC;IAEL,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/** Bounded, post-pass color-frame readback used by strict hardware witnesses. */
|
|
2
|
+
/** A central, actual-color crop copied from the presented production color target. */
|
|
3
|
+
export interface RendererColorFrame {
|
|
4
|
+
width: number;
|
|
5
|
+
height: number;
|
|
6
|
+
rgba: Uint8ClampedArray;
|
|
7
|
+
}
|
|
8
|
+
interface ColorFrameCopy {
|
|
9
|
+
buffer: GPUBuffer;
|
|
10
|
+
width: number;
|
|
11
|
+
height: number;
|
|
12
|
+
bytesPerRow: number;
|
|
13
|
+
bgra: boolean;
|
|
14
|
+
}
|
|
15
|
+
interface PendingRendererColorFrame {
|
|
16
|
+
encoded: boolean;
|
|
17
|
+
skippedFrames: number;
|
|
18
|
+
promise: Promise<RendererColorFrame | null>;
|
|
19
|
+
resolve: (frame: RendererColorFrame | null) => void;
|
|
20
|
+
}
|
|
21
|
+
export interface RendererColorFrameCapture {
|
|
22
|
+
pending: PendingRendererColorFrame;
|
|
23
|
+
sourceTexture: GPUTexture;
|
|
24
|
+
width: number;
|
|
25
|
+
height: number;
|
|
26
|
+
format: GPUTextureFormat;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Appends a color copy after every production pass, so the bytes describe the
|
|
30
|
+
* exact submitted frame instead of compositor or scene-residency state.
|
|
31
|
+
*/
|
|
32
|
+
export declare function encodeRendererColorFrameReadback(device: GPUDevice, encoder: GPUCommandEncoder, texture: GPUTexture, frameWidth: number, frameHeight: number, format: GPUTextureFormat): ColorFrameCopy;
|
|
33
|
+
/** Maps and normalizes an encoded color copy. Call only after its command buffer submitted. */
|
|
34
|
+
export declare function resolveRendererColorFrameReadback(copy: ColorFrameCopy): Promise<RendererColorFrame | null>;
|
|
35
|
+
/** Queue one bounded readback for a renderer host, coalescing concurrent callers. */
|
|
36
|
+
export declare function requestRendererColorFrame(host: object, available: boolean, requestRender: () => void): Promise<RendererColorFrame | null>;
|
|
37
|
+
/** Cancels on terminal device loss, render error, or renderer teardown. */
|
|
38
|
+
export declare function cancelRendererColorFrame(host: object): void;
|
|
39
|
+
/** Re-request up to three transient context/resize skips, never an endless frame loop. */
|
|
40
|
+
export declare function retryRendererColorFrame(host: object, requestRender: () => void): void;
|
|
41
|
+
/** Binds one pending request to the copy-capable production canvas texture. */
|
|
42
|
+
export declare function beginRendererColorFrameCapture(host: object, sourceTexture: GPUTexture, width: number, height: number, format: GPUTextureFormat): RendererColorFrameCapture | null;
|
|
43
|
+
/** Encodes a color copy before the frame command buffer is submitted. */
|
|
44
|
+
export declare function encodeRendererColorFrameCapture(device: GPUDevice, encoder: GPUCommandEncoder, capture: RendererColorFrameCapture): ColorFrameCopy;
|
|
45
|
+
/** Settles the requester once its submitted canvas copy maps. */
|
|
46
|
+
export declare function settleRendererColorFrameCapture(host: object, capture: RendererColorFrameCapture, copy: ColorFrameCopy): void;
|
|
47
|
+
/** Frees a copy whose command buffer could not be submitted. */
|
|
48
|
+
export declare function discardRendererColorFrameReadback(copy: ColorFrameCopy | null): void;
|
|
49
|
+
export {};
|
|
50
|
+
//# sourceMappingURL=renderer-color-readback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer-color-readback.d.ts","sourceRoot":"","sources":["../src/renderer-color-readback.ts"],"names":[],"mappings":"AAIA,iFAAiF;AAEjF,sFAAsF;AACtF,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,iBAAiB,CAAC;CACzB;AAED,UAAU,cAAc;IACtB,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,UAAU,yBAAyB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IAC5C,OAAO,EAAE,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI,KAAK,IAAI,CAAC;CACrD;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,yBAAyB,CAAC;IACnC,aAAa,EAAE,UAAU,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAoBD;;;GAGG;AACH,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,UAAU,EACnB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,gBAAgB,GACvB,cAAc,CAkBhB;AAED,+FAA+F;AAC/F,wBAAsB,iCAAiC,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAyBhH;AAED,qFAAqF;AACrF,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,OAAO,EAClB,aAAa,EAAE,MAAM,IAAI,GACxB,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAiBpC;AAED,2EAA2E;AAC3E,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAK3D;AAED,0FAA0F;AAC1F,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,IAAI,GAAG,IAAI,CASrF;AAED,+EAA+E;AAC/E,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,UAAU,EACzB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,gBAAgB,GACvB,yBAAyB,GAAG,IAAI,CAUlC;AAED,yEAAyE;AACzE,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,yBAAyB,GACjC,cAAc,CAMhB;AAED,iEAAiE;AACjE,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,yBAAyB,EAClC,IAAI,EAAE,cAAc,GACnB,IAAI,CAMN;AAED,gEAAgE;AAChE,wBAAgB,iCAAiC,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,GAAG,IAAI,CAEnF"}
|
|
@@ -0,0 +1,145 @@
|
|
|
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
|
+
/** Keep debug/readback work bounded even for a full-screen 8K production viewport. */
|
|
5
|
+
const MAX_COLOR_FRAME_DIMENSION = 512;
|
|
6
|
+
const PIXEL_BYTES = 4;
|
|
7
|
+
const COPY_ROW_ALIGNMENT = 256;
|
|
8
|
+
const MAX_COLOR_FRAME_CAPTURE_SKIPS = 3;
|
|
9
|
+
const pendingCaptures = new WeakMap();
|
|
10
|
+
function captureDimensions(width, height) {
|
|
11
|
+
const capturedWidth = Math.min(width, MAX_COLOR_FRAME_DIMENSION);
|
|
12
|
+
const capturedHeight = Math.min(height, MAX_COLOR_FRAME_DIMENSION);
|
|
13
|
+
return {
|
|
14
|
+
x: Math.floor((width - capturedWidth) / 2),
|
|
15
|
+
y: Math.floor((height - capturedHeight) / 2),
|
|
16
|
+
width: capturedWidth,
|
|
17
|
+
height: capturedHeight,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Appends a color copy after every production pass, so the bytes describe the
|
|
22
|
+
* exact submitted frame instead of compositor or scene-residency state.
|
|
23
|
+
*/
|
|
24
|
+
export function encodeRendererColorFrameReadback(device, encoder, texture, frameWidth, frameHeight, format) {
|
|
25
|
+
const region = captureDimensions(frameWidth, frameHeight);
|
|
26
|
+
const bytesPerRow = Math.ceil((region.width * PIXEL_BYTES) / COPY_ROW_ALIGNMENT) * COPY_ROW_ALIGNMENT;
|
|
27
|
+
const buffer = device.createBuffer({
|
|
28
|
+
size: bytesPerRow * region.height,
|
|
29
|
+
usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,
|
|
30
|
+
});
|
|
31
|
+
try {
|
|
32
|
+
encoder.copyTextureToBuffer({ texture, origin: { x: region.x, y: region.y, z: 0 } }, { buffer, bytesPerRow, rowsPerImage: region.height }, { width: region.width, height: region.height, depthOrArrayLayers: 1 });
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
buffer.destroy();
|
|
36
|
+
throw error;
|
|
37
|
+
}
|
|
38
|
+
return { buffer, width: region.width, height: region.height, bytesPerRow, bgra: format.startsWith('bgra') };
|
|
39
|
+
}
|
|
40
|
+
/** Maps and normalizes an encoded color copy. Call only after its command buffer submitted. */
|
|
41
|
+
export async function resolveRendererColorFrameReadback(copy) {
|
|
42
|
+
let mapped = false;
|
|
43
|
+
try {
|
|
44
|
+
// GPUMapMode.READ = 1. The package's browser typings intentionally do not
|
|
45
|
+
// require the runtime global to exist in Node-only renderer tests.
|
|
46
|
+
await copy.buffer.mapAsync(1);
|
|
47
|
+
mapped = true;
|
|
48
|
+
const source = new Uint8Array(copy.buffer.getMappedRange());
|
|
49
|
+
const rgba = new Uint8ClampedArray(copy.width * copy.height * PIXEL_BYTES);
|
|
50
|
+
for (let row = 0; row < copy.height; row++)
|
|
51
|
+
for (let column = 0; column < copy.width; column++) {
|
|
52
|
+
const from = row * copy.bytesPerRow + column * PIXEL_BYTES;
|
|
53
|
+
const to = (row * copy.width + column) * PIXEL_BYTES;
|
|
54
|
+
rgba[to] = copy.bgra ? source[from + 2] : source[from];
|
|
55
|
+
rgba[to + 1] = source[from + 1];
|
|
56
|
+
rgba[to + 2] = copy.bgra ? source[from] : source[from + 2];
|
|
57
|
+
rgba[to + 3] = source[from + 3];
|
|
58
|
+
}
|
|
59
|
+
return { width: copy.width, height: copy.height, rgba };
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
console.warn('[Renderer] Color-frame readback failed:', error);
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
finally {
|
|
66
|
+
if (mapped)
|
|
67
|
+
copy.buffer.unmap();
|
|
68
|
+
copy.buffer.destroy();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/** Queue one bounded readback for a renderer host, coalescing concurrent callers. */
|
|
72
|
+
export function requestRendererColorFrame(host, available, requestRender) {
|
|
73
|
+
if (!available)
|
|
74
|
+
return Promise.resolve(null);
|
|
75
|
+
const existing = pendingCaptures.get(host);
|
|
76
|
+
if (existing)
|
|
77
|
+
return existing.promise;
|
|
78
|
+
let resolve;
|
|
79
|
+
const promise = new Promise((finish) => { resolve = finish; });
|
|
80
|
+
pendingCaptures.set(host, { encoded: false, skippedFrames: 0, promise, resolve });
|
|
81
|
+
try {
|
|
82
|
+
requestRender();
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
// A synchronous host failure must not strand the coalescing entry: a
|
|
86
|
+
// later caller needs to be able to request a fresh frame.
|
|
87
|
+
pendingCaptures.delete(host);
|
|
88
|
+
resolve(null);
|
|
89
|
+
return Promise.reject(error);
|
|
90
|
+
}
|
|
91
|
+
return promise;
|
|
92
|
+
}
|
|
93
|
+
/** Cancels on terminal device loss, render error, or renderer teardown. */
|
|
94
|
+
export function cancelRendererColorFrame(host) {
|
|
95
|
+
const pending = pendingCaptures.get(host);
|
|
96
|
+
if (!pending)
|
|
97
|
+
return;
|
|
98
|
+
pendingCaptures.delete(host);
|
|
99
|
+
pending.resolve(null);
|
|
100
|
+
}
|
|
101
|
+
/** Re-request up to three transient context/resize skips, never an endless frame loop. */
|
|
102
|
+
export function retryRendererColorFrame(host, requestRender) {
|
|
103
|
+
const pending = pendingCaptures.get(host);
|
|
104
|
+
if (!pending || pending.encoded)
|
|
105
|
+
return;
|
|
106
|
+
if (pending.skippedFrames >= MAX_COLOR_FRAME_CAPTURE_SKIPS) {
|
|
107
|
+
cancelRendererColorFrame(host);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
pending.skippedFrames++;
|
|
111
|
+
requestRender();
|
|
112
|
+
}
|
|
113
|
+
/** Binds one pending request to the copy-capable production canvas texture. */
|
|
114
|
+
export function beginRendererColorFrameCapture(host, sourceTexture, width, height, format) {
|
|
115
|
+
const pending = pendingCaptures.get(host);
|
|
116
|
+
if (!pending || pending.encoded)
|
|
117
|
+
return null;
|
|
118
|
+
return {
|
|
119
|
+
pending,
|
|
120
|
+
sourceTexture,
|
|
121
|
+
width,
|
|
122
|
+
height,
|
|
123
|
+
format,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
/** Encodes a color copy before the frame command buffer is submitted. */
|
|
127
|
+
export function encodeRendererColorFrameCapture(device, encoder, capture) {
|
|
128
|
+
const copy = encodeRendererColorFrameReadback(device, encoder, capture.sourceTexture, capture.width, capture.height, capture.format);
|
|
129
|
+
capture.pending.encoded = true;
|
|
130
|
+
return copy;
|
|
131
|
+
}
|
|
132
|
+
/** Settles the requester once its submitted canvas copy maps. */
|
|
133
|
+
export function settleRendererColorFrameCapture(host, capture, copy) {
|
|
134
|
+
void resolveRendererColorFrameReadback(copy).then((frame) => {
|
|
135
|
+
if (pendingCaptures.get(host) !== capture.pending)
|
|
136
|
+
return;
|
|
137
|
+
pendingCaptures.delete(host);
|
|
138
|
+
capture.pending.resolve(frame);
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
/** Frees a copy whose command buffer could not be submitted. */
|
|
142
|
+
export function discardRendererColorFrameReadback(copy) {
|
|
143
|
+
copy?.buffer.destroy();
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=renderer-color-readback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer-color-readback.js","sourceRoot":"","sources":["../src/renderer-color-readback.ts"],"names":[],"mappings":"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"}
|