@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
|
@@ -0,0 +1,510 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
import { path } from '@loaders.gl/loader-utils';
|
|
5
|
+
import { Ellipsoid } from '@math.gl/geospatial';
|
|
6
|
+
import { Vector3 } from '@math.gl/core';
|
|
7
|
+
import { Tileset3DTraverser } from "./tileset-3d-traverser.js";
|
|
8
|
+
import { Tile3D as Tile3DNode } from "../common/tile-3d.js";
|
|
9
|
+
import { getZoomFromBoundingVolume } from "../helpers/zoom.js";
|
|
10
|
+
import { TILESET_TYPE } from "../../constants.js";
|
|
11
|
+
import { materializeImplicitSubtree } from "./implicit-tiling.js";
|
|
12
|
+
const EMPTY_CONTENT_FORMATS = {
|
|
13
|
+
draco: false,
|
|
14
|
+
meshopt: false,
|
|
15
|
+
dds: false,
|
|
16
|
+
ktx2: false
|
|
17
|
+
};
|
|
18
|
+
const DEFAULT_MAXIMUM_CACHED_SUBTREES = 32;
|
|
19
|
+
/**
|
|
20
|
+
* {@link Tileset3DSource} implementation for 3D Tiles datasets.
|
|
21
|
+
*/
|
|
22
|
+
export class Tiles3DSource {
|
|
23
|
+
/** 3D Tiles format discriminator. */
|
|
24
|
+
type = TILESET_TYPE.TILES3D;
|
|
25
|
+
/** Loader used for tile content requests. */
|
|
26
|
+
loader;
|
|
27
|
+
/** Root tileset URL. */
|
|
28
|
+
url;
|
|
29
|
+
/** Base path used for relative tile resource resolution. */
|
|
30
|
+
basePath;
|
|
31
|
+
/** Parsed root tileset payload. */
|
|
32
|
+
tileset = null;
|
|
33
|
+
/** Loader options forwarded to content requests. */
|
|
34
|
+
loadOptions;
|
|
35
|
+
/** Core API used for root and tile-content loads when injected by the caller. */
|
|
36
|
+
coreApi;
|
|
37
|
+
/** Aggregate content-format flags discovered during streaming. */
|
|
38
|
+
contentFormats = { ...EMPTY_CONTENT_FORMATS };
|
|
39
|
+
/** Top-level 3D Tiles asset metadata. */
|
|
40
|
+
asset;
|
|
41
|
+
/** Top-level per-feature properties metadata. */
|
|
42
|
+
properties;
|
|
43
|
+
/** Top-level application-specific metadata. */
|
|
44
|
+
extras;
|
|
45
|
+
/** Source-provided attribution metadata. */
|
|
46
|
+
credits;
|
|
47
|
+
/** Normalized source metadata after initialization. */
|
|
48
|
+
metadata;
|
|
49
|
+
queryParams = {};
|
|
50
|
+
/** Final request URLs cached by unmodified tile content URL. */
|
|
51
|
+
tileUrlCache = new Map();
|
|
52
|
+
/** Parsed subtree promises keyed by final source URL for request deduplication and LRU reuse. */
|
|
53
|
+
implicitSubtreeCache = new Map();
|
|
54
|
+
/** URLs whose subtree resource requests have not settled. */
|
|
55
|
+
pendingImplicitSubtreeUrls = new Set();
|
|
56
|
+
/** Maximum number of settled parsed subtrees retained by this source. */
|
|
57
|
+
maximumCachedSubtrees;
|
|
58
|
+
/** Mutable counters exposed as a defensive snapshot through {@link getImplicitTilingStats}. */
|
|
59
|
+
implicitTilingStats = {
|
|
60
|
+
requestedSubtrees: 0,
|
|
61
|
+
loadedSubtrees: 0,
|
|
62
|
+
cacheHits: 0,
|
|
63
|
+
materializedTiles: 0
|
|
64
|
+
};
|
|
65
|
+
/** Whether the owning tileset has released this source. */
|
|
66
|
+
destroyed = false;
|
|
67
|
+
extensionsUsed = [];
|
|
68
|
+
resolver;
|
|
69
|
+
rootTileset;
|
|
70
|
+
/**
|
|
71
|
+
* Creates a 3D Tiles source.
|
|
72
|
+
* @param input Root metadata request, or preloaded root metadata for tests and internal callers.
|
|
73
|
+
* @param loadOptions Loader options forwarded to tile requests.
|
|
74
|
+
*/
|
|
75
|
+
constructor(input, loadOptions = {}) {
|
|
76
|
+
const request = normalizeTiles3DRequest(input);
|
|
77
|
+
this.rootTileset = isTilesetRequest(input) ? null : input;
|
|
78
|
+
this.tileset = this.rootTileset;
|
|
79
|
+
this.loader = request.loader;
|
|
80
|
+
this.url = request.url;
|
|
81
|
+
this.basePath = request.basePath || path.dirname(request.url);
|
|
82
|
+
this.resolver = request.resolver;
|
|
83
|
+
this.coreApi = request.coreApi;
|
|
84
|
+
this.loadOptions = loadOptions;
|
|
85
|
+
const maximumCachedSubtrees = Number(loadOptions['3d-tiles']?.maximumCachedSubtrees);
|
|
86
|
+
this.maximumCachedSubtrees = Number.isFinite(maximumCachedSubtrees)
|
|
87
|
+
? Math.max(0, Math.floor(maximumCachedSubtrees))
|
|
88
|
+
: DEFAULT_MAXIMUM_CACHED_SUBTREES;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Releases URL and parsed-subtree caches and blocks late subtree installation.
|
|
92
|
+
*
|
|
93
|
+
* The injected resolver or core API remains responsible for transport-level abort signals. A
|
|
94
|
+
* request that cannot be aborted may finish parsing, but it will not mutate destroyed tiles.
|
|
95
|
+
*/
|
|
96
|
+
destroy() {
|
|
97
|
+
this.destroyed = true;
|
|
98
|
+
this.tileUrlCache.clear();
|
|
99
|
+
this.implicitSubtreeCache.clear();
|
|
100
|
+
this.pendingImplicitSubtreeUrls.clear();
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Fetches and validates top-level metadata, then normalizes common fields used by {@link Tileset3D}.
|
|
104
|
+
*/
|
|
105
|
+
async initialize() {
|
|
106
|
+
if (!this.rootTileset) {
|
|
107
|
+
const loaderOptions = this.loadOptions[this.loader.id] || {};
|
|
108
|
+
this.rootTileset = await this.loadRootData(this.url, {
|
|
109
|
+
...this.loadOptions,
|
|
110
|
+
[this.loader.id]: {
|
|
111
|
+
...loaderOptions,
|
|
112
|
+
isTileset: true
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
this.tileset = this.rootTileset;
|
|
117
|
+
if (this.rootTileset.queryString) {
|
|
118
|
+
const searchParams = new URLSearchParams(this.rootTileset.queryString);
|
|
119
|
+
for (const [parameterName, parameterValue] of searchParams.entries()) {
|
|
120
|
+
this.setQueryParameter(parameterName, parameterValue);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
this.asset = this.rootTileset.asset;
|
|
124
|
+
if (!this.asset) {
|
|
125
|
+
throw new Error('Tileset must have an asset property.');
|
|
126
|
+
}
|
|
127
|
+
if (this.asset.version !== '0.0' &&
|
|
128
|
+
this.asset.version !== '1.0' &&
|
|
129
|
+
this.asset.version !== '1.1') {
|
|
130
|
+
throw new Error('The tileset must be 3D Tiles version either 0.0 or 1.0 or 1.1.');
|
|
131
|
+
}
|
|
132
|
+
if ('tilesetVersion' in this.asset) {
|
|
133
|
+
this.setQueryParameter('v', this.asset.tilesetVersion);
|
|
134
|
+
}
|
|
135
|
+
this.properties = this.rootTileset.properties;
|
|
136
|
+
this.extras = this.rootTileset.extras;
|
|
137
|
+
this.credits = { attributions: [] };
|
|
138
|
+
this.extensionsUsed.splice(0, this.extensionsUsed.length, ...(this.rootTileset.extensionsUsed || []));
|
|
139
|
+
this.metadata = {
|
|
140
|
+
type: this.type,
|
|
141
|
+
loader: this.loader,
|
|
142
|
+
url: this.url,
|
|
143
|
+
basePath: this.basePath,
|
|
144
|
+
tileset: this.rootTileset,
|
|
145
|
+
lodMetricType: this.rootTileset.lodMetricType,
|
|
146
|
+
lodMetricValue: this.rootTileset.lodMetricValue,
|
|
147
|
+
refine: this.rootTileset.root?.refine
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Returns normalized source metadata after initialization.
|
|
152
|
+
*/
|
|
153
|
+
getMetadata() {
|
|
154
|
+
if (!this.metadata) {
|
|
155
|
+
throw new Error('Tiles3DSource has not been initialized');
|
|
156
|
+
}
|
|
157
|
+
return this.metadata;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Returns the root 3D Tiles payload.
|
|
161
|
+
*/
|
|
162
|
+
async getRootTileset() {
|
|
163
|
+
return this.getMetadata().tileset;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Builds explicit runtime headers while leaving implicit subtree references lazy.
|
|
167
|
+
*/
|
|
168
|
+
initializeTileHeaders(tileset, tilesetJson, parentTile) {
|
|
169
|
+
const rootTile = new Tile3DNode(tileset, tilesetJson.root, parentTile || undefined);
|
|
170
|
+
if (parentTile) {
|
|
171
|
+
parentTile.children.push(rootTile);
|
|
172
|
+
rootTile.depth = parentTile.depth + 1;
|
|
173
|
+
}
|
|
174
|
+
const stack = [rootTile];
|
|
175
|
+
while (stack.length > 0) {
|
|
176
|
+
const tile = stack.pop();
|
|
177
|
+
tileset.stats.get('Tiles In Tileset(s)').incrementCount();
|
|
178
|
+
const children = tile.header.children || [];
|
|
179
|
+
for (const childHeader of children) {
|
|
180
|
+
const childTile = new Tile3DNode(tileset, childHeader, tile);
|
|
181
|
+
if (childTile.contentUrl?.includes('?session=')) {
|
|
182
|
+
const url = new URL(childTile.contentUrl);
|
|
183
|
+
const session = url.searchParams.get('session');
|
|
184
|
+
if (session) {
|
|
185
|
+
this.setQueryParameter('session', session);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
tile.children.push(childTile);
|
|
189
|
+
childTile.depth = tile.depth + 1;
|
|
190
|
+
stack.push(childTile);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return rootTile;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Creates the standard 3D Tiles traverser.
|
|
197
|
+
*/
|
|
198
|
+
createTraverser(options) {
|
|
199
|
+
return new Tileset3DTraverser(options);
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Loads binary content or nested tileset JSON for a runtime tile.
|
|
203
|
+
*/
|
|
204
|
+
async loadTileContent(tile) {
|
|
205
|
+
const contentUrl = this.getTileUrl(tile.contentUrl);
|
|
206
|
+
const tilesetLoaderOptions = this.loadOptions[this.loader.id] || {};
|
|
207
|
+
const options = {
|
|
208
|
+
...this.loadOptions,
|
|
209
|
+
[this.loader.id]: {
|
|
210
|
+
...tilesetLoaderOptions,
|
|
211
|
+
// Content bytes, rather than URL suffixes, distinguish external tilesets from renderable
|
|
212
|
+
// payloads. This is required for signed and extensionless resources.
|
|
213
|
+
isTileset: 'auto',
|
|
214
|
+
assetGltfUpAxis: (this.asset && this.asset.gltfUpAxis) || 'Y'
|
|
215
|
+
}
|
|
216
|
+
};
|
|
217
|
+
const content = await this.loadResourceData(contentUrl, options);
|
|
218
|
+
tile.content = content;
|
|
219
|
+
return {
|
|
220
|
+
loaded: true,
|
|
221
|
+
nestedTileset: content?.shape === 'tileset3d' ? content : undefined
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Loads, materializes, and installs exactly one implicit subtree.
|
|
226
|
+
*
|
|
227
|
+
* Final URLs pass through the same query inheritance and archive/custom resolver path as render
|
|
228
|
+
* content. Parsed resources are deduplicated by final URL, while the pure materializer creates
|
|
229
|
+
* lazy placeholders for every available child subtree instead of recursively fetching them.
|
|
230
|
+
*
|
|
231
|
+
* @param tile - Existing contentless subtree-root placeholder.
|
|
232
|
+
* @param frameState - View state that made this request eligible; priority is consumed earlier.
|
|
233
|
+
* @returns Counts describing the installed subtree.
|
|
234
|
+
*/
|
|
235
|
+
async loadTileChildren(tile, frameState) {
|
|
236
|
+
void frameState;
|
|
237
|
+
const reference = tile.header.implicitSubtree;
|
|
238
|
+
if (!reference) {
|
|
239
|
+
return { loaded: false, tileCount: 0, childSubtreeCount: 0 };
|
|
240
|
+
}
|
|
241
|
+
const subtreeUrl = this.getTileUrl(reference.subtreeUrl);
|
|
242
|
+
const subtree = await this.loadImplicitSubtreeResource(subtreeUrl);
|
|
243
|
+
if (this.destroyed || tile.isDestroyed()) {
|
|
244
|
+
return { loaded: false, tileCount: 0, childSubtreeCount: 0 };
|
|
245
|
+
}
|
|
246
|
+
const materializedSubtree = materializeImplicitSubtree(subtree, {
|
|
247
|
+
...reference,
|
|
248
|
+
subtreeUrl
|
|
249
|
+
});
|
|
250
|
+
tile.applyImplicitSubtreeHeader(materializedSubtree.root);
|
|
251
|
+
const materializedTileCount = this.initializeMaterializedChildren(tile.tileset, tile, materializedSubtree.root.children);
|
|
252
|
+
this.implicitTilingStats.loadedSubtrees++;
|
|
253
|
+
this.implicitTilingStats.materializedTiles += materializedTileCount;
|
|
254
|
+
return {
|
|
255
|
+
loaded: true,
|
|
256
|
+
tileCount: materializedSubtree.tileCount,
|
|
257
|
+
childSubtreeCount: materializedSubtree.childSubtreeCount
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Returns a snapshot of implicit-subtree request, cache, and materialization counters.
|
|
262
|
+
*
|
|
263
|
+
* @returns Immutable-by-convention diagnostic values for runtime inspection.
|
|
264
|
+
*/
|
|
265
|
+
getImplicitTilingStats() {
|
|
266
|
+
return {
|
|
267
|
+
...this.implicitTilingStats,
|
|
268
|
+
cachedSubtrees: this.implicitSubtreeCache.size - this.pendingImplicitSubtreeUrls.size,
|
|
269
|
+
pendingSubtrees: this.pendingImplicitSubtreeUrls.size
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Resolves a tile content URL with source-managed query parameters.
|
|
274
|
+
*
|
|
275
|
+
* Existing per-resource parameters take precedence over inherited root, version, and session
|
|
276
|
+
* values. Completed URLs are cached by the original tile path; {@link setQueryParameter}
|
|
277
|
+
* invalidates the cache before changed source state can be observed.
|
|
278
|
+
*
|
|
279
|
+
* @param tilePath - Unmodified absolute content URL or data URL from the tile header.
|
|
280
|
+
* @returns Content URL with any missing source parameters appended.
|
|
281
|
+
*/
|
|
282
|
+
getTileUrl(tilePath) {
|
|
283
|
+
if (tilePath.startsWith('data:')) {
|
|
284
|
+
return tilePath;
|
|
285
|
+
}
|
|
286
|
+
const cachedTileUrl = this.tileUrlCache.get(tilePath);
|
|
287
|
+
if (cachedTileUrl) {
|
|
288
|
+
return cachedTileUrl;
|
|
289
|
+
}
|
|
290
|
+
if (!Object.keys(this.queryParams).length) {
|
|
291
|
+
this.tileUrlCache.set(tilePath, tilePath);
|
|
292
|
+
return tilePath;
|
|
293
|
+
}
|
|
294
|
+
const [pathWithoutQuery, existingQuery = ''] = tilePath.split('?');
|
|
295
|
+
const mergedQueryParams = new URLSearchParams(existingQuery);
|
|
296
|
+
for (const [key, value] of Object.entries(this.queryParams)) {
|
|
297
|
+
if (!mergedQueryParams.has(key)) {
|
|
298
|
+
mergedQueryParams.set(key, value);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
const queryParams = mergedQueryParams.toString();
|
|
302
|
+
const tileUrl = queryParams ? `${pathWithoutQuery}?${queryParams}` : pathWithoutQuery;
|
|
303
|
+
this.tileUrlCache.set(tilePath, tileUrl);
|
|
304
|
+
return tileUrl;
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Updates an inherited source query parameter and invalidates derived request URLs.
|
|
308
|
+
*
|
|
309
|
+
* Root tokens and tileset versions normally settle during initialization. Some providers expose
|
|
310
|
+
* a session parameter on a child URL, so invalidation is required to prevent URLs cached earlier
|
|
311
|
+
* in header construction from retaining stale authentication state.
|
|
312
|
+
*
|
|
313
|
+
* @param parameterName - Query parameter name.
|
|
314
|
+
* @param parameterValue - Query parameter value.
|
|
315
|
+
*/
|
|
316
|
+
setQueryParameter(parameterName, parameterValue) {
|
|
317
|
+
if (this.queryParams[parameterName] === parameterValue) {
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
this.queryParams[parameterName] = parameterValue;
|
|
321
|
+
this.tileUrlCache.clear();
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Derives the default view state from the root bounding volume.
|
|
325
|
+
*/
|
|
326
|
+
getViewState(rootTile) {
|
|
327
|
+
if (!rootTile) {
|
|
328
|
+
return {
|
|
329
|
+
asset: this.asset,
|
|
330
|
+
properties: this.properties,
|
|
331
|
+
extras: this.extras,
|
|
332
|
+
credits: this.credits
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
const { center } = rootTile.boundingVolume;
|
|
336
|
+
let cartographicCenter;
|
|
337
|
+
if (center && (center[0] !== 0 || center[1] !== 0 || center[2] !== 0)) {
|
|
338
|
+
cartographicCenter = new Vector3();
|
|
339
|
+
Ellipsoid.WGS84.cartesianToCartographic(center, cartographicCenter);
|
|
340
|
+
}
|
|
341
|
+
else {
|
|
342
|
+
cartographicCenter = new Vector3(0, 0, -Ellipsoid.WGS84.radii[0]);
|
|
343
|
+
}
|
|
344
|
+
return {
|
|
345
|
+
asset: this.asset,
|
|
346
|
+
properties: this.properties,
|
|
347
|
+
extras: this.extras,
|
|
348
|
+
credits: this.credits,
|
|
349
|
+
boundingVolume: rootTile.boundingVolume,
|
|
350
|
+
cartographicCenter,
|
|
351
|
+
cartesianCenter: center,
|
|
352
|
+
zoom: getZoomFromBoundingVolume(rootTile.boundingVolume, cartographicCenter)
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Checks whether the root tileset declares the given extension.
|
|
357
|
+
*/
|
|
358
|
+
hasExtension(extensionName) {
|
|
359
|
+
return this.extensionsUsed.includes(extensionName);
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Updates content-format flags and installs nested tileset subtrees.
|
|
363
|
+
*/
|
|
364
|
+
onTileLoaded(tileset, tile, loadResult) {
|
|
365
|
+
const { extensionsRemoved = [] } = tile.content?.gltf || {};
|
|
366
|
+
if (extensionsRemoved.includes('KHR_draco_mesh_compression')) {
|
|
367
|
+
this.contentFormats.draco = true;
|
|
368
|
+
}
|
|
369
|
+
if (extensionsRemoved.includes('EXT_meshopt_compression')) {
|
|
370
|
+
this.contentFormats.meshopt = true;
|
|
371
|
+
}
|
|
372
|
+
if (extensionsRemoved.includes('KHR_texture_basisu')) {
|
|
373
|
+
this.contentFormats.ktx2 = true;
|
|
374
|
+
}
|
|
375
|
+
if (loadResult.nestedTileset) {
|
|
376
|
+
tileset._initializeTileHeaders(loadResult.nestedTileset, tile);
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* Loads data through injected core APIs so this module stays independent from `@loaders.gl/core`.
|
|
381
|
+
*/
|
|
382
|
+
async loadWithCoreApi(url, options, loader = this.loader) {
|
|
383
|
+
if (!this.coreApi) {
|
|
384
|
+
throw new Error('Tiles3DSource requires an injected coreApi to load tileset data');
|
|
385
|
+
}
|
|
386
|
+
return await this.coreApi.load(url, loader, options);
|
|
387
|
+
}
|
|
388
|
+
/**
|
|
389
|
+
* Loads data through an injected resolver when present, otherwise through the injected core API.
|
|
390
|
+
*/
|
|
391
|
+
async loadRootData(url, options) {
|
|
392
|
+
if (this.resolver) {
|
|
393
|
+
return await this.resolver.loadRoot(url, this.loader, options);
|
|
394
|
+
}
|
|
395
|
+
return await this.loadWithCoreApi(url, options);
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* Loads an arbitrary source resource through an injected resolver or core API.
|
|
399
|
+
*/
|
|
400
|
+
async loadResourceData(url, options, loader = this.loader) {
|
|
401
|
+
if (this.resolver) {
|
|
402
|
+
return await this.resolver.loadResource(url, loader, options);
|
|
403
|
+
}
|
|
404
|
+
return await this.loadWithCoreApi(url, options, loader);
|
|
405
|
+
}
|
|
406
|
+
/**
|
|
407
|
+
* Returns a parsed subtree from the LRU cache or starts one source-managed request.
|
|
408
|
+
*
|
|
409
|
+
* @param subtreeUrl - Final subtree URL after query inheritance.
|
|
410
|
+
* @returns Parsed subtree availability data.
|
|
411
|
+
*/
|
|
412
|
+
async loadImplicitSubtreeResource(subtreeUrl) {
|
|
413
|
+
const cachedSubtree = this.implicitSubtreeCache.get(subtreeUrl);
|
|
414
|
+
if (cachedSubtree) {
|
|
415
|
+
this.implicitTilingStats.cacheHits++;
|
|
416
|
+
this.implicitSubtreeCache.delete(subtreeUrl);
|
|
417
|
+
this.implicitSubtreeCache.set(subtreeUrl, cachedSubtree);
|
|
418
|
+
return await cachedSubtree;
|
|
419
|
+
}
|
|
420
|
+
this.implicitTilingStats.requestedSubtrees++;
|
|
421
|
+
this.pendingImplicitSubtreeUrls.add(subtreeUrl);
|
|
422
|
+
const loaderOptions = this.loadOptions[this.loader.id] || {};
|
|
423
|
+
const subtreePromise = this.loadResourceData(subtreeUrl, {
|
|
424
|
+
...this.loadOptions,
|
|
425
|
+
[this.loader.id]: {
|
|
426
|
+
...loaderOptions,
|
|
427
|
+
isTileset: false,
|
|
428
|
+
isSubtree: true
|
|
429
|
+
}
|
|
430
|
+
});
|
|
431
|
+
this.implicitSubtreeCache.set(subtreeUrl, subtreePromise);
|
|
432
|
+
try {
|
|
433
|
+
return await subtreePromise;
|
|
434
|
+
}
|
|
435
|
+
catch (error) {
|
|
436
|
+
this.implicitSubtreeCache.delete(subtreeUrl);
|
|
437
|
+
throw error;
|
|
438
|
+
}
|
|
439
|
+
finally {
|
|
440
|
+
this.pendingImplicitSubtreeUrls.delete(subtreeUrl);
|
|
441
|
+
this.trimImplicitSubtreeCache();
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
/**
|
|
445
|
+
* Instantiates every header represented by one materialized subtree.
|
|
446
|
+
*
|
|
447
|
+
* @param tileset - Owning runtime tileset.
|
|
448
|
+
* @param parentTile - Existing materialized parent.
|
|
449
|
+
* @param childHeaders - Headers to install below the parent.
|
|
450
|
+
* @returns Number of newly allocated runtime tile nodes.
|
|
451
|
+
*/
|
|
452
|
+
initializeMaterializedChildren(tileset, parentTile, childHeaders) {
|
|
453
|
+
let materializedTileCount = 0;
|
|
454
|
+
const stack = [
|
|
455
|
+
{ parentTile, childHeaders }
|
|
456
|
+
];
|
|
457
|
+
while (stack.length > 0) {
|
|
458
|
+
const entry = stack.pop();
|
|
459
|
+
for (const childHeader of entry.childHeaders) {
|
|
460
|
+
const childTile = new Tile3DNode(tileset, childHeader, entry.parentTile);
|
|
461
|
+
entry.parentTile.children.push(childTile);
|
|
462
|
+
childTile.depth = entry.parentTile.depth + 1;
|
|
463
|
+
tileset.stats.get('Tiles In Tileset(s)').incrementCount();
|
|
464
|
+
materializedTileCount++;
|
|
465
|
+
if (childHeader.children?.length) {
|
|
466
|
+
stack.push({ parentTile: childTile, childHeaders: childHeader.children });
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
return materializedTileCount;
|
|
471
|
+
}
|
|
472
|
+
/** Evicts least-recently-used settled subtree entries until the configured bound is met. */
|
|
473
|
+
trimImplicitSubtreeCache() {
|
|
474
|
+
if (this.implicitSubtreeCache.size <= this.maximumCachedSubtrees) {
|
|
475
|
+
return;
|
|
476
|
+
}
|
|
477
|
+
for (const subtreeUrl of this.implicitSubtreeCache.keys()) {
|
|
478
|
+
if (!this.pendingImplicitSubtreeUrls.has(subtreeUrl)) {
|
|
479
|
+
this.implicitSubtreeCache.delete(subtreeUrl);
|
|
480
|
+
}
|
|
481
|
+
if (this.implicitSubtreeCache.size <= this.maximumCachedSubtrees) {
|
|
482
|
+
break;
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
function isTilesetRequest(input) {
|
|
488
|
+
return Boolean(input && typeof input === 'object' && 'url' in input && 'loader' in input && !('type' in input));
|
|
489
|
+
}
|
|
490
|
+
/**
|
|
491
|
+
* Normalizes constructor input into a URL request descriptor.
|
|
492
|
+
* @param input Constructor input for {@link Tiles3DSource}.
|
|
493
|
+
* @returns A normalized request with a resolved base path.
|
|
494
|
+
*/
|
|
495
|
+
function normalizeTiles3DRequest(input) {
|
|
496
|
+
if (isTilesetRequest(input)) {
|
|
497
|
+
return {
|
|
498
|
+
...input,
|
|
499
|
+
basePath: input.basePath || path.dirname(input.url)
|
|
500
|
+
};
|
|
501
|
+
}
|
|
502
|
+
return {
|
|
503
|
+
url: input.url,
|
|
504
|
+
loader: input.loader,
|
|
505
|
+
basePath: input.basePath || path.dirname(input.url),
|
|
506
|
+
resolver: input.resolver,
|
|
507
|
+
coreApi: input.coreApi
|
|
508
|
+
};
|
|
509
|
+
}
|
|
510
|
+
//# sourceMappingURL=tiles-3d-source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tiles-3d-source.js","sourceRoot":"","sources":["../../../src/tileset-3d/format-3d-tiles/tiles-3d-source.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { TilesetTraverser } from "../common/tileset-traverser.js";
|
|
2
|
+
import type { Tile3D } from "../common/tile-3d.js";
|
|
3
|
+
import type { FrameState } from "../helpers/frame-state.js";
|
|
4
|
+
export declare class Tileset3DTraverser extends TilesetTraverser {
|
|
5
|
+
/** Pending implicit subtree requests keyed by viewport and tile identity. */
|
|
6
|
+
private readonly pendingImplicitSubtrees;
|
|
7
|
+
/**
|
|
8
|
+
* Reports whether every implicit subtree request started by this viewport traversal has settled.
|
|
9
|
+
*
|
|
10
|
+
* @param frameState - Traversal frame whose completion callback is being considered.
|
|
11
|
+
* @returns `true` when no matching subtree metadata request remains pending.
|
|
12
|
+
*/
|
|
13
|
+
protected traversalFinished(frameState: FrameState): boolean;
|
|
14
|
+
compareDistanceToCamera(a: any, b: any): number;
|
|
15
|
+
/**
|
|
16
|
+
* Starts an implicit subtree request only after culling, request-volume, and SSE eligibility.
|
|
17
|
+
*
|
|
18
|
+
* The current parent remains the traversal boundary while metadata is loading, which preserves
|
|
19
|
+
* REPLACE coverage and ADD accumulation. Request scheduling reads the tile's existing
|
|
20
|
+
* progressive-resolution and foveated metrics, so subtree metadata follows the same priority
|
|
21
|
+
* policy as render content. A completion notification lets the owning tileset publish the newly
|
|
22
|
+
* materialized traversal result on the next update.
|
|
23
|
+
*
|
|
24
|
+
* @param tile - Tile whose existing or lazy children should be updated.
|
|
25
|
+
* @param frameState - Current culling and LOD state.
|
|
26
|
+
*/
|
|
27
|
+
updateChildTiles(tile: Tile3D, frameState: FrameState): void;
|
|
28
|
+
/**
|
|
29
|
+
* Resumes the same traversal frame after one lazy subtree request settles.
|
|
30
|
+
*
|
|
31
|
+
* Successful materialization traverses the new headers immediately. Failed or scheduler-cancelled
|
|
32
|
+
* requests finish the current traversal without retrying in a tight loop; a later application
|
|
33
|
+
* update may retry them.
|
|
34
|
+
*
|
|
35
|
+
* @param tile - Subtree-root tile whose request settled.
|
|
36
|
+
* @param frameState - Frame that started the request.
|
|
37
|
+
* @param requestKey - Viewport-scoped pending-request identity.
|
|
38
|
+
*/
|
|
39
|
+
private handleImplicitSubtreeLoad;
|
|
40
|
+
updateTileVisibility(tile: any, frameState: any): void;
|
|
41
|
+
meetsScreenSpaceErrorEarly(tile: any, frameState: any): boolean;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=tileset-3d-traverser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tileset-3d-traverser.d.ts","sourceRoot":"","sources":["../../../src/tileset-3d/format-3d-tiles/tileset-3d-traverser.ts"],"names":[],"mappings":"AAQA,OAAO,EAAC,gBAAgB,EAAC,uCAAoC;AAC7D,OAAO,KAAK,EAAC,MAAM,EAAC,6BAA0B;AAC9C,OAAO,KAAK,EAAC,UAAU,EAAC,kCAA+B;AAEvD,qBAAa,kBAAmB,SAAQ,gBAAgB;IACtD,6EAA6E;IAC7E,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAkC;IAE1E;;;;;OAKG;IACH,SAAS,CAAC,iBAAiB,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO;IAU5D,uBAAuB,CAAC,CAAC,KAAA,EAAE,CAAC,KAAA;IAO5B;;;;;;;;;;;OAWG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI;IAiB5D;;;;;;;;;;OAUG;IACH,OAAO,CAAC,yBAAyB;IAgBjC,oBAAoB,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA;IAmCrC,0BAA0B,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA;CAS5C"}
|