@loaders.gl/tiles 4.5.3 → 5.0.0-alpha.10
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 +136 -1
- package/dist/dist.dev.js +22570 -4947
- package/dist/dist.min.js +3 -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 +10171 -2117
- package/dist/index.cjs.map +3 -4
- package/dist/index.d.ts +50 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -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 +135 -0
- package/dist/point-cloud/point-cloud-tileset.d.ts.map +1 -0
- package/dist/point-cloud/point-cloud-tileset.js +549 -0
- package/dist/point-cloud/point-cloud-tileset.js.map +1 -0
- package/dist/point-cloud/types.d.ts +81 -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 +124 -0
- package/dist/raster-set.d.ts.map +1 -0
- package/dist/raster-set.js +348 -0
- package/dist/raster-set.js.map +1 -0
- package/dist/spatial/format-spatial-reference.d.ts +68 -0
- package/dist/spatial/format-spatial-reference.d.ts.map +1 -0
- package/dist/spatial/format-spatial-reference.js +291 -0
- package/dist/spatial/format-spatial-reference.js.map +1 -0
- package/dist/spatial/get-spatial-coordinate-frame.d.ts +20 -0
- package/dist/spatial/get-spatial-coordinate-frame.d.ts.map +1 -0
- package/dist/spatial/get-spatial-coordinate-frame.js +139 -0
- package/dist/spatial/get-spatial-coordinate-frame.js.map +1 -0
- package/dist/spatial/i3s-elevation.d.ts +20 -0
- package/dist/spatial/i3s-elevation.d.ts.map +1 -0
- package/dist/spatial/i3s-elevation.js +90 -0
- package/dist/spatial/i3s-elevation.js.map +1 -0
- package/dist/spatial/i3s-spatial-transformer.d.ts +189 -0
- package/dist/spatial/i3s-spatial-transformer.d.ts.map +1 -0
- package/dist/spatial/i3s-spatial-transformer.js +686 -0
- package/dist/spatial/i3s-spatial-transformer.js.map +1 -0
- package/dist/spatial/normalize-crs-identifier.d.ts +15 -0
- package/dist/spatial/normalize-crs-identifier.d.ts.map +1 -0
- package/dist/spatial/normalize-crs-identifier.js +22 -0
- package/dist/spatial/normalize-crs-identifier.js.map +1 -0
- package/dist/spatial/spatial-coordinate-transformer.d.ts +52 -0
- package/dist/spatial/spatial-coordinate-transformer.d.ts.map +1 -0
- package/dist/spatial/spatial-coordinate-transformer.js +295 -0
- package/dist/spatial/spatial-coordinate-transformer.js.map +1 -0
- package/dist/spatial/spatial-resource-registry.d.ts +44 -0
- package/dist/spatial/spatial-resource-registry.d.ts.map +1 -0
- package/dist/spatial/spatial-resource-registry.js +67 -0
- package/dist/spatial/spatial-resource-registry.js.map +1 -0
- package/dist/spatial/spatial-types.d.ts +190 -0
- package/dist/spatial/spatial-types.d.ts.map +1 -0
- package/dist/spatial/spatial-types.js +192 -0
- package/dist/spatial/spatial-types.js.map +1 -0
- package/dist/spatial/tiles-3d-spatial-transformer.d.ts +32 -0
- package/dist/spatial/tiles-3d-spatial-transformer.d.ts.map +1 -0
- package/dist/spatial/tiles-3d-spatial-transformer.js +175 -0
- package/dist/spatial/tiles-3d-spatial-transformer.js.map +1 -0
- package/dist/tileset-2d/adapter.d.ts +37 -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 +200 -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 +130 -0
- package/dist/tileset-3d/common/indexed-archive-tileset-source.js.map +1 -0
- package/dist/tileset-3d/common/tile-3d-contracts.d.ts +63 -0
- package/dist/tileset-3d/common/tile-3d-contracts.d.ts.map +1 -0
- package/dist/tileset-3d/common/tile-3d-contracts.js +51 -0
- package/dist/tileset-3d/common/tile-3d-contracts.js.map +1 -0
- package/dist/tileset-3d/common/tile-3d.d.ts +410 -0
- package/dist/tileset-3d/common/tile-3d.d.ts.map +1 -0
- package/dist/tileset-3d/common/tile-3d.js +1056 -0
- package/dist/tileset-3d/common/tile-3d.js.map +1 -0
- package/dist/tileset-3d/common/tileset-3d.d.ts +360 -0
- package/dist/tileset-3d/common/tileset-3d.d.ts.map +1 -0
- package/dist/tileset-3d/common/tileset-3d.js +846 -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-content-traversal.d.ts +37 -0
- package/dist/tileset-3d/common/tileset-content-traversal.d.ts.map +1 -0
- package/dist/tileset-3d/common/tileset-content-traversal.js +80 -0
- package/dist/tileset-3d/common/tileset-content-traversal.js.map +1 -0
- package/dist/tileset-3d/common/tileset-observability.d.ts +60 -0
- package/dist/tileset-3d/common/tileset-observability.d.ts.map +1 -0
- package/dist/tileset-3d/common/tileset-observability.js +39 -0
- package/dist/tileset-3d/common/tileset-observability.js.map +1 -0
- package/dist/tileset-3d/common/tileset-source.d.ts +228 -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 +35 -3
- package/dist/tileset-3d/common/tileset-traverser.d.ts.map +1 -0
- package/dist/{tileset → tileset-3d/common}/tileset-traverser.js +61 -13
- package/dist/tileset-3d/common/tileset-traverser.js.map +1 -0
- package/dist/tileset-3d/format-3d-tiles/implicit-tiling.d.ts +182 -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 +681 -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 +221 -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 +770 -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 +110 -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 +331 -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 +116 -0
- package/dist/tileset-3d/format-i3s/i3s-source.d.ts.map +1 -0
- package/dist/tileset-3d/format-i3s/i3s-source.js +450 -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 → tileset-3d}/helpers/bounding-volume.d.ts +7 -3
- package/dist/tileset-3d/helpers/bounding-volume.d.ts.map +1 -0
- package/dist/{tileset → tileset-3d}/helpers/bounding-volume.js +20 -91
- package/dist/tileset-3d/helpers/bounding-volume.js.map +1 -0
- package/dist/tileset-3d/helpers/frame-state.d.ts +93 -0
- package/dist/tileset-3d/helpers/frame-state.d.ts.map +1 -0
- package/dist/{tileset → tileset-3d}/helpers/frame-state.js +92 -10
- 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 +21 -9
- package/dist/tileset-3d/helpers/i3s-lod.js.map +1 -0
- package/dist/tileset-3d/helpers/s2-bounding-volume.d.ts +17 -0
- package/dist/tileset-3d/helpers/s2-bounding-volume.d.ts.map +1 -0
- package/dist/tileset-3d/helpers/s2-bounding-volume.js +20 -0
- package/dist/tileset-3d/helpers/s2-bounding-volume.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 +14 -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 +12 -9
- package/src/image-set.ts +328 -0
- package/src/index.ts +157 -9
- package/src/point-cloud/point-cloud-tile.ts +80 -0
- package/src/point-cloud/point-cloud-tileset.ts +767 -0
- package/src/point-cloud/types.ts +99 -0
- package/src/raster-set.ts +504 -0
- package/src/spatial/format-spatial-reference.ts +385 -0
- package/src/spatial/get-spatial-coordinate-frame.ts +169 -0
- package/src/spatial/i3s-elevation.ts +96 -0
- package/src/spatial/i3s-spatial-transformer.ts +957 -0
- package/src/spatial/normalize-crs-identifier.ts +26 -0
- package/src/spatial/spatial-coordinate-transformer.ts +376 -0
- package/src/spatial/spatial-resource-registry.ts +79 -0
- package/src/spatial/spatial-types.ts +422 -0
- package/src/spatial/tiles-3d-spatial-transformer.ts +206 -0
- package/src/tileset-2d/adapter.ts +46 -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 +715 -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-3d/common/tile-3d-contracts.ts +115 -0
- package/src/tileset-3d/common/tile-3d.ts +1310 -0
- package/src/tileset-3d/common/tileset-3d.ts +1166 -0
- package/src/{tileset → tileset-3d/common}/tileset-cache.ts +16 -8
- package/src/tileset-3d/common/tileset-content-traversal.ts +114 -0
- package/src/tileset-3d/common/tileset-observability.ts +100 -0
- package/src/tileset-3d/common/tileset-source.ts +284 -0
- package/src/{tileset → tileset-3d/common}/tileset-traverser.ts +74 -14
- package/src/tileset-3d/format-3d-tiles/implicit-tiling.ts +1059 -0
- package/src/tileset-3d/format-3d-tiles/tiles-3d-source.ts +1025 -0
- package/src/tileset-3d/format-3d-tiles/tileset-3d-traverser.ts +379 -0
- package/src/{tileset → tileset-3d}/format-i3s/i3s-pending-tiles-register.ts +4 -0
- package/src/tileset-3d/format-i3s/i3s-source.ts +557 -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 +20 -24
- package/src/{tileset → tileset-3d}/helpers/3d-tiles-options.ts +5 -1
- package/src/{tileset → tileset-3d}/helpers/bounding-volume.ts +31 -114
- package/src/tileset-3d/helpers/frame-state.ts +322 -0
- package/src/{tileset → tileset-3d}/helpers/i3s-lod.ts +24 -10
- package/src/tileset-3d/helpers/s2-bounding-volume.ts +35 -0
- 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 +18 -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 +0 -230
- package/dist/tileset/tile-3d.d.ts.map +0 -1
- package/dist/tileset/tile-3d.js +0 -631
- 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/tile-3d.ts +0 -788
- 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/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
|
@@ -3,13 +3,21 @@
|
|
|
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;
|
|
12
12
|
skipLevelOfDetail?: boolean;
|
|
13
|
+
/** SSE above which tiles remain part of the non-skipping base traversal. */
|
|
14
|
+
baseScreenSpaceError?: number;
|
|
15
|
+
/** Required SSE reduction from the nearest requested or loaded ancestor before loading a tile. */
|
|
16
|
+
skipScreenSpaceErrorFactor?: number;
|
|
17
|
+
/** Minimum hierarchy levels between requested tiles during skip-LOD traversal. */
|
|
18
|
+
skipLevels?: number;
|
|
19
|
+
/** Requests only final tiles that meet the active SSE target when skip-LOD is enabled. */
|
|
20
|
+
immediatelyLoadDesiredLevelOfDetail?: boolean;
|
|
13
21
|
updateTransforms?: boolean;
|
|
14
22
|
onTraversalEnd?: (frameState) => any;
|
|
15
23
|
viewportTraversersMap?: Record<string, any>;
|
|
@@ -19,6 +27,10 @@ export type TilesetTraverserProps = {
|
|
|
19
27
|
export const DEFAULT_PROPS: Required<TilesetTraverserProps> = {
|
|
20
28
|
loadSiblings: false,
|
|
21
29
|
skipLevelOfDetail: false,
|
|
30
|
+
baseScreenSpaceError: 1024,
|
|
31
|
+
skipScreenSpaceErrorFactor: 16,
|
|
32
|
+
skipLevels: 1,
|
|
33
|
+
immediatelyLoadDesiredLevelOfDetail: false,
|
|
22
34
|
updateTransforms: true,
|
|
23
35
|
onTraversalEnd: () => {},
|
|
24
36
|
viewportTraversersMap: {},
|
|
@@ -28,6 +40,9 @@ export const DEFAULT_PROPS: Required<TilesetTraverserProps> = {
|
|
|
28
40
|
export class TilesetTraverser {
|
|
29
41
|
options: Required<TilesetTraverserProps>;
|
|
30
42
|
|
|
43
|
+
/** Whether loaded content has disabled skip-LOD traversal for this tileset. */
|
|
44
|
+
disableSkipLevelOfDetail: boolean = false;
|
|
45
|
+
|
|
31
46
|
// fulfill in traverse call
|
|
32
47
|
root: any = null;
|
|
33
48
|
|
|
@@ -35,6 +50,8 @@ export class TilesetTraverser {
|
|
|
35
50
|
selectedTiles: Record<string, Tile3D> = {};
|
|
36
51
|
// tiles should be loaded from server
|
|
37
52
|
requestedTiles: Record<string, Tile3D> = {};
|
|
53
|
+
/** Tiles intentionally held until the camera has remained still for the configured delay. */
|
|
54
|
+
deferredTiles: Record<string, Tile3D> = {};
|
|
38
55
|
// tiles does not have render content
|
|
39
56
|
emptyTiles: Record<string, Tile3D> = {};
|
|
40
57
|
|
|
@@ -56,6 +73,11 @@ export class TilesetTraverser {
|
|
|
56
73
|
this.options = {...DEFAULT_PROPS, ...options};
|
|
57
74
|
}
|
|
58
75
|
|
|
76
|
+
/** Returns whether skip-LOD traversal is enabled and supported by the loaded content. */
|
|
77
|
+
isSkipLevelOfDetailEnabled(): boolean {
|
|
78
|
+
return this.options.skipLevelOfDetail && !this.disableSkipLevelOfDetail;
|
|
79
|
+
}
|
|
80
|
+
|
|
59
81
|
// tiles should be visible
|
|
60
82
|
traverse(root, frameState, options) {
|
|
61
83
|
this.root = root; // for root screen space error
|
|
@@ -73,6 +95,7 @@ export class TilesetTraverser {
|
|
|
73
95
|
|
|
74
96
|
reset() {
|
|
75
97
|
this.requestedTiles = {};
|
|
98
|
+
this.deferredTiles = {};
|
|
76
99
|
this.selectedTiles = {};
|
|
77
100
|
this.emptyTiles = {};
|
|
78
101
|
this._traversalStack.reset();
|
|
@@ -137,7 +160,9 @@ export class TilesetTraverser {
|
|
|
137
160
|
// Always load tiles in the base traversal
|
|
138
161
|
// Select tiles that can't refine further
|
|
139
162
|
this.loadTile(tile, frameState);
|
|
140
|
-
|
|
163
|
+
// Skip-LOD keeps a ready ancestor selected while descendants stream in. This prevents
|
|
164
|
+
// replacement holes when traversal jumps over one or more hierarchy levels.
|
|
165
|
+
if (stoppedRefining || this.isSkipLevelOfDetailEnabled()) {
|
|
141
166
|
this.selectTile(tile, frameState);
|
|
142
167
|
}
|
|
143
168
|
}
|
|
@@ -149,6 +174,11 @@ export class TilesetTraverser {
|
|
|
149
174
|
tile._shouldRefine = shouldRefine && parentRefines;
|
|
150
175
|
}
|
|
151
176
|
|
|
177
|
+
this.completeTraversal(frameState);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/** Notifies the owning tileset when traversal is complete or its debounce interval expires. */
|
|
181
|
+
protected completeTraversal(frameState: FrameState): void {
|
|
152
182
|
const newTime = new Date().getTime();
|
|
153
183
|
if (this.traversalFinished(frameState) || newTime - this.lastUpdate > this.updateDebounceTime) {
|
|
154
184
|
this.lastUpdate = newTime;
|
|
@@ -165,7 +195,8 @@ export class TilesetTraverser {
|
|
|
165
195
|
|
|
166
196
|
/* eslint-disable complexity, max-statements */
|
|
167
197
|
updateAndPushChildren(tile: Tile3D, frameState: FrameState, stack, depth): boolean {
|
|
168
|
-
const {loadSiblings
|
|
198
|
+
const {loadSiblings} = this.options;
|
|
199
|
+
const skipLevelOfDetail = this.isSkipLevelOfDetailEnabled();
|
|
169
200
|
|
|
170
201
|
const children = tile.children;
|
|
171
202
|
|
|
@@ -188,9 +219,10 @@ export class TilesetTraverser {
|
|
|
188
219
|
}
|
|
189
220
|
stack.push(child);
|
|
190
221
|
hasVisibleChild = true;
|
|
191
|
-
} else if (checkRefines || loadSiblings) {
|
|
192
|
-
// Keep non-visible children loaded
|
|
193
|
-
//
|
|
222
|
+
} else if ((checkRefines || loadSiblings) && child._inRequestVolume) {
|
|
223
|
+
// Keep non-visible children loaded when they are inside their viewer request volume;
|
|
224
|
+
// they may still be needed before a replacement parent can refine. The request-volume
|
|
225
|
+
// check intentionally applies to sibling loading as well, preventing off-volume work.
|
|
194
226
|
this.loadTile(child, frameState);
|
|
195
227
|
this.touchTile(child, frameState);
|
|
196
228
|
}
|
|
@@ -225,7 +257,7 @@ export class TilesetTraverser {
|
|
|
225
257
|
|
|
226
258
|
// tile to render in the browser
|
|
227
259
|
selectTile(tile: Tile3D, frameState: FrameState): void {
|
|
228
|
-
if (this.shouldSelectTile(tile)) {
|
|
260
|
+
if (this.shouldSelectTile(tile, frameState)) {
|
|
229
261
|
// The tile can be selected right away and does not require traverseAndSelect
|
|
230
262
|
tile._selectedFrame = frameState.frameNumber;
|
|
231
263
|
this.selectedTiles[tile.id] = tile;
|
|
@@ -235,12 +267,30 @@ export class TilesetTraverser {
|
|
|
235
267
|
// tile to load from server
|
|
236
268
|
loadTile(tile: Tile3D, frameState: FrameState): void {
|
|
237
269
|
if (this.shouldLoadTile(tile)) {
|
|
270
|
+
if (this.shouldDeferTileRequest(tile)) {
|
|
271
|
+
this.deferredTiles[tile.id] = tile;
|
|
272
|
+
return;
|
|
273
|
+
}
|
|
238
274
|
tile._requestedFrame = frameState.frameNumber;
|
|
239
275
|
tile._priority = tile._getPriority();
|
|
240
276
|
this.requestedTiles[tile.id] = tile;
|
|
241
277
|
}
|
|
242
278
|
}
|
|
243
279
|
|
|
280
|
+
/**
|
|
281
|
+
* Returns whether an eligible peripheral request should wait for camera motion to settle.
|
|
282
|
+
*
|
|
283
|
+
* Eligibility and the current time window are calculated together when tile visibility updates.
|
|
284
|
+
* Keeping the active state on the tile also lets a queued scheduler callback cancel work that
|
|
285
|
+
* became deferred after its original traversal.
|
|
286
|
+
*
|
|
287
|
+
* @param tile - Tile considered for loading.
|
|
288
|
+
* @returns `true` when the request should be retried after the remaining delay.
|
|
289
|
+
*/
|
|
290
|
+
shouldDeferTileRequest(tile: Tile3D): boolean {
|
|
291
|
+
return tile.priorityDeferred;
|
|
292
|
+
}
|
|
293
|
+
|
|
244
294
|
// cache tile
|
|
245
295
|
touchTile(tile: Tile3D, frameState: FrameState): void {
|
|
246
296
|
tile.tileset._cache.touch(tile);
|
|
@@ -271,10 +321,13 @@ export class TilesetTraverser {
|
|
|
271
321
|
return tile.hasUnloadedContent || tile.contentExpired;
|
|
272
322
|
}
|
|
273
323
|
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
324
|
+
/**
|
|
325
|
+
* Returns whether a tile's content is available and visible for rendering.
|
|
326
|
+
* @param tile Tile considered for rendering.
|
|
327
|
+
* @param frameState Current culling state.
|
|
328
|
+
*/
|
|
329
|
+
shouldSelectTile(tile: Tile3D, frameState: FrameState): boolean {
|
|
330
|
+
return tile.contentAvailable && tile.contentVisibility(frameState) !== 'outside';
|
|
278
331
|
}
|
|
279
332
|
|
|
280
333
|
/** Decide if tile LoD (level of detail) is not sufficient under current viewport */
|
|
@@ -323,6 +376,7 @@ export class TilesetTraverser {
|
|
|
323
376
|
// Ignores visibility.
|
|
324
377
|
executeEmptyTraversal(root: Tile3D, frameState: FrameState): boolean {
|
|
325
378
|
let allDescendantsLoaded = true;
|
|
379
|
+
let hasPendingLazyChildren = false;
|
|
326
380
|
const stack = this._emptyTraversalStack;
|
|
327
381
|
stack.push(root);
|
|
328
382
|
|
|
@@ -331,6 +385,12 @@ export class TilesetTraverser {
|
|
|
331
385
|
|
|
332
386
|
const traverse = !tile.hasRenderContent && this.canTraverse(tile, frameState);
|
|
333
387
|
const emptyLeaf = !tile.hasRenderContent && tile.children.length === 0;
|
|
388
|
+
if (tile.header.implicitSubtree) {
|
|
389
|
+
// An unresolved implicit boundary is not a proven empty leaf. Treating it as loaded would
|
|
390
|
+
// allow REPLACE traversal to drop its ancestor before availability and content are known.
|
|
391
|
+
hasPendingLazyChildren = true;
|
|
392
|
+
allDescendantsLoaded = false;
|
|
393
|
+
}
|
|
334
394
|
|
|
335
395
|
// Traversal stops but the tile does not have content yet
|
|
336
396
|
// There will be holes if the parent tries to refine to its children, so don't refine
|
|
@@ -353,6 +413,6 @@ export class TilesetTraverser {
|
|
|
353
413
|
}
|
|
354
414
|
}
|
|
355
415
|
}
|
|
356
|
-
return root.hasEmptyContent || allDescendantsLoaded;
|
|
416
|
+
return (root.hasEmptyContent && !hasPendingLazyChildren) || allDescendantsLoaded;
|
|
357
417
|
}
|
|
358
418
|
}
|