@loaders.gl/tiles 4.4.5 → 5.0.0-alpha.2
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/LICENSE +14 -3
- package/README.md +110 -1
- package/dist/dist.dev.js +6588 -2057
- package/dist/dist.min.js +1 -1
- package/dist/image-set.d.ts +94 -0
- package/dist/image-set.d.ts.map +1 -0
- package/dist/image-set.js +243 -0
- package/dist/image-set.js.map +1 -0
- package/dist/index.cjs +6872 -2160
- package/dist/index.cjs.map +3 -4
- package/dist/index.d.ts +33 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -8
- package/dist/index.js.map +1 -1
- package/dist/point-cloud/point-cloud-tile.d.ts +47 -0
- package/dist/point-cloud/point-cloud-tile.d.ts.map +1 -0
- package/dist/point-cloud/point-cloud-tile.js +70 -0
- package/dist/point-cloud/point-cloud-tile.js.map +1 -0
- package/dist/point-cloud/point-cloud-tileset.d.ts +131 -0
- package/dist/point-cloud/point-cloud-tileset.d.ts.map +1 -0
- package/dist/point-cloud/point-cloud-tileset.js +510 -0
- package/dist/point-cloud/point-cloud-tileset.js.map +1 -0
- package/dist/point-cloud/types.d.ts +64 -0
- package/dist/point-cloud/types.d.ts.map +1 -0
- package/dist/point-cloud/types.js +5 -0
- package/dist/point-cloud/types.js.map +1 -0
- package/dist/raster-set.d.ts +113 -0
- package/dist/raster-set.d.ts.map +1 -0
- package/dist/raster-set.js +274 -0
- package/dist/raster-set.js.map +1 -0
- package/dist/tileset-2d/adapter.d.ts +38 -0
- package/dist/tileset-2d/adapter.d.ts.map +1 -0
- package/dist/tileset-2d/adapter.js +5 -0
- package/dist/tileset-2d/adapter.js.map +1 -0
- package/dist/tileset-2d/index.d.ts +7 -0
- package/dist/tileset-2d/index.d.ts.map +1 -0
- package/dist/tileset-2d/index.js +6 -0
- package/dist/tileset-2d/index.js.map +1 -0
- package/dist/tileset-2d/tile-2d-header.d.ts +68 -0
- package/dist/tileset-2d/tile-2d-header.d.ts.map +1 -0
- package/dist/tileset-2d/tile-2d-header.js +181 -0
- package/dist/tileset-2d/tile-2d-header.js.map +1 -0
- package/dist/tileset-2d/tileset-2d.d.ts +201 -0
- package/dist/tileset-2d/tileset-2d.d.ts.map +1 -0
- package/dist/tileset-2d/tileset-2d.js +532 -0
- package/dist/tileset-2d/tileset-2d.js.map +1 -0
- package/dist/tileset-2d/types.d.ts +44 -0
- package/dist/tileset-2d/types.d.ts.map +1 -0
- package/dist/tileset-2d/types.js +5 -0
- package/dist/tileset-2d/types.js.map +1 -0
- package/dist/tileset-2d.d.ts +2 -0
- package/dist/tileset-2d.d.ts.map +1 -0
- package/dist/tileset-2d.js +5 -0
- package/dist/tileset-2d.js.map +1 -0
- package/dist/tileset-3d/common/indexed-archive-tileset-source.d.ts +60 -0
- package/dist/tileset-3d/common/indexed-archive-tileset-source.d.ts.map +1 -0
- package/dist/tileset-3d/common/indexed-archive-tileset-source.js +125 -0
- package/dist/tileset-3d/common/indexed-archive-tileset-source.js.map +1 -0
- package/dist/{tileset → tileset-3d/common}/tile-3d.d.ts +133 -29
- package/dist/tileset-3d/common/tile-3d.d.ts.map +1 -0
- package/dist/{tileset → tileset-3d/common}/tile-3d.js +282 -77
- package/dist/tileset-3d/common/tile-3d.js.map +1 -0
- package/dist/tileset-3d/common/tileset-3d.d.ts +317 -0
- package/dist/tileset-3d/common/tileset-3d.d.ts.map +1 -0
- package/dist/tileset-3d/common/tileset-3d.js +807 -0
- package/dist/tileset-3d/common/tileset-3d.js.map +1 -0
- package/dist/tileset-3d/common/tileset-cache.d.ts +29 -0
- package/dist/tileset-3d/common/tileset-cache.d.ts.map +1 -0
- package/dist/{tileset → tileset-3d/common}/tileset-cache.js +12 -4
- package/dist/tileset-3d/common/tileset-cache.js.map +1 -0
- package/dist/tileset-3d/common/tileset-source.d.ts +204 -0
- package/dist/tileset-3d/common/tileset-source.d.ts.map +1 -0
- package/dist/tileset-3d/common/tileset-source.js +17 -0
- package/dist/tileset-3d/common/tileset-source.js.map +1 -0
- package/dist/{tileset → tileset-3d/common}/tileset-traverser.d.ts +15 -2
- package/dist/tileset-3d/common/tileset-traverser.d.ts.map +1 -0
- package/dist/{tileset → tileset-3d/common}/tileset-traverser.js +30 -3
- package/dist/tileset-3d/common/tileset-traverser.js.map +1 -0
- package/dist/tileset-3d/format-3d-tiles/implicit-tiling.d.ts +111 -0
- package/dist/tileset-3d/format-3d-tiles/implicit-tiling.d.ts.map +1 -0
- package/dist/tileset-3d/format-3d-tiles/implicit-tiling.js +340 -0
- package/dist/tileset-3d/format-3d-tiles/implicit-tiling.js.map +1 -0
- package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.d.ts +189 -0
- package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.d.ts.map +1 -0
- package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.js +510 -0
- package/dist/tileset-3d/format-3d-tiles/tiles-3d-source.js.map +1 -0
- package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.d.ts +43 -0
- package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.d.ts.map +1 -0
- package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.js +119 -0
- package/dist/tileset-3d/format-3d-tiles/tileset-3d-traverser.js.map +1 -0
- package/dist/tileset-3d/format-i3s/i3s-pending-tiles-register.d.ts.map +1 -0
- package/dist/{tileset → tileset-3d}/format-i3s/i3s-pending-tiles-register.js +3 -0
- package/dist/tileset-3d/format-i3s/i3s-pending-tiles-register.js.map +1 -0
- package/dist/tileset-3d/format-i3s/i3s-source.d.ts +99 -0
- package/dist/tileset-3d/format-i3s/i3s-source.d.ts.map +1 -0
- package/dist/tileset-3d/format-i3s/i3s-source.js +299 -0
- package/dist/tileset-3d/format-i3s/i3s-source.js.map +1 -0
- package/dist/tileset-3d/format-i3s/i3s-tile-manager.d.ts.map +1 -0
- package/dist/{tileset → tileset-3d}/format-i3s/i3s-tile-manager.js +5 -2
- package/dist/tileset-3d/format-i3s/i3s-tile-manager.js.map +1 -0
- package/dist/{tileset → tileset-3d}/format-i3s/i3s-tileset-traverser.d.ts +2 -2
- package/dist/tileset-3d/format-i3s/i3s-tileset-traverser.d.ts.map +1 -0
- package/dist/{tileset → tileset-3d}/format-i3s/i3s-tileset-traverser.js +17 -23
- package/dist/tileset-3d/format-i3s/i3s-tileset-traverser.js.map +1 -0
- package/dist/{tileset → tileset-3d}/helpers/3d-tiles-options.d.ts +1 -1
- package/dist/tileset-3d/helpers/3d-tiles-options.d.ts.map +1 -0
- package/dist/{tileset → tileset-3d}/helpers/3d-tiles-options.js +3 -0
- package/dist/tileset-3d/helpers/3d-tiles-options.js.map +1 -0
- package/dist/tileset-3d/helpers/bounding-volume.d.ts.map +1 -0
- package/dist/{tileset → tileset-3d}/helpers/bounding-volume.js +1 -0
- package/dist/tileset-3d/helpers/bounding-volume.js.map +1 -0
- package/dist/tileset-3d/helpers/frame-state.d.ts +86 -0
- package/dist/tileset-3d/helpers/frame-state.d.ts.map +1 -0
- package/dist/{tileset → tileset-3d}/helpers/frame-state.js +84 -9
- package/dist/tileset-3d/helpers/frame-state.js.map +1 -0
- package/dist/{tileset → tileset-3d}/helpers/i3s-lod.d.ts +1 -1
- package/dist/tileset-3d/helpers/i3s-lod.d.ts.map +1 -0
- package/dist/{tileset → tileset-3d}/helpers/i3s-lod.js +1 -1
- package/dist/tileset-3d/helpers/i3s-lod.js.map +1 -0
- package/dist/tileset-3d/helpers/tiles-3d-lod.d.ts +72 -0
- package/dist/tileset-3d/helpers/tiles-3d-lod.d.ts.map +1 -0
- package/dist/tileset-3d/helpers/tiles-3d-lod.js +257 -0
- package/dist/tileset-3d/helpers/tiles-3d-lod.js.map +1 -0
- package/dist/tileset-3d/helpers/tiles-3d-request-priority.d.ts +134 -0
- package/dist/tileset-3d/helpers/tiles-3d-request-priority.d.ts.map +1 -0
- package/dist/tileset-3d/helpers/tiles-3d-request-priority.js +179 -0
- package/dist/tileset-3d/helpers/tiles-3d-request-priority.js.map +1 -0
- package/dist/{tileset → tileset-3d}/helpers/transform-utils.d.ts +1 -1
- package/dist/tileset-3d/helpers/transform-utils.d.ts.map +1 -0
- package/dist/tileset-3d/helpers/transform-utils.js.map +1 -0
- package/dist/tileset-3d/helpers/zoom.d.ts.map +1 -0
- package/dist/tileset-3d/helpers/zoom.js.map +1 -0
- package/dist/types.d.ts +9 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -1
- package/dist/utils/doubly-linked-list.d.ts.map +1 -1
- package/dist/utils/doubly-linked-list.js +1 -0
- package/dist/utils/doubly-linked-list.js.map +1 -1
- package/dist/utils/managed-array.d.ts.map +1 -1
- package/dist/utils/managed-array.js +1 -0
- package/dist/utils/managed-array.js.map +1 -1
- package/package.json +7 -6
- package/src/image-set.ts +328 -0
- package/src/index.ts +99 -9
- package/src/point-cloud/point-cloud-tile.ts +80 -0
- package/src/point-cloud/point-cloud-tileset.ts +713 -0
- package/src/point-cloud/types.ts +82 -0
- package/src/raster-set.ts +412 -0
- package/src/tileset-2d/adapter.ts +47 -0
- package/src/tileset-2d/index.ts +33 -0
- package/src/tileset-2d/tile-2d-header.ts +224 -0
- package/src/tileset-2d/tileset-2d.ts +716 -0
- package/src/tileset-2d/types.ts +39 -0
- package/src/tileset-2d.ts +5 -0
- package/src/tileset-3d/common/indexed-archive-tileset-source.ts +205 -0
- package/src/{tileset → tileset-3d/common}/tile-3d.ts +348 -93
- package/src/tileset-3d/common/tileset-3d.ts +1087 -0
- package/src/{tileset → tileset-3d/common}/tileset-cache.ts +16 -8
- package/src/tileset-3d/common/tileset-source.ts +255 -0
- package/src/{tileset → tileset-3d/common}/tileset-traverser.ts +32 -4
- package/src/tileset-3d/format-3d-tiles/implicit-tiling.ts +534 -0
- package/src/tileset-3d/format-3d-tiles/tiles-3d-source.ts +632 -0
- package/src/tileset-3d/format-3d-tiles/tileset-3d-traverser.ts +140 -0
- package/src/{tileset → tileset-3d}/format-i3s/i3s-pending-tiles-register.ts +4 -0
- package/src/tileset-3d/format-i3s/i3s-source.ts +366 -0
- package/src/{tileset → tileset-3d}/format-i3s/i3s-tile-manager.ts +6 -2
- package/src/{tileset → tileset-3d}/format-i3s/i3s-tileset-traverser.ts +19 -24
- package/src/{tileset → tileset-3d}/helpers/3d-tiles-options.ts +5 -1
- package/src/{tileset → tileset-3d}/helpers/bounding-volume.ts +2 -0
- package/src/tileset-3d/helpers/frame-state.ts +311 -0
- package/src/{tileset → tileset-3d}/helpers/i3s-lod.ts +2 -2
- package/src/tileset-3d/helpers/tiles-3d-lod.ts +370 -0
- package/src/tileset-3d/helpers/tiles-3d-request-priority.ts +301 -0
- package/src/{tileset → tileset-3d}/helpers/transform-utils.ts +1 -1
- package/src/types.ts +13 -0
- package/src/utils/doubly-linked-list.ts +2 -0
- package/src/utils/managed-array.ts +2 -0
- package/dist/tileset/format-3d-tiles/tileset-3d-traverser.d.ts +0 -7
- package/dist/tileset/format-3d-tiles/tileset-3d-traverser.d.ts.map +0 -1
- package/dist/tileset/format-3d-tiles/tileset-3d-traverser.js +0 -53
- package/dist/tileset/format-3d-tiles/tileset-3d-traverser.js.map +0 -1
- package/dist/tileset/format-i3s/i3s-pending-tiles-register.d.ts.map +0 -1
- package/dist/tileset/format-i3s/i3s-pending-tiles-register.js.map +0 -1
- package/dist/tileset/format-i3s/i3s-tile-manager.d.ts.map +0 -1
- package/dist/tileset/format-i3s/i3s-tile-manager.js.map +0 -1
- package/dist/tileset/format-i3s/i3s-tileset-traverser.d.ts.map +0 -1
- package/dist/tileset/format-i3s/i3s-tileset-traverser.js.map +0 -1
- package/dist/tileset/helpers/3d-tiles-options.d.ts.map +0 -1
- package/dist/tileset/helpers/3d-tiles-options.js.map +0 -1
- package/dist/tileset/helpers/bounding-volume.d.ts.map +0 -1
- package/dist/tileset/helpers/bounding-volume.js.map +0 -1
- package/dist/tileset/helpers/frame-state.d.ts +0 -28
- package/dist/tileset/helpers/frame-state.d.ts.map +0 -1
- package/dist/tileset/helpers/frame-state.js.map +0 -1
- package/dist/tileset/helpers/i3s-lod.d.ts.map +0 -1
- package/dist/tileset/helpers/i3s-lod.js.map +0 -1
- package/dist/tileset/helpers/tiles-3d-lod.d.ts +0 -8
- package/dist/tileset/helpers/tiles-3d-lod.d.ts.map +0 -1
- package/dist/tileset/helpers/tiles-3d-lod.js +0 -113
- package/dist/tileset/helpers/tiles-3d-lod.js.map +0 -1
- package/dist/tileset/helpers/transform-utils.d.ts.map +0 -1
- package/dist/tileset/helpers/transform-utils.js.map +0 -1
- package/dist/tileset/helpers/zoom.d.ts.map +0 -1
- package/dist/tileset/helpers/zoom.js.map +0 -1
- package/dist/tileset/tile-3d.d.ts.map +0 -1
- package/dist/tileset/tile-3d.js.map +0 -1
- package/dist/tileset/tileset-3d.d.ts +0 -284
- package/dist/tileset/tileset-3d.d.ts.map +0 -1
- package/dist/tileset/tileset-3d.js +0 -814
- package/dist/tileset/tileset-3d.js.map +0 -1
- package/dist/tileset/tileset-cache.d.ts +0 -19
- package/dist/tileset/tileset-cache.d.ts.map +0 -1
- package/dist/tileset/tileset-cache.js.map +0 -1
- package/dist/tileset/tileset-traverser.d.ts.map +0 -1
- package/dist/tileset/tileset-traverser.js.map +0 -1
- package/src/tileset/format-3d-tiles/tileset-3d-traverser.ts +0 -63
- package/src/tileset/helpers/frame-state.ts +0 -183
- package/src/tileset/helpers/tiles-3d-lod.ts +0 -149
- package/src/tileset/tileset-3d.ts +0 -1037
- /package/dist/{tileset → tileset-3d}/format-i3s/i3s-pending-tiles-register.d.ts +0 -0
- /package/dist/{tileset → tileset-3d}/format-i3s/i3s-tile-manager.d.ts +0 -0
- /package/dist/{tileset → tileset-3d}/helpers/bounding-volume.d.ts +0 -0
- /package/dist/{tileset → tileset-3d}/helpers/transform-utils.js +0 -0
- /package/dist/{tileset → tileset-3d}/helpers/zoom.d.ts +0 -0
- /package/dist/{tileset → tileset-3d}/helpers/zoom.js +0 -0
- /package/src/{tileset → tileset-3d}/helpers/zoom.ts +0 -0
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
import type {Tileset3D} from './tileset-3d';
|
|
9
9
|
import type {Tile3D} from './tile-3d';
|
|
10
|
-
import {DoublyLinkedList} from '
|
|
10
|
+
import {DoublyLinkedList} from '../../utils/doubly-linked-list';
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* Stores tiles with content loaded.
|
|
@@ -71,24 +71,32 @@ export class TilesetCache {
|
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
-
|
|
74
|
+
/**
|
|
75
|
+
* Unloads least-recently-used tiles until the byte-native cache target is met.
|
|
76
|
+
*
|
|
77
|
+
* Tiles touched after the frame sentinel remain protected, so {@link Tileset3D.cacheBytes} is a
|
|
78
|
+
* soft target rather than a hard cap on the visible working set. Overflow headroom affects
|
|
79
|
+
* memory-adjusted SSE, not eviction of unused tiles.
|
|
80
|
+
*
|
|
81
|
+
* @param tileset - Tileset that owns the cache and reports estimated content memory.
|
|
82
|
+
* @param unloadCallback - Callback that releases content and decrements the memory estimate.
|
|
83
|
+
*/
|
|
84
|
+
unloadTiles(
|
|
85
|
+
tileset: Tileset3D,
|
|
86
|
+
unloadCallback?: (tileset: Tileset3D, tile: Tile3D) => void
|
|
87
|
+
): void {
|
|
75
88
|
const trimTiles = this._trimTiles;
|
|
76
89
|
this._trimTiles = false;
|
|
77
90
|
|
|
78
91
|
const list = this._list;
|
|
79
92
|
|
|
80
|
-
const maximumMemoryUsageInBytes = tileset.maximumMemoryUsage * 1024 * 1024;
|
|
81
|
-
|
|
82
93
|
// Traverse the list only to the sentinel since tiles/nodes to the
|
|
83
94
|
// right of the sentinel were used this frame.
|
|
84
95
|
// The sub-list to the left of the sentinel is ordered from LRU to MRU.
|
|
85
96
|
const sentinel = this._sentinel;
|
|
86
97
|
let node = list.head;
|
|
87
98
|
|
|
88
|
-
while (
|
|
89
|
-
node !== sentinel &&
|
|
90
|
-
(tileset.gpuMemoryUsageInBytes > maximumMemoryUsageInBytes || trimTiles)
|
|
91
|
-
) {
|
|
99
|
+
while (node !== sentinel && (tileset.gpuMemoryUsageInBytes > tileset.cacheBytes || trimTiles)) {
|
|
92
100
|
// @ts-expect-error
|
|
93
101
|
const tile = node.item;
|
|
94
102
|
// @ts-expect-error
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import type {CoreAPI, LoaderOptions, LoaderWithParser} from '@loaders.gl/loader-utils';
|
|
6
|
+
import type {Vector3} from '@math.gl/core';
|
|
7
|
+
import type {TilesetTraverser, TilesetTraverserProps} from './tileset-traverser';
|
|
8
|
+
import type {Tile3D} from './tile-3d';
|
|
9
|
+
import type {Tileset3D} from './tileset-3d';
|
|
10
|
+
import type {FrameState} from '../helpers/frame-state';
|
|
11
|
+
import type {TILESET_TYPE} from '../../constants';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Parsed top-level tileset payload consumed by {@link Tileset3D} or a {@link Tileset3DSource}.
|
|
15
|
+
*/
|
|
16
|
+
export type TilesetJSON = any;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Resource-loading strategy used by source implementations to fetch and parse root metadata
|
|
20
|
+
* and tile resources.
|
|
21
|
+
*/
|
|
22
|
+
export type TilesetSourceResolver = {
|
|
23
|
+
/**
|
|
24
|
+
* Loads and parses the root metadata resource for a source.
|
|
25
|
+
*/
|
|
26
|
+
loadRoot<DataT>(
|
|
27
|
+
url: string,
|
|
28
|
+
loader: LoaderWithParser<DataT>,
|
|
29
|
+
loadOptions: LoaderOptions
|
|
30
|
+
): Promise<DataT>;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Loads and parses an arbitrary source-relative resource.
|
|
34
|
+
*/
|
|
35
|
+
loadResource<DataT>(
|
|
36
|
+
url: string,
|
|
37
|
+
loader: LoaderWithParser<DataT>,
|
|
38
|
+
loadOptions: LoaderOptions
|
|
39
|
+
): Promise<DataT>;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* URL-based source input used when a source is responsible for fetching root metadata.
|
|
44
|
+
*/
|
|
45
|
+
export type TilesetSourceRequest = {
|
|
46
|
+
/** Absolute root metadata URL. */
|
|
47
|
+
url: string;
|
|
48
|
+
/** Loader used to fetch and parse the root metadata. */
|
|
49
|
+
loader: LoaderWithParser;
|
|
50
|
+
/** Optional base path override for relative resources. */
|
|
51
|
+
basePath?: string;
|
|
52
|
+
/** Optional resource-loading strategy used for archive-backed datasets. */
|
|
53
|
+
resolver?: TilesetSourceResolver;
|
|
54
|
+
/** Optional core API implementation used for nested source loading. */
|
|
55
|
+
coreApi?: CoreAPI;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Constructor input accepted by explicit source implementations.
|
|
60
|
+
*
|
|
61
|
+
* Request descriptors are the public path. Preloaded metadata remains useful for tests and
|
|
62
|
+
* internal call sites that already own parsed root metadata.
|
|
63
|
+
*/
|
|
64
|
+
export type TilesetSourceInput = TilesetJSON | TilesetSourceRequest;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Result of a source-managed tile content request.
|
|
68
|
+
*/
|
|
69
|
+
export type TileContentLoadResult = {
|
|
70
|
+
/** Whether the tile content request produced usable content. */
|
|
71
|
+
loaded: boolean;
|
|
72
|
+
/** Nested tileset metadata to install below the loaded tile, if any. */
|
|
73
|
+
nestedTileset?: TilesetJSON;
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
/** Result of a source-managed lazy child-header request. */
|
|
77
|
+
export type TileChildrenLoadResult = {
|
|
78
|
+
/** Whether a subtree resource was loaded and installed. */
|
|
79
|
+
loaded: boolean;
|
|
80
|
+
/** Number of available tiles described by the subtree, including its existing root placeholder. */
|
|
81
|
+
tileCount: number;
|
|
82
|
+
/** Number of lazy child-subtree references installed at the new boundary. */
|
|
83
|
+
childSubtreeCount: number;
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Flags describing compression and texture formats observed while streaming tile content.
|
|
88
|
+
*/
|
|
89
|
+
export type TilesetContentFormats = {
|
|
90
|
+
draco: boolean;
|
|
91
|
+
meshopt: boolean;
|
|
92
|
+
dds: boolean;
|
|
93
|
+
ktx2: boolean;
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Optional view-state metadata exposed by a {@link Tileset3DSource} after initialization.
|
|
98
|
+
*/
|
|
99
|
+
export type TilesetSourceViewState = {
|
|
100
|
+
cartographicCenter?: Vector3 | null;
|
|
101
|
+
cartesianCenter?: Vector3 | null;
|
|
102
|
+
zoom?: number;
|
|
103
|
+
boundingVolume?: any;
|
|
104
|
+
description?: string;
|
|
105
|
+
properties?: any;
|
|
106
|
+
extras?: any;
|
|
107
|
+
credits?: any;
|
|
108
|
+
asset?: Record<string, any>;
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Normalized source metadata consumed by {@link Tileset3D}.
|
|
113
|
+
*/
|
|
114
|
+
export type TilesetSourceMetadata = {
|
|
115
|
+
/** Format discriminator. */
|
|
116
|
+
type: TILESET_TYPE;
|
|
117
|
+
/** Loader used for metadata and content requests. */
|
|
118
|
+
loader: LoaderWithParser;
|
|
119
|
+
/** Absolute root metadata URL. */
|
|
120
|
+
url: string;
|
|
121
|
+
/** Base path used for relative resource resolution. */
|
|
122
|
+
basePath: string;
|
|
123
|
+
/** Parsed and normalized source payload. */
|
|
124
|
+
tileset: TilesetJSON;
|
|
125
|
+
/** Root lod metric type used as fallback by runtime tiles. */
|
|
126
|
+
lodMetricType: string;
|
|
127
|
+
/** Root lod metric value used as fallback by runtime tiles. */
|
|
128
|
+
lodMetricValue: number;
|
|
129
|
+
/** Root refinement mode used as fallback by runtime tiles. */
|
|
130
|
+
refine: string;
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Format-specific adapter used by {@link Tileset3D} for initialization, loading, and metadata access.
|
|
135
|
+
*/
|
|
136
|
+
export interface Tileset3DSource {
|
|
137
|
+
/** Tileset format discriminator. */
|
|
138
|
+
readonly type: TILESET_TYPE;
|
|
139
|
+
/** Loader used for content and metadata requests. */
|
|
140
|
+
readonly loader: LoaderWithParser;
|
|
141
|
+
/** Absolute URL of the root tileset resource. */
|
|
142
|
+
readonly url: string;
|
|
143
|
+
/** Base directory used for relative resource resolution. */
|
|
144
|
+
readonly basePath: string;
|
|
145
|
+
/** Source-specific root tileset payload, when available. */
|
|
146
|
+
readonly tileset?: TilesetJSON | null;
|
|
147
|
+
/** Loader options forwarded to metadata and content requests. */
|
|
148
|
+
readonly loadOptions: LoaderOptions;
|
|
149
|
+
/** Core API used for source-managed loads, when injected by the caller. */
|
|
150
|
+
coreApi?: CoreAPI;
|
|
151
|
+
/** Accumulated content-format flags for the tileset. */
|
|
152
|
+
readonly contentFormats: TilesetContentFormats;
|
|
153
|
+
/** Format-specific asset metadata, if any. */
|
|
154
|
+
asset?: Record<string, any>;
|
|
155
|
+
/** Per-feature property schema, if any. */
|
|
156
|
+
properties?: any;
|
|
157
|
+
/** Application-specific root metadata, if any. */
|
|
158
|
+
extras?: any;
|
|
159
|
+
/** Attribution and credit metadata, if any. */
|
|
160
|
+
credits?: any;
|
|
161
|
+
|
|
162
|
+
/** Normalized source metadata after initialization. */
|
|
163
|
+
metadata?: TilesetSourceMetadata;
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Initializes source state before traversal begins.
|
|
167
|
+
*/
|
|
168
|
+
initialize(): Promise<void>;
|
|
169
|
+
|
|
170
|
+
/** Releases source-local caches and prevents late asynchronous work from mutating runtime tiles. */
|
|
171
|
+
destroy?(): void;
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Returns normalized source metadata after initialization completes.
|
|
175
|
+
*/
|
|
176
|
+
getMetadata(): TilesetSourceMetadata;
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Returns the root tileset payload after source initialization completes.
|
|
180
|
+
*/
|
|
181
|
+
getRootTileset(): Promise<TilesetJSON>;
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Creates the runtime tile tree for a tileset payload or nested subtree.
|
|
185
|
+
*/
|
|
186
|
+
initializeTileHeaders(
|
|
187
|
+
tileset: Tileset3D,
|
|
188
|
+
tilesetJson: TilesetJSON,
|
|
189
|
+
parentTile?: Tile3D | null
|
|
190
|
+
): Tile3D;
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Creates the traverser implementation appropriate for this source.
|
|
194
|
+
*/
|
|
195
|
+
createTraverser(options: TilesetTraverserProps): TilesetTraverser;
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Loads renderable content for a tile.
|
|
199
|
+
*/
|
|
200
|
+
loadTileContent(tile: Tile3D): Promise<TileContentLoadResult>;
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Loads and installs a complete lazy child-header group for a runtime tile.
|
|
204
|
+
*
|
|
205
|
+
* Sources that implement this hook retain ownership of resource parsing, caching, query
|
|
206
|
+
* inheritance, and archive resolution. Traversal calls it only after visibility and LOD checks.
|
|
207
|
+
*/
|
|
208
|
+
loadTileChildren?(tile: Tile3D, frameState: FrameState): Promise<TileChildrenLoadResult>;
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Resolves a tile-relative path to the final request URL.
|
|
212
|
+
*/
|
|
213
|
+
getTileUrl(tilePath: string): string;
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Returns tileset-level view metadata derived from the loaded source.
|
|
217
|
+
*/
|
|
218
|
+
getViewState(rootTile: Tile3D | null): TilesetSourceViewState;
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* Checks whether the source declares a specific extension.
|
|
222
|
+
*/
|
|
223
|
+
hasExtension?(extensionName: string): boolean;
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Loads child tile metadata on demand for formats that do not expose the full tree up front.
|
|
227
|
+
*/
|
|
228
|
+
loadChildTileHeader?(parentTile: Tile3D, childId: string, frameState: FrameState): Promise<any>;
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* Updates source-managed bookkeeping after a tile finishes loading.
|
|
232
|
+
*/
|
|
233
|
+
onTileLoaded?(tileset: Tileset3D, tile: Tile3D, loadResult: TileContentLoadResult): void;
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* Returns the total known tile count for stats, if available.
|
|
237
|
+
*/
|
|
238
|
+
getTilesTotalCount?(): number | null;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* Type guard for distinguishing a source-backed constructor input from other runtime values.
|
|
243
|
+
* @param value Value to test.
|
|
244
|
+
* @returns `true` when the value implements the {@link Tileset3DSource} contract.
|
|
245
|
+
*/
|
|
246
|
+
export function isTileset3DSource(value: unknown): value is Tileset3DSource {
|
|
247
|
+
return Boolean(
|
|
248
|
+
value &&
|
|
249
|
+
typeof value === 'object' &&
|
|
250
|
+
'initialize' in value &&
|
|
251
|
+
'getRootTileset' in value &&
|
|
252
|
+
'initializeTileHeaders' in value &&
|
|
253
|
+
'loadTileContent' in value
|
|
254
|
+
);
|
|
255
|
+
}
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
|
|
5
5
|
import type {Tile3D} from './tile-3d';
|
|
6
|
-
import {ManagedArray} from '
|
|
7
|
-
import {TILE_REFINEMENT} from '
|
|
8
|
-
import {FrameState} from '
|
|
6
|
+
import {ManagedArray} from '../../utils/managed-array';
|
|
7
|
+
import {TILE_REFINEMENT} from '../../constants';
|
|
8
|
+
import {FrameState} from '../helpers/frame-state';
|
|
9
9
|
|
|
10
10
|
export type TilesetTraverserProps = {
|
|
11
11
|
loadSiblings?: boolean;
|
|
@@ -35,6 +35,8 @@ export class TilesetTraverser {
|
|
|
35
35
|
selectedTiles: Record<string, Tile3D> = {};
|
|
36
36
|
// tiles should be loaded from server
|
|
37
37
|
requestedTiles: Record<string, Tile3D> = {};
|
|
38
|
+
/** Tiles intentionally held until the camera has remained still for the configured delay. */
|
|
39
|
+
deferredTiles: Record<string, Tile3D> = {};
|
|
38
40
|
// tiles does not have render content
|
|
39
41
|
emptyTiles: Record<string, Tile3D> = {};
|
|
40
42
|
|
|
@@ -73,6 +75,7 @@ export class TilesetTraverser {
|
|
|
73
75
|
|
|
74
76
|
reset() {
|
|
75
77
|
this.requestedTiles = {};
|
|
78
|
+
this.deferredTiles = {};
|
|
76
79
|
this.selectedTiles = {};
|
|
77
80
|
this.emptyTiles = {};
|
|
78
81
|
this._traversalStack.reset();
|
|
@@ -235,12 +238,30 @@ export class TilesetTraverser {
|
|
|
235
238
|
// tile to load from server
|
|
236
239
|
loadTile(tile: Tile3D, frameState: FrameState): void {
|
|
237
240
|
if (this.shouldLoadTile(tile)) {
|
|
241
|
+
if (this.shouldDeferTileRequest(tile)) {
|
|
242
|
+
this.deferredTiles[tile.id] = tile;
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
238
245
|
tile._requestedFrame = frameState.frameNumber;
|
|
239
246
|
tile._priority = tile._getPriority();
|
|
240
247
|
this.requestedTiles[tile.id] = tile;
|
|
241
248
|
}
|
|
242
249
|
}
|
|
243
250
|
|
|
251
|
+
/**
|
|
252
|
+
* Returns whether an eligible peripheral request should wait for camera motion to settle.
|
|
253
|
+
*
|
|
254
|
+
* Eligibility and the current time window are calculated together when tile visibility updates.
|
|
255
|
+
* Keeping the active state on the tile also lets a queued scheduler callback cancel work that
|
|
256
|
+
* became deferred after its original traversal.
|
|
257
|
+
*
|
|
258
|
+
* @param tile - Tile considered for loading.
|
|
259
|
+
* @returns `true` when the request should be retried after the remaining delay.
|
|
260
|
+
*/
|
|
261
|
+
shouldDeferTileRequest(tile: Tile3D): boolean {
|
|
262
|
+
return tile.priorityDeferred;
|
|
263
|
+
}
|
|
264
|
+
|
|
244
265
|
// cache tile
|
|
245
266
|
touchTile(tile: Tile3D, frameState: FrameState): void {
|
|
246
267
|
tile.tileset._cache.touch(tile);
|
|
@@ -323,6 +344,7 @@ export class TilesetTraverser {
|
|
|
323
344
|
// Ignores visibility.
|
|
324
345
|
executeEmptyTraversal(root: Tile3D, frameState: FrameState): boolean {
|
|
325
346
|
let allDescendantsLoaded = true;
|
|
347
|
+
let hasPendingLazyChildren = false;
|
|
326
348
|
const stack = this._emptyTraversalStack;
|
|
327
349
|
stack.push(root);
|
|
328
350
|
|
|
@@ -331,6 +353,12 @@ export class TilesetTraverser {
|
|
|
331
353
|
|
|
332
354
|
const traverse = !tile.hasRenderContent && this.canTraverse(tile, frameState);
|
|
333
355
|
const emptyLeaf = !tile.hasRenderContent && tile.children.length === 0;
|
|
356
|
+
if (tile.header.implicitSubtree) {
|
|
357
|
+
// An unresolved implicit boundary is not a proven empty leaf. Treating it as loaded would
|
|
358
|
+
// allow REPLACE traversal to drop its ancestor before availability and content are known.
|
|
359
|
+
hasPendingLazyChildren = true;
|
|
360
|
+
allDescendantsLoaded = false;
|
|
361
|
+
}
|
|
334
362
|
|
|
335
363
|
// Traversal stops but the tile does not have content yet
|
|
336
364
|
// There will be holes if the parent tries to refine to its children, so don't refine
|
|
@@ -353,6 +381,6 @@ export class TilesetTraverser {
|
|
|
353
381
|
}
|
|
354
382
|
}
|
|
355
383
|
}
|
|
356
|
-
return root.hasEmptyContent || allDescendantsLoaded;
|
|
384
|
+
return (root.hasEmptyContent && !hasPendingLazyChildren) || allDescendantsLoaded;
|
|
357
385
|
}
|
|
358
386
|
}
|