@loaders.gl/tiles 3.3.0-alpha.1 → 3.3.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/dist/dist.min.js +1027 -1431
- package/dist/es5/bundle.js +0 -1
- package/dist/es5/bundle.js.map +1 -1
- package/dist/es5/constants.js +2 -1
- package/dist/es5/constants.js.map +1 -1
- package/dist/es5/index.js +26 -36
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/tileset/helpers/3d-tiles-options.js +0 -1
- package/dist/es5/tileset/helpers/3d-tiles-options.js.map +1 -1
- package/dist/es5/tileset/helpers/bounding-volume.js +7 -26
- package/dist/es5/tileset/helpers/bounding-volume.js.map +1 -1
- package/dist/es5/tileset/helpers/frame-state.js +45 -50
- package/dist/es5/tileset/helpers/frame-state.js.map +1 -1
- package/dist/es5/tileset/helpers/i3s-lod.js +0 -13
- package/dist/es5/tileset/helpers/i3s-lod.js.map +1 -1
- package/dist/es5/tileset/helpers/tiles-3d-lod.js +7 -16
- package/dist/es5/tileset/helpers/tiles-3d-lod.js.map +1 -1
- package/dist/es5/tileset/helpers/transform-utils.js +2 -11
- package/dist/es5/tileset/helpers/transform-utils.js.map +1 -1
- package/dist/es5/tileset/helpers/zoom.js +6 -16
- package/dist/es5/tileset/helpers/zoom.js.map +1 -1
- package/dist/es5/tileset/tile-3d.js +111 -98
- package/dist/es5/tileset/tile-3d.js.map +1 -1
- package/dist/es5/tileset/tileset-3d.js +130 -196
- package/dist/es5/tileset/tileset-3d.js.map +1 -1
- package/dist/es5/tileset/tileset-cache.js +1 -14
- package/dist/es5/tileset/tileset-cache.js.map +1 -1
- package/dist/es5/tileset/traversers/{i3s-frame-counter.js → i3s-pending-tiles-register.js} +21 -16
- package/dist/es5/tileset/traversers/i3s-pending-tiles-register.js.map +1 -0
- package/dist/es5/tileset/traversers/i3s-tile-manager.js +33 -27
- package/dist/es5/tileset/traversers/i3s-tile-manager.js.map +1 -1
- package/dist/es5/tileset/traversers/i3s-tileset-traverser.js +10 -52
- package/dist/es5/tileset/traversers/i3s-tileset-traverser.js.map +1 -1
- package/dist/es5/tileset/traversers/tileset-3d-traverser.js +0 -22
- package/dist/es5/tileset/traversers/tileset-3d-traverser.js.map +1 -1
- package/dist/es5/tileset/traversers/tileset-traverser.js +55 -78
- package/dist/es5/tileset/traversers/tileset-traverser.js.map +1 -1
- package/dist/es5/types.js.map +1 -1
- package/dist/es5/utils/doubly-linked-list-node.js +3 -7
- package/dist/es5/utils/doubly-linked-list-node.js.map +1 -1
- package/dist/es5/utils/doubly-linked-list.js +9 -17
- package/dist/es5/utils/doubly-linked-list.js.map +1 -1
- package/dist/es5/utils/managed-array.js +29 -30
- package/dist/es5/utils/managed-array.js.map +1 -1
- package/dist/esm/bundle.js +1 -1
- package/dist/esm/bundle.js.map +1 -1
- package/dist/esm/constants.js +3 -0
- package/dist/esm/constants.js.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/tileset/helpers/3d-tiles-options.js.map +1 -1
- package/dist/esm/tileset/helpers/bounding-volume.js +4 -10
- package/dist/esm/tileset/helpers/bounding-volume.js.map +1 -1
- package/dist/esm/tileset/helpers/frame-state.js +36 -20
- package/dist/esm/tileset/helpers/frame-state.js.map +1 -1
- package/dist/esm/tileset/helpers/i3s-lod.js +4 -4
- package/dist/esm/tileset/helpers/i3s-lod.js.map +1 -1
- package/dist/esm/tileset/helpers/tiles-3d-lod.js +11 -8
- package/dist/esm/tileset/helpers/tiles-3d-lod.js.map +1 -1
- package/dist/esm/tileset/helpers/transform-utils.js +1 -3
- package/dist/esm/tileset/helpers/transform-utils.js.map +1 -1
- package/dist/esm/tileset/helpers/zoom.js +3 -2
- package/dist/esm/tileset/helpers/zoom.js.map +1 -1
- package/dist/esm/tileset/tile-3d.js +47 -108
- package/dist/esm/tileset/tile-3d.js.map +1 -1
- package/dist/esm/tileset/tileset-3d.js +70 -163
- package/dist/esm/tileset/tileset-3d.js.map +1 -1
- package/dist/esm/tileset/tileset-cache.js +2 -18
- package/dist/esm/tileset/tileset-cache.js.map +1 -1
- package/dist/esm/tileset/traversers/i3s-pending-tiles-register.js +28 -0
- package/dist/esm/tileset/traversers/i3s-pending-tiles-register.js.map +1 -0
- package/dist/esm/tileset/traversers/i3s-tile-manager.js +34 -15
- package/dist/esm/tileset/traversers/i3s-tile-manager.js.map +1 -1
- package/dist/esm/tileset/traversers/i3s-tileset-traverser.js +8 -22
- package/dist/esm/tileset/traversers/i3s-tileset-traverser.js.map +1 -1
- package/dist/esm/tileset/traversers/tileset-3d-traverser.js +2 -9
- package/dist/esm/tileset/traversers/tileset-3d-traverser.js.map +1 -1
- package/dist/esm/tileset/traversers/tileset-traverser.js +20 -59
- package/dist/esm/tileset/traversers/tileset-traverser.js.map +1 -1
- package/dist/esm/types.js.map +1 -1
- package/dist/esm/utils/doubly-linked-list-node.js +1 -4
- package/dist/esm/utils/doubly-linked-list-node.js.map +1 -1
- package/dist/esm/utils/doubly-linked-list.js +2 -11
- package/dist/esm/utils/doubly-linked-list.js.map +1 -1
- package/dist/esm/utils/managed-array.js +4 -22
- package/dist/esm/utils/managed-array.js.map +1 -1
- package/dist/tileset/helpers/frame-state.d.ts +5 -8
- package/dist/tileset/helpers/frame-state.d.ts.map +1 -1
- package/dist/tileset/helpers/frame-state.js +27 -12
- package/dist/tileset/helpers/i3s-lod.d.ts.map +1 -1
- package/dist/tileset/tile-3d.d.ts +15 -4
- package/dist/tileset/tile-3d.d.ts.map +1 -1
- package/dist/tileset/tile-3d.js +15 -2
- package/dist/tileset/tileset-3d.d.ts +17 -4
- package/dist/tileset/tileset-3d.d.ts.map +1 -1
- package/dist/tileset/tileset-3d.js +47 -10
- package/dist/tileset/traversers/{i3s-frame-counter.d.ts → i3s-pending-tiles-register.d.ts} +7 -4
- package/dist/tileset/traversers/i3s-pending-tiles-register.d.ts.map +1 -0
- package/dist/tileset/traversers/{i3s-frame-counter.js → i3s-pending-tiles-register.js} +17 -8
- package/dist/tileset/traversers/i3s-tile-manager.d.ts +19 -1
- package/dist/tileset/traversers/i3s-tile-manager.d.ts.map +1 -1
- package/dist/tileset/traversers/i3s-tile-manager.js +32 -12
- package/dist/tileset/traversers/i3s-tileset-traverser.d.ts +1 -1
- package/dist/tileset/traversers/i3s-tileset-traverser.d.ts.map +1 -1
- package/dist/tileset/traversers/i3s-tileset-traverser.js +9 -9
- package/dist/tileset/traversers/tileset-traverser.d.ts +3 -3
- package/dist/tileset/traversers/tileset-traverser.d.ts.map +1 -1
- package/dist/tileset/traversers/tileset-traverser.js +4 -4
- package/dist/types.d.ts +30 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/tileset/helpers/frame-state.ts +47 -19
- package/src/tileset/helpers/i3s-lod.ts +3 -1
- package/src/tileset/tile-3d.ts +16 -2
- package/src/tileset/tileset-3d.ts +55 -16
- package/src/tileset/traversers/i3s-pending-tiles-register.ts +44 -0
- package/src/tileset/traversers/i3s-tile-manager.ts +47 -11
- package/src/tileset/traversers/i3s-tileset-traverser.ts +5 -5
- package/src/tileset/traversers/tileset-traverser.ts +2 -2
- package/src/types.ts +32 -0
- package/dist/es5/tileset/traversers/i3s-frame-counter.js.map +0 -1
- package/dist/esm/tileset/traversers/i3s-frame-counter.js +0 -23
- package/dist/esm/tileset/traversers/i3s-frame-counter.js.map +0 -1
- package/dist/tileset/traversers/i3s-frame-counter.d.ts.map +0 -1
- package/src/tileset/traversers/i3s-frame-counter.ts +0 -35
|
@@ -55,6 +55,7 @@ import Tileset3DTraverser from './traversers/tileset-3d-traverser';
|
|
|
55
55
|
import TilesetTraverser from './traversers/tileset-traverser';
|
|
56
56
|
import I3SetTraverser from './traversers/i3s-tileset-traverser';
|
|
57
57
|
import {TILESET_TYPE} from '../constants';
|
|
58
|
+
import {GeospatialViewport, Viewport} from '../types';
|
|
58
59
|
|
|
59
60
|
export type Tileset3DProps = {
|
|
60
61
|
// loading
|
|
@@ -211,6 +212,9 @@ export default class Tileset3D {
|
|
|
211
212
|
|
|
212
213
|
stats: Stats;
|
|
213
214
|
|
|
215
|
+
/** flags that contain information about data types in nested tiles */
|
|
216
|
+
contentFormats = {draco: false, meshopt: false, dds: false, ktx2: false};
|
|
217
|
+
|
|
214
218
|
traverseCounter: number;
|
|
215
219
|
geometricError: number;
|
|
216
220
|
selectedTiles: Tile3D[];
|
|
@@ -244,7 +248,7 @@ export default class Tileset3D {
|
|
|
244
248
|
private _pendingCount: any;
|
|
245
249
|
|
|
246
250
|
// HOLD TRAVERSAL RESULTS
|
|
247
|
-
private lastUpdatedVieports:
|
|
251
|
+
private lastUpdatedVieports: Viewport[] | Viewport | null;
|
|
248
252
|
private _requestedTiles: any;
|
|
249
253
|
private _emptyTiles: any;
|
|
250
254
|
private frameStateData: any;
|
|
@@ -393,7 +397,7 @@ export default class Tileset3D {
|
|
|
393
397
|
* @param viewports - list of viewports
|
|
394
398
|
* @deprecated
|
|
395
399
|
*/
|
|
396
|
-
update(viewports:
|
|
400
|
+
update(viewports: Viewport[] | Viewport | null = null) {
|
|
397
401
|
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
398
402
|
this.tilesetInitializationPromise.then(() => {
|
|
399
403
|
if (!viewports && this.lastUpdatedVieports) {
|
|
@@ -401,7 +405,9 @@ export default class Tileset3D {
|
|
|
401
405
|
} else {
|
|
402
406
|
this.lastUpdatedVieports = viewports;
|
|
403
407
|
}
|
|
404
|
-
|
|
408
|
+
if (viewports) {
|
|
409
|
+
this.doUpdate(viewports);
|
|
410
|
+
}
|
|
405
411
|
});
|
|
406
412
|
}
|
|
407
413
|
|
|
@@ -411,7 +417,7 @@ export default class Tileset3D {
|
|
|
411
417
|
* @param viewports viewports
|
|
412
418
|
* @returns Promise of new frameNumber
|
|
413
419
|
*/
|
|
414
|
-
async selectTiles(viewports:
|
|
420
|
+
async selectTiles(viewports: Viewport[] | Viewport | null = null): Promise<number> {
|
|
415
421
|
await this.tilesetInitializationPromise;
|
|
416
422
|
if (viewports) {
|
|
417
423
|
this.lastUpdatedVieports = viewports;
|
|
@@ -419,7 +425,9 @@ export default class Tileset3D {
|
|
|
419
425
|
if (!this.updatePromise) {
|
|
420
426
|
this.updatePromise = new Promise<number>((resolve) => {
|
|
421
427
|
setTimeout(() => {
|
|
422
|
-
|
|
428
|
+
if (this.lastUpdatedVieports) {
|
|
429
|
+
this.doUpdate(this.lastUpdatedVieports);
|
|
430
|
+
}
|
|
423
431
|
resolve(this._frameNumber);
|
|
424
432
|
this.updatePromise = null;
|
|
425
433
|
}, this.options.debounceTime);
|
|
@@ -433,24 +441,22 @@ export default class Tileset3D {
|
|
|
433
441
|
* @param viewports viewports
|
|
434
442
|
*/
|
|
435
443
|
// eslint-disable-next-line max-statements, complexity
|
|
436
|
-
private doUpdate(viewports:
|
|
444
|
+
private doUpdate(viewports: Viewport[] | Viewport): void {
|
|
437
445
|
if ('loadTiles' in this.options && !this.options.loadTiles) {
|
|
438
446
|
return;
|
|
439
447
|
}
|
|
440
448
|
if (this.traverseCounter > 0) {
|
|
441
449
|
return;
|
|
442
450
|
}
|
|
443
|
-
|
|
444
|
-
viewports = [viewports];
|
|
445
|
-
}
|
|
451
|
+
const preparedViewports = viewports instanceof Array ? viewports : [viewports];
|
|
446
452
|
|
|
447
453
|
this._cache.reset();
|
|
448
454
|
this._frameNumber++;
|
|
449
|
-
this.traverseCounter =
|
|
455
|
+
this.traverseCounter = preparedViewports.length;
|
|
450
456
|
const viewportsToTraverse: string[] = [];
|
|
451
457
|
// First loop to decrement traverseCounter
|
|
452
|
-
for (const viewport of
|
|
453
|
-
const id = viewport.id
|
|
458
|
+
for (const viewport of preparedViewports) {
|
|
459
|
+
const id = viewport.id;
|
|
454
460
|
if (this._needTraverse(id)) {
|
|
455
461
|
viewportsToTraverse.push(id);
|
|
456
462
|
} else {
|
|
@@ -459,8 +465,8 @@ export default class Tileset3D {
|
|
|
459
465
|
}
|
|
460
466
|
|
|
461
467
|
// Second loop to traverse
|
|
462
|
-
for (const viewport of
|
|
463
|
-
const id = viewport.id
|
|
468
|
+
for (const viewport of preparedViewports) {
|
|
469
|
+
const id = viewport.id;
|
|
464
470
|
if (!this.roots[id]) {
|
|
465
471
|
this.roots[id] = this._initializeTileHeaders(this.tileset, null);
|
|
466
472
|
}
|
|
@@ -468,7 +474,7 @@ export default class Tileset3D {
|
|
|
468
474
|
if (!viewportsToTraverse.includes(id)) {
|
|
469
475
|
continue; // eslint-disable-line no-continue
|
|
470
476
|
}
|
|
471
|
-
const frameState = getFrameState(viewport, this._frameNumber);
|
|
477
|
+
const frameState = getFrameState(viewport as GeospatialViewport, this._frameNumber);
|
|
472
478
|
this._traverser.traverse(this.roots[id], frameState, this.options);
|
|
473
479
|
}
|
|
474
480
|
}
|
|
@@ -693,7 +699,7 @@ export default class Tileset3D {
|
|
|
693
699
|
this.stats.get(TILES_LOADED);
|
|
694
700
|
this.stats.get(TILES_UNLOADED);
|
|
695
701
|
this.stats.get(TILES_LOAD_FAILED);
|
|
696
|
-
this.stats.get(POINTS_COUNT
|
|
702
|
+
this.stats.get(POINTS_COUNT);
|
|
697
703
|
this.stats.get(TILES_GPU_MEMORY, 'memory');
|
|
698
704
|
}
|
|
699
705
|
|
|
@@ -796,10 +802,43 @@ export default class Tileset3D {
|
|
|
796
802
|
calculateTransformProps(tile, tile.content);
|
|
797
803
|
}
|
|
798
804
|
|
|
805
|
+
this.updateContentTypes(tile);
|
|
799
806
|
this._addTileToCache(tile);
|
|
800
807
|
this.options.onTileLoad(tile);
|
|
801
808
|
}
|
|
802
809
|
|
|
810
|
+
/**
|
|
811
|
+
* Update information about data types in nested tiles
|
|
812
|
+
* @param tile instance of a nested Tile3D
|
|
813
|
+
*/
|
|
814
|
+
private updateContentTypes(tile: Tile3D) {
|
|
815
|
+
if (this.type === TILESET_TYPE.I3S) {
|
|
816
|
+
if (tile.header.isDracoGeometry) {
|
|
817
|
+
this.contentFormats.draco = true;
|
|
818
|
+
}
|
|
819
|
+
switch (tile.header.textureFormat) {
|
|
820
|
+
case 'dds':
|
|
821
|
+
this.contentFormats.dds = true;
|
|
822
|
+
break;
|
|
823
|
+
case 'ktx2':
|
|
824
|
+
this.contentFormats.ktx2 = true;
|
|
825
|
+
break;
|
|
826
|
+
default:
|
|
827
|
+
}
|
|
828
|
+
} else if (this.type === TILESET_TYPE.TILES3D) {
|
|
829
|
+
const {extensionsRemoved = []} = tile.content?.gltf || {};
|
|
830
|
+
if (extensionsRemoved.includes('KHR_draco_mesh_compression')) {
|
|
831
|
+
this.contentFormats.draco = true;
|
|
832
|
+
}
|
|
833
|
+
if (extensionsRemoved.includes('EXT_meshopt_compression')) {
|
|
834
|
+
this.contentFormats.meshopt = true;
|
|
835
|
+
}
|
|
836
|
+
if (extensionsRemoved.includes('KHR_texture_basisu')) {
|
|
837
|
+
this.contentFormats.ktx2 = true;
|
|
838
|
+
}
|
|
839
|
+
}
|
|
840
|
+
}
|
|
841
|
+
|
|
803
842
|
_onStartTileLoading() {
|
|
804
843
|
this._pendingCount++;
|
|
805
844
|
this.stats.get(TILES_LOADING).incrementCount();
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Counter to register pending tile headers for the particular frameNumber
|
|
3
|
+
* Until all tiles are loaded we won't call `onTraversalEnd` callback
|
|
4
|
+
*/
|
|
5
|
+
export default class I3SPendingTilesRegister {
|
|
6
|
+
private frameNumberMap: Map<string, Map<number, number>> = new Map();
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Register a new pending tile header for the particular frameNumber
|
|
10
|
+
* @param viewportId
|
|
11
|
+
* @param frameNumber
|
|
12
|
+
*/
|
|
13
|
+
register(viewportId: string, frameNumber: number) {
|
|
14
|
+
const viewportMap = this.frameNumberMap.get(viewportId) || new Map();
|
|
15
|
+
const oldCount = viewportMap.get(frameNumber) || 0;
|
|
16
|
+
viewportMap.set(frameNumber, oldCount + 1);
|
|
17
|
+
this.frameNumberMap.set(viewportId, viewportMap);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Deregister a pending tile header for the particular frameNumber
|
|
22
|
+
* @param viewportId
|
|
23
|
+
* @param frameNumber
|
|
24
|
+
*/
|
|
25
|
+
deregister(viewportId: string, frameNumber: number) {
|
|
26
|
+
const viewportMap = this.frameNumberMap.get(viewportId);
|
|
27
|
+
if (!viewportMap) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const oldCount = viewportMap.get(frameNumber) || 1;
|
|
31
|
+
viewportMap.set(frameNumber, oldCount - 1);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Check is there are no pending tile headers registered for the particular frameNumber
|
|
36
|
+
* @param viewportId
|
|
37
|
+
* @param frameNumber
|
|
38
|
+
* @returns
|
|
39
|
+
*/
|
|
40
|
+
isZero(viewportId: string, frameNumber: number) {
|
|
41
|
+
const count = this.frameNumberMap.get(viewportId)?.get(frameNumber) || 0;
|
|
42
|
+
return count === 0;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {FrameState} from '../helpers/frame-state';
|
|
2
|
-
import I3SPendingTilesRegister from './i3s-
|
|
2
|
+
import I3SPendingTilesRegister from './i3s-pending-tiles-register';
|
|
3
3
|
|
|
4
4
|
const STATUS = {
|
|
5
5
|
REQUESTED: 'REQUESTED',
|
|
@@ -16,50 +16,86 @@ export default class I3STileManager {
|
|
|
16
16
|
this._statusMap = {};
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
/**
|
|
20
|
+
* Add request to map
|
|
21
|
+
* @param request - node metadata request
|
|
22
|
+
* @param key - unique key
|
|
23
|
+
* @param callback - callback after request completed
|
|
24
|
+
* @param frameState - frameState data
|
|
25
|
+
*/
|
|
19
26
|
add(request, key, callback, frameState: FrameState) {
|
|
20
27
|
if (!this._statusMap[key]) {
|
|
21
|
-
const {
|
|
28
|
+
const {
|
|
29
|
+
frameNumber,
|
|
30
|
+
viewport: {id}
|
|
31
|
+
} = frameState;
|
|
22
32
|
this._statusMap[key] = {request, callback, key, frameState, status: STATUS.REQUESTED};
|
|
23
33
|
// Register pending request for the frameNumber
|
|
24
|
-
this.pendingTilesRegister.register(frameNumber);
|
|
34
|
+
this.pendingTilesRegister.register(id, frameNumber);
|
|
25
35
|
request()
|
|
26
36
|
.then((data) => {
|
|
27
37
|
this._statusMap[key].status = STATUS.COMPLETED;
|
|
28
|
-
const {
|
|
38
|
+
const {
|
|
39
|
+
frameNumber: actualFrameNumber,
|
|
40
|
+
viewport: {id}
|
|
41
|
+
} = this._statusMap[key].frameState;
|
|
29
42
|
// Deregister pending request for the frameNumber
|
|
30
|
-
this.pendingTilesRegister.deregister(actualFrameNumber);
|
|
43
|
+
this.pendingTilesRegister.deregister(id, actualFrameNumber);
|
|
31
44
|
this._statusMap[key].callback(data, frameState);
|
|
32
45
|
})
|
|
33
46
|
.catch((error) => {
|
|
34
47
|
this._statusMap[key].status = STATUS.ERROR;
|
|
35
|
-
const {
|
|
48
|
+
const {
|
|
49
|
+
frameNumber: actualFrameNumber,
|
|
50
|
+
viewport: {id}
|
|
51
|
+
} = this._statusMap[key].frameState;
|
|
36
52
|
// Deregister pending request for the frameNumber
|
|
37
|
-
this.pendingTilesRegister.deregister(actualFrameNumber);
|
|
53
|
+
this.pendingTilesRegister.deregister(id, actualFrameNumber);
|
|
38
54
|
callback(error);
|
|
39
55
|
});
|
|
40
56
|
}
|
|
41
57
|
}
|
|
42
58
|
|
|
59
|
+
/**
|
|
60
|
+
* Update request if it is still actual for the new frameState
|
|
61
|
+
* @param key - unique key
|
|
62
|
+
* @param frameState - frameState data
|
|
63
|
+
*/
|
|
43
64
|
update(key, frameState: FrameState) {
|
|
44
65
|
if (this._statusMap[key]) {
|
|
45
66
|
// Deregister pending request for the old frameNumber
|
|
46
|
-
|
|
67
|
+
const {
|
|
68
|
+
frameNumber,
|
|
69
|
+
viewport: {id}
|
|
70
|
+
} = this._statusMap[key].frameState;
|
|
71
|
+
this.pendingTilesRegister.deregister(id, frameNumber);
|
|
72
|
+
|
|
47
73
|
// Register pending request for the new frameNumber
|
|
48
|
-
|
|
74
|
+
const {
|
|
75
|
+
frameNumber: newFrameNumber,
|
|
76
|
+
viewport: {id: newViewportId}
|
|
77
|
+
} = frameState;
|
|
78
|
+
this.pendingTilesRegister.register(newViewportId, newFrameNumber);
|
|
49
79
|
this._statusMap[key].frameState = frameState;
|
|
50
80
|
}
|
|
51
81
|
}
|
|
52
82
|
|
|
83
|
+
/**
|
|
84
|
+
* Find request in the map
|
|
85
|
+
* @param key - unique key
|
|
86
|
+
* @returns
|
|
87
|
+
*/
|
|
53
88
|
find(key) {
|
|
54
89
|
return this._statusMap[key];
|
|
55
90
|
}
|
|
56
91
|
|
|
57
92
|
/**
|
|
58
93
|
* Check it there are pending tile headers for the particular frameNumber
|
|
94
|
+
* @param viewportId
|
|
59
95
|
* @param frameNumber
|
|
60
96
|
* @returns
|
|
61
97
|
*/
|
|
62
|
-
hasPendingTiles(frameNumber: number): boolean {
|
|
63
|
-
return !this.pendingTilesRegister.isZero(frameNumber);
|
|
98
|
+
hasPendingTiles(viewportId: string, frameNumber: number): boolean {
|
|
99
|
+
return !this.pendingTilesRegister.isZero(viewportId, frameNumber);
|
|
64
100
|
}
|
|
65
101
|
}
|
|
@@ -14,8 +14,8 @@ export default class I3STilesetTraverser extends TilesetTraverser {
|
|
|
14
14
|
* that means the traversal is finished and we can call
|
|
15
15
|
* following-up callbacks.
|
|
16
16
|
*/
|
|
17
|
-
protected
|
|
18
|
-
return !this._tileManager.hasPendingTiles(this._frameNumber || 0);
|
|
17
|
+
protected traversalFinished(frameState: FrameState): boolean {
|
|
18
|
+
return !this._tileManager.hasPendingTiles(frameState.viewport.id, this._frameNumber || 0);
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
constructor(options) {
|
|
@@ -72,8 +72,7 @@ export default class I3STilesetTraverser extends TilesetTraverser {
|
|
|
72
72
|
...tileset.loadOptions,
|
|
73
73
|
i3s: {
|
|
74
74
|
...tileset.loadOptions.i3s,
|
|
75
|
-
isTileHeader: true
|
|
76
|
-
loadContent: false
|
|
75
|
+
isTileHeader: true
|
|
77
76
|
}
|
|
78
77
|
};
|
|
79
78
|
|
|
@@ -98,7 +97,8 @@ export default class I3STilesetTraverser extends TilesetTraverser {
|
|
|
98
97
|
// after tile fetched, resume traversal if still in current update/traversal frame
|
|
99
98
|
if (
|
|
100
99
|
this._frameNumber === frameState.frameNumber &&
|
|
101
|
-
(this.traversalFinished
|
|
100
|
+
(this.traversalFinished(frameState) ||
|
|
101
|
+
new Date().getTime() - this.lastUpdate > this.updateDebounceTime)
|
|
102
102
|
) {
|
|
103
103
|
this.executeTraversal(childTile, frameState);
|
|
104
104
|
}
|
|
@@ -45,7 +45,7 @@ export default class TilesetTraverser {
|
|
|
45
45
|
protected _emptyTraversalStack: ManagedArray;
|
|
46
46
|
protected _frameNumber: number | null;
|
|
47
47
|
|
|
48
|
-
protected
|
|
48
|
+
protected traversalFinished(frameState: FrameState): boolean {
|
|
49
49
|
return true;
|
|
50
50
|
}
|
|
51
51
|
|
|
@@ -164,7 +164,7 @@ export default class TilesetTraverser {
|
|
|
164
164
|
}
|
|
165
165
|
|
|
166
166
|
const newTime = new Date().getTime();
|
|
167
|
-
if (this.traversalFinished || newTime - this.lastUpdate > this.updateDebounceTime) {
|
|
167
|
+
if (this.traversalFinished(frameState) || newTime - this.lastUpdate > this.updateDebounceTime) {
|
|
168
168
|
this.lastUpdate = newTime;
|
|
169
169
|
this.options.onTraversalEnd(frameState);
|
|
170
170
|
}
|
package/src/types.ts
CHANGED
|
@@ -1,4 +1,36 @@
|
|
|
1
|
+
import {Vector3} from '@math.gl/core';
|
|
2
|
+
|
|
1
3
|
export type BoundingRectangle = {
|
|
2
4
|
width: number;
|
|
3
5
|
height: number;
|
|
4
6
|
};
|
|
7
|
+
|
|
8
|
+
/** Deck.gl Viewport instance type.
|
|
9
|
+
* We can't import it from Deck.gl to avoid circular reference */
|
|
10
|
+
export type Viewport = {
|
|
11
|
+
id: string;
|
|
12
|
+
cameraPosition: number[] | Vector3;
|
|
13
|
+
height: number;
|
|
14
|
+
width: number;
|
|
15
|
+
zoom: number;
|
|
16
|
+
distanceScales: {
|
|
17
|
+
unitsPerMeter: number[];
|
|
18
|
+
metersPerUnit: number[];
|
|
19
|
+
};
|
|
20
|
+
center: number[] | Vector3;
|
|
21
|
+
unprojectPosition: (position: number[] | Vector3) => [number, number, number];
|
|
22
|
+
project: (coorinates: number[] | Vector3) => number[];
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Contain extra fields from WebMercatorViewport and FirstPersonViewport
|
|
27
|
+
*/
|
|
28
|
+
export type GeospatialViewport = Viewport & {
|
|
29
|
+
/** @todo This field is not represented in Deck.gl viewports. Can be removed in the next version */
|
|
30
|
+
cameraDirection: [number, number, number];
|
|
31
|
+
/** @todo This field is not represented in Deck.gl viewports. Can be removed in the next version */
|
|
32
|
+
cameraUp: [number, number, number];
|
|
33
|
+
longitude: number;
|
|
34
|
+
latitude: number;
|
|
35
|
+
bearing: number;
|
|
36
|
+
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/tileset/traversers/i3s-frame-counter.ts"],"names":["I3SPendingTilesRegister","Map","frameNumber","oldCount","frameNumberMap","get","set","count"],"mappings":";;;;;;;;;;;;;;;IAIqBA,uB;;;0DAC2B,IAAIC,GAAJ,E;;;;;WAM9C,kBAASC,WAAT,EAA8B;AAC5B,UAAMC,QAAQ,GAAG,KAAKC,cAAL,CAAoBC,GAApB,CAAwBH,WAAxB,KAAwC,CAAzD;AACA,WAAKE,cAAL,CAAoBE,GAApB,CAAwBJ,WAAxB,EAAqCC,QAAQ,GAAG,CAAhD;AACD;;;WAMD,oBAAWD,WAAX,EAAgC;AAC9B,UAAMC,QAAQ,GAAG,KAAKC,cAAL,CAAoBC,GAApB,CAAwBH,WAAxB,KAAwC,CAAzD;AACA,WAAKE,cAAL,CAAoBE,GAApB,CAAwBJ,WAAxB,EAAqCC,QAAQ,GAAG,CAAhD;AACD;;;WAOD,gBAAOD,WAAP,EAA4B;AAC1B,UAAMK,KAAK,GAAG,KAAKH,cAAL,CAAoBC,GAApB,CAAwBH,WAAxB,KAAwC,CAAtD;AACA,aAAOK,KAAK,KAAK,CAAjB;AACD","sourcesContent":["/**\n * Counter to register pending tile headers for the particular frameNumber\n * Until all tiles are loaded we won't call `onTraversalEnd` callback\n */\nexport default class I3SPendingTilesRegister {\n private frameNumberMap: Map<number, number> = new Map();\n\n /**\n * Register a new pending tile header for the particular frameNumber\n * @param frameNumber\n */\n register(frameNumber: number) {\n const oldCount = this.frameNumberMap.get(frameNumber) || 0;\n this.frameNumberMap.set(frameNumber, oldCount + 1);\n }\n\n /**\n * Deregister a pending tile header for the particular frameNumber\n * @param frameNumber\n */\n deregister(frameNumber: number) {\n const oldCount = this.frameNumberMap.get(frameNumber) || 1;\n this.frameNumberMap.set(frameNumber, oldCount - 1);\n }\n\n /**\n * Check is there are no pending tile headers registered for the particular frameNumber\n * @param frameNumber\n * @returns\n */\n isZero(frameNumber: number) {\n const count = this.frameNumberMap.get(frameNumber) || 0;\n return count === 0;\n }\n}\n"],"file":"i3s-frame-counter.js"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
-
export default class I3SPendingTilesRegister {
|
|
3
|
-
constructor() {
|
|
4
|
-
_defineProperty(this, "frameNumberMap", new Map());
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
register(frameNumber) {
|
|
8
|
-
const oldCount = this.frameNumberMap.get(frameNumber) || 0;
|
|
9
|
-
this.frameNumberMap.set(frameNumber, oldCount + 1);
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
deregister(frameNumber) {
|
|
13
|
-
const oldCount = this.frameNumberMap.get(frameNumber) || 1;
|
|
14
|
-
this.frameNumberMap.set(frameNumber, oldCount - 1);
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
isZero(frameNumber) {
|
|
18
|
-
const count = this.frameNumberMap.get(frameNumber) || 0;
|
|
19
|
-
return count === 0;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
//# sourceMappingURL=i3s-frame-counter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/tileset/traversers/i3s-frame-counter.ts"],"names":["I3SPendingTilesRegister","Map","register","frameNumber","oldCount","frameNumberMap","get","set","deregister","isZero","count"],"mappings":";AAIA,eAAe,MAAMA,uBAAN,CAA8B;AAAA;AAAA,4CACG,IAAIC,GAAJ,EADH;AAAA;;AAO3CC,EAAAA,QAAQ,CAACC,WAAD,EAAsB;AAC5B,UAAMC,QAAQ,GAAG,KAAKC,cAAL,CAAoBC,GAApB,CAAwBH,WAAxB,KAAwC,CAAzD;AACA,SAAKE,cAAL,CAAoBE,GAApB,CAAwBJ,WAAxB,EAAqCC,QAAQ,GAAG,CAAhD;AACD;;AAMDI,EAAAA,UAAU,CAACL,WAAD,EAAsB;AAC9B,UAAMC,QAAQ,GAAG,KAAKC,cAAL,CAAoBC,GAApB,CAAwBH,WAAxB,KAAwC,CAAzD;AACA,SAAKE,cAAL,CAAoBE,GAApB,CAAwBJ,WAAxB,EAAqCC,QAAQ,GAAG,CAAhD;AACD;;AAODK,EAAAA,MAAM,CAACN,WAAD,EAAsB;AAC1B,UAAMO,KAAK,GAAG,KAAKL,cAAL,CAAoBC,GAApB,CAAwBH,WAAxB,KAAwC,CAAtD;AACA,WAAOO,KAAK,KAAK,CAAjB;AACD;;AA7B0C","sourcesContent":["/**\n * Counter to register pending tile headers for the particular frameNumber\n * Until all tiles are loaded we won't call `onTraversalEnd` callback\n */\nexport default class I3SPendingTilesRegister {\n private frameNumberMap: Map<number, number> = new Map();\n\n /**\n * Register a new pending tile header for the particular frameNumber\n * @param frameNumber\n */\n register(frameNumber: number) {\n const oldCount = this.frameNumberMap.get(frameNumber) || 0;\n this.frameNumberMap.set(frameNumber, oldCount + 1);\n }\n\n /**\n * Deregister a pending tile header for the particular frameNumber\n * @param frameNumber\n */\n deregister(frameNumber: number) {\n const oldCount = this.frameNumberMap.get(frameNumber) || 1;\n this.frameNumberMap.set(frameNumber, oldCount - 1);\n }\n\n /**\n * Check is there are no pending tile headers registered for the particular frameNumber\n * @param frameNumber\n * @returns\n */\n isZero(frameNumber: number) {\n const count = this.frameNumberMap.get(frameNumber) || 0;\n return count === 0;\n }\n}\n"],"file":"i3s-frame-counter.js"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"i3s-frame-counter.d.ts","sourceRoot":"","sources":["../../../src/tileset/traversers/i3s-frame-counter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,uBAAuB;IAC1C,OAAO,CAAC,cAAc,CAAkC;IAExD;;;OAGG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM;IAK5B;;;OAGG;IACH,UAAU,CAAC,WAAW,EAAE,MAAM;IAK9B;;;;OAIG;IACH,MAAM,CAAC,WAAW,EAAE,MAAM;CAI3B"}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Counter to register pending tile headers for the particular frameNumber
|
|
3
|
-
* Until all tiles are loaded we won't call `onTraversalEnd` callback
|
|
4
|
-
*/
|
|
5
|
-
export default class I3SPendingTilesRegister {
|
|
6
|
-
private frameNumberMap: Map<number, number> = new Map();
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Register a new pending tile header for the particular frameNumber
|
|
10
|
-
* @param frameNumber
|
|
11
|
-
*/
|
|
12
|
-
register(frameNumber: number) {
|
|
13
|
-
const oldCount = this.frameNumberMap.get(frameNumber) || 0;
|
|
14
|
-
this.frameNumberMap.set(frameNumber, oldCount + 1);
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Deregister a pending tile header for the particular frameNumber
|
|
19
|
-
* @param frameNumber
|
|
20
|
-
*/
|
|
21
|
-
deregister(frameNumber: number) {
|
|
22
|
-
const oldCount = this.frameNumberMap.get(frameNumber) || 1;
|
|
23
|
-
this.frameNumberMap.set(frameNumber, oldCount - 1);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Check is there are no pending tile headers registered for the particular frameNumber
|
|
28
|
-
* @param frameNumber
|
|
29
|
-
* @returns
|
|
30
|
-
*/
|
|
31
|
-
isZero(frameNumber: number) {
|
|
32
|
-
const count = this.frameNumberMap.get(frameNumber) || 0;
|
|
33
|
-
return count === 0;
|
|
34
|
-
}
|
|
35
|
-
}
|