@ifc-lite/renderer 5.0.0 → 6.0.1
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-pass.d.ts +16 -0
- package/dist/edge-pass.d.ts.map +1 -1
- package/dist/edge-pass.js +75 -1
- package/dist/edge-pass.js.map +1 -1
- 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 +14 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +146 -161
- 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 +19 -9
- package/dist/instanced-render.d.ts.map +1 -1
- package/dist/instanced-render.js +36 -24
- 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-rte-uniforms.d.ts +4 -2
- package/dist/mesh-rte-uniforms.d.ts.map +1 -1
- package/dist/mesh-rte-uniforms.js +4 -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.d.ts +9 -3
- package/dist/overlay-theme.d.ts.map +1 -1
- package/dist/overlay-theme.js.map +1 -1
- 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 +7 -1
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +37 -59
- 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 +14 -1
- package/dist/post-pass-chain.d.ts.map +1 -1
- package/dist/post-pass-chain.js +31 -2
- 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.map +1 -1
- package/dist/renderer-overlays.js +3 -2
- 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-precision.d.ts +1 -1
- package/dist/scene-precision.d.ts.map +1 -1
- package/dist/scene-precision.js +11 -2
- package/dist/scene-precision.js.map +1 -1
- package/dist/scene.d.ts +43 -38
- 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.map +1 -1
- package/dist/section-plane.js +3 -1
- 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/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 +18 -0
- package/dist/shaders/edges.wgsl.d.ts.map +1 -1
- package/dist/shaders/edges.wgsl.js +99 -0
- package/dist/shaders/edges.wgsl.js.map +1 -1
- 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 +45 -113
- 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/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 +0 -4
- package/dist/visual-enhancement.d.ts.map +1 -1
- package/dist/visual-enhancement.js +0 -5
- 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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import { INSTANCE_STRIDE_BYTES } from './instanced-render.js';
|
|
2
2
|
/** CPU expansion retains the canonical f64 occurrence anchor rather than
|
|
3
3
|
* round-tripping a national-grid translation through the V1 f32 matrix. */
|
|
4
4
|
export function materializeInstances(expressId, occ, templates) {
|
|
@@ -15,9 +15,9 @@ export function materializeInstances(expressId, occ, templates) {
|
|
|
15
15
|
const anchorOffset = (b / INSTANCE_STRIDE_BYTES) * 3;
|
|
16
16
|
const raw12 = dv.getFloat32(b + 48, true), raw13 = dv.getFloat32(b + 52, true), raw14 = dv.getFloat32(b + 56, true);
|
|
17
17
|
const anchors = tpl.canonicalAnchors, baseline = tpl.canonicalMatrixTranslations;
|
|
18
|
-
// Model/entity placement mutates the
|
|
19
|
-
//
|
|
20
|
-
//
|
|
18
|
+
// Model/entity placement mutates the matrix after decode. Do not apply a
|
|
19
|
+
// stale anchor to an edited occurrence whose matrix no longer matches its
|
|
20
|
+
// baseline. Unedited occurrences retain source precision.
|
|
21
21
|
const canonical = anchors && baseline
|
|
22
22
|
&& raw12 === baseline[anchorOffset] && raw13 === baseline[anchorOffset + 1] && raw14 === baseline[anchorOffset + 2];
|
|
23
23
|
const m12 = canonical ? anchors[anchorOffset] : raw12;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scene-instance-materialization.js","sourceRoot":"","sources":["../src/scene-instance-materialization.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"scene-instance-materialization.js","sourceRoot":"","sources":["../src/scene-instance-materialization.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,13 @@
|
|
|
1
1
|
export interface InstanceTranslationTarget {
|
|
2
2
|
instanceData: ArrayBuffer;
|
|
3
|
-
canonicalAnchors
|
|
3
|
+
canonicalAnchors: Float64Array;
|
|
4
4
|
canonicalMatrixTranslations?: Float32Array;
|
|
5
5
|
}
|
|
6
|
-
export interface InstanceTranslationResult {
|
|
7
|
-
translation: Float32Array;
|
|
8
|
-
/** Legacy records retain static split anchors; V2 lanes are submission data. */
|
|
9
|
-
legacyAnchors?: Float32Array;
|
|
10
|
-
}
|
|
11
6
|
/**
|
|
12
|
-
* Apply a world-frame delta
|
|
13
|
-
*
|
|
14
|
-
*
|
|
7
|
+
* Apply a world-frame delta to one occurrence: the f32 matrix translation in
|
|
8
|
+
* the CPU record and the authoritative f64 anchor. The GPU delta stream is
|
|
9
|
+
* derived from the anchor, so the caller invalidates it (#6393). Returns the
|
|
10
|
+
* new matrix translation for the in-place GPU record write.
|
|
15
11
|
*/
|
|
16
|
-
export declare function translateInstanceRecord(target: InstanceTranslationTarget, byteOffset: number, delta: readonly [number, number, number]):
|
|
12
|
+
export declare function translateInstanceRecord(target: InstanceTranslationTarget, byteOffset: number, delta: readonly [number, number, number]): Float32Array;
|
|
17
13
|
//# sourceMappingURL=scene-instance-translation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scene-instance-translation.d.ts","sourceRoot":"","sources":["../src/scene-instance-translation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"scene-instance-translation.d.ts","sourceRoot":"","sources":["../src/scene-instance-translation.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,yBAAyB;IACxC,YAAY,EAAE,WAAW,CAAC;IAC1B,gBAAgB,EAAE,YAAY,CAAC;IAC/B,2BAA2B,CAAC,EAAE,YAAY,CAAC;CAC5C;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,yBAAyB,EACjC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GACvC,YAAY,CAcd"}
|
|
@@ -2,11 +2,12 @@
|
|
|
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
|
/** Mutation of one CPU-side instanced occurrence placement. */
|
|
5
|
-
import {
|
|
5
|
+
import { INSTANCE_STRIDE_BYTES } from './instanced-render.js';
|
|
6
6
|
/**
|
|
7
|
-
* Apply a world-frame delta
|
|
8
|
-
*
|
|
9
|
-
*
|
|
7
|
+
* Apply a world-frame delta to one occurrence: the f32 matrix translation in
|
|
8
|
+
* the CPU record and the authoritative f64 anchor. The GPU delta stream is
|
|
9
|
+
* derived from the anchor, so the caller invalidates it (#6393). Returns the
|
|
10
|
+
* new matrix translation for the in-place GPU record write.
|
|
10
11
|
*/
|
|
11
12
|
export function translateInstanceRecord(target, byteOffset, delta) {
|
|
12
13
|
const dv = new DataView(target.instanceData);
|
|
@@ -19,32 +20,9 @@ export function translateInstanceRecord(target, byteOffset, delta) {
|
|
|
19
20
|
dv.setFloat32(byteOffset + 52, translation[1], true);
|
|
20
21
|
dv.setFloat32(byteOffset + 56, translation[2], true);
|
|
21
22
|
const anchorOffset = (byteOffset / INSTANCE_STRIDE_BYTES) * 3;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
// and materialisation. Only the GPU copy of these lanes is overwritten
|
|
27
|
-
// with a drawable-minus-camera delta at submission time.
|
|
28
|
-
const value = target.canonicalAnchors[anchorOffset + axis];
|
|
29
|
-
const high = Math.fround(value);
|
|
30
|
-
dv.setFloat32(byteOffset + INSTANCE_ANCHOR_HIGH_OFFSET + axis * 4, high, true);
|
|
31
|
-
dv.setFloat32(byteOffset + INSTANCE_ANCHOR_LOW_OFFSET + axis * 4, Math.fround(value - high), true);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
if (target.canonicalMatrixTranslations) {
|
|
35
|
-
target.canonicalMatrixTranslations.set(translation, anchorOffset);
|
|
36
|
-
}
|
|
37
|
-
if (target.canonicalAnchors)
|
|
38
|
-
return { translation };
|
|
39
|
-
const legacyAnchors = new Float32Array(8);
|
|
40
|
-
for (let axis = 0; axis < 3; axis++) {
|
|
41
|
-
const value = translation[axis];
|
|
42
|
-
const high = Math.fround(value);
|
|
43
|
-
legacyAnchors[axis] = high;
|
|
44
|
-
legacyAnchors[axis + 4] = Math.fround(value - high);
|
|
45
|
-
dv.setFloat32(byteOffset + INSTANCE_ANCHOR_HIGH_OFFSET + axis * 4, high, true);
|
|
46
|
-
dv.setFloat32(byteOffset + INSTANCE_ANCHOR_LOW_OFFSET + axis * 4, legacyAnchors[axis + 4], true);
|
|
47
|
-
}
|
|
48
|
-
return { translation, legacyAnchors };
|
|
23
|
+
for (let axis = 0; axis < 3; axis++)
|
|
24
|
+
target.canonicalAnchors[anchorOffset + axis] += delta[axis];
|
|
25
|
+
target.canonicalMatrixTranslations?.set(translation, anchorOffset);
|
|
26
|
+
return translation;
|
|
49
27
|
}
|
|
50
28
|
//# sourceMappingURL=scene-instance-translation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scene-instance-translation.js","sourceRoot":"","sources":["../src/scene-instance-translation.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D,+DAA+D;AAE/D,OAAO,
|
|
1
|
+
{"version":3,"file":"scene-instance-translation.js","sourceRoot":"","sources":["../src/scene-instance-translation.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D,+DAA+D;AAE/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAQ9D;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAAiC,EACjC,UAAkB,EAClB,KAAwC;IAExC,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAC7C,MAAM,WAAW,GAAG,IAAI,YAAY,CAAC;QACnC,EAAE,CAAC,UAAU,CAAC,UAAU,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QAC/C,EAAE,CAAC,UAAU,CAAC,UAAU,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QAC/C,EAAE,CAAC,UAAU,CAAC,UAAU,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;KAChD,CAAC,CAAC;IACH,EAAE,CAAC,UAAU,CAAC,UAAU,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC,CAAE,EAAE,IAAI,CAAC,CAAC;IACtD,EAAE,CAAC,UAAU,CAAC,UAAU,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC,CAAE,EAAE,IAAI,CAAC,CAAC;IACtD,EAAE,CAAC,UAAU,CAAC,UAAU,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC,CAAE,EAAE,IAAI,CAAC,CAAC;IACtD,MAAM,YAAY,GAAG,CAAC,UAAU,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC9D,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE;QAAE,MAAM,CAAC,gBAAgB,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAE,CAAC;IAClG,MAAM,CAAC,2BAA2B,EAAE,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IACnE,OAAO,WAAW,CAAC;AACrB,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { InstancedRteDeltaStream } from './instanced-rte.js';
|
|
1
2
|
export interface InstancedTemplateGPU {
|
|
2
3
|
/** Owning model (federation index). Templates are identified by
|
|
3
4
|
* `(modelIndex, slot)`, so one model's templates can be freed without
|
|
@@ -11,6 +12,9 @@ export interface InstancedTemplateGPU {
|
|
|
11
12
|
instanceCount: number;
|
|
12
13
|
/** Canonical f64 Y-up drawable origins, xyz for each GPU record. */
|
|
13
14
|
canonicalAnchors: Float64Array;
|
|
15
|
+
/** Per-occurrence camera-relative deltas derived from `canonicalAnchors`,
|
|
16
|
+
* bound at vertex slot 2 (#6393). Invalidate whenever the anchors change. */
|
|
17
|
+
rteDeltas: InstancedRteDeltaStream;
|
|
14
18
|
/** Union of the occurrences' world AABBs (null when no occurrence has a
|
|
15
19
|
* finite box — such templates are never culled). Same tuple layout as
|
|
16
20
|
* BatchedMesh.bounds so the render loop's frustum test is shared. */
|
|
@@ -39,6 +43,9 @@ export interface InstancedOccurrence {
|
|
|
39
43
|
/** Originating `IfcRepresentationItem` id (#2985), absent when the shard
|
|
40
44
|
* carried none. CPU-side by design — see `InstancedRenderTemplate.itemIds`. */
|
|
41
45
|
itemId?: number;
|
|
46
|
+
/** The occurrence's finish bits in the flags lane (#5984,
|
|
47
|
+
* `INSTANCE_FINISH_FLAGS_MASK`), re-ORed by every selection/visibility write. */
|
|
48
|
+
finishBits?: number;
|
|
42
49
|
}
|
|
43
50
|
/** Compact CPU-side copy of one instanced template, retained so CPU consumers
|
|
44
51
|
* (bounds / raycast / measure / section / export) can reach instanced geometry
|
|
@@ -53,11 +60,13 @@ export interface InstancedTemplateCpu {
|
|
|
53
60
|
normals: Float32Array;
|
|
54
61
|
indices: Uint32Array;
|
|
55
62
|
instanceData: ArrayBuffer;
|
|
56
|
-
/** Canonical f64 occurrence anchors (xyz per record)
|
|
57
|
-
*
|
|
63
|
+
/** Canonical f64 occurrence anchors (xyz per record): the source of truth
|
|
64
|
+
* for bounds and the GPU delta stream. Shared with the GPU template. */
|
|
58
65
|
canonicalAnchors: Float64Array;
|
|
59
66
|
canonicalMatrixTranslations: Float32Array;
|
|
60
67
|
localMin: [number, number, number];
|
|
61
68
|
localMax: [number, number, number];
|
|
62
69
|
}
|
|
70
|
+
/** Free every GPU buffer one instanced template owns. */
|
|
71
|
+
export declare function destroyInstancedTemplateGpu(template: InstancedTemplateGPU): void;
|
|
63
72
|
//# sourceMappingURL=scene-instance-types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scene-instance-types.d.ts","sourceRoot":"","sources":["../src/scene-instance-types.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,oBAAoB;IACnC;;;8CAG0C;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,SAAS,CAAC;IACxB,WAAW,EAAE,SAAS,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,SAAS,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,gBAAgB,EAAE,YAAY,CAAC;IAC/B;;0EAEsE;IACtE,MAAM,EAAE;QAAE,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,GAAG,IAAI,CAAC;IAChF;;6DAEyD;IACzD,YAAY,EAAE,MAAM,CAAC;IACrB;;6DAEyD;IACzD,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;0FAC0F;AAC1F,MAAM,WAAW,mBAAmB;IAClC;;mDAE+C;IAC/C,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD;oFACgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"scene-instance-types.d.ts","sourceRoot":"","sources":["../src/scene-instance-types.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAElE,MAAM,WAAW,oBAAoB;IACnC;;;8CAG0C;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,SAAS,CAAC;IACxB,WAAW,EAAE,SAAS,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,SAAS,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,gBAAgB,EAAE,YAAY,CAAC;IAC/B;kFAC8E;IAC9E,SAAS,EAAE,uBAAuB,CAAC;IACnC;;0EAEsE;IACtE,MAAM,EAAE;QAAE,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,GAAG,IAAI,CAAC;IAChF;;6DAEyD;IACzD,YAAY,EAAE,MAAM,CAAC;IACrB;;6DAEyD;IACzD,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;0FAC0F;AAC1F,MAAM,WAAW,mBAAmB;IAClC;;mDAE+C;IAC/C,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD;oFACgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;sFACkF;IAClF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;qFAKqF;AACrF,MAAM,WAAW,oBAAoB;IACnC,yEAAyE;IACzE,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,YAAY,CAAC;IACxB,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,WAAW,CAAC;IACrB,YAAY,EAAE,WAAW,CAAC;IAC1B;6EACyE;IACzE,gBAAgB,EAAE,YAAY,CAAC;IAC/B,2BAA2B,EAAE,YAAY,CAAC;IAC1C,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAED,yDAAyD;AACzD,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI,CAKhF"}
|
|
@@ -1,2 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
/** Free every GPU buffer one instanced template owns. */
|
|
2
|
+
export function destroyInstancedTemplateGpu(template) {
|
|
3
|
+
template.vertexBuffer.destroy();
|
|
4
|
+
template.indexBuffer.destroy();
|
|
5
|
+
template.instanceBuffer.destroy();
|
|
6
|
+
template.rteDeltas.buffer.destroy();
|
|
7
|
+
}
|
|
2
8
|
//# sourceMappingURL=scene-instance-types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scene-instance-types.js","sourceRoot":"","sources":["../src/scene-instance-types.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"scene-instance-types.js","sourceRoot":"","sources":["../src/scene-instance-types.ts"],"names":[],"mappings":"AAyEA,yDAAyD;AACzD,MAAM,UAAU,2BAA2B,CAAC,QAA8B;IACxE,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;IAChC,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;IAC/B,QAAQ,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;IAClC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;AACtC,CAAC"}
|
|
@@ -17,7 +17,6 @@ interface TranslationScene {
|
|
|
17
17
|
bounds: Map<number, BoundingBox>;
|
|
18
18
|
batches: BatchedMesh[];
|
|
19
19
|
meshes: Mesh[];
|
|
20
|
-
overrides: BatchedMesh[];
|
|
21
20
|
textured: TexturedMesh[];
|
|
22
21
|
templates: (InstancedTemplateGPU | undefined)[];
|
|
23
22
|
cpu: (CpuTemplate | undefined)[];
|
|
@@ -28,7 +27,7 @@ interface TranslationScene {
|
|
|
28
27
|
device: GPUDevice | undefined;
|
|
29
28
|
evictHighlight: (id: number) => void;
|
|
30
29
|
clearPartial: () => void;
|
|
31
|
-
unionBounds: (id: number, view: DataView, offset: number, min: Triple, max: Triple) => {
|
|
30
|
+
unionBounds: (id: number, view: DataView, offset: number, anchors: Float64Array, min: Triple, max: Triple) => {
|
|
32
31
|
minX: number;
|
|
33
32
|
minY: number;
|
|
34
33
|
minZ: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scene-model-translation.d.ts","sourceRoot":"","sources":["../src/scene-model-translation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"scene-model-translation.d.ts","sourceRoot":"","sources":["../src/scene-model-translation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAKxD,KAAK,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACvC,UAAU,WAAW;IACnB,YAAY,EAAE,WAAW,CAAC;IAC1B,gBAAgB,EAAE,YAAY,CAAC;IAC/B,2BAA2B,EAAE,YAAY,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AACD,UAAU,gBAAgB;IACxB,YAAY,EAAE,iBAAiB,CAAC;IAChC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAChC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACjC,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,MAAM,EAAE,IAAI,EAAE,CAAC;IACf,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,SAAS,EAAE,CAAC,oBAAoB,GAAG,SAAS,CAAC,EAAE,CAAC;IAChD,GAAG,EAAE,CAAC,WAAW,GAAG,SAAS,CAAC,EAAE,CAAC;IACjC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC,CAAC;IAC1E,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC;IAC9B,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK;QAC5G,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;KACpF,CAAC;CACH;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAmCxI;AAED;;;kDAGkD;AAClD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAmCrF;AAED;;;mEAGmE;AACnE,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,GAAG,IAAI,GAAG,OAAO,CAIpH;AAED;kEACkE;AAClE,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,SAAS,CAAC;IAAE,SAAS,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,GAAG,SAAS,CAAC,EAAE,GAAG,IAAI,CAO1J;AAED,6EAA6E;AAC7E,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,iBAAiB,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,CAInH"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { foldOccurrenceWorldBox, INSTANCE_STRIDE_BYTES } from './instanced-render.js';
|
|
2
2
|
import { worldAabbFromPieces } from './scene-geometry.js';
|
|
3
|
+
import { invalidateInstancedRteDeltas } from './instanced-rte.js';
|
|
3
4
|
export function translateSceneModel(scene, modelIndex, translation) {
|
|
4
5
|
const previous = scene.translations.get(modelIndex);
|
|
5
6
|
if (!scene.translations.set(modelIndex, translation))
|
|
@@ -46,8 +47,6 @@ export function translateSceneModel(scene, modelIndex, translation) {
|
|
|
46
47
|
scene.translations.moveDrawable(mesh);
|
|
47
48
|
for (const batch of scene.batches)
|
|
48
49
|
scene.translations.moveDrawable(batch);
|
|
49
|
-
for (const batch of scene.overrides)
|
|
50
|
-
scene.translations.moveDrawable(batch);
|
|
51
50
|
scene.clearPartial();
|
|
52
51
|
placeSceneInstances(scene, modelIndex);
|
|
53
52
|
return true;
|
|
@@ -63,6 +62,8 @@ export function placeSceneInstances(scene, modelIndex) {
|
|
|
63
62
|
continue;
|
|
64
63
|
if (scene.translations.placeInstances(cpu.instanceData, modelIndex, INSTANCE_STRIDE_BYTES, cpu.canonicalAnchors, cpu.canonicalMatrixTranslations)) {
|
|
65
64
|
scene.device?.queue.writeBuffer(gpu.instanceBuffer, 0, cpu.instanceData);
|
|
65
|
+
// placeInstances moved the canonical anchors the delta stream derives from.
|
|
66
|
+
invalidateInstancedRteDeltas(gpu.rteDeltas);
|
|
66
67
|
}
|
|
67
68
|
gpu.bounds = null;
|
|
68
69
|
// A yaw (unlike a pure translation) changes each occurrence's WORLD-AXIS
|
|
@@ -86,7 +87,7 @@ export function placeSceneInstances(scene, modelIndex) {
|
|
|
86
87
|
const gpu = scene.templates[occ.templateIndex], cpu = scene.cpu[occ.templateIndex];
|
|
87
88
|
if (!gpu || !cpu)
|
|
88
89
|
continue;
|
|
89
|
-
const world = scene.unionBounds(id, new DataView(cpu.instanceData), occ.byteOffset, cpu.localMin, cpu.localMax);
|
|
90
|
+
const world = scene.unionBounds(id, new DataView(cpu.instanceData), occ.byteOffset, cpu.canonicalAnchors, cpu.localMin, cpu.localMax);
|
|
90
91
|
if (gpu.modelIndex === modelIndex)
|
|
91
92
|
foldOccurrenceWorldBox(gpu, world);
|
|
92
93
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scene-model-translation.js","sourceRoot":"","sources":["../src/scene-model-translation.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"scene-model-translation.js","sourceRoot":"","sources":["../src/scene-model-translation.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,6 @@ export declare function worldBounds(meshes: readonly MeshData[]): {
|
|
|
11
11
|
export declare function automaticBatchOrigin(meshes: readonly MeshData[]): [number, number, number];
|
|
12
12
|
/** Whether an f64 rebase followed by the real f32 upload retains every valid triangle. */
|
|
13
13
|
export declare function originPreservesTriangleTopology(meshes: readonly MeshData[], origin: readonly [number, number, number]): boolean;
|
|
14
|
-
/** Prefer
|
|
14
|
+
/** Prefer shared frames; preserve authored f32 coordinates when a bbox rebase loses detail. */
|
|
15
15
|
export declare function topologySafeBatchOrigin(meshes: readonly MeshData[], inherited: [number, number, number] | undefined, shared: [number, number, number] | undefined, routing?: [number, number, number] | undefined): [number, number, number] | undefined;
|
|
16
16
|
//# sourceMappingURL=scene-precision.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scene-precision.d.ts","sourceRoot":"","sources":["../src/scene-precision.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,QAAQ,EAAE,GAAG;IACxD,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IACzC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;CAC1C,CAeA;AAED,0EAA0E;AAC1E,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAK1F;AAED,0FAA0F;AAC1F,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,SAAS,QAAQ,EAAE,EAC3B,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GACxC,OAAO,CAiCT;AAED
|
|
1
|
+
{"version":3,"file":"scene-precision.d.ts","sourceRoot":"","sources":["../src/scene-precision.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,QAAQ,EAAE,GAAG;IACxD,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IACzC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;CAC1C,CAeA;AAED,0EAA0E;AAC1E,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAK1F;AAED,0FAA0F;AAC1F,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,SAAS,QAAQ,EAAE,EAC3B,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GACxC,OAAO,CAiCT;AAED,+FAA+F;AAC/F,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,SAAS,QAAQ,EAAE,EAC3B,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EAC/C,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EAC5C,OAAO,GAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,SAAqB,GACxD,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CActC"}
|
package/dist/scene-precision.js
CHANGED
|
@@ -61,13 +61,22 @@ export function originPreservesTriangleTopology(meshes, origin) {
|
|
|
61
61
|
}
|
|
62
62
|
return true;
|
|
63
63
|
}
|
|
64
|
-
/** Prefer
|
|
64
|
+
/** Prefer shared frames; preserve authored f32 coordinates when a bbox rebase loses detail. */
|
|
65
65
|
export function topologySafeBatchOrigin(meshes, inherited, shared, routing = undefined) {
|
|
66
66
|
for (const requested of [inherited, shared, routing]) {
|
|
67
67
|
if (requested && originPreservesTriangleTopology(meshes, requested))
|
|
68
68
|
return requested;
|
|
69
69
|
}
|
|
70
70
|
const automatic = automaticBatchOrigin(meshes);
|
|
71
|
-
|
|
71
|
+
if (originPreservesTriangleTopology(meshes, automatic))
|
|
72
|
+
return automatic;
|
|
73
|
+
// #6515: a wide mesh can contain valid tiny triangles near its local origin.
|
|
74
|
+
// Recentering it rounds those vertices together even though its original
|
|
75
|
+
// f32 frame still preserves them. Try one authored frame, validated against
|
|
76
|
+
// every mesh, rather than treating exhausted preferred frames as exhaustion
|
|
77
|
+
// of all frames. GPU high/low origin lanes must remain finite too (#5010).
|
|
78
|
+
const authored = meshes[0]?.origin ?? [0, 0, 0];
|
|
79
|
+
return authored.every((axis) => Number.isFinite(Math.fround(axis)))
|
|
80
|
+
&& originPreservesTriangleTopology(meshes, authored) ? authored : undefined;
|
|
72
81
|
}
|
|
73
82
|
//# sourceMappingURL=scene-precision.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scene-precision.js","sourceRoot":"","sources":["../src/scene-precision.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"scene-precision.js","sourceRoot":"","sources":["../src/scene-precision.ts"],"names":[],"mappings":"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"}
|
package/dist/scene.d.ts
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Scene graph and mesh management
|
|
3
3
|
*/
|
|
4
|
-
import type
|
|
5
|
-
import type { Mesh, BatchedMesh, Vec3, PickClipState, Material } from './types.js';
|
|
4
|
+
import { type InstancedTemplateGPU } from './scene-instance-types.js';
|
|
5
|
+
import type { Mesh, BatchedMesh, Vec3, PickClipState, Material, MeshFinish } from './types.js';
|
|
6
6
|
import type { MeshData } from '@ifc-lite/geometry';
|
|
7
7
|
import type { RenderPipeline } from './pipeline.js';
|
|
8
8
|
import { type BoundingBox, type RaycastHit } from './scene-raycaster.js';
|
|
9
9
|
import { type RectangleRteFrame } from './scene-rect-select.js';
|
|
10
10
|
import { type ResidentGpuBytes } from './render-stats.js';
|
|
11
11
|
import { type SpatialChunkingConfig } from './chunk-grid.js';
|
|
12
|
+
import { EntityColorTable } from './entity-color-table.js';
|
|
12
13
|
import { type ColdGeometryProvider } from './residency.js';
|
|
13
14
|
import { type ModelYaw } from './model-translation.js';
|
|
14
15
|
import type { DecodedInstancedShard } from '@ifc-lite/geometry';
|
|
@@ -43,15 +44,11 @@ export interface TexturedMesh {
|
|
|
43
44
|
bindGroup: GPUBindGroup;
|
|
44
45
|
/** Authored tint (multiplies the sampled texel); white = texture passthrough. */
|
|
45
46
|
color: [number, number, number, number];
|
|
46
|
-
/**
|
|
47
|
-
* A caller-supplied finish, mirroring {@link Mesh.material}. Nothing writes
|
|
48
|
-
* this today — `MeshData` (the WASM extraction boundary) carries no
|
|
49
|
-
* metallic/roughness fields, and IFC-authored specular is not extracted yet
|
|
50
|
-
* (#5582) — so `packMeshMaterial` falls back to its defaults for every
|
|
51
|
-
* textured draw. The field exists so a textured mesh has the SAME optional
|
|
52
|
-
* hook `Mesh` does, ready for #5582 without a second API.
|
|
53
|
-
*/
|
|
47
|
+
/** A caller-supplied finish, mirroring {@link Mesh.material}. */
|
|
54
48
|
material?: Material;
|
|
49
|
+
/** IFC-authored finish (#5582), copied from `MeshData.material` at upload
|
|
50
|
+
* (#5984); like {@link Mesh.finish}, `packMeshMaterial` prefers it. */
|
|
51
|
+
finish?: MeshFinish;
|
|
55
52
|
/**
|
|
56
53
|
* The mesh's per-element local frame (`MeshData.origin`, already Y-up) — the
|
|
57
54
|
* renderer must reconstruct `world = origin + position`.
|
|
@@ -209,8 +206,7 @@ export declare class Scene {
|
|
|
209
206
|
* `partial-batch-cache.ts` can keep them consistent together. Same Map
|
|
210
207
|
* objects, not copies — they are only ever cleared, never reassigned. */
|
|
211
208
|
private readonly partialCaches;
|
|
212
|
-
private
|
|
213
|
-
private overlaySources;
|
|
209
|
+
private readonly entityColorTable;
|
|
214
210
|
private colorOverrides;
|
|
215
211
|
private colorOverrideGeneration;
|
|
216
212
|
private pendingBatchKeys;
|
|
@@ -377,6 +373,10 @@ export declare class Scene {
|
|
|
377
373
|
* partial-batch piece filter) must go through this so a mesh always
|
|
378
374
|
* resolves to the same bucket. `color` overrides the mesh's own colour for
|
|
379
375
|
* recolour routing.
|
|
376
|
+
*
|
|
377
|
+
* Ids past 2^24 also key by their 2^24 page (#6076): a batch then never
|
|
378
|
+
* spans 2^24 ids, which the entity colour table needs to rebuild a full id
|
|
379
|
+
* from the 24-bit vertex lane (`entityIdAnchor`, entity-color-table.ts).
|
|
380
380
|
*/
|
|
381
381
|
private bucketBaseKey;
|
|
382
382
|
/**
|
|
@@ -399,6 +399,12 @@ export declare class Scene {
|
|
|
399
399
|
* @param modelIndex - Optional modelIndex to filter by (for multi-model support)
|
|
400
400
|
*/
|
|
401
401
|
hasMeshData(expressId: number, modelIndex?: number): boolean;
|
|
402
|
+
/**
|
|
403
|
+
* Whether more than `limit` entities with mesh data pass the hide/isolate
|
|
404
|
+
* filter. Stops at `limit + 1` and allocates nothing, so a per-pick budget
|
|
405
|
+
* check stays cheap on a large model (#6392).
|
|
406
|
+
*/
|
|
407
|
+
visibleMeshDataEntitiesExceed(limit: number, hiddenIds?: ReadonlySet<number> | null, isolatedIds?: ReadonlySet<number> | null): boolean;
|
|
402
408
|
/**
|
|
403
409
|
* Get all MeshData pieces for an expressId (without merging).
|
|
404
410
|
* Optionally filter by modelIndex for multi-model safety.
|
|
@@ -418,9 +424,9 @@ export declare class Scene {
|
|
|
418
424
|
* `geometryItemId` matches (undefined never matches, so no silent fallback). */
|
|
419
425
|
getMeshDataPieces(expressId: number, modelIndex?: number, itemId?: number): MeshData[] | undefined;
|
|
420
426
|
/**
|
|
421
|
-
*
|
|
422
|
-
*
|
|
423
|
-
*
|
|
427
|
+
* Colour key for grouping meshes: `chunk-grid.ts`'s `colorKey` (RGBA
|
|
428
|
+
* quantized to 1/1000), with the authored finish folded in (#5582) so one
|
|
429
|
+
* batch never mixes finishes.
|
|
424
430
|
*/
|
|
425
431
|
private colorKey;
|
|
426
432
|
/**
|
|
@@ -603,9 +609,12 @@ export declare class Scene {
|
|
|
603
609
|
* Processes queued meshes through appendToBatches in streaming mode
|
|
604
610
|
* (creates lightweight fragment batches for immediate rendering).
|
|
605
611
|
*
|
|
612
|
+
* @param budgetMs Time slice per call. The 12 ms default keeps the main
|
|
613
|
+
* thread returning to the worker-message pump while geometry streams; a
|
|
614
|
+
* host with nothing else to serve may drain faster (#6436).
|
|
606
615
|
* @returns true if any meshes were processed (caller should render)
|
|
607
616
|
*/
|
|
608
|
-
flushPending(device: GPUDevice, pipeline: RenderPipeline): boolean;
|
|
617
|
+
flushPending(device: GPUDevice, pipeline: RenderPipeline, budgetMs?: number): boolean;
|
|
609
618
|
/**
|
|
610
619
|
* Create lightweight fragment batches from a single streaming batch.
|
|
611
620
|
* Fragments are grouped by color and added to batchedMeshes for immediate
|
|
@@ -650,7 +659,8 @@ export declare class Scene {
|
|
|
650
659
|
* - Bounding boxes are precomputed and cached for all entities
|
|
651
660
|
* - meshDataMap and bucket meshData arrays are cleared (typed arrays become GC-eligible)
|
|
652
661
|
* - Color updates (updateMeshColors) are no longer available
|
|
653
|
-
* - Partial batch creation
|
|
662
|
+
* - Partial batch creation is no longer available; color overrides still
|
|
663
|
+
* work through the GPU-resident per-entity table
|
|
654
664
|
* - CPU raycasting falls back to bounding-box-only (no triangle intersection)
|
|
655
665
|
* - Selection highlighting must use GPU picking instead of CPU mesh reconstruction
|
|
656
666
|
*
|
|
@@ -731,43 +741,36 @@ export declare class Scene {
|
|
|
731
741
|
*/
|
|
732
742
|
getOrCreatePartialBatch(sourceBatchKey: string, colorKey: string, visibleIds: Set<number>, device: GPUDevice, pipeline: RenderPipeline, visibilityEpoch?: number): BatchedMesh | undefined;
|
|
733
743
|
/**
|
|
734
|
-
* Set
|
|
735
|
-
*
|
|
736
|
-
*
|
|
737
|
-
*
|
|
744
|
+
* Set colour overrides for lens / chart / IDS / compare / 4D colouring:
|
|
745
|
+
* rewrites the entity colour table (one `writeBuffer`) and the instanced
|
|
746
|
+
* occurrence records. No batch is built, rebuilt or destroyed. `pipeline`
|
|
747
|
+
* stays in the signature because `SceneContents` publishes it.
|
|
738
748
|
*/
|
|
739
|
-
setColorOverrides(overrides: Map<number, [number, number, number, number]>, device: GPUDevice,
|
|
740
|
-
/** Rebuild the installed overlays against the batches that write depth NOW
|
|
741
|
-
* (#4832). Best-effort — a committed finalize/rebuild must not be undone by
|
|
742
|
-
* an overlay allocation failure, so that is reported, not thrown. */
|
|
743
|
-
private reapplyColorOverrides;
|
|
749
|
+
setColorOverrides(overrides: Map<number, [number, number, number, number]>, device: GPUDevice, _pipeline: RenderPipeline): void;
|
|
744
750
|
/** Clear all color overrides — instant, no batch rebuild needed. */
|
|
745
751
|
clearColorOverrides(): void;
|
|
752
|
+
private clearColorOverrideState;
|
|
746
753
|
/** Monotonic counter that changes whenever the colour-override set changes.
|
|
747
754
|
* The render loop folds it into the partial sub-batch cache epoch so the
|
|
748
755
|
* per-frame fast path stays correct across override changes. */
|
|
749
756
|
getColorOverrideGeneration(): number;
|
|
750
|
-
/**
|
|
751
|
-
|
|
752
|
-
/** Check if color overrides are active */
|
|
753
|
-
hasColorOverrides(): boolean;
|
|
757
|
+
/** The per-entity colour table the renderer binds at group(1) (#6076). */
|
|
758
|
+
getEntityColorTable(): EntityColorTable;
|
|
754
759
|
/**
|
|
755
760
|
* Get the active expressId → RGBA override map, or null if none.
|
|
756
761
|
*
|
|
757
762
|
* Used by the renderer to promote overridden meshes/batches to the opaque
|
|
758
|
-
* pipeline
|
|
759
|
-
*
|
|
760
|
-
*
|
|
761
|
-
* fails to paint — the transparent pipeline doesn't write depth, so the
|
|
762
|
-
* equality test rejects every fragment.
|
|
763
|
+
* pipeline (overlay-routing.ts): the table paints only depth-writing opaque
|
|
764
|
+
* draws, so an override on an entity that defaults to the transparent
|
|
765
|
+
* pipeline (IfcSpace, IfcOpeningElement, glass, …) is promoted to be seen.
|
|
763
766
|
*
|
|
764
767
|
* Returns a `ReadonlyMap` view: the renderer holds the only writeable
|
|
765
768
|
* reference (via `setColorOverrides`) so routing decisions stay in sync
|
|
766
|
-
* with the
|
|
769
|
+
* with the colour table written from the same data.
|
|
767
770
|
*/
|
|
768
771
|
getColorOverrides(): ReadonlyMap<number, readonly [number, number, number, number]> | null;
|
|
769
|
-
/**
|
|
770
|
-
|
|
772
|
+
/** Drop the colour table's GPU buffer (device-loss recovery host); `setColorOverrides` re-uploads it. */
|
|
773
|
+
releaseColorOverrideGpu(): void;
|
|
771
774
|
/**
|
|
772
775
|
* Clear scene
|
|
773
776
|
*/
|
|
@@ -852,6 +855,8 @@ export declare class Scene {
|
|
|
852
855
|
*/
|
|
853
856
|
addInstancedShard(device: GPUDevice, shard: DecodedInstancedShard, modelIndex?: number): void;
|
|
854
857
|
private unionInstancedWorldAabb;
|
|
858
|
+
/** Drawn templates holding an occurrence of `expressId` (in `modelIndex` if given), for the hover outline (#5745). */
|
|
859
|
+
getInstancedTemplatesOf(expressId: number, modelIndex?: number): InstancedTemplateGPU[];
|
|
855
860
|
/** True when `expressId` has a GPU-instanced occurrence. */
|
|
856
861
|
isInstancedEntity(expressId: number): boolean;
|
|
857
862
|
/** Retain one model-owned occurrence for reversible appearance replacement. */
|