@ifc-lite/renderer 4.2.0 → 6.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/camera-projection.d.ts +2 -0
- package/dist/camera-projection.d.ts.map +1 -1
- package/dist/camera-projection.js +46 -0
- package/dist/camera-projection.js.map +1 -1
- package/dist/chunk-grid.d.ts +21 -0
- package/dist/chunk-grid.d.ts.map +1 -1
- package/dist/chunk-grid.js +25 -7
- package/dist/chunk-grid.js.map +1 -1
- package/dist/clash-solid-pipeline.d.ts.map +1 -1
- package/dist/clash-solid-pipeline.js +4 -2
- package/dist/clash-solid-pipeline.js.map +1 -1
- package/dist/deviation/deviation-computer.d.ts +4 -0
- package/dist/deviation/deviation-computer.d.ts.map +1 -1
- package/dist/deviation/deviation-computer.js +20 -0
- package/dist/deviation/deviation-computer.js.map +1 -1
- package/dist/deviation/deviation-readback.d.ts +18 -0
- package/dist/deviation/deviation-readback.d.ts.map +1 -0
- package/dist/deviation/deviation-readback.js +67 -0
- package/dist/deviation/deviation-readback.js.map +1 -0
- 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 +54 -0
- package/dist/edge-pass.d.ts.map +1 -0
- package/dist/edge-pass.js +185 -0
- package/dist/edge-pass.js.map +1 -0
- package/dist/entity-color-table.d.ts +140 -0
- package/dist/entity-color-table.d.ts.map +1 -0
- package/dist/entity-color-table.js +238 -0
- package/dist/entity-color-table.js.map +1 -0
- package/dist/gpu-upload-guard.d.ts +1 -1
- package/dist/gpu-upload-guard.js +1 -1
- package/dist/hover-mesh-cache.d.ts +29 -0
- package/dist/hover-mesh-cache.d.ts.map +1 -0
- package/dist/hover-mesh-cache.js +31 -0
- package/dist/hover-mesh-cache.js.map +1 -0
- package/dist/index.d.ts +43 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +196 -189
- package/dist/index.js.map +1 -1
- package/dist/individual-mesh-upload.d.ts +24 -0
- package/dist/individual-mesh-upload.d.ts.map +1 -0
- package/dist/individual-mesh-upload.js +85 -0
- package/dist/individual-mesh-upload.js.map +1 -0
- package/dist/instanced-render.d.ts +22 -12
- package/dist/instanced-render.d.ts.map +1 -1
- package/dist/instanced-render.js +39 -27
- package/dist/instanced-render.js.map +1 -1
- package/dist/instanced-rte.d.ts +68 -7
- package/dist/instanced-rte.d.ts.map +1 -1
- package/dist/instanced-rte.js +98 -17
- package/dist/instanced-rte.js.map +1 -1
- package/dist/instanced-vertex-layout.d.ts +26 -0
- package/dist/instanced-vertex-layout.d.ts.map +1 -0
- package/dist/instanced-vertex-layout.js +61 -0
- package/dist/instanced-vertex-layout.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 +5 -2
- package/dist/mesh-rte-uniforms.d.ts.map +1 -1
- package/dist/mesh-rte-uniforms.js +5 -2
- package/dist/mesh-rte-uniforms.js.map +1 -1
- package/dist/model-translation.d.ts.map +1 -1
- package/dist/model-translation.js +0 -7
- package/dist/model-translation.js.map +1 -1
- package/dist/outline-params.d.ts +45 -0
- package/dist/outline-params.d.ts.map +1 -0
- package/dist/outline-params.js +54 -0
- package/dist/outline-params.js.map +1 -0
- package/dist/overlay-routing.d.ts +8 -8
- package/dist/overlay-routing.js +2 -2
- package/dist/overlay-routing.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 +79 -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/partial-batch-requests.d.ts +2 -2
- package/dist/pick-mesh-budget.d.ts +28 -0
- package/dist/pick-mesh-budget.d.ts.map +1 -0
- package/dist/pick-mesh-budget.js +74 -0
- package/dist/pick-mesh-budget.js.map +1 -0
- package/dist/picker-rte-uniforms.d.ts +7 -1
- package/dist/picker-rte-uniforms.d.ts.map +1 -1
- package/dist/picker-rte-uniforms.js +9 -1
- package/dist/picker-rte-uniforms.js.map +1 -1
- package/dist/picker.d.ts.map +1 -1
- package/dist/picker.js +15 -28
- package/dist/picker.js.map +1 -1
- package/dist/picking-manager.d.ts.map +1 -1
- package/dist/picking-manager.js +4 -47
- package/dist/picking-manager.js.map +1 -1
- package/dist/pipeline.d.ts +9 -1
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +47 -70
- package/dist/pipeline.js.map +1 -1
- package/dist/point-picker.d.ts.map +1 -1
- package/dist/point-picker.js +7 -2
- package/dist/point-picker.js.map +1 -1
- package/dist/pointcloud/point-cloud-node.js +1 -1
- package/dist/pointcloud/point-cloud-node.js.map +1 -1
- package/dist/pointcloud/point-cloud-renderer.d.ts.map +1 -1
- package/dist/pointcloud/point-cloud-renderer.js +3 -1
- package/dist/pointcloud/point-cloud-renderer.js.map +1 -1
- package/dist/pointcloud/point-cloud-uniforms.d.ts +5 -1
- package/dist/pointcloud/point-cloud-uniforms.d.ts.map +1 -1
- package/dist/pointcloud/point-cloud-uniforms.js +7 -1
- package/dist/pointcloud/point-cloud-uniforms.js.map +1 -1
- package/dist/post-pass-chain.d.ts +15 -2
- package/dist/post-pass-chain.d.ts.map +1 -1
- package/dist/post-pass-chain.js +49 -14
- package/dist/post-pass-chain.js.map +1 -1
- package/dist/raycast-engine.d.ts +5 -1
- package/dist/raycast-engine.d.ts.map +1 -1
- package/dist/raycast-engine.js +20 -8
- package/dist/raycast-engine.js.map +1 -1
- package/dist/raycast-point-cloud-query.d.ts +2 -0
- package/dist/raycast-point-cloud-query.d.ts.map +1 -1
- package/dist/raycast-point-cloud-query.js +7 -0
- package/dist/raycast-point-cloud-query.js.map +1 -1
- package/dist/raycast-source-curve-query.d.ts +13 -0
- package/dist/raycast-source-curve-query.d.ts.map +1 -0
- package/dist/raycast-source-curve-query.js +17 -0
- package/dist/raycast-source-curve-query.js.map +1 -0
- package/dist/reference-image-pipeline.d.ts.map +1 -1
- package/dist/reference-image-pipeline.js +4 -2
- package/dist/reference-image-pipeline.js.map +1 -1
- package/dist/relative-to-eye-abi.d.ts +36 -0
- package/dist/relative-to-eye-abi.d.ts.map +1 -0
- package/dist/relative-to-eye-abi.js +72 -0
- package/dist/relative-to-eye-abi.js.map +1 -0
- package/dist/relative-to-eye.d.ts +15 -35
- package/dist/relative-to-eye.d.ts.map +1 -1
- package/dist/relative-to-eye.js +46 -74
- package/dist/relative-to-eye.js.map +1 -1
- package/dist/render-stats.d.ts +5 -1
- package/dist/render-stats.d.ts.map +1 -1
- package/dist/render-stats.js +1 -1
- package/dist/render-stats.js.map +1 -1
- package/dist/renderer-overlays.d.ts +8 -7
- package/dist/renderer-overlays.d.ts.map +1 -1
- package/dist/renderer-overlays.js +14 -16
- package/dist/renderer-overlays.js.map +1 -1
- package/dist/scene-batch-rebuild.d.ts +1 -2
- package/dist/scene-batch-rebuild.d.ts.map +1 -1
- package/dist/scene-batch-rebuild.js +4 -8
- package/dist/scene-batch-rebuild.js.map +1 -1
- package/dist/scene-batch-upload.d.ts.map +1 -1
- package/dist/scene-batch-upload.js +7 -3
- package/dist/scene-batch-upload.js.map +1 -1
- package/dist/scene-contents.d.ts +1 -1
- package/dist/scene-contents.d.ts.map +1 -1
- package/dist/scene-derived-batches.d.ts +19 -64
- package/dist/scene-derived-batches.d.ts.map +1 -1
- package/dist/scene-derived-batches.js +16 -51
- package/dist/scene-derived-batches.js.map +1 -1
- package/dist/scene-device-recovery.d.ts +3 -3
- package/dist/scene-device-recovery.d.ts.map +1 -1
- package/dist/scene-device-recovery.js +12 -9
- package/dist/scene-device-recovery.js.map +1 -1
- package/dist/scene-geometry.d.ts +6 -6
- package/dist/scene-geometry.d.ts.map +1 -1
- package/dist/scene-geometry.js +8 -9
- package/dist/scene-geometry.js.map +1 -1
- package/dist/scene-instance-bounds.d.ts +1 -1
- package/dist/scene-instance-bounds.d.ts.map +1 -1
- package/dist/scene-instance-bounds.js +4 -16
- package/dist/scene-instance-bounds.js.map +1 -1
- package/dist/scene-instance-materialization.d.ts.map +1 -1
- package/dist/scene-instance-materialization.js +4 -4
- package/dist/scene-instance-materialization.js.map +1 -1
- package/dist/scene-instance-translation.d.ts +6 -10
- package/dist/scene-instance-translation.d.ts.map +1 -1
- package/dist/scene-instance-translation.js +9 -31
- package/dist/scene-instance-translation.js.map +1 -1
- package/dist/scene-instance-types.d.ts +11 -2
- package/dist/scene-instance-types.d.ts.map +1 -1
- package/dist/scene-instance-types.js +7 -1
- package/dist/scene-instance-types.js.map +1 -1
- package/dist/scene-model-translation.d.ts +1 -2
- package/dist/scene-model-translation.d.ts.map +1 -1
- package/dist/scene-model-translation.js +4 -3
- package/dist/scene-model-translation.js.map +1 -1
- package/dist/scene.d.ts +44 -30
- package/dist/scene.d.ts.map +1 -1
- package/dist/scene.js +121 -129
- package/dist/scene.js.map +1 -1
- package/dist/section-2d-line-buffer.d.ts +2 -2
- package/dist/section-2d-line-buffer.d.ts.map +1 -1
- package/dist/section-2d-line-buffer.js +10 -11
- package/dist/section-2d-line-buffer.js.map +1 -1
- package/dist/section-2d-overlay.d.ts +6 -4
- package/dist/section-2d-overlay.d.ts.map +1 -1
- package/dist/section-2d-overlay.js +45 -21
- package/dist/section-2d-overlay.js.map +1 -1
- package/dist/section-2d-types.d.ts +1 -1
- package/dist/section-2d-types.d.ts.map +1 -1
- package/dist/section-2d-types.js +1 -1
- package/dist/section-2d-types.js.map +1 -1
- package/dist/section-plane.d.ts +3 -0
- package/dist/section-plane.d.ts.map +1 -1
- package/dist/section-plane.js +18 -25
- package/dist/section-plane.js.map +1 -1
- package/dist/selection-mask-pass.d.ts +85 -0
- package/dist/selection-mask-pass.d.ts.map +1 -0
- package/dist/selection-mask-pass.js +170 -0
- package/dist/selection-mask-pass.js.map +1 -0
- package/dist/selection-mask-pipelines.d.ts +57 -0
- package/dist/selection-mask-pipelines.d.ts.map +1 -0
- package/dist/selection-mask-pipelines.js +150 -0
- package/dist/selection-mask-pipelines.js.map +1 -0
- package/dist/selection-outline-frame.d.ts +47 -0
- package/dist/selection-outline-frame.d.ts.map +1 -0
- package/dist/selection-outline-frame.js +122 -0
- package/dist/selection-outline-frame.js.map +1 -0
- package/dist/shaders/color-transfer.wgsl.d.ts +5 -3
- package/dist/shaders/color-transfer.wgsl.d.ts.map +1 -1
- package/dist/shaders/color-transfer.wgsl.js +5 -3
- package/dist/shaders/color-transfer.wgsl.js.map +1 -1
- package/dist/shaders/depth-reconstruct.wgsl.d.ts +7 -2
- package/dist/shaders/depth-reconstruct.wgsl.d.ts.map +1 -1
- package/dist/shaders/depth-reconstruct.wgsl.js +8 -3
- package/dist/shaders/depth-reconstruct.wgsl.js.map +1 -1
- package/dist/shaders/edges.wgsl.d.ts +20 -0
- package/dist/shaders/edges.wgsl.d.ts.map +1 -0
- package/dist/shaders/edges.wgsl.js +257 -0
- package/dist/shaders/edges.wgsl.js.map +1 -0
- package/dist/shaders/entity-color-table.wgsl.d.ts +2 -0
- package/dist/shaders/entity-color-table.wgsl.d.ts.map +1 -0
- package/dist/shaders/entity-color-table.wgsl.js +85 -0
- package/dist/shaders/entity-color-table.wgsl.js.map +1 -0
- package/dist/shaders/main.wgsl.d.ts +1 -1
- package/dist/shaders/main.wgsl.d.ts.map +1 -1
- package/dist/shaders/main.wgsl.js +107 -171
- package/dist/shaders/main.wgsl.js.map +1 -1
- package/dist/shaders/mesh-uniforms.wgsl.d.ts +2 -0
- package/dist/shaders/mesh-uniforms.wgsl.d.ts.map +1 -0
- package/dist/shaders/mesh-uniforms.wgsl.js +53 -0
- package/dist/shaders/mesh-uniforms.wgsl.js.map +1 -0
- package/dist/shaders/section-2d-overlay.wgsl.d.ts +1 -0
- package/dist/shaders/section-2d-overlay.wgsl.d.ts.map +1 -1
- package/dist/shaders/section-2d-overlay.wgsl.js +3 -2
- package/dist/shaders/section-2d-overlay.wgsl.js.map +1 -1
- package/dist/shaders/selection-mask.wgsl.d.ts +16 -0
- package/dist/shaders/selection-mask.wgsl.d.ts.map +1 -0
- package/dist/shaders/selection-mask.wgsl.js +138 -0
- package/dist/shaders/selection-mask.wgsl.js.map +1 -0
- 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 +3 -3
- 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/shadow-occluders.d.ts.map +1 -1
- package/dist/shadow-occluders.js +1 -0
- package/dist/shadow-occluders.js.map +1 -1
- package/dist/shadow-pass.d.ts +0 -1
- package/dist/shadow-pass.d.ts.map +1 -1
- package/dist/shadow-pass.js +26 -32
- package/dist/shadow-pass.js.map +1 -1
- package/dist/shadow-types.d.ts +3 -0
- package/dist/shadow-types.d.ts.map +1 -1
- package/dist/shadow-types.js.map +1 -1
- package/dist/snap-detector.d.ts +5 -0
- package/dist/snap-detector.d.ts.map +1 -1
- package/dist/snap-detector.js.map +1 -1
- package/dist/source-curve-clipping.d.ts +7 -0
- package/dist/source-curve-clipping.d.ts.map +1 -0
- package/dist/source-curve-clipping.js +165 -0
- package/dist/source-curve-clipping.js.map +1 -0
- package/dist/source-curve-snap.d.ts +49 -0
- package/dist/source-curve-snap.d.ts.map +1 -0
- package/dist/source-curve-snap.js +197 -0
- package/dist/source-curve-snap.js.map +1 -0
- package/dist/symbolic-overlay-pipelines.d.ts +1 -1
- package/dist/symbolic-overlay-pipelines.d.ts.map +1 -1
- package/dist/symbolic-overlay-pipelines.js +13 -22
- package/dist/symbolic-overlay-pipelines.js.map +1 -1
- package/dist/symbolic-text-rte.d.ts +16 -0
- package/dist/symbolic-text-rte.d.ts.map +1 -0
- package/dist/symbolic-text-rte.js +37 -0
- package/dist/symbolic-text-rte.js.map +1 -0
- package/dist/textured-vertices.d.ts.map +1 -1
- package/dist/textured-vertices.js +2 -3
- package/dist/textured-vertices.js.map +1 -1
- package/dist/types.d.ts +10 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/visual-enhancement.d.ts +10 -7
- package/dist/visual-enhancement.d.ts.map +1 -1
- package/dist/visual-enhancement.js +9 -8
- package/dist/visual-enhancement.js.map +1 -1
- package/dist/xray-alpha.d.ts +7 -3
- package/dist/xray-alpha.d.ts.map +1 -1
- package/dist/xray-alpha.js +11 -7
- package/dist/xray-alpha.js.map +1 -1
- package/package.json +4 -4
- package/dist/post-processor.d.ts +0 -46
- package/dist/post-processor.d.ts.map +0 -1
- package/dist/post-processor.js +0 -295
- package/dist/post-processor.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reference-image-pipeline.d.ts","sourceRoot":"","sources":["../src/reference-image-pipeline.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAgCtE,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,IAAI,CACF,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,YAAY,EACtB,WAAW,CAAC,EAAE,YAAY,EAC1B,SAAS,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAC5C,IAAI,CAAC;IACR,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,0FAA0F;AAC1F,qBAAa,sBAAsB;IAGrB,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,OAAO,CAAa;gBACR,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM;IAiBpF,MAAM,CAAC,KAAK,EAAE,mBAAmB,GAAG,iBAAiB;
|
|
1
|
+
{"version":3,"file":"reference-image-pipeline.d.ts","sourceRoot":"","sources":["../src/reference-image-pipeline.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAgCtE,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,IAAI,CACF,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,YAAY,EACtB,WAAW,CAAC,EAAE,YAAY,EAC1B,SAAS,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAC5C,IAAI,CAAC;IACR,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,0FAA0F;AAC1F,qBAAa,sBAAsB;IAGrB,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,OAAO,CAAa;gBACR,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM;IAiBpF,MAAM,CAAC,KAAK,EAAE,mBAAmB,GAAG,iBAAiB;CAsDtD"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
4
|
import { PIPELINE_CONSTANTS } from './constants.js';
|
|
5
|
-
import {
|
|
5
|
+
import { tryPackRteDrawableDelta } from './relative-to-eye.js';
|
|
6
6
|
const REFERENCE_UNIFORM_FLOATS = 48;
|
|
7
7
|
const SHADER = `
|
|
8
8
|
struct Uniforms {
|
|
@@ -95,7 +95,9 @@ export class ReferenceImagePipeline {
|
|
|
95
95
|
data[32 + row] = viewProj[row] * origin[0] + viewProj[4 + row] * origin[1] + viewProj[8 + row] * origin[2] + viewProj[12 + row];
|
|
96
96
|
if (rteViewProj && rteCamera) {
|
|
97
97
|
data.set(rteViewProj, 16);
|
|
98
|
-
|
|
98
|
+
// Outside this camera's RTE envelope: not rasterisable this frame (#6128).
|
|
99
|
+
if (!tryPackRteDrawableDelta(origin, rteCamera, data, 36))
|
|
100
|
+
return;
|
|
99
101
|
data[39] = 1;
|
|
100
102
|
}
|
|
101
103
|
data[44] = input.opacity;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reference-image-pipeline.js","sourceRoot":"","sources":["../src/reference-image-pipeline.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"reference-image-pipeline.js","sourceRoot":"","sources":["../src/reference-image-pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
interface UniformFieldLayout {
|
|
2
|
+
name: string;
|
|
3
|
+
type: 'mat4x4<f32>' | 'vec4<f32>';
|
|
4
|
+
byteOffset: number;
|
|
5
|
+
byteSize: number;
|
|
6
|
+
}
|
|
7
|
+
/** Exact byte layout shared by the CPU writer and the WGSL RTE structs. */
|
|
8
|
+
export declare const RTE_UNIFORM_LAYOUT: {
|
|
9
|
+
readonly frame: readonly [{
|
|
10
|
+
readonly name: "viewProj";
|
|
11
|
+
readonly type: "mat4x4<f32>";
|
|
12
|
+
readonly byteOffset: 0;
|
|
13
|
+
readonly byteSize: 64;
|
|
14
|
+
}];
|
|
15
|
+
readonly drawable: readonly [{
|
|
16
|
+
readonly name: "drawableDeltaHigh";
|
|
17
|
+
readonly type: "vec4<f32>";
|
|
18
|
+
readonly byteOffset: 0;
|
|
19
|
+
readonly byteSize: 16;
|
|
20
|
+
}, {
|
|
21
|
+
readonly name: "drawableDeltaLow";
|
|
22
|
+
readonly type: "vec4<f32>";
|
|
23
|
+
readonly byteOffset: 16;
|
|
24
|
+
readonly byteSize: 16;
|
|
25
|
+
}];
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Reflect the deliberately small RTE WGSL ABI. The production source has no
|
|
29
|
+
* nested structs or arrays here, so accepting either would conceal inserted
|
|
30
|
+
* padding. Unsupported syntax is a contract failure, not a parser fallback.
|
|
31
|
+
*/
|
|
32
|
+
export declare function reflectRteUniformStruct(source: string, structName: 'RteFrameUniform' | 'RteDrawableUniform'): UniformFieldLayout[];
|
|
33
|
+
/** Fail loudly if source edits drift from the CPU writer's exact ABI. */
|
|
34
|
+
export declare function assertRteUniformAbi(source?: string): void;
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=relative-to-eye-abi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relative-to-eye-abi.d.ts","sourceRoot":"","sources":["../src/relative-to-eye-abi.ts"],"names":[],"mappings":"AAYA,UAAU,kBAAkB;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,aAAa,GAAG,WAAW,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,2EAA2E;AAC3E,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;CAQrB,CAAC;AAEX;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,iBAAiB,GAAG,oBAAoB,GACnD,kBAAkB,EAAE,CAqBtB;AAED,yEAAyE;AACzE,wBAAgB,mBAAmB,CAAC,MAAM,SAAoB,GAAG,IAAI,CAoBpE"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
/**
|
|
5
|
+
* The CPU/WGSL uniform ABI of the relative-to-eye contract: the exact byte
|
|
6
|
+
* layout `relative-to-eye.ts` packs, and the reflection that fails loudly if
|
|
7
|
+
* `shaders/relative-to-eye.wgsl.ts` drifts from it.
|
|
8
|
+
*/
|
|
9
|
+
import { relativeToEyeWgsl } from './shaders/relative-to-eye.wgsl.js';
|
|
10
|
+
/** Exact byte layout shared by the CPU writer and the WGSL RTE structs. */
|
|
11
|
+
export const RTE_UNIFORM_LAYOUT = {
|
|
12
|
+
frame: [
|
|
13
|
+
{ name: 'viewProj', type: 'mat4x4<f32>', byteOffset: 0, byteSize: 64 },
|
|
14
|
+
],
|
|
15
|
+
drawable: [
|
|
16
|
+
{ name: 'drawableDeltaHigh', type: 'vec4<f32>', byteOffset: 0, byteSize: 16 },
|
|
17
|
+
{ name: 'drawableDeltaLow', type: 'vec4<f32>', byteOffset: 16, byteSize: 16 },
|
|
18
|
+
],
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Reflect the deliberately small RTE WGSL ABI. The production source has no
|
|
22
|
+
* nested structs or arrays here, so accepting either would conceal inserted
|
|
23
|
+
* padding. Unsupported syntax is a contract failure, not a parser fallback.
|
|
24
|
+
*/
|
|
25
|
+
export function reflectRteUniformStruct(source, structName) {
|
|
26
|
+
const match = new RegExp(`struct\\s+${structName}\\s*\\{([\\s\\S]*?)\\}`).exec(source);
|
|
27
|
+
if (!match)
|
|
28
|
+
throw new Error(`RTE WGSL struct ${structName} is missing.`);
|
|
29
|
+
const fields = [];
|
|
30
|
+
let byteOffset = 0;
|
|
31
|
+
for (const rawLine of match[1].split('\n')) {
|
|
32
|
+
const line = rawLine.replace(/\/\/.*$/, '').trim();
|
|
33
|
+
if (!line)
|
|
34
|
+
continue;
|
|
35
|
+
const field = /^(\w+)\s*:\s*(mat4x4<f32>|vec4<f32>)\s*,?$/.exec(line);
|
|
36
|
+
if (!field)
|
|
37
|
+
throw new Error(`Unsupported RTE WGSL field: ${line}`);
|
|
38
|
+
const name = field[1];
|
|
39
|
+
const type = field[2];
|
|
40
|
+
if (!name || (type !== 'mat4x4<f32>' && type !== 'vec4<f32>')) {
|
|
41
|
+
throw new Error(`Invalid RTE WGSL field: ${line}`);
|
|
42
|
+
}
|
|
43
|
+
const byteSize = type === 'mat4x4<f32>' ? 64 : 16;
|
|
44
|
+
byteOffset = Math.ceil(byteOffset / 16) * 16;
|
|
45
|
+
fields.push({ name, type, byteOffset, byteSize });
|
|
46
|
+
byteOffset += byteSize;
|
|
47
|
+
}
|
|
48
|
+
return fields;
|
|
49
|
+
}
|
|
50
|
+
/** Fail loudly if source edits drift from the CPU writer's exact ABI. */
|
|
51
|
+
export function assertRteUniformAbi(source = relativeToEyeWgsl) {
|
|
52
|
+
for (const [structName, expected] of [
|
|
53
|
+
['RteFrameUniform', RTE_UNIFORM_LAYOUT.frame],
|
|
54
|
+
['RteDrawableUniform', RTE_UNIFORM_LAYOUT.drawable],
|
|
55
|
+
]) {
|
|
56
|
+
const actual = reflectRteUniformStruct(source, structName);
|
|
57
|
+
if (actual.length !== expected.length || actual.some((field, index) => {
|
|
58
|
+
const want = expected[index];
|
|
59
|
+
return field.name !== want.name || field.type !== want.type
|
|
60
|
+
|| field.byteOffset !== want.byteOffset || field.byteSize !== want.byteSize;
|
|
61
|
+
})) {
|
|
62
|
+
throw new Error(`RTE WGSL ${structName} does not match the CPU uniform ABI.`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Layout reflection alone cannot prove floating-point association. This is
|
|
66
|
+
// an executable shader-source invariant, separate from ABI reflection.
|
|
67
|
+
if (!source.includes('(local + highDelta) + lowDelta')
|
|
68
|
+
|| source.includes('local + (highDelta + lowDelta)')) {
|
|
69
|
+
throw new Error('RTE WGSL must evaluate (local + highDelta) + lowDelta.');
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=relative-to-eye-abi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relative-to-eye-abi.js","sourceRoot":"","sources":["../src/relative-to-eye-abi.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,49 +16,26 @@ export declare const MAX_RTE_EYE_RELATIVE_METRES = 1000000;
|
|
|
16
16
|
* turning centimetre geometry into coarse local floats.
|
|
17
17
|
*/
|
|
18
18
|
export declare const MAX_RTE_LOCAL_METRES = 8192;
|
|
19
|
-
interface UniformFieldLayout {
|
|
20
|
-
name: string;
|
|
21
|
-
type: 'mat4x4<f32>' | 'vec4<f32>';
|
|
22
|
-
byteOffset: number;
|
|
23
|
-
byteSize: number;
|
|
24
|
-
}
|
|
25
|
-
/** Exact byte layout shared by the CPU writer and the WGSL RTE structs. */
|
|
26
|
-
export declare const RTE_UNIFORM_LAYOUT: {
|
|
27
|
-
readonly frame: readonly [{
|
|
28
|
-
readonly name: "viewProj";
|
|
29
|
-
readonly type: "mat4x4<f32>";
|
|
30
|
-
readonly byteOffset: 0;
|
|
31
|
-
readonly byteSize: 64;
|
|
32
|
-
}];
|
|
33
|
-
readonly drawable: readonly [{
|
|
34
|
-
readonly name: "drawableDeltaHigh";
|
|
35
|
-
readonly type: "vec4<f32>";
|
|
36
|
-
readonly byteOffset: 0;
|
|
37
|
-
readonly byteSize: 16;
|
|
38
|
-
}, {
|
|
39
|
-
readonly name: "drawableDeltaLow";
|
|
40
|
-
readonly type: "vec4<f32>";
|
|
41
|
-
readonly byteOffset: 16;
|
|
42
|
-
readonly byteSize: 16;
|
|
43
|
-
}];
|
|
44
|
-
};
|
|
45
|
-
/**
|
|
46
|
-
* Reflect the deliberately small RTE WGSL ABI. The production source has no
|
|
47
|
-
* nested structs or arrays here, so accepting either would conceal inserted
|
|
48
|
-
* padding. Unsupported syntax is a contract failure, not a parser fallback.
|
|
49
|
-
*/
|
|
50
|
-
export declare function reflectRteUniformStruct(source: string, structName: 'RteFrameUniform' | 'RteDrawableUniform'): UniformFieldLayout[];
|
|
51
|
-
/** Fail loudly if source edits drift from the CPU writer's exact ABI. */
|
|
52
|
-
export declare function assertRteUniformAbi(source?: string): void;
|
|
53
19
|
/**
|
|
54
20
|
* Split one finite f64 coordinate into two f32 values. The residual is also
|
|
55
21
|
* rounded to f32 because it is consumed by WGSL, and the pair is returned as
|
|
56
22
|
* ordinary numbers so callers cannot accidentally retain a mutable buffer.
|
|
57
23
|
*/
|
|
58
24
|
export declare function splitFloat64ForRte(value: number): readonly [number, number];
|
|
25
|
+
/**
|
|
26
|
+
* Pack a drawable origin relative to a source f64 camera position, or return
|
|
27
|
+
* false without writing when the drawable lies outside this camera's eye
|
|
28
|
+
* envelope. Such a drawable cannot be rasterised in this frame, so passes that
|
|
29
|
+
* submit drawables without frustum culling (picking, instanced records) skip
|
|
30
|
+
* it. Source-envelope violations remain errors: they are invalid data, not a
|
|
31
|
+
* property of the current camera.
|
|
32
|
+
*/
|
|
33
|
+
export declare function tryPackRteDrawableDelta(origin: WorldPoint, cameraWorld: WorldPoint, out: Float32Array, floatOffset: number): boolean;
|
|
59
34
|
/**
|
|
60
35
|
* Pack a drawable origin relative to a source f64 camera position. Shadow
|
|
61
36
|
* submissions use this same boundary check/packing as colour and pick paths.
|
|
37
|
+
* Throws when the drawable is outside the camera-relative envelope; callers
|
|
38
|
+
* that may legitimately see such drawables use `tryPackRteDrawableDelta`.
|
|
62
39
|
*/
|
|
63
40
|
export declare function packRteDrawableDelta(origin: WorldPoint, cameraWorld: WorldPoint, out: Float32Array, floatOffset: number): void;
|
|
64
41
|
/**
|
|
@@ -117,6 +94,8 @@ export declare class RelativeToEyeFrame {
|
|
|
117
94
|
* This payload is camera-dependent and is invalid after any camera reframe.
|
|
118
95
|
*/
|
|
119
96
|
packDrawableOrigin(origin: WorldPoint, out: Float32Array, floatOffset?: number): void;
|
|
97
|
+
/** As `packDrawableOrigin`, but returns false for a drawable outside the eye envelope. */
|
|
98
|
+
tryPackDrawableOrigin(origin: WorldPoint, out: Float32Array, floatOffset?: number): boolean;
|
|
120
99
|
/**
|
|
121
100
|
* CPU side of the contract for ray casting, snapping and measurement.
|
|
122
101
|
* Keep this f64 subtraction separate from the f32 emulation helper below:
|
|
@@ -134,6 +113,8 @@ export declare class RelativeToEyeSnapshot {
|
|
|
134
113
|
getCameraWorld(): [number, number, number];
|
|
135
114
|
getViewProjection(): Mat4;
|
|
136
115
|
packDrawableOrigin(origin: WorldPoint, out: Float32Array, floatOffset?: number): void;
|
|
116
|
+
/** As `packDrawableOrigin`, but returns false for a drawable outside the eye envelope. */
|
|
117
|
+
tryPackDrawableOrigin(origin: WorldPoint, out: Float32Array, floatOffset?: number): boolean;
|
|
137
118
|
worldToRelative(world: WorldPoint): [number, number, number];
|
|
138
119
|
}
|
|
139
120
|
/**
|
|
@@ -142,5 +123,4 @@ export declare class RelativeToEyeSnapshot {
|
|
|
142
123
|
* high/low arrays contain plausible values.
|
|
143
124
|
*/
|
|
144
125
|
export declare function rteRelativePositionF32(local: WorldPoint, drawableDeltaPacked: Float32Array): [number, number, number];
|
|
145
|
-
export {};
|
|
146
126
|
//# sourceMappingURL=relative-to-eye.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relative-to-eye.d.ts","sourceRoot":"","sources":["../src/relative-to-eye.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"relative-to-eye.d.ts","sourceRoot":"","sources":["../src/relative-to-eye.ts"],"names":[],"mappings":"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"}
|
package/dist/relative-to-eye.js
CHANGED
|
@@ -18,14 +18,15 @@
|
|
|
18
18
|
* subtracted in f32.
|
|
19
19
|
*
|
|
20
20
|
* This module deliberately owns both the CPU packing layout and the matching
|
|
21
|
-
* WGSL declarations (in `shaders/relative-to-eye.wgsl.ts
|
|
21
|
+
* WGSL declarations (in `shaders/relative-to-eye.wgsl.ts`, with the ABI
|
|
22
|
+
* reflection that ties the two in `relative-to-eye-abi.ts`). Pass migrations
|
|
22
23
|
* must consume this frame; no render path may create a competing camera
|
|
23
24
|
* rebase. `worldToRelative` is also the CPU counterpart for ray, snap and
|
|
24
25
|
* measure code: it uses f64 subtraction and never round-trips through a GPU
|
|
25
26
|
* buffer.
|
|
26
27
|
*/
|
|
27
28
|
import { MathUtils } from './math.js';
|
|
28
|
-
import {
|
|
29
|
+
import { RTE_UNIFORM_LAYOUT } from './relative-to-eye-abi.js';
|
|
29
30
|
/** Two f32 vec4 lanes holding one f64-like origin. The w components are 0. */
|
|
30
31
|
export const RTE_ORIGIN_FLOATS = 8;
|
|
31
32
|
/** Translation-free `mat4x4 viewProj`; camera position stays CPU f64 only. */
|
|
@@ -41,68 +42,6 @@ export const MAX_RTE_EYE_RELATIVE_METRES = 1_000_000;
|
|
|
41
42
|
* turning centimetre geometry into coarse local floats.
|
|
42
43
|
*/
|
|
43
44
|
export const MAX_RTE_LOCAL_METRES = 8_192;
|
|
44
|
-
/** Exact byte layout shared by the CPU writer and the WGSL RTE structs. */
|
|
45
|
-
export const RTE_UNIFORM_LAYOUT = {
|
|
46
|
-
frame: [
|
|
47
|
-
{ name: 'viewProj', type: 'mat4x4<f32>', byteOffset: 0, byteSize: 64 },
|
|
48
|
-
],
|
|
49
|
-
drawable: [
|
|
50
|
-
{ name: 'drawableDeltaHigh', type: 'vec4<f32>', byteOffset: 0, byteSize: 16 },
|
|
51
|
-
{ name: 'drawableDeltaLow', type: 'vec4<f32>', byteOffset: 16, byteSize: 16 },
|
|
52
|
-
],
|
|
53
|
-
};
|
|
54
|
-
/**
|
|
55
|
-
* Reflect the deliberately small RTE WGSL ABI. The production source has no
|
|
56
|
-
* nested structs or arrays here, so accepting either would conceal inserted
|
|
57
|
-
* padding. Unsupported syntax is a contract failure, not a parser fallback.
|
|
58
|
-
*/
|
|
59
|
-
export function reflectRteUniformStruct(source, structName) {
|
|
60
|
-
const match = new RegExp(`struct\\s+${structName}\\s*\\{([\\s\\S]*?)\\}`).exec(source);
|
|
61
|
-
if (!match)
|
|
62
|
-
throw new Error(`RTE WGSL struct ${structName} is missing.`);
|
|
63
|
-
const fields = [];
|
|
64
|
-
let byteOffset = 0;
|
|
65
|
-
for (const rawLine of match[1].split('\n')) {
|
|
66
|
-
const line = rawLine.replace(/\/\/.*$/, '').trim();
|
|
67
|
-
if (!line)
|
|
68
|
-
continue;
|
|
69
|
-
const field = /^(\w+)\s*:\s*(mat4x4<f32>|vec4<f32>)\s*,?$/.exec(line);
|
|
70
|
-
if (!field)
|
|
71
|
-
throw new Error(`Unsupported RTE WGSL field: ${line}`);
|
|
72
|
-
const name = field[1];
|
|
73
|
-
const type = field[2];
|
|
74
|
-
if (!name || (type !== 'mat4x4<f32>' && type !== 'vec4<f32>')) {
|
|
75
|
-
throw new Error(`Invalid RTE WGSL field: ${line}`);
|
|
76
|
-
}
|
|
77
|
-
const byteSize = type === 'mat4x4<f32>' ? 64 : 16;
|
|
78
|
-
byteOffset = Math.ceil(byteOffset / 16) * 16;
|
|
79
|
-
fields.push({ name, type, byteOffset, byteSize });
|
|
80
|
-
byteOffset += byteSize;
|
|
81
|
-
}
|
|
82
|
-
return fields;
|
|
83
|
-
}
|
|
84
|
-
/** Fail loudly if source edits drift from the CPU writer's exact ABI. */
|
|
85
|
-
export function assertRteUniformAbi(source = relativeToEyeWgsl) {
|
|
86
|
-
for (const [structName, expected] of [
|
|
87
|
-
['RteFrameUniform', RTE_UNIFORM_LAYOUT.frame],
|
|
88
|
-
['RteDrawableUniform', RTE_UNIFORM_LAYOUT.drawable],
|
|
89
|
-
]) {
|
|
90
|
-
const actual = reflectRteUniformStruct(source, structName);
|
|
91
|
-
if (actual.length !== expected.length || actual.some((field, index) => {
|
|
92
|
-
const want = expected[index];
|
|
93
|
-
return field.name !== want.name || field.type !== want.type
|
|
94
|
-
|| field.byteOffset !== want.byteOffset || field.byteSize !== want.byteSize;
|
|
95
|
-
})) {
|
|
96
|
-
throw new Error(`RTE WGSL ${structName} does not match the CPU uniform ABI.`);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
// Layout reflection alone cannot prove floating-point association. This is
|
|
100
|
-
// an executable shader-source invariant, separate from ABI reflection.
|
|
101
|
-
if (!source.includes('(local + highDelta) + lowDelta')
|
|
102
|
-
|| source.includes('local + (highDelta + lowDelta)')) {
|
|
103
|
-
throw new Error('RTE WGSL must evaluate (local + highDelta) + lowDelta.');
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
45
|
/**
|
|
107
46
|
* Split one finite f64 coordinate into two f32 values. The residual is also
|
|
108
47
|
* rounded to f32 because it is consumed by WGSL, and the pair is returned as
|
|
@@ -126,23 +65,47 @@ function validateRteSourcePoint(point) {
|
|
|
126
65
|
for (let axis = 0; axis < 3; axis++)
|
|
127
66
|
splitFloat64ForRte(point[axis]);
|
|
128
67
|
}
|
|
68
|
+
/** First axis on which `origin - cameraWorld` leaves the eye envelope, or -1. */
|
|
69
|
+
function rteEyeEnvelopeViolation(origin, cameraWorld) {
|
|
70
|
+
for (let axis = 0; axis < 3; axis++) {
|
|
71
|
+
const delta = origin[axis] - cameraWorld[axis];
|
|
72
|
+
if (!Number.isFinite(delta) || Math.abs(delta) > MAX_RTE_EYE_RELATIVE_METRES)
|
|
73
|
+
return axis;
|
|
74
|
+
}
|
|
75
|
+
return -1;
|
|
76
|
+
}
|
|
129
77
|
/**
|
|
130
|
-
* Pack a drawable origin relative to a source f64 camera position
|
|
131
|
-
*
|
|
78
|
+
* Pack a drawable origin relative to a source f64 camera position, or return
|
|
79
|
+
* false without writing when the drawable lies outside this camera's eye
|
|
80
|
+
* envelope. Such a drawable cannot be rasterised in this frame, so passes that
|
|
81
|
+
* submit drawables without frustum culling (picking, instanced records) skip
|
|
82
|
+
* it. Source-envelope violations remain errors: they are invalid data, not a
|
|
83
|
+
* property of the current camera.
|
|
132
84
|
*/
|
|
133
|
-
export function
|
|
85
|
+
export function tryPackRteDrawableDelta(origin, cameraWorld, out, floatOffset) {
|
|
134
86
|
validateRteSourcePoint(origin);
|
|
135
87
|
// A finite delta alone is not enough: without validating the camera in the
|
|
136
88
|
// same source envelope, two equally invalid large coordinates could cancel.
|
|
137
89
|
validateRteSourcePoint(cameraWorld);
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
90
|
+
if (rteEyeEnvelopeViolation(origin, cameraWorld) >= 0)
|
|
91
|
+
return false;
|
|
92
|
+
packRteOrigin([
|
|
93
|
+
origin[0] - cameraWorld[0],
|
|
94
|
+
origin[1] - cameraWorld[1],
|
|
95
|
+
origin[2] - cameraWorld[2],
|
|
96
|
+
], out, floatOffset);
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Pack a drawable origin relative to a source f64 camera position. Shadow
|
|
101
|
+
* submissions use this same boundary check/packing as colour and pick paths.
|
|
102
|
+
* Throws when the drawable is outside the camera-relative envelope; callers
|
|
103
|
+
* that may legitimately see such drawables use `tryPackRteDrawableDelta`.
|
|
104
|
+
*/
|
|
105
|
+
export function packRteDrawableDelta(origin, cameraWorld, out, floatOffset) {
|
|
106
|
+
if (!tryPackRteDrawableDelta(origin, cameraWorld, out, floatOffset)) {
|
|
107
|
+
throw new RangeError(`RTE drawable origin exceeds the ±${MAX_RTE_EYE_RELATIVE_METRES} m camera-relative envelope on axis ${rteEyeEnvelopeViolation(origin, cameraWorld)}.`);
|
|
144
108
|
}
|
|
145
|
-
packRteOrigin(delta, out, floatOffset);
|
|
146
109
|
}
|
|
147
110
|
/**
|
|
148
111
|
* Pack an f64 world origin as two vec4<f32>s at `floatOffset`. The empty w
|
|
@@ -262,6 +225,11 @@ export class RelativeToEyeFrame {
|
|
|
262
225
|
// boundary could otherwise make an out-of-range drawable look harmless.
|
|
263
226
|
packRteDrawableDelta(origin, this.cameraWorld, out, floatOffset);
|
|
264
227
|
}
|
|
228
|
+
/** As `packDrawableOrigin`, but returns false for a drawable outside the eye envelope. */
|
|
229
|
+
tryPackDrawableOrigin(origin, out, floatOffset = 0) {
|
|
230
|
+
this.requireAvailable();
|
|
231
|
+
return tryPackRteDrawableDelta(origin, this.cameraWorld, out, floatOffset);
|
|
232
|
+
}
|
|
265
233
|
/**
|
|
266
234
|
* CPU side of the contract for ray casting, snapping and measurement.
|
|
267
235
|
* Keep this f64 subtraction separate from the f32 emulation helper below:
|
|
@@ -296,6 +264,10 @@ export class RelativeToEyeSnapshot {
|
|
|
296
264
|
packDrawableOrigin(origin, out, floatOffset = 0) {
|
|
297
265
|
packRteDrawableDelta(origin, this.cameraWorld, out, floatOffset);
|
|
298
266
|
}
|
|
267
|
+
/** As `packDrawableOrigin`, but returns false for a drawable outside the eye envelope. */
|
|
268
|
+
tryPackDrawableOrigin(origin, out, floatOffset = 0) {
|
|
269
|
+
return tryPackRteDrawableDelta(origin, this.cameraWorld, out, floatOffset);
|
|
270
|
+
}
|
|
299
271
|
worldToRelative(world) {
|
|
300
272
|
return [
|
|
301
273
|
world[0] - this.cameraWorld[0],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relative-to-eye.js","sourceRoot":"","sources":["../src/relative-to-eye.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D
|
|
1
|
+
{"version":3,"file":"relative-to-eye.js","sourceRoot":"","sources":["../src/relative-to-eye.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAM9D,+EAA+E;AAC/E,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AACnC,8EAA8E;AAC9E,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AACnC,qFAAqF;AACrF,MAAM,CAAC,MAAM,yBAAyB,GAAG,aAAa,CAAC;AACvD,yEAAyE;AACzE,MAAM,CAAC,MAAM,2BAA2B,GAAG,SAAS,CAAC;AACrD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC;AAE1C;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,UAAU,CAAC,wDAAwD,KAAK,GAAG,CAAC,CAAC;IACzF,CAAC;IACD,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,yBAAyB,EAAE,CAAC;QAChD,MAAM,IAAI,UAAU,CAAC,cAAc,KAAK,2BAA2B,yBAAyB,qBAAqB,CAAC,CAAC;IACrH,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,UAAU,CAAC,cAAc,KAAK,oCAAoC,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,oFAAoF;AACpF,SAAS,sBAAsB,CAAC,KAAiB;IAC/C,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE;QAAE,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AACvE,CAAC;AAED,iFAAiF;AACjF,SAAS,uBAAuB,CAAC,MAAkB,EAAE,WAAuB;IAC1E,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,2BAA2B;YAAE,OAAO,IAAI,CAAC;IAC5F,CAAC;IACD,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAAkB,EAClB,WAAuB,EACvB,GAAiB,EACjB,WAAmB;IAEnB,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/B,2EAA2E;IAC3E,4EAA4E;IAC5E,sBAAsB,CAAC,WAAW,CAAC,CAAC;IACpC,IAAI,uBAAuB,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACpE,aAAa,CAAC;QACZ,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;QAC1B,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;QAC1B,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;KAC3B,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;IACrB,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAkB,EAClB,WAAuB,EACvB,GAAiB,EACjB,WAAmB;IAEnB,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,CAAC,EAAE,CAAC;QACpE,MAAM,IAAI,UAAU,CAClB,oCAAoC,2BAA2B,uCAAuC,uBAAuB,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,CACtJ,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAkB,EAClB,GAAiB,EACjB,WAAW,GAAG,CAAC;IAEf,IAAI,GAAG,CAAC,MAAM,GAAG,WAAW,GAAG,iBAAiB,EAAE,CAAC;QACjD,MAAM,IAAI,UAAU,CAAC,oBAAoB,iBAAiB,qBAAqB,WAAW,GAAG,CAAC,CAAC;IACjG,CAAC;IACD,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC;QACpC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACrD,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;QAC/B,GAAG,CAAC,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACpC,CAAC;IACD,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IACzB,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,eAAe,CAC7B,MAAoB,EACpB,WAAW,GAAG,CAAC;IAEf,IAAI,MAAM,CAAC,MAAM,GAAG,WAAW,GAAG,iBAAiB,EAAE,CAAC;QACpD,MAAM,IAAI,UAAU,CAAC,oBAAoB,iBAAiB,qBAAqB,WAAW,GAAG,CAAC,CAAC;IACjG,CAAC;IACD,OAAO;QACL,MAAM,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;QAC7C,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;QACjD,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;KAClD,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,6BAA6B,CAAC,UAAgB,EAAE,IAAU;IACxE,MAAM,eAAe,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjD,eAAe,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACxB,eAAe,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACxB,eAAe,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACxB,OAAO,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC;AAChE,CAAC;AAED;;;;;GAKG;AACH,MAAM,OAAO,kBAAkB;IACrB,WAAW,GAA6B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAClD,QAAQ,GAAS,SAAS,CAAC,QAAQ,EAAE,CAAC;IACtC,WAAW,GAAG,CAAC,CAAC;IAChB,SAAS,GAAG,IAAI,CAAC;IAEzB,8EAA8E;IAC9E,UAAU,KAAW,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAElE,WAAW,KAAc,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAEzC,gBAAgB;QACtB,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,UAAU,CAAC,qDAAqD,CAAC,CAAC;IACnG,CAAC;IAED,gFAAgF;IAChF,MAAM,CAAC,MAAY,EAAE,UAAgB,EAAE,IAAU;QAC/C,MAAM,WAAW,GAA6B,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QAC7E,sBAAsB,CAAC,WAAW,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,6BAA6B,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACjE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;YAAE,MAAM,IAAI,UAAU,CAAC,4BAA4B,CAAC,CAAC;QAC3F,0EAA0E;QAC1E,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAED,iFAAiF;IACjF,cAAc;QACZ,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC;IAED,+EAA+E;IAC/E,iBAAiB;QACf,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC,EAAE,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAClD,CAAC;IAED,0EAA0E;IAC1E,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;;;OAIG;IACH,QAAQ;QACN,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,OAAO,IAAI,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtF,CAAC;IAED;;;;OAIG;IACH,YAAY,CAAC,GAAiB,EAAE,WAAW,GAAG,CAAC;QAC7C,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,GAAG,CAAC,MAAM,GAAG,WAAW,GAAG,gBAAgB,EAAE,CAAC;YAChD,MAAM,IAAI,UAAU,CAAC,mBAAmB,gBAAgB,qBAAqB,WAAW,GAAG,CAAC,CAAC;QAC/F,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IACrF,CAAC;IAED;;;;OAIG;IACH,kBAAkB,CAAC,MAAkB,EAAE,GAAiB,EAAE,WAAW,GAAG,CAAC;QACvE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,0EAA0E;QAC1E,wEAAwE;QACxE,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;IACnE,CAAC;IAED,0FAA0F;IAC1F,qBAAqB,CAAC,MAAkB,EAAE,GAAiB,EAAE,WAAW,GAAG,CAAC;QAC1E,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,OAAO,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;IAC7E,CAAC;IAED;;;;;OAKG;IACH,eAAe,CAAC,KAAiB;QAC/B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,OAAO;YACL,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YAC9B,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YAC9B,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;SAC/B,CAAC;IACJ,CAAC;CACF;AAED,0EAA0E;AAC1E,MAAM,OAAO,qBAAqB;IAKrB;IAJM,WAAW,CAAoC;IAC/C,QAAQ,CAAO;IAEhC,YACW,WAAmB,EAC5B,WAAuB,EACvB,QAAc;QAFL,gBAAW,GAAX,WAAW,CAAQ;QAI5B,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC;QACpC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,EAAE,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IACtD,CAAC;IAED,cAAc;QACZ,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC;IAED,iBAAiB;QACf,OAAO,EAAE,CAAC,EAAE,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAClD,CAAC;IAED,kBAAkB,CAAC,MAAkB,EAAE,GAAiB,EAAE,WAAW,GAAG,CAAC;QACvE,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;IACnE,CAAC;IAED,0FAA0F;IAC1F,qBAAqB,CAAC,MAAkB,EAAE,GAAiB,EAAE,WAAW,GAAG,CAAC;QAC1E,OAAO,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;IAC7E,CAAC;IAED,eAAe,CAAC,KAAiB;QAC/B,OAAO;YACL,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YAC9B,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YAC9B,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;SAC/B,CAAC;IACJ,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CACpC,KAAiB,EACjB,mBAAiC;IAEjC,IAAI,mBAAmB,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;QACnD,MAAM,IAAI,UAAU,CAAC,kEAAkE,CAAC,CAAC;IAC3F,CAAC;IACD,MAAM,MAAM,GAA6B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACnD,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC;QACpC,MAAM,SAAS,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;QAC/C,uEAAuE;QACvE,+DAA+D;QAC/D,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,QAAQ,CAAC,CAAC;IAC3F,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/render-stats.d.ts
CHANGED
|
@@ -65,6 +65,10 @@ interface InstancedLike {
|
|
|
65
65
|
vertexBuffer: SizedBuffer;
|
|
66
66
|
indexBuffer: SizedBuffer;
|
|
67
67
|
instanceBuffer: SizedBuffer;
|
|
68
|
+
/** Per-template camera-relative delta stream (#6393). */
|
|
69
|
+
rteDeltas?: {
|
|
70
|
+
buffer: SizedBuffer;
|
|
71
|
+
};
|
|
68
72
|
}
|
|
69
73
|
/** Byte totals per GPU-resident collection. All values in bytes. */
|
|
70
74
|
export interface ResidentGpuBytes {
|
|
@@ -74,7 +78,7 @@ export interface ResidentGpuBytes {
|
|
|
74
78
|
meshes: number;
|
|
75
79
|
/** Textured meshes, including an estimated 4 B/texel for the texture. */
|
|
76
80
|
textured: number;
|
|
77
|
-
/** Instanced templates: template geometry + per-occurrence instance buffers. */
|
|
81
|
+
/** Instanced templates: template geometry + per-occurrence instance and RTE-delta buffers. */
|
|
78
82
|
instanced: number;
|
|
79
83
|
total: number;
|
|
80
84
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-stats.d.ts","sourceRoot":"","sources":["../src/render-stats.ts"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AAEH,qEAAqE;AACrE,MAAM,WAAW,UAAU;IACzB;;;;;OAKG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,YAAY,EAAE,MAAM,CAAC;IACrB,8DAA8D;IAC9D,oBAAoB,EAAE,MAAM,CAAC;IAC7B,wEAAwE;IACxE,yBAAyB,EAAE,MAAM,CAAC;IAClC;;;;OAIG;IACH,kBAAkB,EAAE,MAAM,CAAC;IAC3B,qEAAqE;IACrE,aAAa,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,cAAc,EAAE,MAAM,CAAC;IACvB,2EAA2E;IAC3E,sBAAsB,EAAE,MAAM,CAAC;IAC/B;;;;OAIG;IACH,2BAA2B,EAAE,MAAM,CAAC;IACpC,yEAAyE;IACzE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,gFAAgF;AAChF,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,SAAS;IACjB,YAAY,EAAE,WAAW,CAAC;IAC1B,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,CAAC,EAAE,WAAW,CAAC;IAC5B,iEAAiE;IACjE,eAAe,CAAC,EAAE,WAAW,CAAC;CAC/B;AAED,UAAU,YAAa,SAAQ,SAAS;IACtC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAA;KAAE,CAAC;CACxE;AAED,UAAU,aAAa;IACrB,YAAY,EAAE,WAAW,CAAC;IAC1B,WAAW,EAAE,WAAW,CAAC;IACzB,cAAc,EAAE,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"render-stats.d.ts","sourceRoot":"","sources":["../src/render-stats.ts"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AAEH,qEAAqE;AACrE,MAAM,WAAW,UAAU;IACzB;;;;;OAKG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,YAAY,EAAE,MAAM,CAAC;IACrB,8DAA8D;IAC9D,oBAAoB,EAAE,MAAM,CAAC;IAC7B,wEAAwE;IACxE,yBAAyB,EAAE,MAAM,CAAC;IAClC;;;;OAIG;IACH,kBAAkB,EAAE,MAAM,CAAC;IAC3B,qEAAqE;IACrE,aAAa,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,cAAc,EAAE,MAAM,CAAC;IACvB,2EAA2E;IAC3E,sBAAsB,EAAE,MAAM,CAAC;IAC/B;;;;OAIG;IACH,2BAA2B,EAAE,MAAM,CAAC;IACpC,yEAAyE;IACzE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,gFAAgF;AAChF,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,SAAS;IACjB,YAAY,EAAE,WAAW,CAAC;IAC1B,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,CAAC,EAAE,WAAW,CAAC;IAC5B,iEAAiE;IACjE,eAAe,CAAC,EAAE,WAAW,CAAC;CAC/B;AAED,UAAU,YAAa,SAAQ,SAAS;IACtC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAA;KAAE,CAAC;CACxE;AAED,UAAU,aAAa;IACrB,YAAY,EAAE,WAAW,CAAC;IAC1B,WAAW,EAAE,WAAW,CAAC;IACzB,cAAc,EAAE,WAAW,CAAC;IAC5B,yDAAyD;IACzD,SAAS,CAAC,EAAE;QAAE,MAAM,EAAE,WAAW,CAAA;KAAE,CAAC;CACrC;AAED,oEAAoE;AACpE,MAAM,WAAW,gBAAgB;IAC/B,+EAA+E;IAC/E,OAAO,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,MAAM,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,QAAQ,EAAE,MAAM,CAAC;IACjB,8FAA8F;IAC9F,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAKD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC7B,cAAc,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IACpC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC5B,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;IACjC,SAAS,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;CACpC,GAAG,gBAAgB,CAoBnB"}
|
package/dist/render-stats.js
CHANGED
|
@@ -24,7 +24,7 @@ export function sumResidentGpuBytes(input) {
|
|
|
24
24
|
}
|
|
25
25
|
let instanced = 0;
|
|
26
26
|
for (const t of input.instanced) {
|
|
27
|
-
instanced += t.vertexBuffer.size + t.indexBuffer.size + t.instanceBuffer.size;
|
|
27
|
+
instanced += t.vertexBuffer.size + t.indexBuffer.size + t.instanceBuffer.size + (t.rteDeltas?.buffer.size ?? 0);
|
|
28
28
|
}
|
|
29
29
|
return { batches, meshes, textured, instanced, total: batches + meshes + textured + instanced };
|
|
30
30
|
}
|
package/dist/render-stats.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-stats.js","sourceRoot":"","sources":["../src/render-stats.ts"],"names":[],"mappings":"AAAA;;+DAE+D;
|
|
1
|
+
{"version":3,"file":"render-stats.js","sourceRoot":"","sources":["../src/render-stats.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAuF/D,MAAM,QAAQ,GAAG,CAAC,CAAY,EAAU,EAAE,CACxC,CAAC,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC;AAE3G;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAMnC;IACC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO;QAAE,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtD,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,cAAc;QAAE,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE7D,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM;QAAE,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEpD,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC/B,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;QACxB,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,kBAAkB,GAAG,CAAC,CAAC;IACpF,CAAC;IAED,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QAChC,SAAS,IAAI,CAAC,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;IAClH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,EAAE,CAAC;AAClG,CAAC"}
|
|
@@ -39,12 +39,13 @@
|
|
|
39
39
|
import type { Camera } from './camera.js';
|
|
40
40
|
import { type CutPolygon2D, type DrawingLine2D, type LineOverlayChannel } from './section-2d-overlay.js';
|
|
41
41
|
import type { SymbolicFillInput, SymbolicTextInput } from './symbolic-overlay-pipelines.js';
|
|
42
|
-
import { type ClashSolidInput } from './clash-solid-pipeline.js';
|
|
43
42
|
import { type ModelBounds } from './render-section-draw.js';
|
|
44
43
|
import type { RelativeToEyeFrame } from './relative-to-eye.js';
|
|
45
44
|
import type { RenderOptions } from './types.js';
|
|
46
45
|
import type { DeviceRecoveryOmission } from './device-recovery.js';
|
|
47
46
|
import { type LineVertices } from './section-2d-line-buffer.js';
|
|
47
|
+
import type { OverlayTheme } from './overlay-theme.js';
|
|
48
|
+
import { type ThemedClashSolidInput } from './overlay-theme-uniforms.js';
|
|
48
49
|
/**
|
|
49
50
|
* The slice of `Renderer` the overlays need. Deliberately narrow:
|
|
50
51
|
* the overlays own their GPU objects outright, and borrow only the model-bounds
|
|
@@ -81,7 +82,7 @@ export declare class RendererOverlays {
|
|
|
81
82
|
private readonly host;
|
|
82
83
|
private sectionPlaneRenderer;
|
|
83
84
|
private section2DOverlayRenderer;
|
|
84
|
-
private
|
|
85
|
+
private readonly themeApplier;
|
|
85
86
|
private readonly symbolic;
|
|
86
87
|
private clashSolidPipeline;
|
|
87
88
|
constructor(host: OverlayHost);
|
|
@@ -112,15 +113,15 @@ export declare class RendererOverlays {
|
|
|
112
113
|
}): void;
|
|
113
114
|
/** See `Renderer.clearSection2DOverlay` for the published contract. */
|
|
114
115
|
clearSection2DOverlay(): void;
|
|
115
|
-
/** See `Renderer.
|
|
116
|
-
|
|
116
|
+
/** See `Renderer.setOverlayTheme` for the published contract. */
|
|
117
|
+
setTheme(theme: OverlayTheme): void;
|
|
117
118
|
/** See `Renderer.setLineOverlay` for the published contract. */
|
|
118
119
|
setLineOverlay(channel: LineOverlayChannel, vertices: LineVertices | null): void;
|
|
119
120
|
/** See `Renderer.setClashOverlapBox` for the published contract. */
|
|
120
121
|
setClashOverlapBox(box: {
|
|
121
122
|
min: [number, number, number];
|
|
122
123
|
max: [number, number, number];
|
|
123
|
-
color
|
|
124
|
+
color?: [number, number, number, number];
|
|
124
125
|
} | null): void;
|
|
125
126
|
/**
|
|
126
127
|
* See `Renderer.setClashContactLines` for the published contract. Shares the
|
|
@@ -128,10 +129,10 @@ export declare class RendererOverlays {
|
|
|
128
129
|
*/
|
|
129
130
|
setClashContactLines(lines: {
|
|
130
131
|
vertices: LineVertices;
|
|
131
|
-
color
|
|
132
|
+
color?: [number, number, number, number];
|
|
132
133
|
} | null): void;
|
|
133
134
|
/** See `Renderer.setClashIntersectionSolid` for the published contract. */
|
|
134
|
-
setClashIntersectionSolid(input:
|
|
135
|
+
setClashIntersectionSolid(input: ThemedClashSolidInput | null): void;
|
|
135
136
|
/** See `Renderer.uploadAnnotationFills3D` for the published contract. */
|
|
136
137
|
uploadAnnotationFills3D(fills: readonly SymbolicFillInput[]): void;
|
|
137
138
|
/** See `Renderer.uploadAnnotationTexts3D` 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;
|
|
1
|
+
{"version":3,"file":"renderer-overlays.d.ts","sourceRoot":"","sources":["../src/renderer-overlays.ts"],"names":[],"mappings":"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"}
|