@ifc-lite/renderer 1.35.2 → 1.37.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.
Files changed (50) hide show
  1. package/dist/chunk-grid.d.ts +60 -0
  2. package/dist/chunk-grid.d.ts.map +1 -0
  3. package/dist/chunk-grid.js +47 -0
  4. package/dist/chunk-grid.js.map +1 -0
  5. package/dist/contribution-cull.d.ts +94 -0
  6. package/dist/contribution-cull.d.ts.map +1 -0
  7. package/dist/contribution-cull.js +111 -0
  8. package/dist/contribution-cull.js.map +1 -0
  9. package/dist/device.d.ts.map +1 -1
  10. package/dist/device.js +24 -1
  11. package/dist/device.js.map +1 -1
  12. package/dist/index.d.ts +28 -0
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +233 -14
  15. package/dist/index.js.map +1 -1
  16. package/dist/instanced-render.d.ts +31 -0
  17. package/dist/instanced-render.d.ts.map +1 -1
  18. package/dist/instanced-render.js +45 -0
  19. package/dist/instanced-render.js.map +1 -1
  20. package/dist/lod-simplify.d.ts +36 -0
  21. package/dist/lod-simplify.d.ts.map +1 -0
  22. package/dist/lod-simplify.js +101 -0
  23. package/dist/lod-simplify.js.map +1 -0
  24. package/dist/pipeline.d.ts +13 -0
  25. package/dist/pipeline.d.ts.map +1 -1
  26. package/dist/pipeline.js +63 -2
  27. package/dist/pipeline.js.map +1 -1
  28. package/dist/quantize.d.ts +49 -0
  29. package/dist/quantize.d.ts.map +1 -0
  30. package/dist/quantize.js +137 -0
  31. package/dist/quantize.js.map +1 -0
  32. package/dist/render-stats.d.ts +95 -0
  33. package/dist/render-stats.d.ts.map +1 -0
  34. package/dist/render-stats.js +31 -0
  35. package/dist/render-stats.js.map +1 -0
  36. package/dist/residency.d.ts +52 -0
  37. package/dist/residency.d.ts.map +1 -0
  38. package/dist/residency.js +28 -0
  39. package/dist/residency.js.map +1 -0
  40. package/dist/scene.d.ts +190 -1
  41. package/dist/scene.d.ts.map +1 -1
  42. package/dist/scene.js +799 -42
  43. package/dist/scene.js.map +1 -1
  44. package/dist/shaders/main.wgsl.d.ts +1 -1
  45. package/dist/shaders/main.wgsl.d.ts.map +1 -1
  46. package/dist/shaders/main.wgsl.js +53 -0
  47. package/dist/shaders/main.wgsl.js.map +1 -1
  48. package/dist/types.d.ts +47 -0
  49. package/dist/types.d.ts.map +1 -1
  50. package/package.json +3 -3
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Frame + memory statistics for the renderer (issue #1682 observability).
3
+ *
4
+ * `FrameStats` is a snapshot of the last completed `Renderer.render()`;
5
+ * `sumResidentGpuBytes` walks the scene's GPU-resident collections and sums
6
+ * actual `GPUBuffer.size` values (allocation-accurate: it reflects what was
7
+ * requested from the device, including any internal padding the buffers were
8
+ * created with). Textures are estimated from their dimensions at 4 B/texel.
9
+ */
10
+ /** Statistics for one rendered frame (the main render pass only). */
11
+ export interface FrameStats {
12
+ /**
13
+ * Geometry draw calls issued by the last main render pass: colour batches,
14
+ * partial/overlay sub-batches, instanced templates, textured meshes,
15
+ * transparent + selected meshes. Excludes the sky pass, section-plane
16
+ * overlays and the on-demand pick pass.
17
+ */
18
+ drawCalls: number;
19
+ /** Colour batches that passed all per-frame gates and were drawn. */
20
+ batchesDrawn: number;
21
+ /** Colour batches rejected by the frustum test this frame. */
22
+ batchesFrustumCulled: number;
23
+ /** Colour batches rejected by contribution (projected-size) culling. */
24
+ batchesContributionCulled: number;
25
+ /**
26
+ * Visible batches skipped because their GPU buffers were evicted under the
27
+ * residency budget; a rebuild was requested and they draw again within a
28
+ * frame or two (issue #1682 phase 3a).
29
+ */
30
+ batchesNotResident: number;
31
+ /** Batches drawn at their simplified LOD1 index range this frame. */
32
+ batchesAtLod1: number;
33
+ /** GPU-instanced templates drawn this frame (one draw call each). */
34
+ instancedDrawn: number;
35
+ /** Instanced templates rejected by the frustum test (union world AABB). */
36
+ instancedFrustumCulled: number;
37
+ /**
38
+ * Instanced templates rejected by contribution culling: even the largest
39
+ * single occurrence, projected at the union box's nearest view depth,
40
+ * fell below the pixel threshold.
41
+ */
42
+ instancedContributionCulled: number;
43
+ /** `performance.now()` timestamp taken at the end of the render call. */
44
+ timestamp: number;
45
+ }
46
+ /** Minimal structural slice of a GPU buffer (real `GPUBuffer` satisfies it). */
47
+ interface SizedBuffer {
48
+ size: number;
49
+ }
50
+ interface BatchLike {
51
+ vertexBuffer: SizedBuffer;
52
+ indexBuffer: SizedBuffer;
53
+ uniformBuffer?: SizedBuffer;
54
+ /** LOD1 second index range (issue #1682 phase 5), when built. */
55
+ lod1IndexBuffer?: SizedBuffer;
56
+ }
57
+ interface TexturedLike extends BatchLike {
58
+ texture: {
59
+ width: number;
60
+ height: number;
61
+ depthOrArrayLayers: number;
62
+ };
63
+ }
64
+ interface InstancedLike {
65
+ vertexBuffer: SizedBuffer;
66
+ indexBuffer: SizedBuffer;
67
+ instanceBuffer: SizedBuffer;
68
+ }
69
+ /** Byte totals per GPU-resident collection. All values in bytes. */
70
+ export interface ResidentGpuBytes {
71
+ /** Colour batches (incl. streaming fragments) + cached partial sub-batches. */
72
+ batches: number;
73
+ /** Individually hydrated meshes (selection/picking/fallback paths). */
74
+ meshes: number;
75
+ /** Textured meshes, including an estimated 4 B/texel for the texture. */
76
+ textured: number;
77
+ /** Instanced templates: template geometry + per-occurrence instance buffers. */
78
+ instanced: number;
79
+ total: number;
80
+ }
81
+ /**
82
+ * Sum the GPU bytes held by the scene's mesh collections.
83
+ *
84
+ * Not covered (owned outside the scene's mesh tables): point-cloud buffers,
85
+ * pick/post-process render targets, and the depth/MSAA attachments.
86
+ */
87
+ export declare function sumResidentGpuBytes(input: {
88
+ batches: Iterable<BatchLike>;
89
+ partialBatches: Iterable<BatchLike>;
90
+ meshes: Iterable<BatchLike>;
91
+ textured: Iterable<TexturedLike>;
92
+ instanced: Iterable<InstancedLike>;
93
+ }): ResidentGpuBytes;
94
+ export {};
95
+ //# sourceMappingURL=render-stats.d.ts.map
@@ -0,0 +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;CAC7B;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,gFAAgF;IAChF,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"}
@@ -0,0 +1,31 @@
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
+ const sumBatch = (b) => b.vertexBuffer.size + b.indexBuffer.size + (b.uniformBuffer?.size ?? 0) + (b.lod1IndexBuffer?.size ?? 0);
5
+ /**
6
+ * Sum the GPU bytes held by the scene's mesh collections.
7
+ *
8
+ * Not covered (owned outside the scene's mesh tables): point-cloud buffers,
9
+ * pick/post-process render targets, and the depth/MSAA attachments.
10
+ */
11
+ export function sumResidentGpuBytes(input) {
12
+ let batches = 0;
13
+ for (const b of input.batches)
14
+ batches += sumBatch(b);
15
+ for (const b of input.partialBatches)
16
+ batches += sumBatch(b);
17
+ let meshes = 0;
18
+ for (const m of input.meshes)
19
+ meshes += sumBatch(m);
20
+ let textured = 0;
21
+ for (const t of input.textured) {
22
+ textured += sumBatch(t);
23
+ textured += t.texture.width * t.texture.height * t.texture.depthOrArrayLayers * 4;
24
+ }
25
+ let instanced = 0;
26
+ for (const t of input.instanced) {
27
+ instanced += t.vertexBuffer.size + t.indexBuffer.size + t.instanceBuffer.size;
28
+ }
29
+ return { batches, meshes, textured, instanced, total: batches + meshes + textured + instanced };
30
+ }
31
+ //# sourceMappingURL=render-stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-stats.js","sourceRoot":"","sources":["../src/render-stats.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAqF/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,CAAC;IAChF,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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * GPU residency policy (issue #1682, phase 3a of the chunked-residency plan).
3
+ *
4
+ * With spatial chunk bucketing (phase 2) a batch is a spatially compact,
5
+ * independently destroyable GPU unit. This module decides WHICH resident
6
+ * batches to evict when the scene exceeds a GPU byte budget. Eviction
7
+ * destroys the batch's GPU buffers but keeps the batch object as a metadata
8
+ * shell (bounds/expressIds/counts) and keeps the bucket's CPU `meshData`, so
9
+ * the batch can be rebuilt on demand when the camera wants it again.
10
+ *
11
+ * Policy (two rules, mirroring the eviction hysteresis in Cesium-class
12
+ * streamers):
13
+ * 1. Never evict a batch drawn this frame — the budget is a target, not a
14
+ * hard cap; a scene whose visible set alone exceeds the budget renders
15
+ * correctly and stays over budget (callers may log/telemeter that).
16
+ * 2. Among the rest, evict least-recently-drawn first, and only batches
17
+ * idle for at least `minAgeFrames` rendered frames — a batch that just
18
+ * left the frustum during an orbit is likely to come right back, and
19
+ * re-uploading it every half-gesture would thrash.
20
+ *
21
+ * Pure function over plain shells so the policy is unit-testable without a
22
+ * GPU; the Scene owns the actual destroy/rebuild.
23
+ */
24
+ /** Residency view of one bucket-owned batch. */
25
+ export interface ResidencyShell {
26
+ /** Bucket key (identifies the bucket to rebuild from). */
27
+ key: string;
28
+ /** GPU bytes this batch holds (vertex + index + uniform). */
29
+ bytes: number;
30
+ /** Scene frame counter value when this batch was last drawn (-1 = never). */
31
+ lastDrawnFrame: number;
32
+ }
33
+ /** Batches idle for fewer rendered frames than this are never evicted. */
34
+ export declare const MIN_EVICTION_AGE_FRAMES = 30;
35
+ /**
36
+ * Cold-storage source for phase 3b (evict-to-disk): returns the meshes of
37
+ * every cache chunk intersecting the given world AABB. The Scene filters the
38
+ * result down to one bucket's members (by expressId + bucket base key), so
39
+ * over-fetching neighbours is fine — providers should cache recently decoded
40
+ * chunks since adjacent buckets restore together during a gesture.
41
+ */
42
+ export interface ColdGeometryProvider {
43
+ loadMeshesInBounds(min: [number, number, number], max: [number, number, number]): Promise<import('@ifc-lite/geometry').MeshData[]>;
44
+ }
45
+ /**
46
+ * Select batches to evict so `residentBytes` drops to `budgetBytes` or below.
47
+ * `shells` must contain only ELIGIBLE batches (resident, bucket-owned, CPU
48
+ * geometry retained, not drawn this frame). Returns the keys to evict, LRU
49
+ * first; empty when already within budget or nothing is old enough.
50
+ */
51
+ export declare function selectEvictions(shells: readonly ResidencyShell[], residentBytes: number, budgetBytes: number, currentFrame: number, minAgeFrames?: number): string[];
52
+ //# sourceMappingURL=residency.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"residency.d.ts","sourceRoot":"","sources":["../src/residency.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,gDAAgD;AAChD,MAAM,WAAW,cAAc;IAC7B,0DAA0D;IAC1D,GAAG,EAAE,MAAM,CAAC;IACZ,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,0EAA0E;AAC1E,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAE1C;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACnC,kBAAkB,CAChB,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAC7B,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAC5B,OAAO,CAAC,OAAO,oBAAoB,EAAE,QAAQ,EAAE,CAAC,CAAC;CACrD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,SAAS,cAAc,EAAE,EACjC,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,YAAY,GAAE,MAAgC,GAC7C,MAAM,EAAE,CAeV"}
@@ -0,0 +1,28 @@
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
+ /** Batches idle for fewer rendered frames than this are never evicted. */
5
+ export const MIN_EVICTION_AGE_FRAMES = 30;
6
+ /**
7
+ * Select batches to evict so `residentBytes` drops to `budgetBytes` or below.
8
+ * `shells` must contain only ELIGIBLE batches (resident, bucket-owned, CPU
9
+ * geometry retained, not drawn this frame). Returns the keys to evict, LRU
10
+ * first; empty when already within budget or nothing is old enough.
11
+ */
12
+ export function selectEvictions(shells, residentBytes, budgetBytes, currentFrame, minAgeFrames = MIN_EVICTION_AGE_FRAMES) {
13
+ let excess = residentBytes - budgetBytes;
14
+ if (excess <= 0)
15
+ return [];
16
+ const candidates = shells
17
+ .filter((s) => currentFrame - s.lastDrawnFrame >= minAgeFrames)
18
+ .sort((a, b) => a.lastDrawnFrame - b.lastDrawnFrame);
19
+ const evict = [];
20
+ for (const shell of candidates) {
21
+ if (excess <= 0)
22
+ break;
23
+ evict.push(shell.key);
24
+ excess -= shell.bytes;
25
+ }
26
+ return evict;
27
+ }
28
+ //# sourceMappingURL=residency.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"residency.js","sourceRoot":"","sources":["../src/residency.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAoC/D,0EAA0E;AAC1E,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAgB1C;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,MAAiC,EACjC,aAAqB,EACrB,WAAmB,EACnB,YAAoB,EACpB,eAAuB,uBAAuB;IAE9C,IAAI,MAAM,GAAG,aAAa,GAAG,WAAW,CAAC;IACzC,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAE3B,MAAM,UAAU,GAAG,MAAM;SACtB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,GAAG,CAAC,CAAC,cAAc,IAAI,YAAY,CAAC;SAC9D,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC;IAEvD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,IAAI,MAAM,IAAI,CAAC;YAAE,MAAM;QACvB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC;IACxB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
package/dist/scene.d.ts CHANGED
@@ -5,6 +5,9 @@ import type { Mesh, BatchedMesh, Vec3, PickClipState } from './types.js';
5
5
  import type { MeshData } from '@ifc-lite/geometry';
6
6
  import type { RenderPipeline } from './pipeline.js';
7
7
  import { type BoundingBox, type RaycastHit } from './scene-raycaster.js';
8
+ import { type ResidentGpuBytes } from './render-stats.js';
9
+ import { type SpatialChunkingConfig } from './chunk-grid.js';
10
+ import { type ColdGeometryProvider } from './residency.js';
8
11
  import type { DecodedInstancedShard } from '@ifc-lite/geometry';
9
12
  /**
10
13
  * Release the GPU resources owned by a batch / mesh. Every
@@ -44,6 +47,21 @@ export interface InstancedTemplateGPU {
44
47
  indexCount: number;
45
48
  instanceBuffer: GPUBuffer;
46
49
  instanceCount: number;
50
+ /** Union of the occurrences' world AABBs (null when no occurrence has a
51
+ * finite box — such templates are never culled). Same tuple layout as
52
+ * BatchedMesh.bounds so the render loop's frustum test is shared. */
53
+ bounds: {
54
+ min: [number, number, number];
55
+ max: [number, number, number];
56
+ } | null;
57
+ /** Largest single-occurrence bounding-sphere radius (world units). Upper
58
+ * bound for the contribution cull: no occurrence can project larger than
59
+ * this radius at the union box's nearest view depth. */
60
+ maxOccRadius: number;
61
+ /** Occurrences currently selected (highlight flag set). A template with a
62
+ * selected occurrence is exempt from contribution culling so the highlight
63
+ * can't vanish while the entity is the user's focus. */
64
+ selectedCount: number;
47
65
  }
48
66
  export declare class Scene {
49
67
  private meshes;
@@ -67,6 +85,22 @@ export declare class Scene {
67
85
  private lastInstancedIsolatedIds;
68
86
  private instancedVisibilityDirty;
69
87
  private activeBucketKey;
88
+ private spatialChunking;
89
+ private gpuBudgetBytes;
90
+ private residencyFrame;
91
+ private lastDrawnFrame;
92
+ private residencyRestoreQueue;
93
+ private residencyOverBudgetWarned;
94
+ private coldProvider;
95
+ private hostBudgetBytes;
96
+ private coldBuckets;
97
+ private dirtyBuckets;
98
+ private coldRestoresInFlight;
99
+ private hostOverBudgetWarned;
100
+ private hostEnforceCountdown;
101
+ private lodBuildsEnabled;
102
+ private quantizedBatchesEnabled;
103
+ private finalizeInProgress;
70
104
  private nextSplitId;
71
105
  private nextBatchId;
72
106
  private sharedFrameOrigin;
@@ -99,6 +133,127 @@ export declare class Scene {
99
133
  * the first batch is built). Per-mesh highlight/picker VBOs replicate the
100
134
  * batch's exact f32 path against this so they render bit-coincident. */
101
135
  getSharedFrameOrigin(): [number, number, number] | null;
136
+ /**
137
+ * Enable/disable spatial chunk bucketing (issue #1682 phase 2). When set,
138
+ * colour buckets are additionally partitioned by world grid cell, making
139
+ * batches spatially compact so per-batch frustum/contribution culling
140
+ * fires at chunk granularity. Pure reorganization: same triangles, same
141
+ * shared frame origin, same draw path — only the batch partition changes.
142
+ *
143
+ * Set BEFORE geometry loads. Existing buckets keep their keys (keys are
144
+ * opaque downstream), so flipping mid-model only affects meshes routed
145
+ * afterwards; the next finalize/recolour re-groups stragglers.
146
+ */
147
+ setSpatialChunking(config: SpatialChunkingConfig | null): void;
148
+ getSpatialChunking(): SpatialChunkingConfig | null;
149
+ /** Set (or clear) the GPU residency budget in bytes. */
150
+ setGpuResidencyBudget(bytes: number | null): void;
151
+ getGpuResidencyBudget(): number | null;
152
+ /** Called once at the start of every Renderer.render() — residency ages
153
+ * are measured in RENDERED frames, so idle scenes never age out. */
154
+ beginResidencyFrame(): void;
155
+ /** Record that the draw loop drew this batch this frame. */
156
+ recordBatchDrawn(batch: BatchedMesh): void;
157
+ /**
158
+ * The draw loop wants an evicted batch back on the GPU. Queues its bucket
159
+ * for a time-budgeted rebuild in processResidencyRestores (driven by the
160
+ * app's animation loop) — the batch is skipped this frame and pops back in
161
+ * within a frame or two.
162
+ */
163
+ requestBatchResidency(batch: BatchedMesh): void;
164
+ hasResidencyRestoreWork(): boolean;
165
+ /**
166
+ * Rebuild evicted batches from their buckets' CPU meshData, up to
167
+ * `budgetMs` per call (same time-slicing philosophy as flushPending).
168
+ * Returns the number of batches restored.
169
+ */
170
+ processResidencyRestores(device: GPUDevice, pipeline: RenderPipeline, budgetMs?: number): number;
171
+ /** Wire the cold-storage source (v13 cache chunks). Null disables the tier. */
172
+ setColdGeometryProvider(provider: ColdGeometryProvider | null): void;
173
+ /**
174
+ * Enable LOD1 builds (issue #1682 phase 5): bucket batches built from now
175
+ * on (finalize, rebuild, residency restore) get a simplified second index
176
+ * range when it pays. Set BEFORE geometry loads; streaming fragments and
177
+ * partial/overlay sub-batches never build LOD.
178
+ */
179
+ setLodBuildsEnabled(enabled: boolean): void;
180
+ /**
181
+ * Enable 12-byte lattice-quantized batch vertices (issue #1682 phase 6).
182
+ * ONLY call after the renderer verified its quantized pipeline variants
183
+ * exist (see Renderer.enableQuantizedBatches) — quantized buffers are
184
+ * undrawable without them. Applies to batches built from now on; every
185
+ * createBatchedMesh output (buckets, fragments, partial + override
186
+ * batches) quantizes onto the SAME 2^-10 lattice, so depth-equal overlay
187
+ * matching and cross-batch coincidence are preserved bit-exactly. Batches
188
+ * whose extent exceeds the u16 lattice range fall back to f32 silently.
189
+ */
190
+ setQuantizedBatches(enabled: boolean): void;
191
+ /**
192
+ * Whether THIS mesh's source batch renders quantized — drives the
193
+ * hydrated-mesh lattice snap in createMeshFromData (a mesh whose batch
194
+ * fell back to f32, e.g. >64m extent, must NOT snap). Falls back to the
195
+ * global flag when the mesh isn't bucketed (mid-stream hydration).
196
+ */
197
+ isMeshQuantized(meshData: MeshData): boolean;
198
+ /** Set (or clear) the HOST budget in bytes for bucket CPU geometry. */
199
+ setHostResidencyBudget(bytes: number | null): void;
200
+ /** CPU bytes held by bucket meshData (positions + normals + indices). */
201
+ getResidentCpuBytes(): number;
202
+ /** A bucket whose content diverged from what the cache entry holds
203
+ * (recolour / move / removal) must never be cold-evicted: restoring it
204
+ * from disk would resurrect the pre-edit geometry. */
205
+ private markBucketDirty;
206
+ /**
207
+ * Demote warm buckets (GPU-evicted, CPU kept) to cold (shell only) until
208
+ * bucket CPU bytes fit the host budget. Same LRU policy as the GPU tier.
209
+ * Eligibility is strict: pristine, non-overflow ("#N" sub-buckets are
210
+ * excluded — their piece membership cannot be re-derived unambiguously),
211
+ * GPU-evicted, provider present. Cold eviction removes the bucket's meshes
212
+ * from meshDataMap/meshDataBucket too — that is what actually frees the
213
+ * typed arrays.
214
+ */
215
+ private enforceHostBudget;
216
+ /**
217
+ * Restore EVERY cold bucket to warm (used before the cold provider goes
218
+ * away, e.g. a federated add invalidates the entry-backed provider while
219
+ * primary chunks are cold — without this they would be stranded shells).
220
+ * Resolves when all in-flight restores settle; failures are logged by the
221
+ * per-bucket restore path and leave those buckets cold.
222
+ */
223
+ drainColdTier(): Promise<void>;
224
+ /** Kick off the async disk restore for a cold bucket the draw loop wants.
225
+ * On completion the bucket is warm again and re-queued for GPU rebuild. */
226
+ private startColdRestore;
227
+ /**
228
+ * Synchronously rebuild EVERY evicted bucket batch (no time budget) —
229
+ * for one-shot capture renders (IDS/clash/BCF snapshots) whose isolation
230
+ * options may reveal batches that aged out under the budget. The live
231
+ * view never needs this: visible batches are never evicted. The budget
232
+ * pass re-evicts unused batches after the usual idle age.
233
+ * Returns the number of batches restored.
234
+ */
235
+ restoreAllEvicted(device: GPUDevice, pipeline: RenderPipeline): number;
236
+ /**
237
+ * Evict least-recently-drawn bucket batches until the resident set fits
238
+ * the budget. Called after each frame's submit; destroying just-submitted
239
+ * buffers is safe (WebGPU defers destruction past in-flight work). Never
240
+ * evicts a batch drawn this frame — a visible set larger than the budget
241
+ * renders correctly and stays over budget (warned once).
242
+ */
243
+ enforceGpuBudget(): void;
244
+ /** Destroy + drop cached partial sub-batches derived from `batch` (their
245
+ * sourceBatchKeys embed the batch id, so they are stale once it is
246
+ * evicted/replaced). */
247
+ private dropPartialCacheForBatch;
248
+ /**
249
+ * Bucket BASE key for a mesh: colour key, prefixed with the mesh's grid
250
+ * cell when spatial chunking is on. EVERY bucket-key derivation
251
+ * (streaming append, fragment grouping, finalize re-group, recolour move,
252
+ * partial-batch piece filter) must go through this so a mesh always
253
+ * resolves to the same bucket. `color` overrides the mesh's own colour for
254
+ * recolour routing.
255
+ */
256
+ private bucketBaseKey;
102
257
  /**
103
258
  * Store MeshData for lazy GPU buffer creation (used for selection highlighting)
104
259
  * This avoids creating 2x GPU buffers during streaming
@@ -234,6 +389,15 @@ export declare class Scene {
234
389
  * Translate every flat (non-instanced) mesh for `expressId` by `delta`. See
235
390
  * {@link translateMeshesForEntity} for the full contract; this is the flat half.
236
391
  */
392
+ /**
393
+ * Mark a mesh's bucket for rebuild after its positions were mutated in
394
+ * place (move/rotate), migrating it to a new bucket when spatial chunking
395
+ * is on and the mesh crossed a grid-cell boundary. Without the migration
396
+ * the mesh would keep its stale cell key, so the partial-batch piece
397
+ * filter (which re-derives keys from CURRENT positions) would silently
398
+ * drop it under hide/isolate. Same move mechanics as updateMeshColors.
399
+ */
400
+ private rebucketMovedMesh;
237
401
  private translateFlatMeshesForEntity;
238
402
  /**
239
403
  * Translate every GPU-instanced occurrence of `expressId` by `delta` in the
@@ -300,6 +464,10 @@ export declare class Scene {
300
464
  * re-batched (e.g. by a move) the fragment becomes a stale duplicate, so the
301
465
  * caller should `finalizeStreaming` to merge fragments away. */
302
466
  hasStreamingFragments(): boolean;
467
+ /** True while a finalize rebuild (sync or time-sliced) is mid-flight —
468
+ * the fragment list is already cleared then, so settle-sensitive callers
469
+ * must check BOTH this and hasStreamingFragments(). */
470
+ isFinalizeInProgress(): boolean;
303
471
  /** True when streaming runs in ephemeral mode (huge files) — fragments render
304
472
  * directly from GPU and geometry is NOT retained for re-batch, so callers
305
473
  * must NOT finalize (there's nothing to rebuild the batches from). */
@@ -332,6 +500,7 @@ export declare class Scene {
332
500
  * meshData by their CURRENT color to produce correct batches.
333
501
  */
334
502
  finalizeStreaming(device: GPUDevice, pipeline: RenderPipeline): void;
503
+ private finalizeStreamingInner;
335
504
  /**
336
505
  * Time-sliced version of finalizeStreaming.
337
506
  * Re-groups mesh data and rebuilds GPU batches in small chunks,
@@ -458,6 +627,17 @@ export declare class Scene {
458
627
  */
459
628
  /** Textured meshes (#961) for the renderer's dedicated textured sub-pass. */
460
629
  getTexturedMeshes(): readonly TexturedMesh[];
630
+ /**
631
+ * GPU bytes currently held by the scene's mesh collections (issue #1682
632
+ * observability). Sums actual `GPUBuffer.size` values across colour batches
633
+ * (streaming fragments are members of `batchedMeshes`, so they are counted
634
+ * exactly once), cached partial sub-batches, hydrated individual meshes,
635
+ * textured meshes (plus a 4 B/texel texture estimate) and instanced
636
+ * templates. Instanced templates are counted even while hidden in the Types
637
+ * view: hiding does not free their buffers. O(collections) walk with no GPU
638
+ * calls, intended for on-demand telemetry, not per-frame use.
639
+ */
640
+ getResidentGpuBytes(): ResidentGpuBytes;
461
641
  /**
462
642
  * Toggle the instanced draw pass. Instanced geometry is class-0 occurrences
463
643
  * (the Model view); hide it in the Types view mode, where the flat path shows
@@ -487,7 +667,8 @@ export declare class Scene {
487
667
  addInstancedShard(device: GPUDevice, shard: DecodedInstancedShard): void;
488
668
  /** Transform a template's local AABB by an occurrence's column-major mat4 (read
489
669
  * from the packed instance record at `matOffset`) and union the world box into
490
- * boundingBoxes[eid]. */
670
+ * boundingBoxes[eid]. Returns the occurrence's world box so the caller can also
671
+ * fold it into the template's cull metadata. */
491
672
  private unionInstancedWorldAabb;
492
673
  /** True if `expressId` is a GPU-instanced occurrence (lives only in the instanced
493
674
  * shard, not the flat meshDataMap). CPU consumers use this to decide whether to
@@ -496,6 +677,10 @@ export declare class Scene {
496
677
  /** All instanced occurrence express_ids (for CPU consumers that enumerate geometry,
497
678
  * e.g. the raycast-engine and exporters). */
498
679
  getInstancedEntityIds(): IterableIterator<number>;
680
+ /** Number of distinct GPU-instanced entities. O(1) — for size heuristics
681
+ * (e.g. the orbit-pivot raycast skip) that must not miss instanced-heavy
682
+ * models where the flat mesh/batch census reads deceptively small. */
683
+ getInstancedEntityCount(): number;
499
684
  /** Materialize EVERY instanced occurrence as world-space MeshData. Transient + not
500
685
  * retained — for one-shot full-geometry consumers (glTF / IFC5 export) that must
501
686
  * include the instanced occurrences absent from geometryResult.meshes. Returns []
@@ -516,6 +701,10 @@ export declare class Scene {
516
701
  * re-draw is needed. No-op until a shard has been uploaded.
517
702
  */
518
703
  setInstancedSelection(expressIds: ReadonlySet<number>): void;
704
+ /** Keep each template's selectedCount in sync with selection flips so the
705
+ * render loop can exempt templates with selected occurrences from
706
+ * contribution culling (the highlight must not vanish on the user's focus). */
707
+ private bumpTemplateSelectedCount;
519
708
  /**
520
709
  * Per-instance VISIBILITY (hide / isolate): set the hidden flag bit on occurrences
521
710
  * that should not render, mirroring the flat path's hiddenIds/isolatedIds filter.
@@ -1 +1 @@
1
- {"version":3,"file":"scene.d.ts","sourceRoot":"","sources":["../src/scene.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scene.d.ts","sourceRoot":"","sources":["../src/scene.ts"],"names":[],"mappings":"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"}