@loaders.gl/tiles 3.2.3 → 3.2.6
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 +83 -45
- package/dist/es5/tileset/helpers/frame-state.js +26 -11
- package/dist/es5/tileset/helpers/frame-state.js.map +1 -1
- package/dist/es5/tileset/helpers/i3s-lod.js.map +1 -1
- package/dist/es5/tileset/tileset-3d.js +11 -11
- package/dist/es5/tileset/tileset-3d.js.map +1 -1
- package/dist/es5/tileset/traversers/{i3s-frame-counter.js → i3s-pending-tiles-register.js} +19 -9
- package/dist/es5/tileset/traversers/i3s-pending-tiles-register.js.map +1 -0
- package/dist/es5/tileset/traversers/i3s-tile-manager.js +22 -12
- package/dist/es5/tileset/traversers/i3s-tile-manager.js.map +1 -1
- package/dist/es5/tileset/traversers/i3s-tileset-traverser.js +3 -3
- package/dist/es5/tileset/traversers/i3s-tileset-traverser.js.map +1 -1
- package/dist/es5/tileset/traversers/tileset-traverser.js +2 -2
- package/dist/es5/tileset/traversers/tileset-traverser.js.map +1 -1
- package/dist/esm/tileset/helpers/frame-state.js +25 -9
- package/dist/esm/tileset/helpers/frame-state.js.map +1 -1
- package/dist/esm/tileset/helpers/i3s-lod.js.map +1 -1
- package/dist/esm/tileset/tileset-3d.js +12 -9
- package/dist/esm/tileset/tileset-3d.js.map +1 -1
- package/dist/esm/tileset/traversers/i3s-pending-tiles-register.js +33 -0
- package/dist/esm/tileset/traversers/i3s-pending-tiles-register.js.map +1 -0
- package/dist/esm/tileset/traversers/i3s-tile-manager.js +32 -11
- package/dist/esm/tileset/traversers/i3s-tile-manager.js.map +1 -1
- package/dist/esm/tileset/traversers/i3s-tileset-traverser.js +3 -3
- package/dist/esm/tileset/traversers/i3s-tileset-traverser.js.map +1 -1
- package/dist/esm/tileset/traversers/tileset-traverser.js +2 -2
- package/dist/esm/tileset/traversers/tileset-traverser.js.map +1 -1
- package/dist/tileset/helpers/frame-state.d.ts +4 -7
- package/dist/tileset/helpers/frame-state.d.ts.map +1 -1
- package/dist/tileset/helpers/frame-state.js +26 -12
- package/dist/tileset/helpers/i3s-lod.d.ts.map +1 -1
- package/dist/tileset/tileset-3d.d.ts +3 -2
- package/dist/tileset/tileset-3d.d.ts.map +1 -1
- package/dist/tileset/tileset-3d.js +11 -9
- 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 +4 -3
- package/dist/tileset/traversers/tileset-traverser.d.ts +1 -1
- package/dist/tileset/traversers/tileset-traverser.d.ts.map +1 -1
- package/dist/tileset/traversers/tileset-traverser.js +2 -2
- package/dist/types.d.ts +21 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/tileset/helpers/frame-state.ts +46 -19
- package/src/tileset/helpers/i3s-lod.ts +3 -1
- package/src/tileset/tileset-3d.ts +17 -14
- 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 +4 -3
- package/src/tileset/traversers/tileset-traverser.ts +2 -2
- package/src/types.ts +23 -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
|
@@ -10,27 +10,36 @@ class I3SPendingTilesRegister {
|
|
|
10
10
|
}
|
|
11
11
|
/**
|
|
12
12
|
* Register a new pending tile header for the particular frameNumber
|
|
13
|
+
* @param viewportId
|
|
13
14
|
* @param frameNumber
|
|
14
15
|
*/
|
|
15
|
-
register(frameNumber) {
|
|
16
|
-
const
|
|
17
|
-
|
|
16
|
+
register(viewportId, frameNumber) {
|
|
17
|
+
const viewportMap = this.frameNumberMap.get(viewportId) || new Map();
|
|
18
|
+
const oldCount = viewportMap.get(frameNumber) || 0;
|
|
19
|
+
viewportMap.set(frameNumber, oldCount + 1);
|
|
20
|
+
this.frameNumberMap.set(viewportId, viewportMap);
|
|
18
21
|
}
|
|
19
22
|
/**
|
|
20
23
|
* Deregister a pending tile header for the particular frameNumber
|
|
24
|
+
* @param viewportId
|
|
21
25
|
* @param frameNumber
|
|
22
26
|
*/
|
|
23
|
-
deregister(frameNumber) {
|
|
24
|
-
const
|
|
25
|
-
|
|
27
|
+
deregister(viewportId, frameNumber) {
|
|
28
|
+
const viewportMap = this.frameNumberMap.get(viewportId);
|
|
29
|
+
if (!viewportMap) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const oldCount = viewportMap.get(frameNumber) || 1;
|
|
33
|
+
viewportMap.set(frameNumber, oldCount - 1);
|
|
26
34
|
}
|
|
27
35
|
/**
|
|
28
36
|
* Check is there are no pending tile headers registered for the particular frameNumber
|
|
37
|
+
* @param viewportId
|
|
29
38
|
* @param frameNumber
|
|
30
39
|
* @returns
|
|
31
40
|
*/
|
|
32
|
-
isZero(frameNumber) {
|
|
33
|
-
const count = this.frameNumberMap.get(frameNumber) || 0;
|
|
41
|
+
isZero(viewportId, frameNumber) {
|
|
42
|
+
const count = this.frameNumberMap.get(viewportId)?.get(frameNumber) || 0;
|
|
34
43
|
return count === 0;
|
|
35
44
|
}
|
|
36
45
|
}
|
|
@@ -3,14 +3,32 @@ export default class I3STileManager {
|
|
|
3
3
|
private _statusMap;
|
|
4
4
|
private pendingTilesRegister;
|
|
5
5
|
constructor();
|
|
6
|
+
/**
|
|
7
|
+
* Add request to map
|
|
8
|
+
* @param request - node metadata request
|
|
9
|
+
* @param key - unique key
|
|
10
|
+
* @param callback - callback after request completed
|
|
11
|
+
* @param frameState - frameState data
|
|
12
|
+
*/
|
|
6
13
|
add(request: any, key: any, callback: any, frameState: FrameState): void;
|
|
14
|
+
/**
|
|
15
|
+
* Update request if it is still actual for the new frameState
|
|
16
|
+
* @param key - unique key
|
|
17
|
+
* @param frameState - frameState data
|
|
18
|
+
*/
|
|
7
19
|
update(key: any, frameState: FrameState): void;
|
|
20
|
+
/**
|
|
21
|
+
* Find request in the map
|
|
22
|
+
* @param key - unique key
|
|
23
|
+
* @returns
|
|
24
|
+
*/
|
|
8
25
|
find(key: any): any;
|
|
9
26
|
/**
|
|
10
27
|
* Check it there are pending tile headers for the particular frameNumber
|
|
28
|
+
* @param viewportId
|
|
11
29
|
* @param frameNumber
|
|
12
30
|
* @returns
|
|
13
31
|
*/
|
|
14
|
-
hasPendingTiles(frameNumber: number): boolean;
|
|
32
|
+
hasPendingTiles(viewportId: string, frameNumber: number): boolean;
|
|
15
33
|
}
|
|
16
34
|
//# sourceMappingURL=i3s-tile-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i3s-tile-manager.d.ts","sourceRoot":"","sources":["../../../src/tileset/traversers/i3s-tile-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AAUlD,MAAM,CAAC,OAAO,OAAO,cAAc;IACjC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,oBAAoB,CAAiC;;IAM7D,GAAG,CAAC,OAAO,KAAA,EAAE,GAAG,KAAA,EAAE,QAAQ,KAAA,EAAE,UAAU,EAAE,UAAU;
|
|
1
|
+
{"version":3,"file":"i3s-tile-manager.d.ts","sourceRoot":"","sources":["../../../src/tileset/traversers/i3s-tile-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AAUlD,MAAM,CAAC,OAAO,OAAO,cAAc;IACjC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,oBAAoB,CAAiC;;IAM7D;;;;;;OAMG;IACH,GAAG,CAAC,OAAO,KAAA,EAAE,GAAG,KAAA,EAAE,QAAQ,KAAA,EAAE,UAAU,EAAE,UAAU;IAiClD;;;;OAIG;IACH,MAAM,CAAC,GAAG,KAAA,EAAE,UAAU,EAAE,UAAU;IAmBlC;;;;OAIG;IACH,IAAI,CAAC,GAAG,KAAA;IAIR;;;;;OAKG;IACH,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;CAGlE"}
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const
|
|
6
|
+
const i3s_pending_tiles_register_1 = __importDefault(require("./i3s-pending-tiles-register"));
|
|
7
7
|
const STATUS = {
|
|
8
8
|
REQUESTED: 'REQUESTED',
|
|
9
9
|
COMPLETED: 'COMPLETED',
|
|
@@ -12,51 +12,71 @@ const STATUS = {
|
|
|
12
12
|
// A helper class to manage tile metadata fetching
|
|
13
13
|
class I3STileManager {
|
|
14
14
|
constructor() {
|
|
15
|
-
this.pendingTilesRegister = new
|
|
15
|
+
this.pendingTilesRegister = new i3s_pending_tiles_register_1.default();
|
|
16
16
|
this._statusMap = {};
|
|
17
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* Add request to map
|
|
20
|
+
* @param request - node metadata request
|
|
21
|
+
* @param key - unique key
|
|
22
|
+
* @param callback - callback after request completed
|
|
23
|
+
* @param frameState - frameState data
|
|
24
|
+
*/
|
|
18
25
|
add(request, key, callback, frameState) {
|
|
19
26
|
if (!this._statusMap[key]) {
|
|
20
|
-
const { frameNumber } = frameState;
|
|
27
|
+
const { frameNumber, viewport: { id } } = frameState;
|
|
21
28
|
this._statusMap[key] = { request, callback, key, frameState, status: STATUS.REQUESTED };
|
|
22
29
|
// Register pending request for the frameNumber
|
|
23
|
-
this.pendingTilesRegister.register(frameNumber);
|
|
30
|
+
this.pendingTilesRegister.register(id, frameNumber);
|
|
24
31
|
request()
|
|
25
32
|
.then((data) => {
|
|
26
33
|
this._statusMap[key].status = STATUS.COMPLETED;
|
|
27
|
-
const { frameNumber: actualFrameNumber } = this._statusMap[key].frameState;
|
|
34
|
+
const { frameNumber: actualFrameNumber, viewport: { id } } = this._statusMap[key].frameState;
|
|
28
35
|
// Deregister pending request for the frameNumber
|
|
29
|
-
this.pendingTilesRegister.deregister(actualFrameNumber);
|
|
36
|
+
this.pendingTilesRegister.deregister(id, actualFrameNumber);
|
|
30
37
|
this._statusMap[key].callback(data, frameState);
|
|
31
38
|
})
|
|
32
39
|
.catch((error) => {
|
|
33
40
|
this._statusMap[key].status = STATUS.ERROR;
|
|
34
|
-
const { frameNumber: actualFrameNumber } = this._statusMap[key].frameState;
|
|
41
|
+
const { frameNumber: actualFrameNumber, viewport: { id } } = this._statusMap[key].frameState;
|
|
35
42
|
// Deregister pending request for the frameNumber
|
|
36
|
-
this.pendingTilesRegister.deregister(actualFrameNumber);
|
|
43
|
+
this.pendingTilesRegister.deregister(id, actualFrameNumber);
|
|
37
44
|
callback(error);
|
|
38
45
|
});
|
|
39
46
|
}
|
|
40
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Update request if it is still actual for the new frameState
|
|
50
|
+
* @param key - unique key
|
|
51
|
+
* @param frameState - frameState data
|
|
52
|
+
*/
|
|
41
53
|
update(key, frameState) {
|
|
42
54
|
if (this._statusMap[key]) {
|
|
43
55
|
// Deregister pending request for the old frameNumber
|
|
44
|
-
this.
|
|
56
|
+
const { frameNumber, viewport: { id } } = this._statusMap[key].frameState;
|
|
57
|
+
this.pendingTilesRegister.deregister(id, frameNumber);
|
|
45
58
|
// Register pending request for the new frameNumber
|
|
46
|
-
|
|
59
|
+
const { frameNumber: newFrameNumber, viewport: { id: newViewportId } } = frameState;
|
|
60
|
+
this.pendingTilesRegister.register(newViewportId, newFrameNumber);
|
|
47
61
|
this._statusMap[key].frameState = frameState;
|
|
48
62
|
}
|
|
49
63
|
}
|
|
64
|
+
/**
|
|
65
|
+
* Find request in the map
|
|
66
|
+
* @param key - unique key
|
|
67
|
+
* @returns
|
|
68
|
+
*/
|
|
50
69
|
find(key) {
|
|
51
70
|
return this._statusMap[key];
|
|
52
71
|
}
|
|
53
72
|
/**
|
|
54
73
|
* Check it there are pending tile headers for the particular frameNumber
|
|
74
|
+
* @param viewportId
|
|
55
75
|
* @param frameNumber
|
|
56
76
|
* @returns
|
|
57
77
|
*/
|
|
58
|
-
hasPendingTiles(frameNumber) {
|
|
59
|
-
return !this.pendingTilesRegister.isZero(frameNumber);
|
|
78
|
+
hasPendingTiles(viewportId, frameNumber) {
|
|
79
|
+
return !this.pendingTilesRegister.isZero(viewportId, frameNumber);
|
|
60
80
|
}
|
|
61
81
|
}
|
|
62
82
|
exports.default = I3STileManager;
|
|
@@ -7,7 +7,7 @@ export default class I3STilesetTraverser extends TilesetTraverser {
|
|
|
7
7
|
* that means the traversal is finished and we can call
|
|
8
8
|
* following-up callbacks.
|
|
9
9
|
*/
|
|
10
|
-
protected
|
|
10
|
+
protected traversalFinished(frameState: FrameState): boolean;
|
|
11
11
|
constructor(options: any);
|
|
12
12
|
shouldRefine(tile: any, frameState: FrameState): boolean;
|
|
13
13
|
updateChildTiles(tile: any, frameState: FrameState): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i3s-tileset-traverser.d.ts","sourceRoot":"","sources":["../../../src/tileset/traversers/i3s-tileset-traverser.ts"],"names":[],"mappings":"AACA,OAAO,gBAAgB,MAAM,qBAAqB,CAAC;AAKnD,OAAO,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AAElD,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,gBAAgB;IAC/D,OAAO,CAAC,YAAY,CAAiB;IAErC;;;;OAIG;IACH,SAAS,
|
|
1
|
+
{"version":3,"file":"i3s-tileset-traverser.d.ts","sourceRoot":"","sources":["../../../src/tileset/traversers/i3s-tileset-traverser.ts"],"names":[],"mappings":"AACA,OAAO,gBAAgB,MAAM,qBAAqB,CAAC;AAKnD,OAAO,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AAElD,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,gBAAgB;IAC/D,OAAO,CAAC,YAAY,CAAiB;IAErC;;;;OAIG;IACH,SAAS,CAAC,iBAAiB,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO;gBAIhD,OAAO,KAAA;IAKnB,YAAY,CAAC,IAAI,KAAA,EAAE,UAAU,EAAE,UAAU;IAKzC,gBAAgB,CAAC,IAAI,KAAA,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO;IAoCjD,SAAS,CAAC,MAAM,KAAA,EAAE,OAAO,KAAA;IAgB/B;;;;;;;OAOG;IACH,WAAW,CAAC,MAAM,KAAA,EAAE,IAAI,KAAA,EAAE,UAAU,KAAA;CAgBrC"}
|
|
@@ -18,8 +18,8 @@ class I3STilesetTraverser extends tileset_traverser_1.default {
|
|
|
18
18
|
* that means the traversal is finished and we can call
|
|
19
19
|
* following-up callbacks.
|
|
20
20
|
*/
|
|
21
|
-
|
|
22
|
-
return !this._tileManager.hasPendingTiles(this._frameNumber || 0);
|
|
21
|
+
traversalFinished(frameState) {
|
|
22
|
+
return !this._tileManager.hasPendingTiles(frameState.viewport.id, this._frameNumber || 0);
|
|
23
23
|
}
|
|
24
24
|
shouldRefine(tile, frameState) {
|
|
25
25
|
tile._lodJudge = (0, i3s_lod_1.getLodStatus)(tile, frameState);
|
|
@@ -86,7 +86,8 @@ class I3STilesetTraverser extends tileset_traverser_1.default {
|
|
|
86
86
|
this.updateTile(childTile, frameState);
|
|
87
87
|
// after tile fetched, resume traversal if still in current update/traversal frame
|
|
88
88
|
if (this._frameNumber === frameState.frameNumber &&
|
|
89
|
-
(this.traversalFinished
|
|
89
|
+
(this.traversalFinished(frameState) ||
|
|
90
|
+
new Date().getTime() - this.lastUpdate > this.updateDebounceTime)) {
|
|
90
91
|
this.executeTraversal(childTile, frameState);
|
|
91
92
|
}
|
|
92
93
|
}
|
|
@@ -33,7 +33,7 @@ export default class TilesetTraverser {
|
|
|
33
33
|
protected _traversalStack: ManagedArray;
|
|
34
34
|
protected _emptyTraversalStack: ManagedArray;
|
|
35
35
|
protected _frameNumber: number | null;
|
|
36
|
-
protected
|
|
36
|
+
protected traversalFinished(frameState: FrameState): boolean;
|
|
37
37
|
constructor(options: TilesetTraverserProps);
|
|
38
38
|
traverse(root: any, frameState: any, options: any): void;
|
|
39
39
|
reset(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tileset-traverser.d.ts","sourceRoot":"","sources":["../../../src/tileset/traversers/tileset-traverser.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,2BAA2B,CAAC;AAErD,OAAO,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AAElD,oBAAY,qBAAqB,GAAG;IAClC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,cAAc,CAAC,EAAE,CAAC,UAAU,KAAA,KAAK,GAAG,CAAC;IACrC,qBAAqB,CAAC,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAC,CAAC;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,oBAAY,KAAK,GAAG;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,uBAAuB,EAAE,MAAM,CAAC;IAChC,cAAc,EAAE,CAAC,UAAU,KAAA,KAAK,GAAG,CAAC;IACpC,qBAAqB,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAC,CAAC;IAC5C,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAQ3B,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACnC,OAAO,EAAE,KAAK,CAAC;IAEf,IAAI,EAAE,GAAG,CAAC;IACV,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IAEnB,SAAS,CAAC,UAAU,EAAE,MAAM,CAAwB;IACpD,SAAS,CAAC,QAAQ,CAAC,kBAAkB,QAAQ;IAC7C,SAAS,CAAC,eAAe,EAAE,YAAY,CAAC;IACxC,SAAS,CAAC,oBAAoB,EAAE,YAAY,CAAC;IAC7C,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAEtC,SAAS,
|
|
1
|
+
{"version":3,"file":"tileset-traverser.d.ts","sourceRoot":"","sources":["../../../src/tileset/traversers/tileset-traverser.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,2BAA2B,CAAC;AAErD,OAAO,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AAElD,oBAAY,qBAAqB,GAAG;IAClC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,cAAc,CAAC,EAAE,CAAC,UAAU,KAAA,KAAK,GAAG,CAAC;IACrC,qBAAqB,CAAC,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAC,CAAC;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,oBAAY,KAAK,GAAG;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,uBAAuB,EAAE,MAAM,CAAC;IAChC,cAAc,EAAE,CAAC,UAAU,KAAA,KAAK,GAAG,CAAC;IACpC,qBAAqB,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAC,CAAC;IAC5C,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAQ3B,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACnC,OAAO,EAAE,KAAK,CAAC;IAEf,IAAI,EAAE,GAAG,CAAC;IACV,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IAEnB,SAAS,CAAC,UAAU,EAAE,MAAM,CAAwB;IACpD,SAAS,CAAC,QAAQ,CAAC,kBAAkB,QAAQ;IAC7C,SAAS,CAAC,eAAe,EAAE,YAAY,CAAC;IACxC,SAAS,CAAC,oBAAoB,EAAE,YAAY,CAAC;IAC7C,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAEtC,SAAS,CAAC,iBAAiB,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO;gBAKhD,OAAO,EAAE,qBAAqB;IAuB1C,QAAQ,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA,EAAE,OAAO,KAAA;IAclC,KAAK;IAgBL,gBAAgB,CAAC,IAAI,KAAA,EAAE,UAAU,EAAE,UAAU;IAmE7C,gBAAgB,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA;IASjC,qBAAqB,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA,EAAE,KAAK,KAAA,EAAE,KAAK,KAAA;IAuDpD,UAAU,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA;IAK3B,UAAU,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA;IAS3B,QAAQ,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA;IASzB,SAAS,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA;IAQ1B,WAAW,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA,EAAE,eAAe,UAAQ,EAAE,gBAAgB,UAAQ;IAmB/E,cAAc,CAAC,IAAI,KAAA;IAMnB,gBAAgB,CAAC,IAAI,KAAA;IAOrB,YAAY,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA,EAAE,eAAe,KAAA;IAS9C,oBAAoB,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA;IAiBrC,uBAAuB,CAAC,CAAC,KAAA,EAAE,CAAC,KAAA;IAI5B,kBAAkB,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA;IAWnC,qBAAqB,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA;CAqCvC"}
|
|
@@ -37,7 +37,7 @@ class TilesetTraverser {
|
|
|
37
37
|
// tiles does not have render content
|
|
38
38
|
this.emptyTiles = {};
|
|
39
39
|
}
|
|
40
|
-
|
|
40
|
+
traversalFinished(frameState) {
|
|
41
41
|
return true;
|
|
42
42
|
}
|
|
43
43
|
// tiles should be visible
|
|
@@ -116,7 +116,7 @@ class TilesetTraverser {
|
|
|
116
116
|
tile._shouldRefine = shouldRefine && parentRefines;
|
|
117
117
|
}
|
|
118
118
|
const newTime = new Date().getTime();
|
|
119
|
-
if (this.traversalFinished || newTime - this.lastUpdate > this.updateDebounceTime) {
|
|
119
|
+
if (this.traversalFinished(frameState) || newTime - this.lastUpdate > this.updateDebounceTime) {
|
|
120
120
|
this.lastUpdate = newTime;
|
|
121
121
|
this.options.onTraversalEnd(frameState);
|
|
122
122
|
}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
|
+
import { Vector3 } from '@math.gl/core';
|
|
1
2
|
export declare type BoundingRectangle = {
|
|
2
3
|
width: number;
|
|
3
4
|
height: number;
|
|
4
5
|
};
|
|
6
|
+
/** Deck.gl Viewport instance type.
|
|
7
|
+
* We can't import it from Deck.gl to avoid circular reference */
|
|
8
|
+
export declare type Viewport = {
|
|
9
|
+
id: string;
|
|
10
|
+
longitude: number;
|
|
11
|
+
latitude: number;
|
|
12
|
+
cameraPosition: [number, number, number];
|
|
13
|
+
cameraDirection: [number, number, number];
|
|
14
|
+
cameraUp: [number, number, number];
|
|
15
|
+
height: number;
|
|
16
|
+
width: number;
|
|
17
|
+
bearing: number;
|
|
18
|
+
zoom: number;
|
|
19
|
+
distanceScales: {
|
|
20
|
+
metersPerUnit: number;
|
|
21
|
+
};
|
|
22
|
+
center: [number, number, number];
|
|
23
|
+
unprojectPosition: (position: [number, number, number] | Vector3) => Vector3;
|
|
24
|
+
project: (coorinates: [number, number, number] | Vector3) => Vector3;
|
|
25
|
+
};
|
|
5
26
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,oBAAY,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AAEtC,oBAAY,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;iEACiE;AACjE,oBAAY,QAAQ,GAAG;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE;QACd,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,iBAAiB,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,KAAK,OAAO,CAAC;IAC7E,OAAO,EAAE,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,KAAK,OAAO,CAAC;CACtE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loaders.gl/tiles",
|
|
3
|
-
"version": "3.2.
|
|
3
|
+
"version": "3.2.6",
|
|
4
4
|
"description": "Common components for different tiles loaders.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"publishConfig": {
|
|
@@ -33,8 +33,8 @@
|
|
|
33
33
|
"build-bundle": "esbuild src/bundle.ts --bundle --outfile=dist/dist.min.js"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@loaders.gl/loader-utils": "3.2.
|
|
37
|
-
"@loaders.gl/math": "3.2.
|
|
36
|
+
"@loaders.gl/loader-utils": "3.2.6",
|
|
37
|
+
"@loaders.gl/math": "3.2.6",
|
|
38
38
|
"@math.gl/core": "^3.5.1",
|
|
39
39
|
"@math.gl/culling": "^3.5.1",
|
|
40
40
|
"@math.gl/geospatial": "^3.5.1",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"@probe.gl/stats": "^3.5.0"
|
|
43
43
|
},
|
|
44
44
|
"peerDependencies": {
|
|
45
|
-
"@loaders.gl/core": "3.2.0"
|
|
45
|
+
"@loaders.gl/core": "^3.2.0"
|
|
46
46
|
},
|
|
47
|
-
"gitHead": "
|
|
47
|
+
"gitHead": "4c7303904d6d4ea57082cf3c7a66e780b008edb9"
|
|
48
48
|
}
|
|
@@ -2,6 +2,7 @@ import {Tile3D} from '@loaders.gl/tiles';
|
|
|
2
2
|
import {Vector3} from '@math.gl/core';
|
|
3
3
|
import {CullingVolume, Plane} from '@math.gl/culling';
|
|
4
4
|
import {Ellipsoid} from '@math.gl/geospatial';
|
|
5
|
+
import {Viewport} from '../../types';
|
|
5
6
|
|
|
6
7
|
export type FrameState = {
|
|
7
8
|
camera: {
|
|
@@ -9,8 +10,8 @@ export type FrameState = {
|
|
|
9
10
|
direction: number[];
|
|
10
11
|
up: number[];
|
|
11
12
|
};
|
|
12
|
-
viewport:
|
|
13
|
-
topDownViewport:
|
|
13
|
+
viewport: Viewport;
|
|
14
|
+
topDownViewport: Viewport; // Use it to calculate projected radius for a tile
|
|
14
15
|
height: number;
|
|
15
16
|
cullingVolume: CullingVolume;
|
|
16
17
|
frameNumber: number; // TODO: This can be the same between updates, what number is unique for between updates?
|
|
@@ -30,18 +31,14 @@ const cullingVolume = new CullingVolume([
|
|
|
30
31
|
|
|
31
32
|
// Extracts a frame state appropriate for tile culling from a deck.gl viewport
|
|
32
33
|
// TODO - this could likely be generalized and merged back into deck.gl for other culling scenarios
|
|
33
|
-
export function getFrameState(viewport, frameNumber: number): FrameState {
|
|
34
|
+
export function getFrameState(viewport: Viewport, frameNumber: number): FrameState {
|
|
34
35
|
// Traverse and and request. Update _selectedTiles so that we know what to render.
|
|
35
36
|
const {cameraDirection, cameraUp, height} = viewport;
|
|
36
37
|
const {metersPerUnit} = viewport.distanceScales;
|
|
37
38
|
|
|
38
|
-
const viewportCenterCartographic = viewport.unprojectPosition(viewport.center);
|
|
39
39
|
// TODO - Ellipsoid.eastNorthUpToFixedFrame() breaks on raw array, create a Vector.
|
|
40
40
|
// TODO - Ellipsoid.eastNorthUpToFixedFrame() takes a cartesian, is that intuitive?
|
|
41
|
-
const viewportCenterCartesian =
|
|
42
|
-
viewportCenterCartographic,
|
|
43
|
-
new Vector3()
|
|
44
|
-
);
|
|
41
|
+
const viewportCenterCartesian = worldToCartesian(viewport, viewport.center);
|
|
45
42
|
const enuToFixedTransform = Ellipsoid.WGS84.eastNorthUpToFixedFrame(viewportCenterCartesian);
|
|
46
43
|
|
|
47
44
|
const cameraPositionCartographic = viewport.unprojectPosition(viewport.cameraPosition);
|
|
@@ -60,7 +57,7 @@ export function getFrameState(viewport, frameNumber: number): FrameState {
|
|
|
60
57
|
enuToFixedTransform.transformAsVector(new Vector3(cameraUp).scale(metersPerUnit))
|
|
61
58
|
).normalize();
|
|
62
59
|
|
|
63
|
-
commonSpacePlanesToWGS84(viewport
|
|
60
|
+
commonSpacePlanesToWGS84(viewport);
|
|
64
61
|
|
|
65
62
|
const ViewportClass = viewport.constructor;
|
|
66
63
|
const {longitude, latitude, width, bearing, zoom} = viewport;
|
|
@@ -131,25 +128,55 @@ export function limitSelectedTiles(
|
|
|
131
128
|
return [selectedTiles, unselectedTiles];
|
|
132
129
|
}
|
|
133
130
|
|
|
134
|
-
function commonSpacePlanesToWGS84(viewport
|
|
131
|
+
function commonSpacePlanesToWGS84(viewport) {
|
|
135
132
|
// Extract frustum planes based on current view.
|
|
136
133
|
const frustumPlanes = viewport.getFrustumPlanes();
|
|
134
|
+
|
|
135
|
+
// Get the near/far plane centers
|
|
136
|
+
const nearCenterCommon = closestPointOnPlane(frustumPlanes.near, viewport.cameraPosition);
|
|
137
|
+
const nearCenterCartesian = worldToCartesian(viewport, nearCenterCommon);
|
|
138
|
+
const cameraCartesian = worldToCartesian(viewport, viewport.cameraPosition, scratchPosition);
|
|
139
|
+
|
|
137
140
|
let i = 0;
|
|
141
|
+
cullingVolume.planes[i++].fromPointNormal(
|
|
142
|
+
nearCenterCartesian,
|
|
143
|
+
scratchVector.copy(nearCenterCartesian).subtract(cameraCartesian)
|
|
144
|
+
);
|
|
145
|
+
|
|
138
146
|
for (const dir in frustumPlanes) {
|
|
147
|
+
if (dir === 'near') {
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
139
150
|
const plane = frustumPlanes[dir];
|
|
140
|
-
const
|
|
141
|
-
scratchPosition
|
|
142
|
-
.copy(plane.normal)
|
|
143
|
-
.scale(plane.distance - distanceToCenter)
|
|
144
|
-
.add(viewport.center);
|
|
145
|
-
const cartographicPos = viewport.unprojectPosition(scratchPosition);
|
|
146
|
-
|
|
147
|
-
const cartesianPos = Ellipsoid.WGS84.cartographicToCartesian(cartographicPos, new Vector3());
|
|
151
|
+
const posCommon = closestPointOnPlane(plane, nearCenterCommon, scratchPosition);
|
|
152
|
+
const cartesianPos = worldToCartesian(viewport, posCommon, scratchPosition);
|
|
148
153
|
|
|
149
154
|
cullingVolume.planes[i++].fromPointNormal(
|
|
150
155
|
cartesianPos,
|
|
151
156
|
// Want the normal to point into the frustum since that's what culling expects
|
|
152
|
-
scratchVector.copy(
|
|
157
|
+
scratchVector.copy(nearCenterCartesian).subtract(cartesianPos)
|
|
153
158
|
);
|
|
154
159
|
}
|
|
155
160
|
}
|
|
161
|
+
|
|
162
|
+
function closestPointOnPlane(
|
|
163
|
+
plane: {distance: number; normal: Vector3},
|
|
164
|
+
refPoint: [number, number, number] | Vector3,
|
|
165
|
+
out: Vector3 = new Vector3()
|
|
166
|
+
): Vector3 {
|
|
167
|
+
const distanceToRef = plane.normal.dot(refPoint);
|
|
168
|
+
out
|
|
169
|
+
.copy(plane.normal)
|
|
170
|
+
.scale(plane.distance - distanceToRef)
|
|
171
|
+
.add(refPoint);
|
|
172
|
+
return out;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
function worldToCartesian(
|
|
176
|
+
viewport: Viewport,
|
|
177
|
+
point: [number, number, number] | Vector3,
|
|
178
|
+
out: Vector3 = new Vector3()
|
|
179
|
+
): Vector3 {
|
|
180
|
+
const cartographicPos = viewport.unprojectPosition(point);
|
|
181
|
+
return Ellipsoid.WGS84.cartographicToCartesian(cartographicPos, out);
|
|
182
|
+
}
|
|
@@ -80,7 +80,9 @@ export function getProjectedRadius(tile: Tile3D, frameState: FrameState): number
|
|
|
80
80
|
|
|
81
81
|
// Project center vertex and border vertex and calculate projected radius of MBS
|
|
82
82
|
const projectedOrigin = viewport.project([mbsLon, mbsLat, mbsZ]);
|
|
83
|
-
const projectedMbsBorderVertex = viewport.project(
|
|
83
|
+
const projectedMbsBorderVertex = viewport.project(
|
|
84
|
+
sphereMbsBorderVertexCartographic as [number, number, number]
|
|
85
|
+
);
|
|
84
86
|
const projectedRadius = projectedOriginVector
|
|
85
87
|
.copy(projectedOrigin)
|
|
86
88
|
.subtract(projectedMbsBorderVertex)
|
|
@@ -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 {Viewport} from '../types';
|
|
58
59
|
|
|
59
60
|
export type Tileset3DProps = {
|
|
60
61
|
// loading
|
|
@@ -244,7 +245,7 @@ export default class Tileset3D {
|
|
|
244
245
|
private _pendingCount: any;
|
|
245
246
|
|
|
246
247
|
// HOLD TRAVERSAL RESULTS
|
|
247
|
-
private lastUpdatedVieports:
|
|
248
|
+
private lastUpdatedVieports: Viewport[] | Viewport | null;
|
|
248
249
|
private _requestedTiles: any;
|
|
249
250
|
private _emptyTiles: any;
|
|
250
251
|
private frameStateData: any;
|
|
@@ -393,7 +394,7 @@ export default class Tileset3D {
|
|
|
393
394
|
* @param viewports - list of viewports
|
|
394
395
|
* @deprecated
|
|
395
396
|
*/
|
|
396
|
-
update(viewports:
|
|
397
|
+
update(viewports: Viewport[] | Viewport | null = null) {
|
|
397
398
|
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
398
399
|
this.tilesetInitializationPromise.then(() => {
|
|
399
400
|
if (!viewports && this.lastUpdatedVieports) {
|
|
@@ -401,7 +402,9 @@ export default class Tileset3D {
|
|
|
401
402
|
} else {
|
|
402
403
|
this.lastUpdatedVieports = viewports;
|
|
403
404
|
}
|
|
404
|
-
|
|
405
|
+
if (viewports) {
|
|
406
|
+
this.doUpdate(viewports);
|
|
407
|
+
}
|
|
405
408
|
});
|
|
406
409
|
}
|
|
407
410
|
|
|
@@ -411,7 +414,7 @@ export default class Tileset3D {
|
|
|
411
414
|
* @param viewports viewports
|
|
412
415
|
* @returns Promise of new frameNumber
|
|
413
416
|
*/
|
|
414
|
-
async selectTiles(viewports:
|
|
417
|
+
async selectTiles(viewports: Viewport[] | Viewport | null = null): Promise<number> {
|
|
415
418
|
await this.tilesetInitializationPromise;
|
|
416
419
|
if (viewports) {
|
|
417
420
|
this.lastUpdatedVieports = viewports;
|
|
@@ -419,7 +422,9 @@ export default class Tileset3D {
|
|
|
419
422
|
if (!this.updatePromise) {
|
|
420
423
|
this.updatePromise = new Promise<number>((resolve) => {
|
|
421
424
|
setTimeout(() => {
|
|
422
|
-
|
|
425
|
+
if (this.lastUpdatedVieports) {
|
|
426
|
+
this.doUpdate(this.lastUpdatedVieports);
|
|
427
|
+
}
|
|
423
428
|
resolve(this._frameNumber);
|
|
424
429
|
this.updatePromise = null;
|
|
425
430
|
}, this.options.debounceTime);
|
|
@@ -433,24 +438,22 @@ export default class Tileset3D {
|
|
|
433
438
|
* @param viewports viewports
|
|
434
439
|
*/
|
|
435
440
|
// eslint-disable-next-line max-statements, complexity
|
|
436
|
-
private doUpdate(viewports:
|
|
441
|
+
private doUpdate(viewports: Viewport[] | Viewport): void {
|
|
437
442
|
if ('loadTiles' in this.options && !this.options.loadTiles) {
|
|
438
443
|
return;
|
|
439
444
|
}
|
|
440
445
|
if (this.traverseCounter > 0) {
|
|
441
446
|
return;
|
|
442
447
|
}
|
|
443
|
-
|
|
444
|
-
viewports = [viewports];
|
|
445
|
-
}
|
|
448
|
+
const preparedViewports = viewports instanceof Array ? viewports : [viewports];
|
|
446
449
|
|
|
447
450
|
this._cache.reset();
|
|
448
451
|
this._frameNumber++;
|
|
449
|
-
this.traverseCounter =
|
|
452
|
+
this.traverseCounter = preparedViewports.length;
|
|
450
453
|
const viewportsToTraverse: string[] = [];
|
|
451
454
|
// First loop to decrement traverseCounter
|
|
452
|
-
for (const viewport of
|
|
453
|
-
const id = viewport.id
|
|
455
|
+
for (const viewport of preparedViewports) {
|
|
456
|
+
const id = viewport.id;
|
|
454
457
|
if (this._needTraverse(id)) {
|
|
455
458
|
viewportsToTraverse.push(id);
|
|
456
459
|
} else {
|
|
@@ -459,8 +462,8 @@ export default class Tileset3D {
|
|
|
459
462
|
}
|
|
460
463
|
|
|
461
464
|
// Second loop to traverse
|
|
462
|
-
for (const viewport of
|
|
463
|
-
const id = viewport.id
|
|
465
|
+
for (const viewport of preparedViewports) {
|
|
466
|
+
const id = viewport.id;
|
|
464
467
|
if (!this.roots[id]) {
|
|
465
468
|
this.roots[id] = this._initializeTileHeaders(this.tileset, null);
|
|
466
469
|
}
|
|
@@ -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
|
+
}
|