@ifc-lite/renderer 3.2.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/aabb-edges.d.ts +10 -0
- package/dist/aabb-edges.d.ts.map +1 -1
- package/dist/aabb-edges.js +13 -0
- package/dist/aabb-edges.js.map +1 -1
- package/dist/ao-params.d.ts +85 -0
- package/dist/ao-params.d.ts.map +1 -0
- package/dist/ao-params.js +109 -0
- package/dist/ao-params.js.map +1 -0
- package/dist/ao-pass.d.ts +47 -0
- package/dist/ao-pass.d.ts.map +1 -0
- package/dist/ao-pass.js +157 -0
- package/dist/ao-pass.js.map +1 -0
- package/dist/camera-matrices.d.ts +3 -0
- package/dist/camera-matrices.d.ts.map +1 -1
- package/dist/camera-matrices.js +12 -1
- package/dist/camera-matrices.js.map +1 -1
- package/dist/camera-orientation.d.ts +62 -0
- package/dist/camera-orientation.d.ts.map +1 -0
- package/dist/camera-orientation.js +155 -0
- package/dist/camera-orientation.js.map +1 -0
- package/dist/camera-projection.d.ts +3 -1
- package/dist/camera-projection.d.ts.map +1 -1
- package/dist/camera-projection.js +26 -20
- package/dist/camera-projection.js.map +1 -1
- package/dist/camera-surface-zoom.d.ts +32 -0
- package/dist/camera-surface-zoom.d.ts.map +1 -0
- package/dist/camera-surface-zoom.js +37 -0
- package/dist/camera-surface-zoom.js.map +1 -0
- package/dist/camera.d.ts +32 -61
- package/dist/camera.d.ts.map +1 -1
- package/dist/camera.js +71 -167
- package/dist/camera.js.map +1 -1
- package/dist/clash-solid-pipeline.d.ts +9 -3
- package/dist/clash-solid-pipeline.d.ts.map +1 -1
- package/dist/clash-solid-pipeline.js +31 -8
- package/dist/clash-solid-pipeline.js.map +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +4 -3
- package/dist/constants.js.map +1 -1
- package/dist/depth-reconstruct.d.ts +43 -0
- package/dist/depth-reconstruct.d.ts.map +1 -0
- package/dist/depth-reconstruct.js +35 -0
- package/dist/depth-reconstruct.js.map +1 -0
- package/dist/device.js +1 -1
- package/dist/device.js.map +1 -1
- package/dist/edge-params.d.ts +43 -0
- package/dist/edge-params.d.ts.map +1 -0
- package/dist/edge-params.js +63 -0
- package/dist/edge-params.js.map +1 -0
- package/dist/edge-pass.d.ts +38 -0
- package/dist/edge-pass.d.ts.map +1 -0
- package/dist/edge-pass.js +111 -0
- package/dist/edge-pass.js.map +1 -0
- package/dist/environment.d.ts +26 -15
- package/dist/environment.d.ts.map +1 -1
- package/dist/environment.js +24 -13
- package/dist/environment.js.map +1 -1
- package/dist/federation-registry.d.ts +16 -0
- package/dist/federation-registry.d.ts.map +1 -1
- package/dist/federation-registry.js +80 -9
- package/dist/federation-registry.js.map +1 -1
- package/dist/gpu-static-upload.d.ts +39 -0
- package/dist/gpu-static-upload.d.ts.map +1 -0
- package/dist/gpu-static-upload.js +70 -0
- package/dist/gpu-static-upload.js.map +1 -0
- package/dist/gpu-upload-guard.d.ts +12 -23
- package/dist/gpu-upload-guard.d.ts.map +1 -1
- package/dist/gpu-upload-guard.js +12 -26
- package/dist/gpu-upload-guard.js.map +1 -1
- package/dist/index.d.ts +58 -35
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +255 -284
- package/dist/index.js.map +1 -1
- package/dist/instanced-render.d.ts +25 -5
- package/dist/instanced-render.d.ts.map +1 -1
- package/dist/instanced-render.js +50 -13
- package/dist/instanced-render.js.map +1 -1
- package/dist/instanced-rte.d.ts +17 -0
- package/dist/instanced-rte.d.ts.map +1 -0
- package/dist/instanced-rte.js +32 -0
- package/dist/instanced-rte.js.map +1 -0
- package/dist/mesh-material.d.ts +26 -0
- package/dist/mesh-material.d.ts.map +1 -0
- package/dist/mesh-material.js +52 -0
- package/dist/mesh-material.js.map +1 -0
- package/dist/mesh-rte-uniforms.d.ts +47 -0
- package/dist/mesh-rte-uniforms.d.ts.map +1 -0
- package/dist/mesh-rte-uniforms.js +60 -0
- package/dist/mesh-rte-uniforms.js.map +1 -0
- package/dist/model-bounds-tracker.d.ts +7 -0
- package/dist/model-bounds-tracker.d.ts.map +1 -1
- package/dist/model-bounds-tracker.js +16 -5
- package/dist/model-bounds-tracker.js.map +1 -1
- package/dist/model-translation.d.ts +1 -1
- package/dist/model-translation.d.ts.map +1 -1
- package/dist/model-translation.js +50 -2
- package/dist/model-translation.js.map +1 -1
- package/dist/overlay-theme-uniforms.d.ts +54 -0
- package/dist/overlay-theme-uniforms.d.ts.map +1 -0
- package/dist/overlay-theme-uniforms.js +89 -0
- package/dist/overlay-theme-uniforms.js.map +1 -0
- package/dist/overlay-theme.d.ts +73 -0
- package/dist/overlay-theme.d.ts.map +1 -0
- package/dist/overlay-theme.js +24 -0
- package/dist/overlay-theme.js.map +1 -0
- package/dist/pick-rte-snapshot.d.ts +7 -0
- package/dist/pick-rte-snapshot.d.ts.map +1 -0
- package/dist/pick-rte-snapshot.js +15 -0
- package/dist/pick-rte-snapshot.js.map +1 -0
- package/dist/pick-types.d.ts +17 -0
- package/dist/pick-types.d.ts.map +1 -0
- package/dist/pick-types.js +5 -0
- package/dist/pick-types.js.map +1 -0
- package/dist/pick-uniforms.d.ts +6 -0
- package/dist/pick-uniforms.d.ts.map +1 -1
- package/dist/pick-uniforms.js +22 -18
- package/dist/pick-uniforms.js.map +1 -1
- package/dist/pick-world-position.d.ts +18 -0
- package/dist/pick-world-position.d.ts.map +1 -0
- package/dist/pick-world-position.js +21 -0
- package/dist/pick-world-position.js.map +1 -0
- package/dist/picker-readbacks.d.ts +6 -0
- package/dist/picker-readbacks.d.ts.map +1 -0
- package/dist/picker-readbacks.js +20 -0
- package/dist/picker-readbacks.js.map +1 -0
- package/dist/picker-rte-uniforms.d.ts +6 -0
- package/dist/picker-rte-uniforms.d.ts.map +1 -0
- package/dist/picker-rte-uniforms.js +41 -0
- package/dist/picker-rte-uniforms.js.map +1 -0
- package/dist/picker.d.ts +6 -7
- package/dist/picker.d.ts.map +1 -1
- package/dist/picker.js +88 -115
- package/dist/picker.js.map +1 -1
- package/dist/picking-manager.d.ts +8 -0
- package/dist/picking-manager.d.ts.map +1 -1
- package/dist/picking-manager.js +46 -19
- package/dist/picking-manager.js.map +1 -1
- package/dist/pipeline.d.ts +3 -7
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +27 -31
- 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 +105 -0
- package/dist/post-pass-chain.js.map +1 -0
- package/dist/raycast-engine.d.ts +7 -5
- package/dist/raycast-engine.d.ts.map +1 -1
- package/dist/raycast-engine.js +17 -20
- package/dist/raycast-engine.js.map +1 -1
- package/dist/raycast-point-cloud-query.d.ts +1 -1
- package/dist/raycast-point-cloud-query.d.ts.map +1 -1
- package/dist/reference-image-pipeline.d.ts +1 -1
- package/dist/reference-image-pipeline.d.ts.map +1 -1
- package/dist/reference-image-pipeline.js +25 -7
- package/dist/reference-image-pipeline.js.map +1 -1
- package/dist/reference-images.d.ts +1 -1
- package/dist/reference-images.d.ts.map +1 -1
- package/dist/reference-images.js +13 -5
- package/dist/reference-images.js.map +1 -1
- package/dist/relative-to-eye.d.ts +146 -0
- package/dist/relative-to-eye.d.ts.map +1 -0
- package/dist/relative-to-eye.js +326 -0
- package/dist/relative-to-eye.js.map +1 -0
- package/dist/render-section-draw.d.ts +11 -0
- package/dist/render-section-draw.d.ts.map +1 -1
- package/dist/render-section-draw.js +6 -3
- package/dist/render-section-draw.js.map +1 -1
- package/dist/renderer-color-readback.d.ts +50 -0
- package/dist/renderer-color-readback.d.ts.map +1 -0
- package/dist/renderer-color-readback.js +145 -0
- package/dist/renderer-color-readback.js.map +1 -0
- package/dist/renderer-overlays.d.ts +20 -10
- package/dist/renderer-overlays.d.ts.map +1 -1
- package/dist/renderer-overlays.js +44 -34
- package/dist/renderer-overlays.js.map +1 -1
- package/dist/renderer-screenshot.d.ts +4 -0
- package/dist/renderer-screenshot.d.ts.map +1 -0
- package/dist/renderer-screenshot.js +17 -0
- package/dist/renderer-screenshot.js.map +1 -0
- package/dist/renderer-symbolic-overlays.d.ts +4 -2
- package/dist/renderer-symbolic-overlays.d.ts.map +1 -1
- package/dist/renderer-symbolic-overlays.js +33 -13
- package/dist/renderer-symbolic-overlays.js.map +1 -1
- package/dist/renderer-viewport.d.ts +45 -0
- package/dist/renderer-viewport.d.ts.map +1 -1
- package/dist/renderer-viewport.js +44 -0
- package/dist/renderer-viewport.js.map +1 -1
- package/dist/rte-clip-space.d.ts +12 -0
- package/dist/rte-clip-space.d.ts.map +1 -0
- package/dist/rte-clip-space.js +22 -0
- package/dist/rte-clip-space.js.map +1 -0
- package/dist/rte-frustum.d.ts +24 -0
- package/dist/rte-frustum.d.ts.map +1 -0
- package/dist/rte-frustum.js +45 -0
- package/dist/rte-frustum.js.map +1 -0
- package/dist/scene-batch-upload.d.ts.map +1 -1
- package/dist/scene-batch-upload.js +14 -38
- package/dist/scene-batch-upload.js.map +1 -1
- package/dist/scene-device-recovery.d.ts.map +1 -1
- package/dist/scene-device-recovery.js +5 -9
- package/dist/scene-device-recovery.js.map +1 -1
- package/dist/scene-finalize-regroup.d.ts +54 -0
- package/dist/scene-finalize-regroup.d.ts.map +1 -0
- package/dist/scene-finalize-regroup.js +136 -0
- package/dist/scene-finalize-regroup.js.map +1 -0
- package/dist/scene-instance-bounds.d.ts +12 -0
- package/dist/scene-instance-bounds.d.ts.map +1 -0
- package/dist/scene-instance-bounds.js +48 -0
- package/dist/scene-instance-bounds.js.map +1 -0
- package/dist/scene-instance-materialization.d.ts +4 -1
- package/dist/scene-instance-materialization.d.ts.map +1 -1
- package/dist/scene-instance-materialization.js +21 -6
- package/dist/scene-instance-materialization.js.map +1 -1
- package/dist/scene-instance-translation.d.ts +17 -0
- package/dist/scene-instance-translation.d.ts.map +1 -0
- package/dist/scene-instance-translation.js +50 -0
- package/dist/scene-instance-translation.js.map +1 -0
- package/dist/scene-instance-types.d.ts +6 -0
- package/dist/scene-instance-types.d.ts.map +1 -1
- package/dist/scene-model-translation.d.ts +2 -0
- package/dist/scene-model-translation.d.ts.map +1 -1
- package/dist/scene-model-translation.js +1 -1
- package/dist/scene-model-translation.js.map +1 -1
- package/dist/scene-rect-select.d.ts +11 -1
- package/dist/scene-rect-select.d.ts.map +1 -1
- package/dist/scene-rect-select.js +7 -4
- package/dist/scene-rect-select.js.map +1 -1
- package/dist/scene.d.ts +27 -20
- package/dist/scene.d.ts.map +1 -1
- package/dist/scene.js +109 -238
- package/dist/scene.js.map +1 -1
- package/dist/section-2d-lift.d.ts +10 -2
- package/dist/section-2d-lift.d.ts.map +1 -1
- package/dist/section-2d-lift.js +14 -6
- package/dist/section-2d-lift.js.map +1 -1
- package/dist/section-2d-line-buffer.d.ts +12 -4
- package/dist/section-2d-line-buffer.d.ts.map +1 -1
- package/dist/section-2d-line-buffer.js +59 -33
- package/dist/section-2d-line-buffer.js.map +1 -1
- package/dist/section-2d-overlay.d.ts +18 -72
- package/dist/section-2d-overlay.d.ts.map +1 -1
- package/dist/section-2d-overlay.js +72 -103
- package/dist/section-2d-overlay.js.map +1 -1
- package/dist/section-2d-types.d.ts +38 -0
- package/dist/section-2d-types.d.ts.map +1 -0
- package/dist/section-2d-types.js +6 -0
- package/dist/section-2d-types.js.map +1 -0
- package/dist/section-cap-pipelines.d.ts +6 -0
- package/dist/section-cap-pipelines.d.ts.map +1 -0
- package/dist/section-cap-pipelines.js +87 -0
- package/dist/section-cap-pipelines.js.map +1 -0
- package/dist/section-plane-geometry.d.ts +24 -0
- package/dist/section-plane-geometry.d.ts.map +1 -0
- package/dist/section-plane-geometry.js +93 -0
- package/dist/section-plane-geometry.js.map +1 -0
- package/dist/section-plane.d.ts +26 -24
- package/dist/section-plane.d.ts.map +1 -1
- package/dist/section-plane.js +57 -182
- 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 +28 -0
- package/dist/shaders/color-transfer.wgsl.d.ts.map +1 -0
- package/dist/shaders/color-transfer.wgsl.js +55 -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/edges.wgsl.d.ts +2 -0
- package/dist/shaders/edges.wgsl.d.ts.map +1 -0
- package/dist/shaders/edges.wgsl.js +158 -0
- package/dist/shaders/edges.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 +183 -228
- 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/specular.wgsl.d.ts +34 -0
- package/dist/shaders/specular.wgsl.d.ts.map +1 -0
- package/dist/shaders/specular.wgsl.js +134 -0
- package/dist/shaders/specular.wgsl.js.map +1 -0
- 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 +30 -1
- package/dist/visual-enhancement.d.ts.map +1 -1
- package/dist/visual-enhancement.js +44 -12
- package/dist/visual-enhancement.js.map +1 -1
- package/package.json +3 -3
- package/dist/post-processor.d.ts +0 -60
- package/dist/post-processor.d.ts.map +0 -1
- package/dist/post-processor.js +0 -353
- package/dist/post-processor.js.map +0 -1
package/dist/reference-images.js
CHANGED
|
@@ -93,19 +93,27 @@ export class ReferenceImageManager {
|
|
|
93
93
|
this.host.requestRender();
|
|
94
94
|
}
|
|
95
95
|
destroy() { this.clear(); this.pipeline = null; this.device = null; }
|
|
96
|
-
draw(pass, viewProj) {
|
|
96
|
+
draw(pass, viewProj, rteViewProj, rteCamera) {
|
|
97
97
|
if (!this.images.size)
|
|
98
98
|
return;
|
|
99
99
|
const depth = (image) => {
|
|
100
100
|
const c = image.input.corners;
|
|
101
101
|
const x = (c[0][0] + c[2][0]) / 2, y = (c[0][1] + c[2][1]) / 2, z = (c[0][2] + c[2][2]) / 2;
|
|
102
|
-
|
|
103
|
-
|
|
102
|
+
if (rteViewProj && rteCamera) {
|
|
103
|
+
const px = x - rteCamera[0], py = y - rteCamera[1], pz = z - rteCamera[2];
|
|
104
|
+
return (rteViewProj[2] * px + rteViewProj[6] * py + rteViewProj[10] * pz + rteViewProj[14]) /
|
|
105
|
+
(rteViewProj[3] * px + rteViewProj[7] * py + rteViewProj[11] * pz + rteViewProj[15]);
|
|
106
|
+
}
|
|
107
|
+
const projection = viewProj;
|
|
108
|
+
const px = x, py = y, pz = z;
|
|
109
|
+
return (projection[2] * px + projection[6] * py + projection[10] * pz + projection[14]) /
|
|
110
|
+
(projection[3] * px + projection[7] * py + projection[11] * pz + projection[15]);
|
|
104
111
|
};
|
|
105
112
|
// Reverse-Z, far to near for translucent references; BIM depth still tests
|
|
106
113
|
// each fragment. Intersecting transparent planes have ordinary alpha-sort limits.
|
|
107
|
-
for (const image of [...this.images.values()].sort((a, b) => depth(a) - depth(b)))
|
|
108
|
-
image.draw(pass, viewProj);
|
|
114
|
+
for (const image of [...this.images.values()].sort((a, b) => depth(a) - depth(b))) {
|
|
115
|
+
image.draw(pass, viewProj, rteViewProj, rteCamera);
|
|
116
|
+
}
|
|
109
117
|
}
|
|
110
118
|
async pick(x, y, options) {
|
|
111
119
|
if (!this.images.size)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reference-images.js","sourceRoot":"","sources":["../src/reference-images.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"reference-images.js","sourceRoot":"","sources":["../src/reference-images.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import type { Mat4, Vec3 } from './types.js';
|
|
2
|
+
/** A point or translation in the source/world f64 coordinate system. */
|
|
3
|
+
export type WorldPoint = readonly [number, number, number];
|
|
4
|
+
/** Two f32 vec4 lanes holding one f64-like origin. The w components are 0. */
|
|
5
|
+
export declare const RTE_ORIGIN_FLOATS = 8;
|
|
6
|
+
/** Translation-free `mat4x4 viewProj`; camera position stays CPU f64 only. */
|
|
7
|
+
export declare const RTE_FRAME_FLOATS = 16;
|
|
8
|
+
/** Largest supported source/world coordinate component, in canonical Y-up metres. */
|
|
9
|
+
export declare const MAX_RTE_SOURCE_ABS_METRES = 1000000000;
|
|
10
|
+
/** Largest source-origin delta accepted by a single camera RTE frame. */
|
|
11
|
+
export declare const MAX_RTE_EYE_RELATIVE_METRES = 1000000;
|
|
12
|
+
/**
|
|
13
|
+
* Largest local-coordinate magnitude accepted for a precision-sensitive
|
|
14
|
+
* drawable. At 8,192 m an f32 ULP remains below one millimetre; larger
|
|
15
|
+
* extents must be partitioned into separate anchors rather than silently
|
|
16
|
+
* turning centimetre geometry into coarse local floats.
|
|
17
|
+
*/
|
|
18
|
+
export declare const MAX_RTE_LOCAL_METRES = 8192;
|
|
19
|
+
interface UniformFieldLayout {
|
|
20
|
+
name: string;
|
|
21
|
+
type: 'mat4x4<f32>' | 'vec4<f32>';
|
|
22
|
+
byteOffset: number;
|
|
23
|
+
byteSize: number;
|
|
24
|
+
}
|
|
25
|
+
/** Exact byte layout shared by the CPU writer and the WGSL RTE structs. */
|
|
26
|
+
export declare const RTE_UNIFORM_LAYOUT: {
|
|
27
|
+
readonly frame: readonly [{
|
|
28
|
+
readonly name: "viewProj";
|
|
29
|
+
readonly type: "mat4x4<f32>";
|
|
30
|
+
readonly byteOffset: 0;
|
|
31
|
+
readonly byteSize: 64;
|
|
32
|
+
}];
|
|
33
|
+
readonly drawable: readonly [{
|
|
34
|
+
readonly name: "drawableDeltaHigh";
|
|
35
|
+
readonly type: "vec4<f32>";
|
|
36
|
+
readonly byteOffset: 0;
|
|
37
|
+
readonly byteSize: 16;
|
|
38
|
+
}, {
|
|
39
|
+
readonly name: "drawableDeltaLow";
|
|
40
|
+
readonly type: "vec4<f32>";
|
|
41
|
+
readonly byteOffset: 16;
|
|
42
|
+
readonly byteSize: 16;
|
|
43
|
+
}];
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Reflect the deliberately small RTE WGSL ABI. The production source has no
|
|
47
|
+
* nested structs or arrays here, so accepting either would conceal inserted
|
|
48
|
+
* padding. Unsupported syntax is a contract failure, not a parser fallback.
|
|
49
|
+
*/
|
|
50
|
+
export declare function reflectRteUniformStruct(source: string, structName: 'RteFrameUniform' | 'RteDrawableUniform'): UniformFieldLayout[];
|
|
51
|
+
/** Fail loudly if source edits drift from the CPU writer's exact ABI. */
|
|
52
|
+
export declare function assertRteUniformAbi(source?: string): void;
|
|
53
|
+
/**
|
|
54
|
+
* Split one finite f64 coordinate into two f32 values. The residual is also
|
|
55
|
+
* rounded to f32 because it is consumed by WGSL, and the pair is returned as
|
|
56
|
+
* ordinary numbers so callers cannot accidentally retain a mutable buffer.
|
|
57
|
+
*/
|
|
58
|
+
export declare function splitFloat64ForRte(value: number): readonly [number, number];
|
|
59
|
+
/**
|
|
60
|
+
* Pack a drawable origin relative to a source f64 camera position. Shadow
|
|
61
|
+
* submissions use this same boundary check/packing as colour and pick paths.
|
|
62
|
+
*/
|
|
63
|
+
export declare function packRteDrawableDelta(origin: WorldPoint, cameraWorld: WorldPoint, out: Float32Array, floatOffset: number): void;
|
|
64
|
+
/**
|
|
65
|
+
* Pack an f64 world origin as two vec4<f32>s at `floatOffset`. The empty w
|
|
66
|
+
* lanes are explicitly cleared so a reused uniform scratch buffer cannot
|
|
67
|
+
* leak unrelated data into a future WGSL struct revision.
|
|
68
|
+
*/
|
|
69
|
+
export declare function packRteOrigin(origin: WorldPoint, out: Float32Array, floatOffset?: number): void;
|
|
70
|
+
/** Read back the f64 approximation represented by a packed RTE origin. */
|
|
71
|
+
export declare function unpackRteOrigin(packed: Float32Array, floatOffset?: number): [number, number, number];
|
|
72
|
+
/**
|
|
73
|
+
* Remove only the camera translation from a view matrix. Projection remains
|
|
74
|
+
* untouched (including its depth translation); "translation-free" means no
|
|
75
|
+
* world/eye translation is baked into `viewProj`, not a projection with its
|
|
76
|
+
* near-plane term removed.
|
|
77
|
+
*/
|
|
78
|
+
export declare function translationFreeViewProjection(projection: Mat4, view: Mat4): Mat4;
|
|
79
|
+
/**
|
|
80
|
+
* The one camera-owned RTE frame. It carries f64 camera source coordinates and
|
|
81
|
+
* a translation-free view-projection that consumes eye-relative positions. It
|
|
82
|
+
* intentionally has no model/drawable state: each
|
|
83
|
+
* draw packs an f64 camera-relative delta through `packDrawableOrigin`.
|
|
84
|
+
*/
|
|
85
|
+
export declare class RelativeToEyeFrame {
|
|
86
|
+
private cameraWorld;
|
|
87
|
+
private viewProj;
|
|
88
|
+
private renderEpoch;
|
|
89
|
+
private available;
|
|
90
|
+
/** Unsupported camera poses must never expose a previous frame as current. */
|
|
91
|
+
invalidate(): void;
|
|
92
|
+
isAvailable(): boolean;
|
|
93
|
+
private requireAvailable;
|
|
94
|
+
/** Update the frame from the f64 camera pose and the normal camera matrices. */
|
|
95
|
+
update(camera: Vec3, projection: Mat4, view: Mat4): void;
|
|
96
|
+
/** f64 source camera position; copied so an external caller cannot mutate it. */
|
|
97
|
+
getCameraWorld(): [number, number, number];
|
|
98
|
+
/** The projection to use after WGSL has made a vertex relative to this eye. */
|
|
99
|
+
getViewProjection(): Mat4;
|
|
100
|
+
/** Monotonic snapshot identity for asynchronous GPU work and readback. */
|
|
101
|
+
getRenderEpoch(): number;
|
|
102
|
+
/**
|
|
103
|
+
* Capture immutable frame inputs before queuing asynchronous GPU work.
|
|
104
|
+
* A later camera update mutates this frame but cannot rewrite the captured
|
|
105
|
+
* camera origin or matrix used to decode that work's readback.
|
|
106
|
+
*/
|
|
107
|
+
snapshot(): RelativeToEyeSnapshot;
|
|
108
|
+
/**
|
|
109
|
+
* Pack the translation-free `viewProj`, matching `RteFrameUniform` in WGSL.
|
|
110
|
+
* The camera stays CPU f64 only; each drawable supplies its already-split
|
|
111
|
+
* f64 camera-relative delta through the separate per-draw uniform.
|
|
112
|
+
*/
|
|
113
|
+
packUniforms(out: Float32Array, floatOffset?: number): void;
|
|
114
|
+
/**
|
|
115
|
+
* Pack a drawable's f64 camera-relative origin into the per-draw layout.
|
|
116
|
+
* The GPU must never subtract independently rounded absolute origins again.
|
|
117
|
+
* This payload is camera-dependent and is invalid after any camera reframe.
|
|
118
|
+
*/
|
|
119
|
+
packDrawableOrigin(origin: WorldPoint, out: Float32Array, floatOffset?: number): void;
|
|
120
|
+
/**
|
|
121
|
+
* CPU side of the contract for ray casting, snapping and measurement.
|
|
122
|
+
* Keep this f64 subtraction separate from the f32 emulation helper below:
|
|
123
|
+
* callers that are not writing a GPU uniform should retain all source
|
|
124
|
+
* precision.
|
|
125
|
+
*/
|
|
126
|
+
worldToRelative(world: WorldPoint): [number, number, number];
|
|
127
|
+
}
|
|
128
|
+
/** An immutable RTE frame captured for one render submission/readback. */
|
|
129
|
+
export declare class RelativeToEyeSnapshot {
|
|
130
|
+
readonly renderEpoch: number;
|
|
131
|
+
private readonly cameraWorld;
|
|
132
|
+
private readonly viewProj;
|
|
133
|
+
constructor(renderEpoch: number, cameraWorld: WorldPoint, viewProj: Mat4);
|
|
134
|
+
getCameraWorld(): [number, number, number];
|
|
135
|
+
getViewProjection(): Mat4;
|
|
136
|
+
packDrawableOrigin(origin: WorldPoint, out: Float32Array, floatOffset?: number): void;
|
|
137
|
+
worldToRelative(world: WorldPoint): [number, number, number];
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* f32-faithful reference for the WGSL origin subtraction. Tests use it to
|
|
141
|
+
* prove the actual GPU arithmetic order rather than merely checking that the
|
|
142
|
+
* high/low arrays contain plausible values.
|
|
143
|
+
*/
|
|
144
|
+
export declare function rteRelativePositionF32(local: WorldPoint, drawableDeltaPacked: Float32Array): [number, number, number];
|
|
145
|
+
export {};
|
|
146
|
+
//# sourceMappingURL=relative-to-eye.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relative-to-eye.d.ts","sourceRoot":"","sources":["../src/relative-to-eye.ts"],"names":[],"mappings":"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"}
|
|
@@ -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"}
|