@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.
Files changed (124) hide show
  1. package/dist/dist.min.js +1027 -1431
  2. package/dist/es5/bundle.js +0 -1
  3. package/dist/es5/bundle.js.map +1 -1
  4. package/dist/es5/constants.js +2 -1
  5. package/dist/es5/constants.js.map +1 -1
  6. package/dist/es5/index.js +26 -36
  7. package/dist/es5/index.js.map +1 -1
  8. package/dist/es5/tileset/helpers/3d-tiles-options.js +0 -1
  9. package/dist/es5/tileset/helpers/3d-tiles-options.js.map +1 -1
  10. package/dist/es5/tileset/helpers/bounding-volume.js +7 -26
  11. package/dist/es5/tileset/helpers/bounding-volume.js.map +1 -1
  12. package/dist/es5/tileset/helpers/frame-state.js +45 -50
  13. package/dist/es5/tileset/helpers/frame-state.js.map +1 -1
  14. package/dist/es5/tileset/helpers/i3s-lod.js +0 -13
  15. package/dist/es5/tileset/helpers/i3s-lod.js.map +1 -1
  16. package/dist/es5/tileset/helpers/tiles-3d-lod.js +7 -16
  17. package/dist/es5/tileset/helpers/tiles-3d-lod.js.map +1 -1
  18. package/dist/es5/tileset/helpers/transform-utils.js +2 -11
  19. package/dist/es5/tileset/helpers/transform-utils.js.map +1 -1
  20. package/dist/es5/tileset/helpers/zoom.js +6 -16
  21. package/dist/es5/tileset/helpers/zoom.js.map +1 -1
  22. package/dist/es5/tileset/tile-3d.js +111 -98
  23. package/dist/es5/tileset/tile-3d.js.map +1 -1
  24. package/dist/es5/tileset/tileset-3d.js +130 -196
  25. package/dist/es5/tileset/tileset-3d.js.map +1 -1
  26. package/dist/es5/tileset/tileset-cache.js +1 -14
  27. package/dist/es5/tileset/tileset-cache.js.map +1 -1
  28. package/dist/es5/tileset/traversers/{i3s-frame-counter.js → i3s-pending-tiles-register.js} +21 -16
  29. package/dist/es5/tileset/traversers/i3s-pending-tiles-register.js.map +1 -0
  30. package/dist/es5/tileset/traversers/i3s-tile-manager.js +33 -27
  31. package/dist/es5/tileset/traversers/i3s-tile-manager.js.map +1 -1
  32. package/dist/es5/tileset/traversers/i3s-tileset-traverser.js +10 -52
  33. package/dist/es5/tileset/traversers/i3s-tileset-traverser.js.map +1 -1
  34. package/dist/es5/tileset/traversers/tileset-3d-traverser.js +0 -22
  35. package/dist/es5/tileset/traversers/tileset-3d-traverser.js.map +1 -1
  36. package/dist/es5/tileset/traversers/tileset-traverser.js +55 -78
  37. package/dist/es5/tileset/traversers/tileset-traverser.js.map +1 -1
  38. package/dist/es5/types.js.map +1 -1
  39. package/dist/es5/utils/doubly-linked-list-node.js +3 -7
  40. package/dist/es5/utils/doubly-linked-list-node.js.map +1 -1
  41. package/dist/es5/utils/doubly-linked-list.js +9 -17
  42. package/dist/es5/utils/doubly-linked-list.js.map +1 -1
  43. package/dist/es5/utils/managed-array.js +29 -30
  44. package/dist/es5/utils/managed-array.js.map +1 -1
  45. package/dist/esm/bundle.js +1 -1
  46. package/dist/esm/bundle.js.map +1 -1
  47. package/dist/esm/constants.js +3 -0
  48. package/dist/esm/constants.js.map +1 -1
  49. package/dist/esm/index.js.map +1 -1
  50. package/dist/esm/tileset/helpers/3d-tiles-options.js.map +1 -1
  51. package/dist/esm/tileset/helpers/bounding-volume.js +4 -10
  52. package/dist/esm/tileset/helpers/bounding-volume.js.map +1 -1
  53. package/dist/esm/tileset/helpers/frame-state.js +36 -20
  54. package/dist/esm/tileset/helpers/frame-state.js.map +1 -1
  55. package/dist/esm/tileset/helpers/i3s-lod.js +4 -4
  56. package/dist/esm/tileset/helpers/i3s-lod.js.map +1 -1
  57. package/dist/esm/tileset/helpers/tiles-3d-lod.js +11 -8
  58. package/dist/esm/tileset/helpers/tiles-3d-lod.js.map +1 -1
  59. package/dist/esm/tileset/helpers/transform-utils.js +1 -3
  60. package/dist/esm/tileset/helpers/transform-utils.js.map +1 -1
  61. package/dist/esm/tileset/helpers/zoom.js +3 -2
  62. package/dist/esm/tileset/helpers/zoom.js.map +1 -1
  63. package/dist/esm/tileset/tile-3d.js +47 -108
  64. package/dist/esm/tileset/tile-3d.js.map +1 -1
  65. package/dist/esm/tileset/tileset-3d.js +70 -163
  66. package/dist/esm/tileset/tileset-3d.js.map +1 -1
  67. package/dist/esm/tileset/tileset-cache.js +2 -18
  68. package/dist/esm/tileset/tileset-cache.js.map +1 -1
  69. package/dist/esm/tileset/traversers/i3s-pending-tiles-register.js +28 -0
  70. package/dist/esm/tileset/traversers/i3s-pending-tiles-register.js.map +1 -0
  71. package/dist/esm/tileset/traversers/i3s-tile-manager.js +34 -15
  72. package/dist/esm/tileset/traversers/i3s-tile-manager.js.map +1 -1
  73. package/dist/esm/tileset/traversers/i3s-tileset-traverser.js +8 -22
  74. package/dist/esm/tileset/traversers/i3s-tileset-traverser.js.map +1 -1
  75. package/dist/esm/tileset/traversers/tileset-3d-traverser.js +2 -9
  76. package/dist/esm/tileset/traversers/tileset-3d-traverser.js.map +1 -1
  77. package/dist/esm/tileset/traversers/tileset-traverser.js +20 -59
  78. package/dist/esm/tileset/traversers/tileset-traverser.js.map +1 -1
  79. package/dist/esm/types.js.map +1 -1
  80. package/dist/esm/utils/doubly-linked-list-node.js +1 -4
  81. package/dist/esm/utils/doubly-linked-list-node.js.map +1 -1
  82. package/dist/esm/utils/doubly-linked-list.js +2 -11
  83. package/dist/esm/utils/doubly-linked-list.js.map +1 -1
  84. package/dist/esm/utils/managed-array.js +4 -22
  85. package/dist/esm/utils/managed-array.js.map +1 -1
  86. package/dist/tileset/helpers/frame-state.d.ts +5 -8
  87. package/dist/tileset/helpers/frame-state.d.ts.map +1 -1
  88. package/dist/tileset/helpers/frame-state.js +27 -12
  89. package/dist/tileset/helpers/i3s-lod.d.ts.map +1 -1
  90. package/dist/tileset/tile-3d.d.ts +15 -4
  91. package/dist/tileset/tile-3d.d.ts.map +1 -1
  92. package/dist/tileset/tile-3d.js +15 -2
  93. package/dist/tileset/tileset-3d.d.ts +17 -4
  94. package/dist/tileset/tileset-3d.d.ts.map +1 -1
  95. package/dist/tileset/tileset-3d.js +47 -10
  96. package/dist/tileset/traversers/{i3s-frame-counter.d.ts → i3s-pending-tiles-register.d.ts} +7 -4
  97. package/dist/tileset/traversers/i3s-pending-tiles-register.d.ts.map +1 -0
  98. package/dist/tileset/traversers/{i3s-frame-counter.js → i3s-pending-tiles-register.js} +17 -8
  99. package/dist/tileset/traversers/i3s-tile-manager.d.ts +19 -1
  100. package/dist/tileset/traversers/i3s-tile-manager.d.ts.map +1 -1
  101. package/dist/tileset/traversers/i3s-tile-manager.js +32 -12
  102. package/dist/tileset/traversers/i3s-tileset-traverser.d.ts +1 -1
  103. package/dist/tileset/traversers/i3s-tileset-traverser.d.ts.map +1 -1
  104. package/dist/tileset/traversers/i3s-tileset-traverser.js +9 -9
  105. package/dist/tileset/traversers/tileset-traverser.d.ts +3 -3
  106. package/dist/tileset/traversers/tileset-traverser.d.ts.map +1 -1
  107. package/dist/tileset/traversers/tileset-traverser.js +4 -4
  108. package/dist/types.d.ts +30 -1
  109. package/dist/types.d.ts.map +1 -1
  110. package/package.json +4 -4
  111. package/src/tileset/helpers/frame-state.ts +47 -19
  112. package/src/tileset/helpers/i3s-lod.ts +3 -1
  113. package/src/tileset/tile-3d.ts +16 -2
  114. package/src/tileset/tileset-3d.ts +55 -16
  115. package/src/tileset/traversers/i3s-pending-tiles-register.ts +44 -0
  116. package/src/tileset/traversers/i3s-tile-manager.ts +47 -11
  117. package/src/tileset/traversers/i3s-tileset-traverser.ts +5 -5
  118. package/src/tileset/traversers/tileset-traverser.ts +2 -2
  119. package/src/types.ts +32 -0
  120. package/dist/es5/tileset/traversers/i3s-frame-counter.js.map +0 -1
  121. package/dist/esm/tileset/traversers/i3s-frame-counter.js +0 -23
  122. package/dist/esm/tileset/traversers/i3s-frame-counter.js.map +0 -1
  123. package/dist/tileset/traversers/i3s-frame-counter.d.ts.map +0 -1
  124. 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: any[] | null;
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: any[] | null = null) {
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
- this.doUpdate(viewports);
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: any[] | null = null): Promise<number> {
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
- this.doUpdate(this.lastUpdatedVieports);
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: any[] | null = null): void {
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
- if (!(viewports instanceof Array)) {
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 = viewports.length;
455
+ this.traverseCounter = preparedViewports.length;
450
456
  const viewportsToTraverse: string[] = [];
451
457
  // First loop to decrement traverseCounter
452
- for (const viewport of viewports) {
453
- const id = viewport.id as string;
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 viewports) {
463
- const id = viewport.id as string;
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, 'memory');
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-frame-counter';
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 {frameNumber} = frameState;
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 {frameNumber: actualFrameNumber} = this._statusMap[key].frameState;
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 {frameNumber: actualFrameNumber} = this._statusMap[key].frameState;
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
- this.pendingTilesRegister.deregister(this._statusMap[key].frameState.frameNumber);
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
- this.pendingTilesRegister.register(frameState.frameNumber);
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 get traversalFinished(): boolean {
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 || new Date().getTime() - this.lastUpdate > this.updateDebounceTime)
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 get traversalFinished(): boolean {
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
- }