@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"point-cloud-renderer.js","sourceRoot":"","sources":["../../src/pointcloud/point-cloud-renderer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"point-cloud-renderer.js","sourceRoot":"","sources":["../../src/pointcloud/point-cloud-renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Streaming point-cloud handle lifecycle: `beginPointCloudStream` /
|
|
3
|
+
* `appendPointCloudChunk` / `endPointCloudStream` / `removePointCloudAsset`,
|
|
4
|
+
* plus the per-epoch guard that rejects a handle from a torn-down stream.
|
|
5
|
+
*
|
|
6
|
+
* Extracted from `Renderer` following the `scene-device-recovery.ts`
|
|
7
|
+
* pattern — a `Host` interface for the fields these functions touch, so the
|
|
8
|
+
* lifecycle stays testable without constructing a full `Renderer`. The
|
|
9
|
+
* epoch bookkeeping itself (the `pointCloudStreamEpoch`/`pointCloudStreamEpochs`
|
|
10
|
+
* fields, and the handle-id watermark that survives `teardown()`) stays on
|
|
11
|
+
* `Renderer` — see `pointCloudNextHandleId` there and `PointCloudHandleIds`.
|
|
12
|
+
*/
|
|
13
|
+
import type { ModelBoundsBox } from '../model-bounds-tracker.js';
|
|
14
|
+
import type { PointCloudChunkInput } from './point-cloud-node.js';
|
|
15
|
+
import type { PointCloudAssetHandle, PointCloudRenderer } from './point-cloud-renderer.js';
|
|
16
|
+
export interface PointCloudStreamHost {
|
|
17
|
+
deviceLost: boolean;
|
|
18
|
+
pointCloudRenderer: PointCloudRenderer | null;
|
|
19
|
+
pointCloudStreamEpoch: number;
|
|
20
|
+
readonly pointCloudStreamEpochs: Map<number, number>;
|
|
21
|
+
readonly modelBoundsTracker: {
|
|
22
|
+
expandForPointClouds(): void;
|
|
23
|
+
};
|
|
24
|
+
readonly camera: {
|
|
25
|
+
setSceneBounds(bounds: ModelBoundsBox | null): void;
|
|
26
|
+
};
|
|
27
|
+
readonly modelBounds: ModelBoundsBox | null;
|
|
28
|
+
requestRender(): void;
|
|
29
|
+
refreshPlacementBounds(): void;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Streaming entry: open an empty asset that will receive chunks via
|
|
33
|
+
* `appendPointCloudChunk`. Call `endPointCloudStream` when no more
|
|
34
|
+
* chunks will arrive (currently a no-op but kept for symmetry).
|
|
35
|
+
*/
|
|
36
|
+
export declare function beginPointCloudStream(host: PointCloudStreamHost, meta: {
|
|
37
|
+
expressId: number;
|
|
38
|
+
ifcType?: string;
|
|
39
|
+
modelIndex?: number;
|
|
40
|
+
}): PointCloudAssetHandle;
|
|
41
|
+
export declare function appendPointCloudChunk(host: PointCloudStreamHost, handle: PointCloudAssetHandle, chunk: PointCloudChunkInput): void;
|
|
42
|
+
export declare function endPointCloudStream(host: PointCloudStreamHost, handle: PointCloudAssetHandle): void;
|
|
43
|
+
export declare function removePointCloudAsset(host: PointCloudStreamHost, handle: PointCloudAssetHandle): void;
|
|
44
|
+
//# sourceMappingURL=point-cloud-stream-lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"point-cloud-stream-lifecycle.d.ts","sourceRoot":"","sources":["../../src/pointcloud/point-cloud-stream-lifecycle.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE3F,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,OAAO,CAAC;IACpB,kBAAkB,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC9C,qBAAqB,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,sBAAsB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrD,QAAQ,CAAC,kBAAkB,EAAE;QAAE,oBAAoB,IAAI,IAAI,CAAA;KAAE,CAAC;IAC9D,QAAQ,CAAC,MAAM,EAAE;QAAE,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,GAAG,IAAI,CAAA;KAAE,CAAC;IACzE,QAAQ,CAAC,WAAW,EAAE,cAAc,GAAG,IAAI,CAAC;IAC5C,aAAa,IAAI,IAAI,CAAC;IACtB,sBAAsB,IAAI,IAAI,CAAC;CAChC;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,oBAAoB,EAC1B,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GACjE,qBAAqB,CAQvB;AAQD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,qBAAqB,EAAE,KAAK,EAAE,oBAAoB,GAAG,IAAI,CAKlI;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAGnG;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAMrG"}
|
|
@@ -0,0 +1,44 @@
|
|
|
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
|
+
import { rendererDeviceLostError } from '../device-recovery.js';
|
|
5
|
+
/**
|
|
6
|
+
* Streaming entry: open an empty asset that will receive chunks via
|
|
7
|
+
* `appendPointCloudChunk`. Call `endPointCloudStream` when no more
|
|
8
|
+
* chunks will arrive (currently a no-op but kept for symmetry).
|
|
9
|
+
*/
|
|
10
|
+
export function beginPointCloudStream(host, meta) {
|
|
11
|
+
if (host.deviceLost)
|
|
12
|
+
throw rendererDeviceLostError();
|
|
13
|
+
if (!host.pointCloudRenderer) {
|
|
14
|
+
throw new Error('Renderer not initialized. Call init() first.');
|
|
15
|
+
}
|
|
16
|
+
const handle = host.pointCloudRenderer.beginAsset(meta);
|
|
17
|
+
host.pointCloudStreamEpochs.set(handle.id, host.pointCloudStreamEpoch);
|
|
18
|
+
return handle;
|
|
19
|
+
}
|
|
20
|
+
function currentPointCloudStreamRenderer(host, handle) {
|
|
21
|
+
if (host.deviceLost || !host.pointCloudRenderer
|
|
22
|
+
|| host.pointCloudStreamEpochs.get(handle.id) !== host.pointCloudStreamEpoch)
|
|
23
|
+
throw rendererDeviceLostError();
|
|
24
|
+
return host.pointCloudRenderer;
|
|
25
|
+
}
|
|
26
|
+
export function appendPointCloudChunk(host, handle, chunk) {
|
|
27
|
+
currentPointCloudStreamRenderer(host, handle).appendChunk(handle, chunk);
|
|
28
|
+
host.modelBoundsTracker.expandForPointClouds();
|
|
29
|
+
host.camera.setSceneBounds(host.modelBounds);
|
|
30
|
+
host.requestRender();
|
|
31
|
+
}
|
|
32
|
+
export function endPointCloudStream(host, handle) {
|
|
33
|
+
currentPointCloudStreamRenderer(host, handle).endAsset(handle);
|
|
34
|
+
host.requestRender();
|
|
35
|
+
}
|
|
36
|
+
export function removePointCloudAsset(host, handle) {
|
|
37
|
+
if (!host.pointCloudStreamEpochs.delete(handle.id))
|
|
38
|
+
return;
|
|
39
|
+
host.pointCloudRenderer?.removeAsset(handle);
|
|
40
|
+
// Bounds may have shrunk — recompute from scratch so fit-to-view
|
|
41
|
+
// and section-plane sliders see fresh extents.
|
|
42
|
+
host.refreshPlacementBounds();
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=point-cloud-stream-lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"point-cloud-stream-lifecycle.js","sourceRoot":"","sources":["../../src/pointcloud/point-cloud-stream-lifecycle.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAgB/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAgBhE;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACnC,IAA0B,EAC1B,IAAkE;IAElE,IAAI,IAAI,CAAC,UAAU;QAAE,MAAM,uBAAuB,EAAE,CAAC;IACrD,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACxD,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACvE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,+BAA+B,CAAC,IAA0B,EAAE,MAA6B;IAChG,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,kBAAkB;WAC1C,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,qBAAqB;QAAE,MAAM,uBAAuB,EAAE,CAAC;IAChH,OAAO,IAAI,CAAC,kBAAkB,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAA0B,EAAE,MAA6B,EAAE,KAA2B;IAC1H,+BAA+B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACzE,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,EAAE,CAAC;IAC/C,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC7C,IAAI,CAAC,aAAa,EAAE,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAA0B,EAAE,MAA6B;IAC3F,+BAA+B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/D,IAAI,CAAC,aAAa,EAAE,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAA0B,EAAE,MAA6B;IAC7F,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAAE,OAAO;IAC3D,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7C,iEAAiE;IACjE,+CAA+C;IAC/C,IAAI,CAAC,sBAAsB,EAAE,CAAC;AAChC,CAAC"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { PointCloudNode } from './point-cloud-node.js';
|
|
2
|
+
import type { RelativeToEyeFrame } from '../relative-to-eye.js';
|
|
3
|
+
import type { ClipBox } from '../types.js';
|
|
2
4
|
export type PointColorMode = 'rgb' | 'classification' | 'intensity' | 'height' | 'fixed' | 'deviation';
|
|
3
5
|
export type PointSizeMode = 'fixed-px' | 'adaptive-world' | 'attenuated';
|
|
4
6
|
/** Number of u32 words in the 256-bit LAS class-visibility mask. */
|
|
@@ -17,6 +19,7 @@ export declare const COLOR_MODE_INDEX: Record<PointColorMode, number>;
|
|
|
17
19
|
export declare const SIZE_MODE_INDEX: Record<PointSizeMode, number>;
|
|
18
20
|
export interface PointUniformInputs {
|
|
19
21
|
viewProj: Float32Array;
|
|
22
|
+
relativeToEyeFrame: RelativeToEyeFrame;
|
|
20
23
|
fixedColor: [number, number, number, number];
|
|
21
24
|
colorMode: PointColorMode;
|
|
22
25
|
sizeMode: PointSizeMode;
|
|
@@ -26,6 +29,8 @@ export interface PointUniformInputs {
|
|
|
26
29
|
sectionNormal: [number, number, number];
|
|
27
30
|
sectionDist: number;
|
|
28
31
|
sectionEnabled: boolean;
|
|
32
|
+
/** Crop box shared with the mesh pass; narrowed only after f64 eye subtraction. */
|
|
33
|
+
clipBox?: ClipBox | null;
|
|
29
34
|
heightMin: number;
|
|
30
35
|
heightMax: number;
|
|
31
36
|
viewportW: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"point-cloud-uniforms.d.ts","sourceRoot":"","sources":["../../src/pointcloud/point-cloud-uniforms.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"point-cloud-uniforms.d.ts","sourceRoot":"","sources":["../../src/pointcloud/point-cloud-uniforms.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAG3C,MAAM,MAAM,cAAc,GACtB,KAAK,GACL,gBAAgB,GAChB,WAAW,GACX,QAAQ,GACR,OAAO,GACP,WAAW,CAAC;AAEhB,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,gBAAgB,GAAG,YAAY,CAAC;AAEzE,oEAAoE;AACpE,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,SAAS,GAC3C,WAAW,CAYb;AAED,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAO3D,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAIzD,CAAC;AAEF,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,YAAY,CAAC;IACvB,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,SAAS,EAAE,cAAc,CAAC;IAC1B,QAAQ,EAAE,aAAa,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,mFAAmF;IACnF,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,SAAS,EAAE,WAAW,CAAC;IACvB,qEAAqE;IACrE,aAAa,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,qBAAqB,EAAE,MAAM,CAAC;IAC9B,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,YAAY,EACrB,UAAU,EAAE,WAAW,EACvB,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,kBAAkB,GACzB,IAAI,CA4EN"}
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import { POINT_UNIFORM_SIZE } from './point-pipeline.js';
|
|
12
12
|
import { isUsableModelMatrix } from './point-cloud-node.js';
|
|
13
|
+
import { packRteClipBox, rtePlaneDistance } from '../rte-clip-space.js';
|
|
13
14
|
/** Number of u32 words in the 256-bit LAS class-visibility mask. */
|
|
14
15
|
export const CLASS_MASK_WORDS = 8;
|
|
15
16
|
/**
|
|
@@ -58,13 +59,14 @@ export const SIZE_MODE_INDEX = {
|
|
|
58
59
|
export function writePointCloudUniforms(device, scratch, scratchU32, node, inputs) {
|
|
59
60
|
const u = scratch;
|
|
60
61
|
const uU32 = scratchU32;
|
|
61
|
-
// viewProj — floats 0..15
|
|
62
|
+
// Translation-free RTE viewProj — floats 0..15.
|
|
62
63
|
u.set(inputs.viewProj.subarray(0, 16), 0);
|
|
63
|
-
//
|
|
64
|
-
//
|
|
65
|
-
|
|
64
|
+
// Model linear transform — floats 16..31. Its translation is separately
|
|
65
|
+
// split against the camera below; do not narrow it into this f32 matrix.
|
|
66
|
+
let origin = [0, 0, 0];
|
|
66
67
|
if (isUsableModelMatrix(node.model)) {
|
|
67
68
|
u.set(node.model, 16);
|
|
69
|
+
origin = node.rteOrigin ?? [node.model[12], node.model[13], node.model[14]];
|
|
68
70
|
}
|
|
69
71
|
else {
|
|
70
72
|
u.fill(0, 16, 32);
|
|
@@ -73,53 +75,62 @@ export function writePointCloudUniforms(device, scratch, scratchU32, node, input
|
|
|
73
75
|
u[26] = 1;
|
|
74
76
|
u[31] = 1;
|
|
75
77
|
}
|
|
76
|
-
|
|
77
|
-
u[
|
|
78
|
-
u[
|
|
79
|
-
u[
|
|
80
|
-
u
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
u[
|
|
84
|
-
u[
|
|
85
|
-
u[
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
u[
|
|
89
|
-
u[
|
|
90
|
-
u[
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
u[
|
|
94
|
-
u[
|
|
95
|
-
u[
|
|
96
|
-
|
|
78
|
+
u[28] = 0;
|
|
79
|
+
u[29] = 0;
|
|
80
|
+
u[30] = 0;
|
|
81
|
+
u[31] = 1;
|
|
82
|
+
inputs.relativeToEyeFrame.packDrawableOrigin(origin, u, 32);
|
|
83
|
+
const camera = inputs.relativeToEyeFrame.getCameraWorld();
|
|
84
|
+
// colorOverride — floats 40..43
|
|
85
|
+
u[40] = inputs.fixedColor[0];
|
|
86
|
+
u[41] = inputs.fixedColor[1];
|
|
87
|
+
u[42] = inputs.fixedColor[2];
|
|
88
|
+
u[43] = inputs.fixedColor[3];
|
|
89
|
+
// colorModeAndExtras — floats 44..47 (mode, pointSize, heightMin, heightMax)
|
|
90
|
+
u[44] = COLOR_MODE_INDEX[inputs.colorMode];
|
|
91
|
+
u[45] = inputs.pointSize;
|
|
92
|
+
u[46] = inputs.heightMin - camera[1];
|
|
93
|
+
u[47] = inputs.heightMax - camera[1];
|
|
94
|
+
// sizing — floats 48..51 (sizeMode, worldRadius, viewportW, viewportH)
|
|
95
|
+
u[48] = SIZE_MODE_INDEX[inputs.sizeMode];
|
|
96
|
+
u[49] = inputs.worldRadius;
|
|
97
|
+
u[50] = inputs.viewportW;
|
|
98
|
+
u[51] = inputs.viewportH;
|
|
99
|
+
// sectionPlane — floats 52..55. The shader now receives eye-relative
|
|
100
|
+
// positions, so express the plane in that same frame.
|
|
101
|
+
u[52] = inputs.sectionNormal[0];
|
|
102
|
+
u[53] = inputs.sectionNormal[1];
|
|
103
|
+
u[54] = inputs.sectionNormal[2];
|
|
104
|
+
u[55] = rtePlaneDistance(inputs.sectionDist, inputs.sectionNormal, camera);
|
|
105
|
+
// flags (u32 view) — bytes 224..239 = u32 indices 56..59
|
|
97
106
|
// flags.x = the asset's CURRENT expressId. The shader uses this
|
|
98
107
|
// when non-zero so the federation registry can relabel a streamed
|
|
99
108
|
// asset post-upload (its per-vertex entityId attribute is baked
|
|
100
109
|
// at upload and would otherwise stay at the synthetic local ID).
|
|
101
|
-
// flags.w (u32 slot
|
|
102
|
-
//
|
|
103
|
-
|
|
104
|
-
uU32[
|
|
105
|
-
uU32[
|
|
106
|
-
uU32[
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
uU32[
|
|
110
|
-
uU32[
|
|
111
|
-
uU32[
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
u[
|
|
115
|
-
u[
|
|
116
|
-
u[
|
|
117
|
-
|
|
118
|
-
// classMask (u32 slots 60..67) — 256-bit LAS class-visibility mask,
|
|
110
|
+
// flags.w (u32 slot 59) = crop enabled; class visibility lives in its
|
|
111
|
+
// own 256-bit block below.
|
|
112
|
+
uU32[56] = node.meta.expressId >>> 0;
|
|
113
|
+
uU32[57] = inputs.sectionEnabled ? 1 : 0;
|
|
114
|
+
uU32[58] = inputs.roundShape ? 1 : 0;
|
|
115
|
+
uU32[59] = inputs.clipBox?.enabled ? 1 : 0;
|
|
116
|
+
// extras (u32 slots 60..63) — extras.x = previewStride, yzw reserved.
|
|
117
|
+
uU32[60] = inputs.previewStride >>> 0;
|
|
118
|
+
uU32[61] = 0;
|
|
119
|
+
uU32[62] = 0;
|
|
120
|
+
uU32[63] = 0;
|
|
121
|
+
// deviationRange (f32 slots 64..67) — center, halfRange, _, _.
|
|
122
|
+
u[64] = inputs.deviationCenterOffset;
|
|
123
|
+
u[65] = inputs.deviationHalfRange;
|
|
124
|
+
u[66] = 0;
|
|
125
|
+
u[67] = 0;
|
|
126
|
+
// classMask (u32 slots 68..75) — 256-bit LAS class-visibility mask,
|
|
119
127
|
// bit (i % 32) of word (i / 32) set → class i shown.
|
|
120
128
|
for (let w = 0; w < CLASS_MASK_WORDS; w++) {
|
|
121
|
-
uU32[
|
|
129
|
+
uU32[68 + w] = inputs.classMask[w] ?? 0xFFFFFFFF;
|
|
122
130
|
}
|
|
131
|
+
// Crop bounds follow classMask at floats 76..83. Point worldPos is already
|
|
132
|
+
// eye-relative, so subtract before f32 narrowing just as the mesh ABI does.
|
|
133
|
+
packRteClipBox(inputs.clipBox, camera, u, 76);
|
|
123
134
|
// Pass the typed array directly — TypeScript widens `.buffer` to
|
|
124
135
|
// `ArrayBufferLike` here (vs. `ArrayBuffer` on a class field), which
|
|
125
136
|
// doesn't satisfy `writeBuffer`'s parameter type. Slicing the typed
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"point-cloud-uniforms.js","sourceRoot":"","sources":["../../src/pointcloud/point-cloud-uniforms.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;GAMG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"point-cloud-uniforms.js","sourceRoot":"","sources":["../../src/pointcloud/point-cloud-uniforms.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Tracks resident-asset visibility independently of GPU resource lifetime. */
|
|
2
|
+
export declare class PointCloudVisibility {
|
|
3
|
+
private readonly values;
|
|
4
|
+
add(id: number): void;
|
|
5
|
+
remove(id: number): void;
|
|
6
|
+
clear(): void;
|
|
7
|
+
visible(id: number): boolean;
|
|
8
|
+
set(id: number, visible: boolean, exists: boolean): boolean;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=point-cloud-visibility.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"point-cloud-visibility.d.ts","sourceRoot":"","sources":["../../src/pointcloud/point-cloud-visibility.ts"],"names":[],"mappings":"AAIA,+EAA+E;AAC/E,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8B;IACrD,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IACrB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IACxB,KAAK,IAAI,IAAI;IACb,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAC5B,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO;CAK5D"}
|
|
@@ -0,0 +1,18 @@
|
|
|
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
|
+
/** Tracks resident-asset visibility independently of GPU resource lifetime. */
|
|
5
|
+
export class PointCloudVisibility {
|
|
6
|
+
values = new Map();
|
|
7
|
+
add(id) { this.values.set(id, true); }
|
|
8
|
+
remove(id) { this.values.delete(id); }
|
|
9
|
+
clear() { this.values.clear(); }
|
|
10
|
+
visible(id) { return this.values.get(id) !== false; }
|
|
11
|
+
set(id, visible, exists) {
|
|
12
|
+
if (!exists || this.visible(id) === visible)
|
|
13
|
+
return false;
|
|
14
|
+
this.values.set(id, visible);
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=point-cloud-visibility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"point-cloud-visibility.js","sourceRoot":"","sources":["../../src/pointcloud/point-cloud-visibility.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D,+EAA+E;AAC/E,MAAM,OAAO,oBAAoB;IACd,MAAM,GAAG,IAAI,GAAG,EAAmB,CAAC;IACrD,GAAG,CAAC,EAAU,IAAU,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACpD,MAAM,CAAC,EAAU,IAAU,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACpD,KAAK,KAAW,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACtC,OAAO,CAAC,EAAU,IAAa,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;IACtE,GAAG,CAAC,EAAU,EAAE,OAAgB,EAAE,MAAe;QAC/C,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,OAAO;YAAE,OAAO,KAAK,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|
|
@@ -2,16 +2,11 @@
|
|
|
2
2
|
* Uniform block size in bytes. Layout (Float32 indices):
|
|
3
3
|
* [0..15] viewProj (mat4x4)
|
|
4
4
|
* [16..31] model (mat4x4)
|
|
5
|
-
* [32..35]
|
|
6
|
-
* [36..39]
|
|
7
|
-
* [40..
|
|
8
|
-
* [44..47] sectionPlane (nx, ny, nz, distance)
|
|
9
|
-
* [48..51] flags (u32 view: x=expressId, y=sectionEnabled, z=roundShape, w=reserved)
|
|
10
|
-
* [52..55] extras (u32 view: x=previewStride, yzw=unused)
|
|
11
|
-
* [56..59] deviationRange (centerOffset, halfRange, _, _)
|
|
12
|
-
* [60..67] classMask (u32 view: 256-bit LAS class-visibility mask, 8 words)
|
|
5
|
+
* [32..35] drawableDeltaHigh (RTE vec4)
|
|
6
|
+
* [36..39] drawableDeltaLow (RTE vec4)
|
|
7
|
+
* [40..83] point style, clipping, class data and RTE crop bounds
|
|
13
8
|
*/
|
|
14
|
-
export declare const POINT_UNIFORM_SIZE =
|
|
9
|
+
export declare const POINT_UNIFORM_SIZE = 336;
|
|
15
10
|
export declare const POINT_VERTEX_BYTES = 24;
|
|
16
11
|
/** Number of vertices emitted per splat (two triangles forming a quad). */
|
|
17
12
|
export declare const POINT_QUAD_VERTS = 6;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"point-pipeline.d.ts","sourceRoot":"","sources":["../../src/pointcloud/point-pipeline.ts"],"names":[],"mappings":"AA0BA
|
|
1
|
+
{"version":3,"file":"point-pipeline.d.ts","sourceRoot":"","sources":["../../src/pointcloud/point-pipeline.ts"],"names":[],"mappings":"AA0BA;;;;;;;GAOG;AAOH,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,2EAA2E;AAC3E,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,eAAe,CAAqB;gBAG1C,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,gBAAgB,EAC7B,WAAW,EAAE,gBAAgB,EAC7B,WAAW,EAAE,MAAM;IAiErB,WAAW,IAAI,iBAAiB;IAIhC,kBAAkB,IAAI,kBAAkB;IAIxC,mBAAmB,IAAI,SAAS;IAOhC,eAAe,CAAC,aAAa,EAAE,SAAS,GAAG,YAAY;CAMxD"}
|
|
@@ -25,14 +25,9 @@ import { pointShaderSource } from './point-shader.wgsl.js';
|
|
|
25
25
|
* Uniform block size in bytes. Layout (Float32 indices):
|
|
26
26
|
* [0..15] viewProj (mat4x4)
|
|
27
27
|
* [16..31] model (mat4x4)
|
|
28
|
-
* [32..35]
|
|
29
|
-
* [36..39]
|
|
30
|
-
* [40..
|
|
31
|
-
* [44..47] sectionPlane (nx, ny, nz, distance)
|
|
32
|
-
* [48..51] flags (u32 view: x=expressId, y=sectionEnabled, z=roundShape, w=reserved)
|
|
33
|
-
* [52..55] extras (u32 view: x=previewStride, yzw=unused)
|
|
34
|
-
* [56..59] deviationRange (centerOffset, halfRange, _, _)
|
|
35
|
-
* [60..67] classMask (u32 view: 256-bit LAS class-visibility mask, 8 words)
|
|
28
|
+
* [32..35] drawableDeltaHigh (RTE vec4)
|
|
29
|
+
* [36..39] drawableDeltaLow (RTE vec4)
|
|
30
|
+
* [40..83] point style, clipping, class data and RTE crop bounds
|
|
36
31
|
*/
|
|
37
32
|
// 17 vec4 slots × 16 bytes = 272. Was 208 before extras (PR-G's
|
|
38
33
|
// stride cull) and deviationRange (PR-H's BIM↔scan heatmap) both
|
|
@@ -40,7 +35,7 @@ import { pointShaderSource } from './point-shader.wgsl.js';
|
|
|
40
35
|
// 32 bits in flags.w to the full 256-bit LAS range (#1783) — keeping
|
|
41
36
|
// them separate avoids overloading the flags / colourOverride slots
|
|
42
37
|
// and stays std140-friendly.
|
|
43
|
-
export const POINT_UNIFORM_SIZE =
|
|
38
|
+
export const POINT_UNIFORM_SIZE = 336;
|
|
44
39
|
export const POINT_VERTEX_BYTES = 24;
|
|
45
40
|
/** Number of vertices emitted per splat (two triangles forming a quad). */
|
|
46
41
|
export const POINT_QUAD_VERTS = 6;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"point-pipeline.js","sourceRoot":"","sources":["../../src/pointcloud/point-pipeline.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D
|
|
1
|
+
{"version":3,"file":"point-pipeline.js","sourceRoot":"","sources":["../../src/pointcloud/point-pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +1,2 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* WGSL for the point cloud splat pipeline.
|
|
3
|
-
*
|
|
4
|
-
* Draws each point as an instanced quad (6 verts per point, triangle-list
|
|
5
|
-
* topology) so we can give it a real on-screen size — `point-list` has
|
|
6
|
-
* no `gl_PointSize` equivalent in WebGPU, which is why a 1-px point cloud
|
|
7
|
-
* looks like a halftone screen as you zoom in.
|
|
8
|
-
*
|
|
9
|
-
* Three size modes (uniforms.sizing.x):
|
|
10
|
-
* 0 = fixed-px — every point renders at `pointSizePx` pixels
|
|
11
|
-
* 1 = adaptive-world — splat covers `worldRadius` metres, projected
|
|
12
|
-
* 2 = attenuated — adaptive but clamped to [1, pointSizePx] px
|
|
13
|
-
*
|
|
14
|
-
* Color modes (uniforms.colorModeAndExtras.x):
|
|
15
|
-
* 0 = per-vertex RGB, 1 = classification, 2 = intensity ramp,
|
|
16
|
-
* 3 = height ramp, 4 = fixed override.
|
|
17
|
-
*
|
|
18
|
-
* Round shape: fragment discards corners outside the unit disc, so
|
|
19
|
-
* splats render as circles (not squares) at any size > ~3 px.
|
|
20
|
-
*/
|
|
21
|
-
export declare const pointShaderSource = "\n struct PointUniforms {\n viewProj: mat4x4<f32>,\n model: mat4x4<f32>,\n colorOverride: vec4<f32>,\n // x = colorMode, y = pointSizePx, z = heightMin, w = heightMax\n colorModeAndExtras: vec4<f32>,\n // x = sizeMode, y = worldRadius (m), z = viewportWidth, w = viewportHeight\n sizing: vec4<f32>,\n sectionPlane: vec4<f32>,\n // x = assetExpressId (federation-aware globalId), y = sectionEnabled,\n // z = roundShape, w = reserved (was the 32-bit class mask before\n // classMask below took over the full 0..255 LAS range, #1783)\n flags: vec4<u32>,\n // x = previewStride (1 = render every point, N = render every\n // Nth instance \u2014 used by the section-plane drag preview path).\n // yzw reserved for future per-frame state.\n extras: vec4<u32>,\n // x = deviation centerOffset (m), y = deviation halfRange (m).\n // Used by colorMode 5 (BIM\u2194scan deviation heatmap).\n deviationRange: vec4<f32>,\n // 256-bit LAS class-visibility bitmask packed as 8 u32 words\n // (two vec4s). Bit (i % 32) of word (i / 32) set \u2192 class i shown.\n classMask: array<vec4<u32>, 2>,\n }\n @binding(0) @group(0) var<uniform> uniforms: PointUniforms;\n\n struct VertexInput {\n @location(0) position: vec3<f32>,\n @location(1) rgbAndClass: vec4<f32>, // unorm8x4 \u2192 0..1 each\n @location(2) intensityPacked: u32, // low 16 bits = intensity\n @location(3) entityId: u32,\n // BIM\u2194scan signed distance, populated by the deviation compute\n // pass. Zero when the user hasn't computed yet (or when no\n // mesh is loaded). Bound from a separate vertex buffer so the\n // existing 24-byte-per-point layout stays unchanged.\n @location(4) deviation: f32,\n }\n\n struct VertexOutput {\n @builtin(position) position: vec4<f32>,\n @location(0) color: vec4<f32>,\n @location(1) worldPos: vec3<f32>,\n @location(2) @interpolate(flat) entityId: u32,\n @location(3) quadUv: vec2<f32>,\n }\n\n fn classification_color(class_id: u32) -> vec3<f32> {\n switch (class_id) {\n case 0u, 1u: { return vec3<f32>(0.65, 0.65, 0.65); }\n case 2u: { return vec3<f32>(0.55, 0.40, 0.25); }\n case 3u: { return vec3<f32>(0.55, 0.85, 0.45); }\n case 4u: { return vec3<f32>(0.30, 0.75, 0.30); }\n case 5u: { return vec3<f32>(0.10, 0.45, 0.15); }\n case 6u: { return vec3<f32>(0.95, 0.55, 0.20); }\n case 7u: { return vec3<f32>(0.95, 0.20, 0.20); }\n case 8u: { return vec3<f32>(0.20, 0.85, 0.95); }\n case 9u: { return vec3<f32>(0.20, 0.40, 0.95); }\n case 10u: { return vec3<f32>(0.55, 0.20, 0.85); }\n case 11u: { return vec3<f32>(0.30, 0.30, 0.30); }\n case 13u: { return vec3<f32>(0.95, 0.85, 0.20); }\n case 14u: { return vec3<f32>(0.95, 0.95, 0.50); }\n case 15u: { return vec3<f32>(0.20, 0.20, 0.55); }\n case 16u: { return vec3<f32>(0.30, 0.65, 0.65); }\n case 17u: { return vec3<f32>(0.85, 0.70, 0.50); }\n case 18u: { return vec3<f32>(0.95, 0.20, 0.20); }\n default: { return vec3<f32>(0.65, 0.65, 0.65); }\n }\n }\n\n // Diverging blue \u2192 white \u2192 red ramp for the BIM\u2194scan deviation\n // heatmap. t is in [-1, 1] where \u22121 = scan-far on the negative\n // side of the surface, 0 = exactly on surface, +1 = scan-far on\n // the positive (outward-normal) side. Negative side (typically\n // \"inside\" / \"before\" the wall) is blue; positive (\"outside\" /\n // \"past\" the wall) is red.\n fn deviation_ramp(t: f32) -> vec3<f32> {\n let s = clamp(t, -1.0, 1.0);\n if (s < 0.0) {\n // Cool side: deep blue \u2192 white as |t| \u2192 0.\n let k = s + 1.0; // [-1..0] \u2192 [0..1]\n return mix(vec3<f32>(0.10, 0.30, 0.85), vec3<f32>(0.95, 0.95, 0.95), k);\n }\n // Warm side: white \u2192 red as t \u2192 1.\n return mix(vec3<f32>(0.95, 0.95, 0.95), vec3<f32>(0.85, 0.20, 0.10), s);\n }\n\n fn height_ramp(t: f32) -> vec3<f32> {\n let s = clamp(t, 0.0, 1.0);\n if (s < 0.25) {\n let k = s / 0.25;\n return mix(vec3<f32>(0.10, 0.20, 0.85), vec3<f32>(0.10, 0.85, 0.85), k);\n } else if (s < 0.5) {\n let k = (s - 0.25) / 0.25;\n return mix(vec3<f32>(0.10, 0.85, 0.85), vec3<f32>(0.20, 0.85, 0.20), k);\n } else if (s < 0.75) {\n let k = (s - 0.5) / 0.25;\n return mix(vec3<f32>(0.20, 0.85, 0.20), vec3<f32>(0.95, 0.95, 0.20), k);\n } else {\n let k = (s - 0.75) / 0.25;\n return mix(vec3<f32>(0.95, 0.95, 0.20), vec3<f32>(0.95, 0.20, 0.10), k);\n }\n }\n\n @vertex\n fn vs_main(\n input: VertexInput,\n @builtin(vertex_index) vId: u32,\n @builtin(instance_index) iId: u32,\n ) -> VertexOutput {\n // Preview-density stride cull. UI sets extras.x to e.g. 4\n // while the user drags a section-plane slider so we render\n // every 4th point and the drag stays responsive on huge scans.\n // stride <= 1 is the no-op default.\n let stride = max(1u, uniforms.extras.x);\n if (stride > 1u && (iId % stride) != 0u) {\n var skipped: VertexOutput;\n // Push behind the near plane so the rasteriser drops it.\n skipped.position = vec4<f32>(0.0, 0.0, -2.0, 1.0);\n skipped.color = vec4<f32>(0.0);\n skipped.worldPos = vec3<f32>(0.0);\n skipped.entityId = 0u;\n skipped.quadUv = vec2<f32>(0.0);\n return skipped;\n }\n\n // Quad corners (two triangles, CCW) in unit disc coords:\n // tri 1: (-1,-1)(1,-1)(1,1)\n // tri 2: (-1,-1)(1, 1)(-1,1)\n var corners = array<vec2<f32>, 6>(\n vec2<f32>(-1.0, -1.0),\n vec2<f32>( 1.0, -1.0),\n vec2<f32>( 1.0, 1.0),\n vec2<f32>(-1.0, -1.0),\n vec2<f32>( 1.0, 1.0),\n vec2<f32>(-1.0, 1.0),\n );\n let corner = corners[vId];\n\n let worldPos4 = uniforms.model * vec4<f32>(input.position, 1.0);\n var clipPos = uniforms.viewProj * worldPos4;\n\n // Compute splat half-extent in pixels for the active size mode.\n let sizeMode = u32(uniforms.sizing.x);\n let worldRadius = uniforms.sizing.y;\n let viewport = uniforms.sizing.zw;\n let pointSizePx = uniforms.colorModeAndExtras.y;\n\n // halfPx is the splat RADIUS in pixels. The user-facing\n // pointSizePx is the diameter (\"8 px point\"), so divide by 2\n // when feeding it to the pipeline. Without this the fixed and\n // attenuated branches render splats at ~2x their requested size.\n var halfPx: f32;\n if (sizeMode == 0u) {\n halfPx = max(0.5, pointSizePx * 0.5);\n } else {\n // Project a world-radius offset to clip space, take pixel delta.\n // worldRadius is already a radius \u2014 no /2 needed here.\n let edgePos = uniforms.viewProj * (worldPos4 + vec4<f32>(worldRadius, 0.0, 0.0, 0.0));\n let centerNdcX = clipPos.x / max(abs(clipPos.w), 1e-6);\n let edgeNdcX = edgePos.x / max(abs(edgePos.w), 1e-6);\n let projectedPx = abs(edgeNdcX - centerNdcX) * 0.5 * viewport.x;\n if (sizeMode == 2u) {\n halfPx = clamp(projectedPx, 0.5, max(0.5, pointSizePx * 0.5));\n } else {\n halfPx = max(0.5, projectedPx);\n }\n }\n\n // Convert pixel offset to clip-space offset. Multiply by clipPos.w\n // because the GPU divides by w during the perspective divide.\n let halfClip = vec2<f32>(halfPx) / max(viewport, vec2<f32>(1.0)) * 2.0 * abs(clipPos.w);\n clipPos.x = clipPos.x + corner.x * halfClip.x;\n clipPos.y = clipPos.y + corner.y * halfClip.y;\n\n // Color selection\n let mode = u32(uniforms.colorModeAndExtras.x);\n let intensity01 = f32(input.intensityPacked & 0xffffu) / 65535.0;\n let classId = u32(round(input.rgbAndClass.a * 255.0));\n\n // Per-class visibility \u2014 classMask is a 256-bit mask covering\n // every LAS classification code, including user-defined 64..255\n // (#1783). Hidden classes get pushed behind the near plane via a\n // degenerate clipPos so they're culled before rasterisation;\n // cheaper than fragment-stage discard.\n let maskWordIdx = classId >> 5u; // classId is 0..255 \u2192 word 0..7\n let maskWord = uniforms.classMask[maskWordIdx >> 2u][maskWordIdx & 3u];\n if (((maskWord >> (classId & 31u)) & 1u) == 0u) {\n var output: VertexOutput;\n output.position = vec4<f32>(0.0, 0.0, -2.0, 1.0); // outside [0,1] reverse-Z \u2192 culled\n output.color = vec4<f32>(0.0);\n output.worldPos = vec3<f32>(0.0);\n output.entityId = 0u;\n output.quadUv = vec2<f32>(0.0);\n return output;\n }\n let heightT =\n (worldPos4.y - uniforms.colorModeAndExtras.z) /\n max(1e-6, uniforms.colorModeAndExtras.w - uniforms.colorModeAndExtras.z);\n\n var rgb: vec3<f32>;\n switch (mode) {\n case 0u: { rgb = input.rgbAndClass.rgb; }\n case 1u: { rgb = classification_color(classId); }\n case 2u: { rgb = vec3<f32>(intensity01, intensity01, intensity01); }\n case 3u: { rgb = height_ramp(heightT); }\n case 4u: { rgb = uniforms.colorOverride.rgb; }\n case 5u: {\n // Deviation: shift by centerOffset so a non-zero baseline\n // can be re-zeroed (handy when a scan has a global offset\n // from the model). halfRange = 0 falls through to white.\n let center = uniforms.deviationRange.x;\n let half = max(uniforms.deviationRange.y, 1e-6);\n let dt = (input.deviation - center) / half;\n rgb = deviation_ramp(dt);\n }\n default: { rgb = input.rgbAndClass.rgb; }\n }\n\n var output: VertexOutput;\n output.position = clipPos;\n output.color = vec4<f32>(rgb, 1.0);\n output.worldPos = worldPos4.xyz;\n output.entityId = input.entityId;\n output.quadUv = corner;\n return output;\n }\n\n struct FragmentOutput {\n @location(0) color: vec4<f32>,\n @location(1) objectId: vec4<f32>,\n }\n\n @fragment\n fn fs_main(input: VertexOutput) -> FragmentOutput {\n // Round shape \u2014 discard corners outside the unit disc.\n if (uniforms.flags.z == 1u) {\n if (dot(input.quadUv, input.quadUv) > 1.0) {\n discard;\n }\n }\n\n // Section-plane clipping\n if (uniforms.flags.y == 1u) {\n let d = dot(uniforms.sectionPlane.xyz, input.worldPos) - uniforms.sectionPlane.w;\n if (d > 0.0) {\n discard;\n }\n }\n\n var output: FragmentOutput;\n output.color = input.color;\n // Prefer the asset-level expressId from the uniform when it's set\n // (federation needs to relabel post-stream, so we can't rely on\n // the per-vertex attribute that was baked at upload time).\n // flags.x == 0 \u2192 fall back to per-vertex value to preserve the\n // legacy contract during the upload-only rendering window.\n let id = select(input.entityId, uniforms.flags.x, uniforms.flags.x != 0u);\n output.objectId = vec4<f32>(\n f32((id >> 0u) & 0xffu) / 255.0,\n f32((id >> 8u) & 0xffu) / 255.0,\n f32((id >> 16u) & 0xffu) / 255.0,\n f32((id >> 24u) & 0xffu) / 255.0,\n );\n return output;\n }\n";
|
|
1
|
+
export declare const pointShaderSource = "\n \nstruct RteFrameUniform {\n // Camera translation is intentionally absent. This projects positions\n // returned by rteWorldPosition, which are already relative to the eye.\n viewProj: mat4x4<f32>,\n}\n\nstruct RteDrawableUniform {\n // CPU computes (drawable origin - camera origin) in f64 and splits it.\n // This data must be refreshed whenever the RTE camera frame changes.\n drawableDeltaHigh: vec4<f32>,\n drawableDeltaLow: vec4<f32>,\n}\n\nfn rteWorldPosition(\n local: vec3<f32>,\n drawable: RteDrawableUniform,\n) -> vec4<f32> {\n // Do not subtract a camera origin here: this delta was formed in CPU f64.\n let highDelta = drawable.drawableDeltaHigh.xyz;\n let lowDelta = drawable.drawableDeltaLow.xyz;\n // A drawable template can span kilometres. Keep local with high first;\n // The local-plus-(high-plus-low) association is not equivalent in f32.\n return vec4<f32>((local + highDelta) + lowDelta, 1.0);\n}\n\n struct PointUniforms {\n viewProj: mat4x4<f32>,\n model: mat4x4<f32>,\n drawableDeltaHigh: vec4<f32>,\n drawableDeltaLow: vec4<f32>,\n colorOverride: vec4<f32>,\n // x = colorMode, y = pointSizePx, z = heightMin, w = heightMax\n colorModeAndExtras: vec4<f32>,\n // x = sizeMode, y = worldRadius (m), z = viewportWidth, w = viewportHeight\n sizing: vec4<f32>,\n sectionPlane: vec4<f32>,\n // x = assetExpressId (federation-aware globalId), y = sectionEnabled,\n // z = roundShape, w = reserved (was the 32-bit class mask before\n // classMask below took over the full 0..255 LAS range, #1783)\n flags: vec4<u32>,\n // x = previewStride (1 = render every point, N = render every\n // Nth instance \u2014 used by the section-plane drag preview path).\n // yzw reserved for future per-frame state.\n extras: vec4<u32>,\n // x = deviation centerOffset (m), y = deviation halfRange (m).\n // Used by colorMode 5 (BIM\u2194scan deviation heatmap).\n deviationRange: vec4<f32>,\n // 256-bit LAS class-visibility bitmask packed as 8 u32 words\n // (two vec4s). Bit (i % 32) of word (i / 32) set \u2192 class i shown.\n classMask: array<vec4<u32>, 2>,\n // Eye-relative crop bounds; flags.w enables this branch.\n cropBoxMin: vec4<f32>,\n cropBoxMax: vec4<f32>,\n }\n @binding(0) @group(0) var<uniform> uniforms: PointUniforms;\n\n struct VertexInput {\n @location(0) position: vec3<f32>,\n @location(1) rgbAndClass: vec4<f32>, // unorm8x4 \u2192 0..1 each\n @location(2) intensityPacked: u32, // low 16 bits = intensity\n @location(3) entityId: u32,\n // BIM\u2194scan signed distance, populated by the deviation compute\n // pass. Zero when the user hasn't computed yet (or when no\n // mesh is loaded). Bound from a separate vertex buffer so the\n // existing 24-byte-per-point layout stays unchanged.\n @location(4) deviation: f32,\n }\n\n struct VertexOutput {\n @builtin(position) position: vec4<f32>,\n @location(0) color: vec4<f32>,\n @location(1) worldPos: vec3<f32>,\n @location(2) @interpolate(flat) entityId: u32,\n @location(3) quadUv: vec2<f32>,\n }\n\n fn classification_color(class_id: u32) -> vec3<f32> {\n switch (class_id) {\n case 0u, 1u: { return vec3<f32>(0.65, 0.65, 0.65); }\n case 2u: { return vec3<f32>(0.55, 0.40, 0.25); }\n case 3u: { return vec3<f32>(0.55, 0.85, 0.45); }\n case 4u: { return vec3<f32>(0.30, 0.75, 0.30); }\n case 5u: { return vec3<f32>(0.10, 0.45, 0.15); }\n case 6u: { return vec3<f32>(0.95, 0.55, 0.20); }\n case 7u: { return vec3<f32>(0.95, 0.20, 0.20); }\n case 8u: { return vec3<f32>(0.20, 0.85, 0.95); }\n case 9u: { return vec3<f32>(0.20, 0.40, 0.95); }\n case 10u: { return vec3<f32>(0.55, 0.20, 0.85); }\n case 11u: { return vec3<f32>(0.30, 0.30, 0.30); }\n case 13u: { return vec3<f32>(0.95, 0.85, 0.20); }\n case 14u: { return vec3<f32>(0.95, 0.95, 0.50); }\n case 15u: { return vec3<f32>(0.20, 0.20, 0.55); }\n case 16u: { return vec3<f32>(0.30, 0.65, 0.65); }\n case 17u: { return vec3<f32>(0.85, 0.70, 0.50); }\n case 18u: { return vec3<f32>(0.95, 0.20, 0.20); }\n default: { return vec3<f32>(0.65, 0.65, 0.65); }\n }\n }\n\n // Diverging blue \u2192 white \u2192 red ramp for the BIM\u2194scan deviation\n // heatmap. t is in [-1, 1] where \u22121 = scan-far on the negative\n // side of the surface, 0 = exactly on surface, +1 = scan-far on\n // the positive (outward-normal) side. Negative side (typically\n // \"inside\" / \"before\" the wall) is blue; positive (\"outside\" /\n // \"past\" the wall) is red.\n fn deviation_ramp(t: f32) -> vec3<f32> {\n let s = clamp(t, -1.0, 1.0);\n if (s < 0.0) {\n // Cool side: deep blue \u2192 white as |t| \u2192 0.\n let k = s + 1.0; // [-1..0] \u2192 [0..1]\n return mix(vec3<f32>(0.10, 0.30, 0.85), vec3<f32>(0.95, 0.95, 0.95), k);\n }\n // Warm side: white \u2192 red as t \u2192 1.\n return mix(vec3<f32>(0.95, 0.95, 0.95), vec3<f32>(0.85, 0.20, 0.10), s);\n }\n\n fn height_ramp(t: f32) -> vec3<f32> {\n let s = clamp(t, 0.0, 1.0);\n if (s < 0.25) {\n let k = s / 0.25;\n return mix(vec3<f32>(0.10, 0.20, 0.85), vec3<f32>(0.10, 0.85, 0.85), k);\n } else if (s < 0.5) {\n let k = (s - 0.25) / 0.25;\n return mix(vec3<f32>(0.10, 0.85, 0.85), vec3<f32>(0.20, 0.85, 0.20), k);\n } else if (s < 0.75) {\n let k = (s - 0.5) / 0.25;\n return mix(vec3<f32>(0.20, 0.85, 0.20), vec3<f32>(0.95, 0.95, 0.20), k);\n } else {\n let k = (s - 0.75) / 0.25;\n return mix(vec3<f32>(0.95, 0.95, 0.20), vec3<f32>(0.95, 0.20, 0.10), k);\n }\n }\n\n @vertex\n fn vs_main(\n input: VertexInput,\n @builtin(vertex_index) vId: u32,\n @builtin(instance_index) iId: u32,\n ) -> VertexOutput {\n // Preview-density stride cull. UI sets extras.x to e.g. 4\n // while the user drags a section-plane slider so we render\n // every 4th point and the drag stays responsive on huge scans.\n // stride <= 1 is the no-op default.\n let stride = max(1u, uniforms.extras.x);\n if (stride > 1u && (iId % stride) != 0u) {\n var skipped: VertexOutput;\n // Push behind the near plane so the rasteriser drops it.\n skipped.position = vec4<f32>(0.0, 0.0, -2.0, 1.0);\n skipped.color = vec4<f32>(0.0);\n skipped.worldPos = vec3<f32>(0.0);\n skipped.entityId = 0u;\n skipped.quadUv = vec2<f32>(0.0);\n return skipped;\n }\n\n // Quad corners (two triangles, CCW) in unit disc coords:\n // tri 1: (-1,-1)(1,-1)(1,1)\n // tri 2: (-1,-1)(1, 1)(-1,1)\n var corners = array<vec2<f32>, 6>(\n vec2<f32>(-1.0, -1.0),\n vec2<f32>( 1.0, -1.0),\n vec2<f32>( 1.0, 1.0),\n vec2<f32>(-1.0, -1.0),\n vec2<f32>( 1.0, 1.0),\n vec2<f32>(-1.0, 1.0),\n );\n let corner = corners[vId];\n\n let localWorld = (uniforms.model * vec4<f32>(input.position, 1.0)).xyz;\n // The CPU forms this delta in f64, then splits it. Never subtract two\n // independently rounded map-grid origins in the point shader.\n let drawable = RteDrawableUniform(\n uniforms.drawableDeltaHigh,\n uniforms.drawableDeltaLow,\n );\n let worldPos = rteWorldPosition(localWorld, drawable).xyz;\n var clipPos = uniforms.viewProj * vec4<f32>(worldPos, 1.0);\n\n // Compute splat half-extent in pixels for the active size mode.\n let sizeMode = u32(uniforms.sizing.x);\n let worldRadius = uniforms.sizing.y;\n let viewport = uniforms.sizing.zw;\n let pointSizePx = uniforms.colorModeAndExtras.y;\n\n // halfPx is the splat RADIUS in pixels. The user-facing\n // pointSizePx is the diameter (\"8 px point\"), so divide by 2\n // when feeding it to the pipeline. Without this the fixed and\n // attenuated branches render splats at ~2x their requested size.\n var halfPx: f32;\n if (sizeMode == 0u) {\n halfPx = max(0.5, pointSizePx * 0.5);\n } else {\n // Project a world-radius offset to clip space, take pixel delta.\n // worldRadius is already a radius \u2014 no /2 needed here.\n let edgePos = uniforms.viewProj * vec4<f32>(worldPos + vec3<f32>(worldRadius, 0.0, 0.0), 1.0);\n let centerNdcX = clipPos.x / max(abs(clipPos.w), 1e-6);\n let edgeNdcX = edgePos.x / max(abs(edgePos.w), 1e-6);\n let projectedPx = abs(edgeNdcX - centerNdcX) * 0.5 * viewport.x;\n if (sizeMode == 2u) {\n halfPx = clamp(projectedPx, 0.5, max(0.5, pointSizePx * 0.5));\n } else {\n halfPx = max(0.5, projectedPx);\n }\n }\n\n // Convert pixel offset to clip-space offset. Multiply by clipPos.w\n // because the GPU divides by w during the perspective divide.\n let halfClip = vec2<f32>(halfPx) / max(viewport, vec2<f32>(1.0)) * 2.0 * abs(clipPos.w);\n clipPos.x = clipPos.x + corner.x * halfClip.x;\n clipPos.y = clipPos.y + corner.y * halfClip.y;\n\n // Color selection\n let mode = u32(uniforms.colorModeAndExtras.x);\n let intensity01 = f32(input.intensityPacked & 0xffffu) / 65535.0;\n let classId = u32(round(input.rgbAndClass.a * 255.0));\n\n // Per-class visibility \u2014 classMask is a 256-bit mask covering\n // every LAS classification code, including user-defined 64..255\n // (#1783). Hidden classes get pushed behind the near plane via a\n // degenerate clipPos so they're culled before rasterisation;\n // cheaper than fragment-stage discard.\n let maskWordIdx = classId >> 5u; // classId is 0..255 \u2192 word 0..7\n let maskWord = uniforms.classMask[maskWordIdx >> 2u][maskWordIdx & 3u];\n if (((maskWord >> (classId & 31u)) & 1u) == 0u) {\n var output: VertexOutput;\n output.position = vec4<f32>(0.0, 0.0, -2.0, 1.0); // outside [0,1] reverse-Z \u2192 culled\n output.color = vec4<f32>(0.0);\n output.worldPos = vec3<f32>(0.0);\n output.entityId = 0u;\n output.quadUv = vec2<f32>(0.0);\n return output;\n }\n let heightT =\n (worldPos.y - uniforms.colorModeAndExtras.z) /\n max(1e-6, uniforms.colorModeAndExtras.w - uniforms.colorModeAndExtras.z);\n\n var rgb: vec3<f32>;\n switch (mode) {\n case 0u: { rgb = input.rgbAndClass.rgb; }\n case 1u: { rgb = classification_color(classId); }\n case 2u: { rgb = vec3<f32>(intensity01, intensity01, intensity01); }\n case 3u: { rgb = height_ramp(heightT); }\n case 4u: { rgb = uniforms.colorOverride.rgb; }\n case 5u: {\n // Deviation: shift by centerOffset so a non-zero baseline\n // can be re-zeroed (handy when a scan has a global offset\n // from the model). halfRange = 0 falls through to white.\n let center = uniforms.deviationRange.x;\n let half = max(uniforms.deviationRange.y, 1e-6);\n let dt = (input.deviation - center) / half;\n rgb = deviation_ramp(dt);\n }\n default: { rgb = input.rgbAndClass.rgb; }\n }\n\n var output: VertexOutput;\n output.position = clipPos;\n output.color = vec4<f32>(rgb, 1.0);\n output.worldPos = worldPos;\n output.entityId = input.entityId;\n output.quadUv = corner;\n return output;\n }\n\n struct FragmentOutput {\n @location(0) color: vec4<f32>,\n @location(1) objectId: vec4<f32>,\n }\n\n @fragment\n fn fs_main(input: VertexOutput) -> FragmentOutput {\n // Round shape \u2014 discard corners outside the unit disc.\n if (uniforms.flags.z == 1u) {\n if (dot(input.quadUv, input.quadUv) > 1.0) {\n discard;\n }\n }\n\n // Section-plane clipping\n if (uniforms.flags.y == 1u) {\n let d = dot(uniforms.sectionPlane.xyz, input.worldPos) - uniforms.sectionPlane.w;\n if (d > 0.0) {\n discard;\n }\n }\n\n if (uniforms.flags.w == 1u) {\n if (any(input.worldPos < uniforms.cropBoxMin.xyz) || any(input.worldPos > uniforms.cropBoxMax.xyz)) {\n discard;\n }\n }\n\n var output: FragmentOutput;\n output.color = input.color;\n // Prefer the asset-level expressId from the uniform when it's set\n // (federation needs to relabel post-stream, so we can't rely on\n // the per-vertex attribute that was baked at upload time).\n // flags.x == 0 \u2192 fall back to per-vertex value to preserve the\n // legacy contract during the upload-only rendering window.\n let id = select(input.entityId, uniforms.flags.x, uniforms.flags.x != 0u);\n output.objectId = vec4<f32>(\n f32((id >> 0u) & 0xffu) / 255.0,\n f32((id >> 8u) & 0xffu) / 255.0,\n f32((id >> 16u) & 0xffu) / 255.0,\n f32((id >> 24u) & 0xffu) / 255.0,\n );\n return output;\n }\n";
|
|
22
2
|
//# sourceMappingURL=point-shader.wgsl.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"point-shader.wgsl.d.ts","sourceRoot":"","sources":["../../src/pointcloud/point-shader.wgsl.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"point-shader.wgsl.d.ts","sourceRoot":"","sources":["../../src/pointcloud/point-shader.wgsl.ts"],"names":[],"mappings":"AA0BA,eAAO,MAAM,iBAAiB,mgaA6R7B,CAAC"}
|