@ifc-lite/renderer 3.2.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/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/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 +29 -21
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +201 -252
- package/dist/index.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/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 +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/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 +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 +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 +12 -3
- package/dist/renderer-overlays.d.ts.map +1 -1
- package/dist/renderer-overlays.js +33 -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 +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 +17 -19
- 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 +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,10 +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';
|
|
45
46
|
import type { DeviceRecoveryOmission } from './device-recovery.js';
|
|
47
|
+
import { type LineVertices } from './section-2d-line-buffer.js';
|
|
46
48
|
/**
|
|
47
|
-
* The slice of `Renderer` the overlays need. Deliberately
|
|
49
|
+
* The slice of `Renderer` the overlays need. Deliberately narrow:
|
|
48
50
|
* the overlays own their GPU objects outright, and borrow only the model-bounds
|
|
49
51
|
* bookkeeping that the rest of the renderer also owns.
|
|
50
52
|
*/
|
|
@@ -53,6 +55,8 @@ export interface OverlayHost {
|
|
|
53
55
|
getModelBounds(): ModelBounds | null;
|
|
54
56
|
/** Grow (or seed) the model AABB from a flat `[x,y,z,...]` buffer. */
|
|
55
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;
|
|
56
60
|
/** Push the current model AABB to the camera's near/far fit. */
|
|
57
61
|
syncCameraSceneBounds(): void;
|
|
58
62
|
/** Mark the viewport dirty for the next animation frame. */
|
|
@@ -65,8 +69,13 @@ export interface OverlayDrawContext {
|
|
|
65
69
|
/** The bounds this frame resolved the section slider against. */
|
|
66
70
|
modelBounds: ModelBounds | null;
|
|
67
71
|
camera: Camera;
|
|
72
|
+
/** Viewport in CSS px (buffer / `pixelRatio`, see `SectionDrawContext`), as glyph sizes are. */
|
|
68
73
|
canvasWidth: number;
|
|
69
74
|
canvasHeight: number;
|
|
75
|
+
pixelRatio?: number;
|
|
76
|
+
relativeToEyeFrame?: RelativeToEyeFrame;
|
|
77
|
+
rteViewProj?: Float32Array;
|
|
78
|
+
rteCamera?: readonly [number, number, number];
|
|
70
79
|
}
|
|
71
80
|
export declare class RendererOverlays {
|
|
72
81
|
private readonly host;
|
|
@@ -106,7 +115,7 @@ export declare class RendererOverlays {
|
|
|
106
115
|
/** See `Renderer.setOverlayLineColor` for the published contract. */
|
|
107
116
|
setOverlayLineColor(color: readonly [number, number, number, number]): void;
|
|
108
117
|
/** See `Renderer.setLineOverlay` for the published contract. */
|
|
109
|
-
setLineOverlay(channel: LineOverlayChannel, vertices:
|
|
118
|
+
setLineOverlay(channel: LineOverlayChannel, vertices: LineVertices | null): void;
|
|
110
119
|
/** See `Renderer.setClashOverlapBox` for the published contract. */
|
|
111
120
|
setClashOverlapBox(box: {
|
|
112
121
|
min: [number, number, number];
|
|
@@ -118,7 +127,7 @@ export declare class RendererOverlays {
|
|
|
118
127
|
* clash-box line buffer, so only one of this / setClashOverlapBox shows.
|
|
119
128
|
*/
|
|
120
129
|
setClashContactLines(lines: {
|
|
121
|
-
vertices:
|
|
130
|
+
vertices: LineVertices;
|
|
122
131
|
color: [number, number, number, number];
|
|
123
132
|
} | null): void;
|
|
124
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;AAChD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;
|
|
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,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAwB,KAAK,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEtF;;;;GAIG;AACH,MAAM,WAAW,WAAW;IACxB,qEAAqE;IACrE,cAAc,IAAI,WAAW,GAAG,IAAI,CAAC;IACrC,sEAAsE;IACtE,iCAAiC,CAAC,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACjF,uEAAuE;IACvE,yCAAyC,CACrC,SAAS,EAAE,YAAY,EACvB,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EACzC,MAAM,EAAE,MAAM,GACf,IAAI,CAAC;IACR,gEAAgE;IAChE,qBAAqB,IAAI,IAAI,CAAC;IAC9B,4DAA4D;IAC5D,aAAa,IAAI,IAAI,CAAC;CACzB;AAED,uEAAuE;AACvE,MAAM,WAAW,kBAAkB;IAC/B,OAAO,EAAE,aAAa,CAAC;IACvB,QAAQ,EAAE,YAAY,CAAC;IACvB,iEAAiE;IACjE,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,gGAAgG;IAChG,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,WAAW,CAAC,EAAE,YAAY,CAAC;IAC3B,SAAS,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACjD;AAiCD,qBAAa,gBAAgB;IASb,OAAO,CAAC,QAAQ,CAAC,IAAI;IARjC,OAAO,CAAC,oBAAoB,CAAqC;IACjE,OAAO,CAAC,wBAAwB,CAAyC;IAGzE,OAAO,CAAC,gBAAgB,CAA2D;IACnF,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,kBAAkB,CAAmC;gBAEhC,IAAI,EAAE,WAAW;IAI9C,4EAA4E;IAC5E,iBAAiB,IAAI,sBAAsB,EAAE;IAW7C;;;OAGG;IACH,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAS5E,iFAAiF;IACjF,OAAO,IAAI,IAAI;IAUf;;;OAGG;IACH,IAAI,CAAC,IAAI,EAAE,oBAAoB,EAAE,GAAG,EAAE,kBAAkB,GAAG,IAAI;IAoD/D,wEAAwE;IACxE,sBAAsB,CAClB,QAAQ,EAAE,YAAY,EAAE,EACxB,KAAK,EAAE,aAAa,EAAE,EACtB,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,EAC/B,QAAQ,EAAE,MAAM,EAAG,mBAAmB;IACtC,YAAY,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,EAAG,2CAA2C;IAC3F,OAAO,GAAE,OAAe,EACxB,WAAW,CAAC,EAAE;QACV,MAAM,EAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACpC,OAAO,EAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACpC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;KACvC,GACF,IAAI;IAmDP,uEAAuE;IACvE,qBAAqB,IAAI,IAAI;IAO7B,qEAAqE;IACrE,mBAAmB,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAQ3E,gEAAgE;IAChE,cAAc,CAAC,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI;IA0BhF,oEAAoE;IACpE,kBAAkB,CACd,GAAG,EAAE;QAAE,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,GAAG,IAAI,GACtH,IAAI;IAYP;;;OAGG;IACH,oBAAoB,CAChB,KAAK,EAAE;QAAE,QAAQ,EAAE,YAAY,CAAC;QAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,GAAG,IAAI,GAClF,IAAI;IAYP,2EAA2E;IAC3E,yBAAyB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI;IAM9D,yEAAyE;IACzE,uBAAuB,CAAC,KAAK,EAAE,SAAS,iBAAiB,EAAE,GAAG,IAAI;IAIlE,yEAAyE;IACzE,uBAAuB,CAAC,KAAK,EAAE,SAAS,iBAAiB,EAAE,GAAG,IAAI;IAIlE,qEAAqE;IACrE,mBAAmB,IAAI,OAAO;CAGjC"}
|
|
@@ -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;
|
|
@@ -105,19 +108,19 @@ export class RendererOverlays {
|
|
|
105
108
|
//
|
|
106
109
|
// Order: fills (background) → lines (outlines on top) →
|
|
107
110
|
// texts (labels above everything).
|
|
108
|
-
this.symbolic.drawFills(pass, viewProj);
|
|
111
|
+
this.symbolic.drawFills(pass, viewProj, ctx.rteViewProj, ctx.rteCamera);
|
|
109
112
|
// `LINE_OVERLAY_CHANNELS` is in draw order: annotation, alignment,
|
|
110
|
-
// grid, DXF. All
|
|
113
|
+
// grid, DXF, LandXML. All share the overlay colour and the line pipeline,
|
|
111
114
|
// so the order only decides who wins a depth tie.
|
|
112
115
|
const overlay = this.section2DOverlayRenderer;
|
|
113
116
|
if (overlay) {
|
|
114
117
|
for (const channel of LINE_OVERLAY_CHANNELS) {
|
|
115
118
|
if (overlay.hasLineOverlay(channel)) {
|
|
116
|
-
overlay.drawLineOverlay(pass, viewProj, channel);
|
|
119
|
+
overlay.drawLineOverlay(pass, viewProj, channel, ctx.rteViewProj, ctx.rteCamera);
|
|
117
120
|
}
|
|
118
121
|
}
|
|
119
122
|
if (overlay.hasClashBoxLines3D()) {
|
|
120
|
-
overlay.drawClashBoxLines3D(pass, viewProj);
|
|
123
|
+
overlay.drawClashBoxLines3D(pass, viewProj, ctx.rteViewProj, ctx.rteCamera);
|
|
121
124
|
}
|
|
122
125
|
}
|
|
123
126
|
// Drawn after the box/contact lines and — crucially — after every
|
|
@@ -125,9 +128,9 @@ export class RendererOverlays {
|
|
|
125
128
|
// overlap volume shows opaque through both ghosted parents rather
|
|
126
129
|
// than being buried inside them.
|
|
127
130
|
if (this.clashSolidPipeline?.hasGeometry()) {
|
|
128
|
-
this.clashSolidPipeline.render(pass, viewProj);
|
|
131
|
+
this.clashSolidPipeline.render(pass, viewProj, ctx.rteViewProj, ctx.rteCamera);
|
|
129
132
|
}
|
|
130
|
-
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);
|
|
131
134
|
}
|
|
132
135
|
/** See `Renderer.uploadSection2DOverlay` for the published contract. */
|
|
133
136
|
uploadSection2DOverlay(polygons, lines, axis, position, // 0-100 percentage
|
|
@@ -195,12 +198,22 @@ export class RendererOverlays {
|
|
|
195
198
|
if (!this.section2DOverlayRenderer)
|
|
196
199
|
return;
|
|
197
200
|
this.section2DOverlayRenderer.setLineOverlay(channel, vertices);
|
|
198
|
-
if (
|
|
201
|
+
if (CHANNEL_EXPANDS_MODEL_BOUNDS[channel] && vertices) {
|
|
199
202
|
// Mirrors the point-cloud upload path (`addPointClouds`,
|
|
200
203
|
// `setPointClouds`): without `syncCameraSceneBounds` the frustum
|
|
201
204
|
// excludes the cluster and it is clipped away even when the camera
|
|
202
205
|
// points straight at it. See CHANNEL_EXPANDS_MODEL_BOUNDS.
|
|
203
|
-
|
|
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
|
+
}
|
|
204
217
|
this.host.syncCameraSceneBounds();
|
|
205
218
|
}
|
|
206
219
|
// Rendering is dirty-flag gated (#2442): a channel that changed has to
|
|
@@ -219,7 +232,7 @@ export class RendererOverlays {
|
|
|
219
232
|
return;
|
|
220
233
|
}
|
|
221
234
|
this.section2DOverlayRenderer.setClashBoxLineColor(box.color);
|
|
222
|
-
this.section2DOverlayRenderer.uploadClashBoxLines3D(
|
|
235
|
+
this.section2DOverlayRenderer.uploadClashBoxLines3D(anchoredAabbEdgeLineList(box.min, box.max));
|
|
223
236
|
this.host.requestRender();
|
|
224
237
|
}
|
|
225
238
|
/**
|
|
@@ -229,7 +242,7 @@ export class RendererOverlays {
|
|
|
229
242
|
setClashContactLines(lines) {
|
|
230
243
|
if (!this.section2DOverlayRenderer)
|
|
231
244
|
return;
|
|
232
|
-
if (!lines || lines.vertices
|
|
245
|
+
if (!lines || lineVertexFloatCount(lines.vertices) === 0) {
|
|
233
246
|
this.section2DOverlayRenderer.clearClashBoxLines3D();
|
|
234
247
|
this.host.requestRender();
|
|
235
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":"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"}
|
|
@@ -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
|
}
|
|
@@ -42,9 +44,9 @@ export declare class SymbolicOverlays {
|
|
|
42
44
|
*/
|
|
43
45
|
destroy(): void;
|
|
44
46
|
/** Background layer: painted before the 3D line overlays. */
|
|
45
|
-
drawFills(pass: GPURenderPassEncoder, viewProj: Float32Array): void;
|
|
47
|
+
drawFills(pass: GPURenderPassEncoder, viewProj: Float32Array, rteViewProj?: Float32Array, rteCamera?: readonly [number, number, number]): void;
|
|
46
48
|
/** Label layer: painted after everything else. */
|
|
47
|
-
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;
|
|
48
50
|
/**
|
|
49
51
|
* See `Renderer.uploadAnnotationFills3D` for the published contract.
|
|
50
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,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,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"}
|
|
@@ -35,13 +35,13 @@ export class SymbolicOverlays {
|
|
|
35
35
|
this.textPipeline = null;
|
|
36
36
|
}
|
|
37
37
|
/** Background layer: painted before the 3D line overlays. */
|
|
38
|
-
drawFills(pass, viewProj) {
|
|
38
|
+
drawFills(pass, viewProj, rteViewProj, rteCamera) {
|
|
39
39
|
if (this.fillPipeline?.hasGeometry()) {
|
|
40
|
-
this.fillPipeline.render(pass, viewProj);
|
|
40
|
+
this.fillPipeline.render(pass, viewProj, rteViewProj, rteCamera);
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
/** Label layer: painted after everything else. */
|
|
44
|
-
drawTexts(pass, viewProj, canvasWidth, canvasHeight, camera) {
|
|
44
|
+
drawTexts(pass, viewProj, canvasWidth, canvasHeight, camera, rteViewProj, rteCamera) {
|
|
45
45
|
if (!this.textPipeline?.hasGeometry())
|
|
46
46
|
return;
|
|
47
47
|
// Pass viewport pixel dimensions so the shader can scale glyphs
|
|
@@ -69,7 +69,7 @@ export class SymbolicOverlays {
|
|
|
69
69
|
// Only `right`/`up` are read here: a screen-aligned quad needs the
|
|
70
70
|
// screen plane, not the view direction.
|
|
71
71
|
const basis = viewBasis(camera.getPosition(), camera.getTarget(), camera.getUp());
|
|
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]);
|
|
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);
|
|
73
73
|
}
|
|
74
74
|
/**
|
|
75
75
|
* See `Renderer.uploadAnnotationFills3D` for the published contract.
|
|
@@ -113,7 +113,15 @@ export class SymbolicOverlays {
|
|
|
113
113
|
lifted[j + 1] = fill.worldY;
|
|
114
114
|
lifted[j + 2] = pts[i + 1];
|
|
115
115
|
}
|
|
116
|
-
|
|
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
|
+
}
|
|
117
125
|
expanded = true;
|
|
118
126
|
}
|
|
119
127
|
// Only re-fit the camera when something actually moved the bounds. The
|
|
@@ -139,22 +147,34 @@ export class SymbolicOverlays {
|
|
|
139
147
|
this.host.requestRender();
|
|
140
148
|
return;
|
|
141
149
|
}
|
|
142
|
-
// Text
|
|
150
|
+
// Text anchors are single points. Written straight into a worst-case
|
|
143
151
|
// buffer and passed on as a subarray: filtering first would allocate a
|
|
144
152
|
// second array holding every framing text just to read its length, and
|
|
145
153
|
// annotation-heavy models push thousands.
|
|
146
154
|
const buf = new Float32Array(texts.length * 3);
|
|
147
|
-
let
|
|
155
|
+
let legacyCount = 0;
|
|
156
|
+
let expanded = false;
|
|
148
157
|
for (const t of texts) {
|
|
149
158
|
if (t.definesExtent === false)
|
|
150
159
|
continue;
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
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;
|
|
155
176
|
}
|
|
156
|
-
if (
|
|
157
|
-
this.host.expandModelBoundsWithFlatVertices(buf.subarray(0, n * 3), 3);
|
|
177
|
+
if (expanded) {
|
|
158
178
|
this.host.syncCameraSceneBounds();
|
|
159
179
|
}
|
|
160
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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Frustum operations in the renderer's relative-to-eye coordinate frame.
|
|
3
|
+
*
|
|
4
|
+
* WebGPU consumes eye-relative vertices, so extracting planes from an
|
|
5
|
+
* absolute f32 view-projection and testing national-grid bounds against them
|
|
6
|
+
* is both a different coordinate system and a precision loss. These helpers
|
|
7
|
+
* keep the matrix and AABB in the same frame. The source-space conversion is
|
|
8
|
+
* only for the BVH API, which stores its immutable boxes in source f64 space.
|
|
9
|
+
*/
|
|
10
|
+
import { type Frustum } from '@ifc-lite/spatial';
|
|
11
|
+
import type { RelativeToEyeFrame } from './relative-to-eye.js';
|
|
12
|
+
export type RteBounds = {
|
|
13
|
+
min: readonly [number, number, number];
|
|
14
|
+
max: readonly [number, number, number];
|
|
15
|
+
};
|
|
16
|
+
export declare function rteFrustum(frame: RelativeToEyeFrame): Frustum;
|
|
17
|
+
/** Test source/world f64 bounds against an eye-relative frustum. */
|
|
18
|
+
export declare function isRteAabbVisible(frustum: Frustum, bounds: RteBounds, cameraWorld: readonly [number, number, number]): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Convert the eye-relative planes back to source f64 space for `SpatialIndex`.
|
|
21
|
+
* This changes plane distance only: `n·(p - camera) + d = n·p + d'`.
|
|
22
|
+
*/
|
|
23
|
+
export declare function sourceFrustumFromRte(frustum: Frustum, cameraWorld: readonly [number, number, number]): Frustum;
|
|
24
|
+
//# sourceMappingURL=rte-frustum.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rte-frustum.d.ts","sourceRoot":"","sources":["../src/rte-frustum.ts"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AAEH,OAAO,EAAgB,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,MAAM,MAAM,SAAS,GAAG;IAAE,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,GAAG,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAAC;AAE3G,wBAAgB,UAAU,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAE7D;AAED,oEAAoE;AACpE,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAC7C,OAAO,CAaT;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAQ9G"}
|