@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
|
@@ -41,9 +41,12 @@ import { type CutPolygon2D, type DrawingLine2D, type LineOverlayChannel } from '
|
|
|
41
41
|
import type { SymbolicFillInput, SymbolicTextInput } from './symbolic-overlay-pipelines.js';
|
|
42
42
|
import { type ClashSolidInput } from './clash-solid-pipeline.js';
|
|
43
43
|
import { type ModelBounds } from './render-section-draw.js';
|
|
44
|
+
import type { RelativeToEyeFrame } from './relative-to-eye.js';
|
|
44
45
|
import type { RenderOptions } from './types.js';
|
|
46
|
+
import type { DeviceRecoveryOmission } from './device-recovery.js';
|
|
47
|
+
import { type LineVertices } from './section-2d-line-buffer.js';
|
|
45
48
|
/**
|
|
46
|
-
* The slice of `Renderer` the overlays need. Deliberately
|
|
49
|
+
* The slice of `Renderer` the overlays need. Deliberately narrow:
|
|
47
50
|
* the overlays own their GPU objects outright, and borrow only the model-bounds
|
|
48
51
|
* bookkeeping that the rest of the renderer also owns.
|
|
49
52
|
*/
|
|
@@ -52,6 +55,8 @@ export interface OverlayHost {
|
|
|
52
55
|
getModelBounds(): ModelBounds | null;
|
|
53
56
|
/** Grow (or seed) the model AABB from a flat `[x,y,z,...]` buffer. */
|
|
54
57
|
expandModelBoundsWithFlatVertices(positions: Float32Array, stride: number): void;
|
|
58
|
+
/** Fold f32-local overlay vertices through their source f64 anchor. */
|
|
59
|
+
expandModelBoundsWithAnchoredLineVertices(positions: Float32Array, origin: readonly [number, number, number], stride: number): void;
|
|
55
60
|
/** Push the current model AABB to the camera's near/far fit. */
|
|
56
61
|
syncCameraSceneBounds(): void;
|
|
57
62
|
/** Mark the viewport dirty for the next animation frame. */
|
|
@@ -64,8 +69,13 @@ export interface OverlayDrawContext {
|
|
|
64
69
|
/** The bounds this frame resolved the section slider against. */
|
|
65
70
|
modelBounds: ModelBounds | null;
|
|
66
71
|
camera: Camera;
|
|
72
|
+
/** Viewport in CSS px (buffer / `pixelRatio`, see `SectionDrawContext`), as glyph sizes are. */
|
|
67
73
|
canvasWidth: number;
|
|
68
74
|
canvasHeight: number;
|
|
75
|
+
pixelRatio?: number;
|
|
76
|
+
relativeToEyeFrame?: RelativeToEyeFrame;
|
|
77
|
+
rteViewProj?: Float32Array;
|
|
78
|
+
rteCamera?: readonly [number, number, number];
|
|
69
79
|
}
|
|
70
80
|
export declare class RendererOverlays {
|
|
71
81
|
private readonly host;
|
|
@@ -75,6 +85,8 @@ export declare class RendererOverlays {
|
|
|
75
85
|
private readonly symbolic;
|
|
76
86
|
private clashSolidPipeline;
|
|
77
87
|
constructor(host: OverlayHost);
|
|
88
|
+
/** Snapshot which transient GPU-only layers will be dropped by recovery. */
|
|
89
|
+
recoveryOmissions(): DeviceRecoveryOmission[];
|
|
78
90
|
/**
|
|
79
91
|
* Create the overlay GPU objects. Called from `Renderer.init()` once the
|
|
80
92
|
* device and the main pipeline (for its sample count) exist.
|
|
@@ -103,7 +115,7 @@ export declare class RendererOverlays {
|
|
|
103
115
|
/** See `Renderer.setOverlayLineColor` for the published contract. */
|
|
104
116
|
setOverlayLineColor(color: readonly [number, number, number, number]): void;
|
|
105
117
|
/** See `Renderer.setLineOverlay` for the published contract. */
|
|
106
|
-
setLineOverlay(channel: LineOverlayChannel, vertices:
|
|
118
|
+
setLineOverlay(channel: LineOverlayChannel, vertices: LineVertices | null): void;
|
|
107
119
|
/** See `Renderer.setClashOverlapBox` for the published contract. */
|
|
108
120
|
setClashOverlapBox(box: {
|
|
109
121
|
min: [number, number, number];
|
|
@@ -115,7 +127,7 @@ export declare class RendererOverlays {
|
|
|
115
127
|
* clash-box line buffer, so only one of this / setClashOverlapBox shows.
|
|
116
128
|
*/
|
|
117
129
|
setClashContactLines(lines: {
|
|
118
|
-
vertices:
|
|
130
|
+
vertices: LineVertices;
|
|
119
131
|
color: [number, number, number, number];
|
|
120
132
|
} | null): void;
|
|
121
133
|
/** See `Renderer.setClashIntersectionSolid` for the published contract. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-overlays.d.ts","sourceRoot":"","sources":["../src/renderer-overlays.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAGH,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EAC1B,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAC5F,OAAO,EAAsB,KAAK,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAGrF,OAAO,EAAuB,KAAK,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACjF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"renderer-overlays.d.ts","sourceRoot":"","sources":["../src/renderer-overlays.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,13 +5,14 @@ import { SectionPlaneRenderer } from './section-plane.js';
|
|
|
5
5
|
import { Section2DOverlayRenderer, LINE_OVERLAY_CHANNELS, } from './section-2d-overlay.js';
|
|
6
6
|
import { SymbolicOverlays } from './renderer-symbolic-overlays.js';
|
|
7
7
|
import { ClashSolidPipeline } from './clash-solid-pipeline.js';
|
|
8
|
-
import {
|
|
8
|
+
import { anchoredAabbEdgeLineList } from './aabb-edges.js';
|
|
9
9
|
import { projectedBoundsRange } from './render-section-plane.js';
|
|
10
10
|
import { drawSectionOverlays } from './render-section-draw.js';
|
|
11
|
+
import { lineVertexFloatCount } from './section-2d-line-buffer.js';
|
|
11
12
|
/**
|
|
12
13
|
* Whether setting a channel grows the scene AABB.
|
|
13
14
|
*
|
|
14
|
-
* The one behavioural difference between the
|
|
15
|
+
* The one behavioural difference between the line-overlay channels, and the reason
|
|
15
16
|
* `setLineOverlay` is a table lookup rather than a plain forward. The
|
|
16
17
|
* per-channel rationale is on `Renderer.setLineOverlay`, which is what
|
|
17
18
|
* consumers read in the emitted `.d.ts`; it is not repeated here.
|
|
@@ -19,22 +20,24 @@ import { drawSectionOverlays } from './render-section-draw.js';
|
|
|
19
20
|
* The rule is "does this content DEFINE the model's extent, so that a file
|
|
20
21
|
* containing only it must still be framable". It is NOT "is it behind a
|
|
21
22
|
* visibility toggle" — annotations sit behind `ifcAnnotationsVisible` too and
|
|
22
|
-
* they DO expand. Anyone adding a
|
|
23
|
+
* they DO expand. Anyone adding a channel should answer the first
|
|
23
24
|
* question, not the second.
|
|
24
25
|
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
26
|
+
* IfcGrid and IfcAnnotation content used to share one buffer feeding
|
|
27
|
+
* `setLineOverlay('annotation', ...)`, so an annotations-off / grid-on
|
|
28
|
+
* session could reach `annotation` carrying only grid lines and inflate the
|
|
29
|
+
* bounds that `grid: false` exists to protect (#3359). Fixed:
|
|
30
|
+
* `apps/viewer/src/hooks/symbolic-line-channels.ts` keeps the two channels
|
|
31
|
+
* separate and uploads each to its like-named channel, so this table's
|
|
32
|
+
* per-channel keying now matches the content it is keyed by.
|
|
32
33
|
*/
|
|
33
34
|
const CHANNEL_EXPANDS_MODEL_BOUNDS = {
|
|
34
35
|
annotation: true,
|
|
35
36
|
alignment: true,
|
|
36
37
|
grid: false,
|
|
37
38
|
dxf: false,
|
|
39
|
+
// A LandXML source may consist entirely of authored terrain lines.
|
|
40
|
+
terrain: true,
|
|
38
41
|
};
|
|
39
42
|
export class RendererOverlays {
|
|
40
43
|
host;
|
|
@@ -49,6 +52,19 @@ export class RendererOverlays {
|
|
|
49
52
|
this.host = host;
|
|
50
53
|
this.symbolic = new SymbolicOverlays(host);
|
|
51
54
|
}
|
|
55
|
+
/** Snapshot which transient GPU-only layers will be dropped by recovery. */
|
|
56
|
+
recoveryOmissions() {
|
|
57
|
+
const omissions = [];
|
|
58
|
+
const overlay = this.section2DOverlayRenderer;
|
|
59
|
+
if (overlay?.hasGeometry())
|
|
60
|
+
omissions.push('section-2d-overlay');
|
|
61
|
+
if (overlay && (LINE_OVERLAY_CHANNELS.some((channel) => overlay.hasLineOverlay(channel)) || overlay.hasClashBoxLines3D() || (this.clashSolidPipeline?.hasGeometry() ?? false))) {
|
|
62
|
+
omissions.push('line-overlays');
|
|
63
|
+
}
|
|
64
|
+
if (this.symbolic.hasGeometry())
|
|
65
|
+
omissions.push('symbolic-overlays');
|
|
66
|
+
return omissions;
|
|
67
|
+
}
|
|
52
68
|
/**
|
|
53
69
|
* Create the overlay GPU objects. Called from `Renderer.init()` once the
|
|
54
70
|
* device and the main pipeline (for its sample count) exist.
|
|
@@ -92,19 +108,19 @@ export class RendererOverlays {
|
|
|
92
108
|
//
|
|
93
109
|
// Order: fills (background) → lines (outlines on top) →
|
|
94
110
|
// texts (labels above everything).
|
|
95
|
-
this.symbolic.drawFills(pass, viewProj);
|
|
111
|
+
this.symbolic.drawFills(pass, viewProj, ctx.rteViewProj, ctx.rteCamera);
|
|
96
112
|
// `LINE_OVERLAY_CHANNELS` is in draw order: annotation, alignment,
|
|
97
|
-
// grid, DXF. All
|
|
113
|
+
// grid, DXF, LandXML. All share the overlay colour and the line pipeline,
|
|
98
114
|
// so the order only decides who wins a depth tie.
|
|
99
115
|
const overlay = this.section2DOverlayRenderer;
|
|
100
116
|
if (overlay) {
|
|
101
117
|
for (const channel of LINE_OVERLAY_CHANNELS) {
|
|
102
118
|
if (overlay.hasLineOverlay(channel)) {
|
|
103
|
-
overlay.drawLineOverlay(pass, viewProj, channel);
|
|
119
|
+
overlay.drawLineOverlay(pass, viewProj, channel, ctx.rteViewProj, ctx.rteCamera);
|
|
104
120
|
}
|
|
105
121
|
}
|
|
106
122
|
if (overlay.hasClashBoxLines3D()) {
|
|
107
|
-
overlay.drawClashBoxLines3D(pass, viewProj);
|
|
123
|
+
overlay.drawClashBoxLines3D(pass, viewProj, ctx.rteViewProj, ctx.rteCamera);
|
|
108
124
|
}
|
|
109
125
|
}
|
|
110
126
|
// Drawn after the box/contact lines and — crucially — after every
|
|
@@ -112,9 +128,9 @@ export class RendererOverlays {
|
|
|
112
128
|
// overlap volume shows opaque through both ghosted parents rather
|
|
113
129
|
// than being buried inside them.
|
|
114
130
|
if (this.clashSolidPipeline?.hasGeometry()) {
|
|
115
|
-
this.clashSolidPipeline.render(pass, viewProj);
|
|
131
|
+
this.clashSolidPipeline.render(pass, viewProj, ctx.rteViewProj, ctx.rteCamera);
|
|
116
132
|
}
|
|
117
|
-
this.symbolic.drawTexts(pass, viewProj, ctx.canvasWidth, ctx.canvasHeight, camera);
|
|
133
|
+
this.symbolic.drawTexts(pass, viewProj, ctx.canvasWidth, ctx.canvasHeight, camera, ctx.rteViewProj, ctx.rteCamera);
|
|
118
134
|
}
|
|
119
135
|
/** See `Renderer.uploadSection2DOverlay` for the published contract. */
|
|
120
136
|
uploadSection2DOverlay(polygons, lines, axis, position, // 0-100 percentage
|
|
@@ -182,12 +198,22 @@ export class RendererOverlays {
|
|
|
182
198
|
if (!this.section2DOverlayRenderer)
|
|
183
199
|
return;
|
|
184
200
|
this.section2DOverlayRenderer.setLineOverlay(channel, vertices);
|
|
185
|
-
if (
|
|
201
|
+
if (CHANNEL_EXPANDS_MODEL_BOUNDS[channel] && vertices) {
|
|
186
202
|
// Mirrors the point-cloud upload path (`addPointClouds`,
|
|
187
203
|
// `setPointClouds`): without `syncCameraSceneBounds` the frustum
|
|
188
204
|
// excludes the cluster and it is clipped away even when the camera
|
|
189
205
|
// points straight at it. See CHANNEL_EXPANDS_MODEL_BOUNDS.
|
|
190
|
-
|
|
206
|
+
if (vertices instanceof Float32Array) {
|
|
207
|
+
this.host.expandModelBoundsWithFlatVertices(vertices, 3);
|
|
208
|
+
}
|
|
209
|
+
else if ('localVertices' in vertices) {
|
|
210
|
+
this.host.expandModelBoundsWithAnchoredLineVertices(vertices.localVertices, vertices.origin, 3);
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
for (const partition of vertices) {
|
|
214
|
+
this.host.expandModelBoundsWithAnchoredLineVertices(partition.localVertices, partition.origin, 3);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
191
217
|
this.host.syncCameraSceneBounds();
|
|
192
218
|
}
|
|
193
219
|
// Rendering is dirty-flag gated (#2442): a channel that changed has to
|
|
@@ -206,7 +232,7 @@ export class RendererOverlays {
|
|
|
206
232
|
return;
|
|
207
233
|
}
|
|
208
234
|
this.section2DOverlayRenderer.setClashBoxLineColor(box.color);
|
|
209
|
-
this.section2DOverlayRenderer.uploadClashBoxLines3D(
|
|
235
|
+
this.section2DOverlayRenderer.uploadClashBoxLines3D(anchoredAabbEdgeLineList(box.min, box.max));
|
|
210
236
|
this.host.requestRender();
|
|
211
237
|
}
|
|
212
238
|
/**
|
|
@@ -216,7 +242,7 @@ export class RendererOverlays {
|
|
|
216
242
|
setClashContactLines(lines) {
|
|
217
243
|
if (!this.section2DOverlayRenderer)
|
|
218
244
|
return;
|
|
219
|
-
if (!lines || lines.vertices
|
|
245
|
+
if (!lines || lineVertexFloatCount(lines.vertices) === 0) {
|
|
220
246
|
this.section2DOverlayRenderer.clearClashBoxLines3D();
|
|
221
247
|
this.host.requestRender();
|
|
222
248
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-overlays.js","sourceRoot":"","sources":["../src/renderer-overlays.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AA0C/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EACH,wBAAwB,EACxB,qBAAqB,GAIxB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,kBAAkB,EAAwB,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"renderer-overlays.js","sourceRoot":"","sources":["../src/renderer-overlays.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AA0C/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EACH,wBAAwB,EACxB,qBAAqB,GAIxB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,kBAAkB,EAAwB,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAoB,MAAM,0BAA0B,CAAC;AAIjF,OAAO,EAAE,oBAAoB,EAAqB,MAAM,6BAA6B,CAAC;AAwCtF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,4BAA4B,GAAwC;IACtE,UAAU,EAAE,IAAI;IAChB,SAAS,EAAE,IAAI;IACf,IAAI,EAAE,KAAK;IACX,GAAG,EAAE,KAAK;IACV,mEAAmE;IACnE,OAAO,EAAE,IAAI;CAChB,CAAC;AAEF,MAAM,OAAO,gBAAgB;IASI;IARrB,oBAAoB,GAAgC,IAAI,CAAC;IACzD,wBAAwB,GAAoC,IAAI,CAAC;IACzE,8DAA8D;IAC9D,+EAA+E;IACvE,gBAAgB,GAA8C,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAClE,QAAQ,CAAmB;IACpC,kBAAkB,GAA8B,IAAI,CAAC;IAE7D,YAA6B,IAAiB;QAAjB,SAAI,GAAJ,IAAI,CAAa;QAC1C,IAAI,CAAC,QAAQ,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED,4EAA4E;IAC5E,iBAAiB;QACb,MAAM,SAAS,GAA6B,EAAE,CAAC;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,wBAAwB,CAAC;QAC9C,IAAI,OAAO,EAAE,WAAW,EAAE;YAAE,SAAS,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACjE,IAAI,OAAO,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,WAAW,EAAE,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC;YAC7K,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;YAAE,SAAS,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACrE,OAAO,SAAS,CAAC;IACrB,CAAC;IAED;;;OAGG;IACH,IAAI,CAAC,MAAiB,EAAE,MAAwB,EAAE,WAAmB;QACjE,IAAI,CAAC,oBAAoB,GAAG,IAAI,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QAClF,IAAI,CAAC,wBAAwB,GAAG,IAAI,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QAC1F,qEAAqE;QACrE,IAAI,CAAC,wBAAwB,CAAC,mBAAmB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACzE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QAChD,IAAI,CAAC,kBAAkB,GAAG,IAAI,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAClF,CAAC;IAED,iFAAiF;IACjF,OAAO;QACH,IAAI,CAAC,oBAAoB,EAAE,OAAO,EAAE,CAAC;QACrC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,wBAAwB,EAAE,OAAO,EAAE,CAAC;QACzC,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;QACrC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,kBAAkB,EAAE,OAAO,EAAE,CAAC;QACnC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;IACnC,CAAC;IAED;;;OAGG;IACH,IAAI,CAAC,IAA0B,EAAE,GAAuB;QACpD,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;QAEjC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC;QAEzF,2DAA2D;QAC3D,6DAA6D;QAC7D,6DAA6D;QAC7D,2DAA2D;QAC3D,mDAAmD;QACnD,EAAE;QACF,iFAAiF;QACjF,yDAAyD;QACzD,+DAA+D;QAC/D,8DAA8D;QAC9D,+DAA+D;QAC/D,EAAE;QACF,wDAAwD;QACxD,mCAAmC;QACnC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;QACxE,mEAAmE;QACnE,0EAA0E;QAC1E,kDAAkD;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,wBAAwB,CAAC;QAC9C,IAAI,OAAO,EAAE,CAAC;YACV,KAAK,MAAM,OAAO,IAAI,qBAAqB,EAAE,CAAC;gBAC1C,IAAI,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;oBAClC,OAAO,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;gBACrF,CAAC;YACL,CAAC;YACD,IAAI,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;gBAC/B,OAAO,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;YAChF,CAAC;QACL,CAAC;QACD,kEAAkE;QAClE,oEAAoE;QACpE,kEAAkE;QAClE,iCAAiC;QACjC,IAAI,IAAI,CAAC,kBAAkB,EAAE,WAAW,EAAE,EAAE,CAAC;YACzC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;QACnF,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,SAAS,CACnB,IAAI,EACJ,QAAQ,EACR,GAAG,CAAC,WAAW,EACf,GAAG,CAAC,YAAY,EAChB,MAAM,EACN,GAAG,CAAC,WAAW,EACf,GAAG,CAAC,SAAS,CAChB,CAAC;IACN,CAAC;IAED,wEAAwE;IACxE,sBAAsB,CAClB,QAAwB,EACxB,KAAsB,EACtB,IAA+B,EAC/B,QAAgB,EAAG,mBAAmB;IACtC,YAA6C,EAAG,2CAA2C;IAC3F,UAAmB,KAAK,EACxB,WAIC;QAED,qEAAqE;QACrE,kEAAkE;QAClE,sEAAsE;QACtE,oEAAoE;QACpE,qEAAqE;QACrE,IAAI,CAAC,IAAI,CAAC,wBAAwB;YAAE,OAAO;QAE3C,IAAI,WAAW,EAAE,CAAC;YACd,2DAA2D;YAC3D,+DAA+D;YAC/D,gEAAgE;YAChE,2DAA2D;YAC3D,qDAAqD;YACrD,IAAI,CAAC,wBAAwB,CAAC,aAAa,CACvC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,WAAW,CACjD,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YAC1B,OAAO;QACX,CAAC;QAED,qEAAqE;QACrE,qEAAqE;QACrE,uEAAuE;QACvE,6BAA6B;QAC7B,EAAE;QACF,wEAAwE;QACxE,gEAAgE;QAChE,sEAAsE;QACtE,sEAAsE;QACtE,sEAAsE;QACtE,uEAAuE;QACvE,oDAAoD;QACpD,MAAM,UAAU,GACZ,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAE1E,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;QAE/C,yFAAyF;QACzF,MAAM,YAAY,GAAG,YAAY,EAAE,GAAG,KAAK,SAAS,IAAI,YAAY,EAAE,GAAG,KAAK,SAAS,CAAC;QACxF,IAAI,CAAC,YAAY,IAAI,CAAC,WAAW;YAAE,OAAO;QAE1C,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,oBAAoB,CAAC,WAAW,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1G,MAAM,MAAM,GAAG,YAAY,EAAE,GAAG,IAAI,SAAU,CAAC,GAAG,CAAC;QACnD,MAAM,MAAM,GAAG,YAAY,EAAE,GAAG,IAAI,SAAU,CAAC,GAAG,CAAC;QACnD,MAAM,aAAa,GAAG,MAAM,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;QAEpE,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;QAC3F,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;IAC9B,CAAC;IAED,uEAAuE;IACvE,qBAAqB;QACjB,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAChC,IAAI,CAAC,wBAAwB,CAAC,aAAa,EAAE,CAAC;YAC9C,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QAC9B,CAAC;IACL,CAAC;IAED,qEAAqE;IACrE,mBAAmB,CAAC,KAAgD;QAChE,yDAAyD;QACzD,2EAA2E;QAC3E,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,wBAAwB,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC1D,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;IAC9B,CAAC;IAED,gEAAgE;IAChE,cAAc,CAAC,OAA2B,EAAE,QAA6B;QACrE,IAAI,CAAC,IAAI,CAAC,wBAAwB;YAAE,OAAO;QAC3C,IAAI,CAAC,wBAAwB,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAChE,IAAI,4BAA4B,CAAC,OAAO,CAAC,IAAI,QAAQ,EAAE,CAAC;YACpD,yDAAyD;YACzD,iEAAiE;YACjE,mEAAmE;YACnE,2DAA2D;YAC3D,IAAI,QAAQ,YAAY,YAAY,EAAE,CAAC;gBACnC,IAAI,CAAC,IAAI,CAAC,iCAAiC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YAC7D,CAAC;iBAAM,IAAI,eAAe,IAAI,QAAQ,EAAE,CAAC;gBACrC,IAAI,CAAC,IAAI,CAAC,yCAAyC,CAAC,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACpG,CAAC;iBAAM,CAAC;gBACJ,KAAK,MAAM,SAAS,IAAI,QAAQ,EAAE,CAAC;oBAC/B,IAAI,CAAC,IAAI,CAAC,yCAAyC,CAAC,SAAS,CAAC,aAAa,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBACtG,CAAC;YACL,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACtC,CAAC;QACD,uEAAuE;QACvE,iEAAiE;QACjE,mEAAmE;QACnE,4DAA4D;QAC5D,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;IAC9B,CAAC;IAED,oEAAoE;IACpE,kBAAkB,CACd,GAAqH;QAErH,IAAI,CAAC,IAAI,CAAC,wBAAwB;YAAE,OAAO;QAC3C,IAAI,CAAC,GAAG,EAAE,CAAC;YACP,IAAI,CAAC,wBAAwB,CAAC,oBAAoB,EAAE,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YAC1B,OAAO;QACX,CAAC;QACD,IAAI,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC9D,IAAI,CAAC,wBAAwB,CAAC,qBAAqB,CAAC,wBAAwB,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAChG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;IAC9B,CAAC;IAED;;;OAGG;IACH,oBAAoB,CAChB,KAAiF;QAEjF,IAAI,CAAC,IAAI,CAAC,wBAAwB;YAAE,OAAO;QAC3C,IAAI,CAAC,KAAK,IAAI,oBAAoB,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC,wBAAwB,CAAC,oBAAoB,EAAE,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YAC1B,OAAO;QACX,CAAC;QACD,IAAI,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAChE,IAAI,CAAC,wBAAwB,CAAC,qBAAqB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;IAC9B,CAAC;IAED,2EAA2E;IAC3E,yBAAyB,CAAC,KAA6B;QACnD,IAAI,CAAC,IAAI,CAAC,kBAAkB;YAAE,OAAO;QACrC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;IAC9B,CAAC;IAED,yEAAyE;IACzE,uBAAuB,CAAC,KAAmC;QACvD,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,yEAAyE;IACzE,uBAAuB,CAAC,KAAmC;QACvD,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,qEAAqE;IACrE,mBAAmB;QACf,OAAO,IAAI,CAAC,wBAAwB,EAAE,WAAW,EAAE,IAAI,KAAK,CAAC;IACjE,CAAC;CACJ"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { WebGPUDevice } from './device.js';
|
|
2
|
+
/** Capture a fully submitted presentation canvas, reporting expected device failures. */
|
|
3
|
+
export declare function captureRendererScreenshot(deviceHost: WebGPUDevice, canvas: HTMLCanvasElement): Promise<string | null>;
|
|
4
|
+
//# sourceMappingURL=renderer-screenshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer-screenshot.d.ts","sourceRoot":"","sources":["../src/renderer-screenshot.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,yFAAyF;AACzF,wBAAsB,yBAAyB,CAAC,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAS3H"}
|
|
@@ -0,0 +1,17 @@
|
|
|
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
|
+
/** Capture a fully submitted presentation canvas, reporting expected device failures. */
|
|
5
|
+
export async function captureRendererScreenshot(deviceHost, canvas) {
|
|
6
|
+
if (!deviceHost.isInitialized())
|
|
7
|
+
return null;
|
|
8
|
+
try {
|
|
9
|
+
await deviceHost.getDevice().queue.onSubmittedWorkDone();
|
|
10
|
+
return canvas.toDataURL('image/png');
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
console.error('[Renderer] Screenshot capture failed:', error);
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=renderer-screenshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer-screenshot.js","sourceRoot":"","sources":["../src/renderer-screenshot.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAI/D,yFAAyF;AACzF,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,UAAwB,EAAE,MAAyB;IACjG,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;QAAE,OAAO,IAAI,CAAC;IAC7C,IAAI,CAAC;QACH,MAAM,UAAU,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC;QACzD,OAAO,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -19,6 +19,8 @@ import { type SymbolicFillInput, type SymbolicTextInput } from './symbolic-overl
|
|
|
19
19
|
*/
|
|
20
20
|
export interface SymbolicOverlayHost {
|
|
21
21
|
expandModelBoundsWithFlatVertices(positions: Float32Array, stride: number): void;
|
|
22
|
+
/** Fold f32-local symbolic data through its f64 RTE anchor. */
|
|
23
|
+
expandModelBoundsWithAnchoredLineVertices(positions: Float32Array, origin: readonly [number, number, number], stride: number): void;
|
|
22
24
|
syncCameraSceneBounds(): void;
|
|
23
25
|
requestRender(): void;
|
|
24
26
|
}
|
|
@@ -27,6 +29,7 @@ export declare class SymbolicOverlays {
|
|
|
27
29
|
private fillPipeline;
|
|
28
30
|
private textPipeline;
|
|
29
31
|
constructor(host: SymbolicOverlayHost);
|
|
32
|
+
hasGeometry(): boolean;
|
|
30
33
|
/**
|
|
31
34
|
* Share the device + presentation format AND the MSAA sample count +
|
|
32
35
|
* objectId attachment shape with the rest of the renderer so these
|
|
@@ -41,9 +44,9 @@ export declare class SymbolicOverlays {
|
|
|
41
44
|
*/
|
|
42
45
|
destroy(): void;
|
|
43
46
|
/** Background layer: painted before the 3D line overlays. */
|
|
44
|
-
drawFills(pass: GPURenderPassEncoder, viewProj: Float32Array): void;
|
|
47
|
+
drawFills(pass: GPURenderPassEncoder, viewProj: Float32Array, rteViewProj?: Float32Array, rteCamera?: readonly [number, number, number]): void;
|
|
45
48
|
/** Label layer: painted after everything else. */
|
|
46
|
-
drawTexts(pass: GPURenderPassEncoder, viewProj: Float32Array, canvasWidth: number, canvasHeight: number, camera: Camera): void;
|
|
49
|
+
drawTexts(pass: GPURenderPassEncoder, viewProj: Float32Array, canvasWidth: number, canvasHeight: number, camera: Camera, rteViewProj?: Float32Array, rteCamera?: readonly [number, number, number]): void;
|
|
47
50
|
/**
|
|
48
51
|
* See `Renderer.uploadAnnotationFills3D` for the published contract.
|
|
49
52
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-symbolic-overlays.d.ts","sourceRoot":"","sources":["../src/renderer-symbolic-overlays.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAGH,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACzB,MAAM,iCAAiC,CAAC;AAEzC;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAChC,iCAAiC,CAAC,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACjF,qBAAqB,IAAI,IAAI,CAAC;IAC9B,aAAa,IAAI,IAAI,CAAC;CACzB;AAED,qBAAa,gBAAgB;IAIb,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHjC,OAAO,CAAC,YAAY,CAAqC;IACzD,OAAO,CAAC,YAAY,CAAqC;gBAE5B,IAAI,EAAE,mBAAmB;IAEtD;;;;;OAKG;IACH,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAK5E;;;;OAIG;IACH,OAAO,IAAI,IAAI;IAOf,6DAA6D;IAC7D,SAAS,CAAC,IAAI,EAAE,oBAAoB,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"renderer-symbolic-overlays.d.ts","sourceRoot":"","sources":["../src/renderer-symbolic-overlays.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAGH,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACzB,MAAM,iCAAiC,CAAC;AAEzC;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAChC,iCAAiC,CAAC,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACjF,+DAA+D;IAC/D,yCAAyC,CACrC,SAAS,EAAE,YAAY,EACvB,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EACzC,MAAM,EAAE,MAAM,GACf,IAAI,CAAC;IACR,qBAAqB,IAAI,IAAI,CAAC;IAC9B,aAAa,IAAI,IAAI,CAAC;CACzB;AAED,qBAAa,gBAAgB;IAIb,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHjC,OAAO,CAAC,YAAY,CAAqC;IACzD,OAAO,CAAC,YAAY,CAAqC;gBAE5B,IAAI,EAAE,mBAAmB;IAEtD,WAAW,IAAI,OAAO;IAItB;;;;;OAKG;IACH,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAK5E;;;;OAIG;IACH,OAAO,IAAI,IAAI;IAOf,6DAA6D;IAC7D,SAAS,CAAC,IAAI,EAAE,oBAAoB,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAC,EAAE,YAAY,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAM9I,kDAAkD;IAClD,SAAS,CACL,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,YAAY,EACtB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,YAAY,EAC1B,SAAS,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAC9C,IAAI;IAwCP;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,WAAW,CAAC,KAAK,EAAE,SAAS,iBAAiB,EAAE,GAAG,IAAI;IAiCtD;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,SAAS,iBAAiB,EAAE,GAAG,IAAI;CAwCzD"}
|
|
@@ -10,6 +10,9 @@ export class SymbolicOverlays {
|
|
|
10
10
|
constructor(host) {
|
|
11
11
|
this.host = host;
|
|
12
12
|
}
|
|
13
|
+
hasGeometry() {
|
|
14
|
+
return (this.fillPipeline?.hasGeometry() ?? false) || (this.textPipeline?.hasGeometry() ?? false);
|
|
15
|
+
}
|
|
13
16
|
/**
|
|
14
17
|
* Share the device + presentation format AND the MSAA sample count +
|
|
15
18
|
* objectId attachment shape with the rest of the renderer so these
|
|
@@ -32,13 +35,13 @@ export class SymbolicOverlays {
|
|
|
32
35
|
this.textPipeline = null;
|
|
33
36
|
}
|
|
34
37
|
/** Background layer: painted before the 3D line overlays. */
|
|
35
|
-
drawFills(pass, viewProj) {
|
|
38
|
+
drawFills(pass, viewProj, rteViewProj, rteCamera) {
|
|
36
39
|
if (this.fillPipeline?.hasGeometry()) {
|
|
37
|
-
this.fillPipeline.render(pass, viewProj);
|
|
40
|
+
this.fillPipeline.render(pass, viewProj, rteViewProj, rteCamera);
|
|
38
41
|
}
|
|
39
42
|
}
|
|
40
43
|
/** Label layer: painted after everything else. */
|
|
41
|
-
drawTexts(pass, viewProj, canvasWidth, canvasHeight, camera) {
|
|
44
|
+
drawTexts(pass, viewProj, canvasWidth, canvasHeight, camera, rteViewProj, rteCamera) {
|
|
42
45
|
if (!this.textPipeline?.hasGeometry())
|
|
43
46
|
return;
|
|
44
47
|
// Pass viewport pixel dimensions so the shader can scale glyphs
|
|
@@ -66,7 +69,7 @@ export class SymbolicOverlays {
|
|
|
66
69
|
// Only `right`/`up` are read here: a screen-aligned quad needs the
|
|
67
70
|
// screen plane, not the view direction.
|
|
68
71
|
const basis = viewBasis(camera.getPosition(), camera.getTarget(), camera.getUp());
|
|
69
|
-
this.textPipeline.render(pass, viewProj, canvasWidth, canvasHeight, [basis.right.x, basis.right.y, basis.right.z], [basis.up.x, basis.up.y, basis.up.z]);
|
|
72
|
+
this.textPipeline.render(pass, viewProj, canvasWidth, canvasHeight, [basis.right.x, basis.right.y, basis.right.z], [basis.up.x, basis.up.y, basis.up.z], undefined, rteViewProj, rteCamera);
|
|
70
73
|
}
|
|
71
74
|
/**
|
|
72
75
|
* See `Renderer.uploadAnnotationFills3D` for the published contract.
|
|
@@ -110,7 +113,15 @@ export class SymbolicOverlays {
|
|
|
110
113
|
lifted[j + 1] = fill.worldY;
|
|
111
114
|
lifted[j + 2] = pts[i + 1];
|
|
112
115
|
}
|
|
113
|
-
|
|
116
|
+
if (fill.origin) {
|
|
117
|
+
// Keep the f64 anchor separate from the local f32 ring. In
|
|
118
|
+
// particular, `origin + point` must not be rounded back into
|
|
119
|
+
// an absolute Float32Array just for camera bounds.
|
|
120
|
+
this.host.expandModelBoundsWithAnchoredLineVertices(lifted, fill.origin, 3);
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
this.host.expandModelBoundsWithFlatVertices(lifted, 3);
|
|
124
|
+
}
|
|
114
125
|
expanded = true;
|
|
115
126
|
}
|
|
116
127
|
// Only re-fit the camera when something actually moved the bounds. The
|
|
@@ -136,22 +147,34 @@ export class SymbolicOverlays {
|
|
|
136
147
|
this.host.requestRender();
|
|
137
148
|
return;
|
|
138
149
|
}
|
|
139
|
-
// Text
|
|
150
|
+
// Text anchors are single points. Written straight into a worst-case
|
|
140
151
|
// buffer and passed on as a subarray: filtering first would allocate a
|
|
141
152
|
// second array holding every framing text just to read its length, and
|
|
142
153
|
// annotation-heavy models push thousands.
|
|
143
154
|
const buf = new Float32Array(texts.length * 3);
|
|
144
|
-
let
|
|
155
|
+
let legacyCount = 0;
|
|
156
|
+
let expanded = false;
|
|
145
157
|
for (const t of texts) {
|
|
146
158
|
if (t.definesExtent === false)
|
|
147
159
|
continue;
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
160
|
+
if (t.origin) {
|
|
161
|
+
// `worldPos` is explicitly local to `origin`. Preserve that
|
|
162
|
+
// f64 reconstruction for bounds instead of narrowing the sum.
|
|
163
|
+
this.host.expandModelBoundsWithAnchoredLineVertices(new Float32Array(t.worldPos), t.origin, 3);
|
|
164
|
+
expanded = true;
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
const [x, y, z] = t.worldPos;
|
|
168
|
+
buf[legacyCount * 3 + 0] = x;
|
|
169
|
+
buf[legacyCount * 3 + 1] = y;
|
|
170
|
+
buf[legacyCount * 3 + 2] = z;
|
|
171
|
+
legacyCount++;
|
|
172
|
+
}
|
|
173
|
+
if (legacyCount > 0) {
|
|
174
|
+
this.host.expandModelBoundsWithFlatVertices(buf.subarray(0, legacyCount * 3), 3);
|
|
175
|
+
expanded = true;
|
|
152
176
|
}
|
|
153
|
-
if (
|
|
154
|
-
this.host.expandModelBoundsWithFlatVertices(buf.subarray(0, n * 3), 3);
|
|
177
|
+
if (expanded) {
|
|
155
178
|
this.host.syncCameraSceneBounds();
|
|
156
179
|
}
|
|
157
180
|
this.host.requestRender();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-symbolic-overlays.js","sourceRoot":"","sources":["../src/renderer-symbolic-overlays.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAgB/D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EACH,oBAAoB,EACpB,oBAAoB,GAGvB,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"renderer-symbolic-overlays.js","sourceRoot":"","sources":["../src/renderer-symbolic-overlays.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,48 @@
|
|
|
1
1
|
import type { Camera } from './camera.js';
|
|
2
|
+
/**
|
|
3
|
+
* Highest device-pixel ratio the drawing buffer follows. A 3x phone or a
|
|
4
|
+
* browser zoomed past 200% would otherwise allocate 9x+ the CSS-pixel fill
|
|
5
|
+
* (colour, MSAA, depth, object-id targets all scale with it) for a sharpness
|
|
6
|
+
* gain the eye cannot resolve at that density.
|
|
7
|
+
*/
|
|
8
|
+
export declare const MAX_DRAWING_BUFFER_PIXEL_RATIO = 2;
|
|
9
|
+
export interface DrawingBufferSize {
|
|
10
|
+
/** Drawing-buffer width in device pixels (`canvas.width`). */
|
|
11
|
+
width: number;
|
|
12
|
+
/** Drawing-buffer height in device pixels (`canvas.height`). */
|
|
13
|
+
height: number;
|
|
14
|
+
/**
|
|
15
|
+
* Device pixels per CSS pixel actually applied. Below the display's
|
|
16
|
+
* `devicePixelRatio` when capped by {@link MAX_DRAWING_BUFFER_PIXEL_RATIO}
|
|
17
|
+
* or by the GPU's max texture dimension. Anything authored in CSS pixels
|
|
18
|
+
* (point and glyph sizes, snap and cull thresholds, post-pass tap radii)
|
|
19
|
+
* converts through this, so it looks the same at every density.
|
|
20
|
+
*/
|
|
21
|
+
pixelRatio: number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* The drawing-buffer size for a canvas laid out at `cssWidth` x `cssHeight`
|
|
25
|
+
* CSS pixels on a display with `devicePixelRatio` (#5383).
|
|
26
|
+
*
|
|
27
|
+
* The buffer follows the element's device-pixel size, so a HiDPI screen gets
|
|
28
|
+
* a native-resolution image instead of a CSS-resolution one the browser
|
|
29
|
+
* upscales. Both axes use the SAME ratio and neither is rounded to a multiple
|
|
30
|
+
* of anything, so the buffer's aspect is the element's aspect. The width used
|
|
31
|
+
* to be floored to a multiple of 64 for the 256-byte `bytesPerRow` rule, but
|
|
32
|
+
* that rule binds only `copyTextureToBuffer`, and every readback here (picker,
|
|
33
|
+
* colour-frame capture) pads its own row pitch.
|
|
34
|
+
*
|
|
35
|
+
* When one axis would exceed `maxTextureDimension` the ratio drops for BOTH
|
|
36
|
+
* axes, which keeps the aspect instead of squashing one axis.
|
|
37
|
+
*
|
|
38
|
+
* Returns null for a collapsed or non-finite layout: the caller keeps the
|
|
39
|
+
* buffer it has.
|
|
40
|
+
*/
|
|
41
|
+
export declare function computeDrawingBufferSize(cssWidth: number, cssHeight: number, devicePixelRatio: number, maxTextureDimension: number): DrawingBufferSize | null;
|
|
42
|
+
/**
|
|
43
|
+
* {@link computeDrawingBufferSize} for `canvas`'s current layout on the
|
|
44
|
+
* current display. Null while the element has no layout.
|
|
45
|
+
*/
|
|
46
|
+
export declare function measureDrawingBuffer(canvas: HTMLCanvasElement, maxTextureDimension: number): DrawingBufferSize | null;
|
|
2
47
|
export declare function resizeRendererViewport(canvas: HTMLCanvasElement, camera: Camera, width: number, height: number): void;
|
|
3
48
|
//# sourceMappingURL=renderer-viewport.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-viewport.d.ts","sourceRoot":"","sources":["../src/renderer-viewport.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,IAAI,CAoBN"}
|
|
1
|
+
{"version":3,"file":"renderer-viewport.d.ts","sourceRoot":"","sources":["../src/renderer-viewport.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAEhD,MAAM,WAAW,iBAAiB;IAChC,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAC;IACf;;;;;;OAMG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,MAAM,EACxB,mBAAmB,EAAE,MAAM,GAC1B,iBAAiB,GAAG,IAAI,CAQ1B;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,iBAAiB,EACzB,mBAAmB,EAAE,MAAM,GAC1B,iBAAiB,GAAG,IAAI,CAI1B;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,IAAI,CAoBN"}
|
|
@@ -1,3 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Highest device-pixel ratio the drawing buffer follows. A 3x phone or a
|
|
3
|
+
* browser zoomed past 200% would otherwise allocate 9x+ the CSS-pixel fill
|
|
4
|
+
* (colour, MSAA, depth, object-id targets all scale with it) for a sharpness
|
|
5
|
+
* gain the eye cannot resolve at that density.
|
|
6
|
+
*/
|
|
7
|
+
export const MAX_DRAWING_BUFFER_PIXEL_RATIO = 2;
|
|
8
|
+
/**
|
|
9
|
+
* The drawing-buffer size for a canvas laid out at `cssWidth` x `cssHeight`
|
|
10
|
+
* CSS pixels on a display with `devicePixelRatio` (#5383).
|
|
11
|
+
*
|
|
12
|
+
* The buffer follows the element's device-pixel size, so a HiDPI screen gets
|
|
13
|
+
* a native-resolution image instead of a CSS-resolution one the browser
|
|
14
|
+
* upscales. Both axes use the SAME ratio and neither is rounded to a multiple
|
|
15
|
+
* of anything, so the buffer's aspect is the element's aspect. The width used
|
|
16
|
+
* to be floored to a multiple of 64 for the 256-byte `bytesPerRow` rule, but
|
|
17
|
+
* that rule binds only `copyTextureToBuffer`, and every readback here (picker,
|
|
18
|
+
* colour-frame capture) pads its own row pitch.
|
|
19
|
+
*
|
|
20
|
+
* When one axis would exceed `maxTextureDimension` the ratio drops for BOTH
|
|
21
|
+
* axes, which keeps the aspect instead of squashing one axis.
|
|
22
|
+
*
|
|
23
|
+
* Returns null for a collapsed or non-finite layout: the caller keeps the
|
|
24
|
+
* buffer it has.
|
|
25
|
+
*/
|
|
26
|
+
export function computeDrawingBufferSize(cssWidth, cssHeight, devicePixelRatio, maxTextureDimension) {
|
|
27
|
+
if (!Number.isFinite(cssWidth) || !Number.isFinite(cssHeight) || cssWidth <= 0 || cssHeight <= 0)
|
|
28
|
+
return null;
|
|
29
|
+
const dpr = Number.isFinite(devicePixelRatio) && devicePixelRatio > 0 ? devicePixelRatio : 1;
|
|
30
|
+
const maxDim = Number.isFinite(maxTextureDimension) && maxTextureDimension >= 1 ? maxTextureDimension : 8192;
|
|
31
|
+
const ratio = Math.min(dpr, MAX_DRAWING_BUFFER_PIXEL_RATIO, maxDim / cssWidth, maxDim / cssHeight);
|
|
32
|
+
const width = Math.min(maxDim, Math.max(1, Math.round(cssWidth * ratio)));
|
|
33
|
+
const height = Math.min(maxDim, Math.max(1, Math.round(cssHeight * ratio)));
|
|
34
|
+
return { width, height, pixelRatio: width / cssWidth };
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* {@link computeDrawingBufferSize} for `canvas`'s current layout on the
|
|
38
|
+
* current display. Null while the element has no layout.
|
|
39
|
+
*/
|
|
40
|
+
export function measureDrawingBuffer(canvas, maxTextureDimension) {
|
|
41
|
+
const rect = canvas.getBoundingClientRect();
|
|
42
|
+
const dpr = typeof window !== 'undefined' ? window.devicePixelRatio : 1;
|
|
43
|
+
return computeDrawingBufferSize(rect.width, rect.height, dpr, maxTextureDimension);
|
|
44
|
+
}
|
|
1
45
|
export function resizeRendererViewport(canvas, camera, width, height) {
|
|
2
46
|
// `canvas.width` is an IDL `unsigned long`, so it silently coerces a
|
|
3
47
|
// non-finite or negative argument to **0** — a zero drawing buffer
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-viewport.js","sourceRoot":"","sources":["../src/renderer-viewport.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,sBAAsB,CACpC,MAAyB,EACzB,MAAc,EACd,KAAa,EACb,MAAc;IAEd,qEAAqE;IACrE,mEAAmE;IACnE,iEAAiE;IACjE,mEAAmE;IACnE,mEAAmE;IACnE,qEAAqE;IACrE,oEAAoE;IACpE,sEAAsE;IACtE,4DAA4D;IAC5D,IACE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QACvB,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QACxB,KAAK,IAAI,CAAC;QACV,MAAM,IAAI,CAAC;QAEX,OAAO;IACT,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;AACnC,CAAC"}
|
|
1
|
+
{"version":3,"file":"renderer-viewport.js","sourceRoot":"","sources":["../src/renderer-viewport.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC;AAiBhD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,wBAAwB,CACtC,QAAgB,EAChB,SAAiB,EACjB,gBAAwB,EACxB,mBAA2B;IAE3B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,QAAQ,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9G,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7F,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,mBAAmB,IAAI,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7G,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,8BAA8B,EAAE,MAAM,GAAG,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACnG,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1E,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5E,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,GAAG,QAAQ,EAAE,CAAC;AACzD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAyB,EACzB,mBAA2B;IAE3B,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;IAC5C,MAAM,GAAG,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,OAAO,wBAAwB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,mBAAmB,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,MAAyB,EACzB,MAAc,EACd,KAAa,EACb,MAAc;IAEd,qEAAqE;IACrE,mEAAmE;IACnE,iEAAiE;IACjE,mEAAmE;IACnE,mEAAmE;IACnE,qEAAqE;IACrE,oEAAoE;IACpE,sEAAsE;IACtE,4DAA4D;IAC5D,IACE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QACvB,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QACxB,KAAK,IAAI,CAAC;QACV,MAAM,IAAI,CAAC;QAEX,OAAO;IACT,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Shared f64 world-to-eye clip arithmetic for colour, pick, and shadow passes. */
|
|
2
|
+
import type { WorldPoint } from './relative-to-eye.js';
|
|
3
|
+
export interface RteClipBox {
|
|
4
|
+
enabled?: boolean;
|
|
5
|
+
min: readonly [number, number, number];
|
|
6
|
+
max: readonly [number, number, number];
|
|
7
|
+
}
|
|
8
|
+
/** `dot(world, normal) - distance`, expressed in the eye-relative frame. */
|
|
9
|
+
export declare function rtePlaneDistance(distance: number, normal: readonly [number, number, number], cameraWorld: WorldPoint): number;
|
|
10
|
+
/** Pack a world-space crop AABB relative to `cameraWorld`, preserving f64 subtraction. */
|
|
11
|
+
export declare function packRteClipBox(box: RteClipBox | null | undefined, cameraWorld: WorldPoint, out: Float32Array, floatOffset: number): boolean;
|
|
12
|
+
//# sourceMappingURL=rte-clip-space.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rte-clip-space.d.ts","sourceRoot":"","sources":["../src/rte-clip-space.ts"],"names":[],"mappings":"AAIA,mFAAmF;AAEnF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACxC;AAED,4EAA4E;AAC5E,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EACzC,WAAW,EAAE,UAAU,GACtB,MAAM,CAER;AAED,0FAA0F;AAC1F,wBAAgB,cAAc,CAC5B,GAAG,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,EAClC,WAAW,EAAE,UAAU,EACvB,GAAG,EAAE,YAAY,EACjB,WAAW,EAAE,MAAM,GAClB,OAAO,CAYT"}
|
|
@@ -0,0 +1,22 @@
|
|
|
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
|
+
/** `dot(world, normal) - distance`, expressed in the eye-relative frame. */
|
|
5
|
+
export function rtePlaneDistance(distance, normal, cameraWorld) {
|
|
6
|
+
return distance - (cameraWorld[0] * normal[0] + cameraWorld[1] * normal[1] + cameraWorld[2] * normal[2]);
|
|
7
|
+
}
|
|
8
|
+
/** Pack a world-space crop AABB relative to `cameraWorld`, preserving f64 subtraction. */
|
|
9
|
+
export function packRteClipBox(box, cameraWorld, out, floatOffset) {
|
|
10
|
+
if (!box || box.enabled === false) {
|
|
11
|
+
out.fill(0, floatOffset, floatOffset + 8);
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
for (let axis = 0; axis < 3; axis++) {
|
|
15
|
+
out[floatOffset + axis] = box.min[axis] - cameraWorld[axis];
|
|
16
|
+
out[floatOffset + 4 + axis] = box.max[axis] - cameraWorld[axis];
|
|
17
|
+
}
|
|
18
|
+
out[floatOffset + 3] = 0;
|
|
19
|
+
out[floatOffset + 7] = 0;
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=rte-clip-space.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rte-clip-space.js","sourceRoot":"","sources":["../src/rte-clip-space.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAY/D,4EAA4E;AAC5E,MAAM,UAAU,gBAAgB,CAC9B,QAAgB,EAChB,MAAyC,EACzC,WAAuB;IAEvB,OAAO,QAAQ,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3G,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,cAAc,CAC5B,GAAkC,EAClC,WAAuB,EACvB,GAAiB,EACjB,WAAmB;IAEnB,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QAClC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,WAAW,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC;QAC1C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC;QACpC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAC5D,GAAG,CAAC,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAClE,CAAC;IACD,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IACzB,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IACzB,OAAO,IAAI,CAAC;AACd,CAAC"}
|