ol 7.3.0 → 7.3.1-dev.1678058258888
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/ol.js +2 -2
- package/dist/ol.js.map +1 -1
- package/package.json +1 -1
- package/renderer/webgl/TileLayer.d.ts +25 -6
- package/renderer/webgl/TileLayer.d.ts.map +1 -1
- package/renderer/webgl/TileLayer.js +74 -45
- package/util.d.ts.map +1 -1
- package/util.js +1 -1
package/package.json
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef {Object} TileTextureLookup
|
|
3
|
+
* @property {Set<string>} tileIds The set of tile ids in the lookup.
|
|
4
|
+
* @property {Object<number, Set<TileTexture>>} texturesByZ Tile textures by zoom level.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* @return {TileTextureLookup} A new tile texture lookup.
|
|
8
|
+
*/
|
|
9
|
+
export function newTileTextureLookup(): TileTextureLookup;
|
|
1
10
|
export namespace Uniforms {
|
|
2
11
|
const TILE_TEXTURE_ARRAY: string;
|
|
3
12
|
const TILE_TRANSFORM: string;
|
|
@@ -16,6 +25,18 @@ export namespace Attributes {
|
|
|
16
25
|
const TEXTURE_COORD: string;
|
|
17
26
|
}
|
|
18
27
|
export default WebGLTileLayerRenderer;
|
|
28
|
+
export type TileTextureLookup = {
|
|
29
|
+
/**
|
|
30
|
+
* The set of tile ids in the lookup.
|
|
31
|
+
*/
|
|
32
|
+
tileIds: Set<string>;
|
|
33
|
+
/**
|
|
34
|
+
* Tile textures by zoom level.
|
|
35
|
+
*/
|
|
36
|
+
texturesByZ: {
|
|
37
|
+
[x: number]: Set<TileTexture>;
|
|
38
|
+
};
|
|
39
|
+
};
|
|
19
40
|
export type Options = {
|
|
20
41
|
/**
|
|
21
42
|
* Vertex shader source.
|
|
@@ -162,12 +183,10 @@ declare class WebGLTileLayerRenderer extends WebGLLayerRenderer<import("../../la
|
|
|
162
183
|
* @param {import("../../Map.js").FrameState} frameState Frame state.
|
|
163
184
|
* @param {import("../../extent.js").Extent} extent The extent to be rendered.
|
|
164
185
|
* @param {number} initialZ The zoom level.
|
|
165
|
-
* @param {
|
|
186
|
+
* @param {TileTextureLookup} tileTextureLookup The zoom level.
|
|
166
187
|
* @param {number} preload Number of additional levels to load.
|
|
167
188
|
*/
|
|
168
|
-
enqueueTiles(frameState: import("../../Map.js").FrameState, extent: import("../../extent.js").Extent, initialZ: number,
|
|
169
|
-
[x: number]: Array<TileTexture>;
|
|
170
|
-
}, preload: number): void;
|
|
189
|
+
enqueueTiles(frameState: import("../../Map.js").FrameState, extent: import("../../extent.js").Extent, initialZ: number, tileTextureLookup: TileTextureLookup, preload: number): void;
|
|
171
190
|
/**
|
|
172
191
|
* Render the layer.
|
|
173
192
|
* @param {import("../../Map.js").FrameState} frameState Frame state.
|
|
@@ -185,7 +204,7 @@ declare class WebGLTileLayerRenderer extends WebGLLayerRenderer<import("../../la
|
|
|
185
204
|
* @param {import("../../tilegrid/TileGrid.js").default} tileGrid The tile grid.
|
|
186
205
|
* @param {import("../../tilecoord.js").TileCoord} tileCoord The target tile coordinate.
|
|
187
206
|
* @param {number} altZ The alternate zoom level.
|
|
188
|
-
* @param {
|
|
207
|
+
* @param {TileTextureLookup} tileTextureLookup Lookup of
|
|
189
208
|
* tile textures by zoom level.
|
|
190
209
|
* @return {boolean} The tile coordinate is covered by loaded tiles at the alternate zoom level.
|
|
191
210
|
* @private
|
|
@@ -193,6 +212,6 @@ declare class WebGLTileLayerRenderer extends WebGLLayerRenderer<import("../../la
|
|
|
193
212
|
private findAltTiles_;
|
|
194
213
|
clearCache(): void;
|
|
195
214
|
}
|
|
196
|
-
import WebGLLayerRenderer from "./Layer.js";
|
|
197
215
|
import TileTexture from "../../webgl/TileTexture.js";
|
|
216
|
+
import WebGLLayerRenderer from "./Layer.js";
|
|
198
217
|
//# sourceMappingURL=TileLayer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TileLayer.d.ts","sourceRoot":"","sources":["TileLayer.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TileLayer.d.ts","sourceRoot":"","sources":["TileLayer.js"],"names":[],"mappings":"AAoFA;;;;GAIG;AAEH;;GAEG;AACH,wCAFY,iBAAiB,CAI5B;;;;;;;;;;;;;;;;;;;;;;;aATa,IAAI,MAAM,CAAC;;;;;YACJ,MAAM,GAAE,IAAI,WAAW,CAAC;;;;;;;kBAoE/B,MAAM;;;;oBACN,MAAM;;;;;;;;;;;;;;;;;wBAQP,OAAO,0BAA0B,EAAE,OAAO;AAXvD;;;;;;;;GAQG;AAEH;;GAEG;AAEH;;;;;GAKG;AACH;IACE;;;OAGG;IACH,uBAHW,SAAS,WACT,OAAO,EAyGjB;IAlGC;;;OAGG;IACH,gBAFU,OAAO,CAEU;IAE3B;;;;OAIG;IACH,uBAAuC;IAEvC;;;OAGG;IACH,kBAA6B;IAE7B;;;OAGG;IACH,uBAA+C;IAE/C;;;OAGG;IACH,uBAA8C;IAE9C;;;OAGG;IACH,kBAAuB;IAEvB;;;OAGG;IACH,iBAAa;IAEb;;OAEG;IACH,sBAAyC;IAEzC;;OAEG;IACH,wBAA6C;IAE7C;;;;;;;;;;;;;;;;OAgBG;IACH,iBAAuE;IAKvE;;;OAGG;IACH,0BAAgD;IAEhD;;;OAGG;IACH,yBAAqD;IAErD;;;OAGG;IACH,oBAAuB;IAEvB;;;OAGG;IACH,oBAA4B;IAG9B;;OAEG;IACH,eAFW,OAAO,QAgBjB;IAWD;;;;OAIG;IACH,wBASC;IA2BD;;;;;;OAMG;IACH,yBANW,OAAO,cAAc,EAAE,UAAU,UACjC,OAAO,iBAAiB,EAAE,MAAM,YAChC,MAAM,qBACN,iBAAiB,WACjB,MAAM,QA6GhB;IAED;;;;OAIG;IACH,wBAHW,OAAO,cAAc,EAAE,UAAU,GAChC,WAAW,CAgStB;IAED;;;OAGG;IACH,eAHW,OAAO,gBAAgB,EAAE,KAAK,GAC7B,iBAAiB,GAAC,UAAU,GAAC,YAAY,GAAC,QAAQ,CA4F7D;IAED;;;;;;;;;;OAUG;IACH,sBAkCC;IAED,mBAIC;CA6BF"}
|
|
@@ -82,18 +82,42 @@ function depthForZ(z) {
|
|
|
82
82
|
return 2 * (1 - 1 / (z + 1)) - 1;
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
+
/**
|
|
86
|
+
* @typedef {Object} TileTextureLookup
|
|
87
|
+
* @property {Set<string>} tileIds The set of tile ids in the lookup.
|
|
88
|
+
* @property {Object<number, Set<TileTexture>>} texturesByZ Tile textures by zoom level.
|
|
89
|
+
*/
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* @return {TileTextureLookup} A new tile texture lookup.
|
|
93
|
+
*/
|
|
94
|
+
export function newTileTextureLookup() {
|
|
95
|
+
return {tileIds: new Set(), texturesByZ: {}};
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Check if a tile is already in the tile texture lookup.
|
|
100
|
+
* @param {TileTextureLookup} tileTextureLookup Lookup of tile textures by zoom level.
|
|
101
|
+
* @param {import("../../Tile.js").default} tile A tile.
|
|
102
|
+
* @return {boolean} The tile is already in the lookup.
|
|
103
|
+
*/
|
|
104
|
+
function lookupHasTile(tileTextureLookup, tile) {
|
|
105
|
+
return tileTextureLookup.tileIds.has(getUid(tile));
|
|
106
|
+
}
|
|
107
|
+
|
|
85
108
|
/**
|
|
86
109
|
* Add a tile texture to the lookup.
|
|
87
|
-
* @param {
|
|
88
|
-
*
|
|
89
|
-
* @param {import("../../webgl/TileTexture.js").default} tileTexture A tile texture.
|
|
110
|
+
* @param {TileTextureLookup} tileTextureLookup Lookup of tile textures by zoom level.
|
|
111
|
+
* @param {TileTexture} tileTexture A tile texture.
|
|
90
112
|
* @param {number} z The zoom level.
|
|
91
113
|
*/
|
|
92
|
-
function addTileTextureToLookup(
|
|
93
|
-
|
|
94
|
-
|
|
114
|
+
function addTileTextureToLookup(tileTextureLookup, tileTexture, z) {
|
|
115
|
+
const texturesByZ = tileTextureLookup.texturesByZ;
|
|
116
|
+
if (!(z in texturesByZ)) {
|
|
117
|
+
texturesByZ[z] = new Set();
|
|
95
118
|
}
|
|
96
|
-
|
|
119
|
+
texturesByZ[z].add(tileTexture);
|
|
120
|
+
tileTextureLookup.tileIds.add(getUid(tileTexture.tile));
|
|
97
121
|
}
|
|
98
122
|
|
|
99
123
|
/**
|
|
@@ -330,10 +354,10 @@ class WebGLTileLayerRenderer extends WebGLLayerRenderer {
|
|
|
330
354
|
* @param {import("../../Map.js").FrameState} frameState Frame state.
|
|
331
355
|
* @param {import("../../extent.js").Extent} extent The extent to be rendered.
|
|
332
356
|
* @param {number} initialZ The zoom level.
|
|
333
|
-
* @param {
|
|
357
|
+
* @param {TileTextureLookup} tileTextureLookup The zoom level.
|
|
334
358
|
* @param {number} preload Number of additional levels to load.
|
|
335
359
|
*/
|
|
336
|
-
enqueueTiles(frameState, extent, initialZ,
|
|
360
|
+
enqueueTiles(frameState, extent, initialZ, tileTextureLookup, preload) {
|
|
337
361
|
const viewState = frameState.viewState;
|
|
338
362
|
const tileLayer = this.getLayer();
|
|
339
363
|
const tileSource = tileLayer.getRenderSource();
|
|
@@ -396,28 +420,33 @@ class WebGLTileLayerRenderer extends WebGLLayerRenderer {
|
|
|
396
420
|
frameState.pixelRatio,
|
|
397
421
|
viewState.projection
|
|
398
422
|
);
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
if (lookupHasTile(tileTextureLookup, tile)) {
|
|
426
|
+
continue;
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
if (!tileTexture) {
|
|
430
|
+
tileTexture = new TileTexture({
|
|
431
|
+
tile: tile,
|
|
432
|
+
grid: tileGrid,
|
|
433
|
+
helper: this.helper,
|
|
434
|
+
gutter: gutter,
|
|
435
|
+
});
|
|
436
|
+
tileTextureCache.set(cacheKey, tileTexture);
|
|
437
|
+
} else {
|
|
438
|
+
if (this.isDrawableTile_(tile)) {
|
|
439
|
+
tileTexture.setTile(tile);
|
|
407
440
|
} else {
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
tile.getInterimTile()
|
|
414
|
-
);
|
|
415
|
-
tileTexture.setTile(interimTile);
|
|
416
|
-
}
|
|
441
|
+
const interimTile =
|
|
442
|
+
/** @type {import("../../webgl/TileTexture").TileType} */ (
|
|
443
|
+
tile.getInterimTile()
|
|
444
|
+
);
|
|
445
|
+
tileTexture.setTile(interimTile);
|
|
417
446
|
}
|
|
418
447
|
}
|
|
419
448
|
|
|
420
|
-
addTileTextureToLookup(
|
|
449
|
+
addTileTextureToLookup(tileTextureLookup, tileTexture, z);
|
|
421
450
|
|
|
422
451
|
const tileQueueKey = tile.getKey();
|
|
423
452
|
wantedTiles[tileQueueKey] = true;
|
|
@@ -460,9 +489,9 @@ class WebGLTileLayerRenderer extends WebGLLayerRenderer {
|
|
|
460
489
|
);
|
|
461
490
|
|
|
462
491
|
/**
|
|
463
|
-
* @type {
|
|
492
|
+
* @type {TileTextureLookup}
|
|
464
493
|
*/
|
|
465
|
-
const
|
|
494
|
+
const tileTextureLookup = newTileTextureLookup();
|
|
466
495
|
|
|
467
496
|
const preload = tileLayer.getPreload();
|
|
468
497
|
if (frameState.nextExtent) {
|
|
@@ -475,19 +504,19 @@ class WebGLTileLayerRenderer extends WebGLLayerRenderer {
|
|
|
475
504
|
frameState,
|
|
476
505
|
nextExtent,
|
|
477
506
|
targetZ,
|
|
478
|
-
|
|
507
|
+
tileTextureLookup,
|
|
479
508
|
preload
|
|
480
509
|
);
|
|
481
510
|
}
|
|
482
511
|
|
|
483
|
-
this.enqueueTiles(frameState, extent, z,
|
|
512
|
+
this.enqueueTiles(frameState, extent, z, tileTextureLookup, 0);
|
|
484
513
|
if (preload > 0) {
|
|
485
514
|
setTimeout(() => {
|
|
486
515
|
this.enqueueTiles(
|
|
487
516
|
frameState,
|
|
488
517
|
extent,
|
|
489
518
|
z - 1,
|
|
490
|
-
|
|
519
|
+
tileTextureLookup,
|
|
491
520
|
preload - 1
|
|
492
521
|
);
|
|
493
522
|
}, 0);
|
|
@@ -506,9 +535,7 @@ class WebGLTileLayerRenderer extends WebGLLayerRenderer {
|
|
|
506
535
|
let blend = false;
|
|
507
536
|
|
|
508
537
|
// look for cached tiles to use if a target tile is not ready
|
|
509
|
-
const
|
|
510
|
-
for (let i = 0, ii = tileTextures.length; i < ii; ++i) {
|
|
511
|
-
const tileTexture = tileTextures[i];
|
|
538
|
+
for (const tileTexture of tileTextureLookup.texturesByZ[z]) {
|
|
512
539
|
const tile = tileTexture.tile;
|
|
513
540
|
if (
|
|
514
541
|
(tile instanceof ReprojTile || tile instanceof ReprojDataTile) &&
|
|
@@ -536,7 +563,7 @@ class WebGLTileLayerRenderer extends WebGLLayerRenderer {
|
|
|
536
563
|
tileGrid,
|
|
537
564
|
tileCoord,
|
|
538
565
|
z + 1,
|
|
539
|
-
|
|
566
|
+
tileTextureLookup
|
|
540
567
|
);
|
|
541
568
|
|
|
542
569
|
if (coveredByChildren) {
|
|
@@ -550,7 +577,7 @@ class WebGLTileLayerRenderer extends WebGLLayerRenderer {
|
|
|
550
577
|
tileGrid,
|
|
551
578
|
tileCoord,
|
|
552
579
|
parentZ,
|
|
553
|
-
|
|
580
|
+
tileTextureLookup
|
|
554
581
|
);
|
|
555
582
|
|
|
556
583
|
if (coveredByParent) {
|
|
@@ -562,7 +589,8 @@ class WebGLTileLayerRenderer extends WebGLLayerRenderer {
|
|
|
562
589
|
this.helper.useProgram(this.program_, frameState);
|
|
563
590
|
this.helper.prepareDraw(frameState, !blend);
|
|
564
591
|
|
|
565
|
-
const
|
|
592
|
+
const texturesByZ = tileTextureLookup.texturesByZ;
|
|
593
|
+
const zs = Object.keys(texturesByZ).map(Number).sort(ascending);
|
|
566
594
|
|
|
567
595
|
const centerX = viewState.center[0];
|
|
568
596
|
const centerY = viewState.center[1];
|
|
@@ -585,9 +613,7 @@ class WebGLTileLayerRenderer extends WebGLLayerRenderer {
|
|
|
585
613
|
const tileScale = viewState.resolution / tileResolution;
|
|
586
614
|
|
|
587
615
|
const depth = depthForZ(tileZ);
|
|
588
|
-
const
|
|
589
|
-
for (let i = 0, ii = tileTextures.length; i < ii; ++i) {
|
|
590
|
-
const tileTexture = tileTextures[i];
|
|
616
|
+
for (const tileTexture of texturesByZ[tileZ]) {
|
|
591
617
|
if (!tileTexture.loaded) {
|
|
592
618
|
continue;
|
|
593
619
|
}
|
|
@@ -835,12 +861,12 @@ class WebGLTileLayerRenderer extends WebGLLayerRenderer {
|
|
|
835
861
|
* @param {import("../../tilegrid/TileGrid.js").default} tileGrid The tile grid.
|
|
836
862
|
* @param {import("../../tilecoord.js").TileCoord} tileCoord The target tile coordinate.
|
|
837
863
|
* @param {number} altZ The alternate zoom level.
|
|
838
|
-
* @param {
|
|
864
|
+
* @param {TileTextureLookup} tileTextureLookup Lookup of
|
|
839
865
|
* tile textures by zoom level.
|
|
840
866
|
* @return {boolean} The tile coordinate is covered by loaded tiles at the alternate zoom level.
|
|
841
867
|
* @private
|
|
842
868
|
*/
|
|
843
|
-
findAltTiles_(tileGrid, tileCoord, altZ,
|
|
869
|
+
findAltTiles_(tileGrid, tileCoord, altZ, tileTextureLookup) {
|
|
844
870
|
const tileRange = tileGrid.getTileRangeForTileCoordAndZ(
|
|
845
871
|
tileCoord,
|
|
846
872
|
altZ,
|
|
@@ -860,8 +886,11 @@ class WebGLTileLayerRenderer extends WebGLLayerRenderer {
|
|
|
860
886
|
let loaded = false;
|
|
861
887
|
if (tileTextureCache.containsKey(cacheKey)) {
|
|
862
888
|
const tileTexture = tileTextureCache.get(cacheKey);
|
|
863
|
-
if (
|
|
864
|
-
|
|
889
|
+
if (
|
|
890
|
+
tileTexture.loaded &&
|
|
891
|
+
!lookupHasTile(tileTextureLookup, tileTexture.tile)
|
|
892
|
+
) {
|
|
893
|
+
addTileTextureToLookup(tileTextureLookup, tileTexture, altZ);
|
|
865
894
|
loaded = true;
|
|
866
895
|
}
|
|
867
896
|
}
|
package/util.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["util.js"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,4BAFY,KAAK,CAIhB;AASD;;;;;;;;GAQG;AACH,kCAHY,MAAM,CAKjB;AAED;;;GAGG;AACH,sBAFU,MAAM,
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["util.js"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,4BAFY,KAAK,CAIhB;AASD;;;;;;;;GAQG;AACH,kCAHY,MAAM,CAKjB;AAED;;;GAGG;AACH,sBAFU,MAAM,CAEiC"}
|
package/util.js
CHANGED