@mapwhit/tilerenderer 0.52.0 → 1.0.0
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/README.md +7 -0
- package/build/min/package.json +1 -1
- package/build/min/src/shaders/_prelude.fragment.glsl.js +2 -2
- package/build/min/src/shaders/_prelude.vertex.glsl.js +2 -2
- package/build/min/src/shaders/background.fragment.glsl.js +2 -2
- package/build/min/src/shaders/background.vertex.glsl.js +1 -1
- package/build/min/src/shaders/background_pattern.fragment.glsl.js +2 -2
- package/build/min/src/shaders/background_pattern.vertex.glsl.js +1 -1
- package/build/min/src/shaders/circle.fragment.glsl.js +2 -2
- package/build/min/src/shaders/circle.vertex.glsl.js +2 -2
- package/build/min/src/shaders/clipping_mask.fragment.glsl.js +1 -1
- package/build/min/src/shaders/clipping_mask.vertex.glsl.js +1 -1
- package/build/min/src/shaders/collision_box.fragment.glsl.js +1 -1
- package/build/min/src/shaders/collision_box.vertex.glsl.js +1 -1
- package/build/min/src/shaders/collision_circle.fragment.glsl.js +1 -1
- package/build/min/src/shaders/collision_circle.vertex.glsl.js +1 -1
- package/build/min/src/shaders/debug.fragment.glsl.js +1 -1
- package/build/min/src/shaders/debug.vertex.glsl.js +1 -1
- package/build/min/src/shaders/fill.fragment.glsl.js +2 -2
- package/build/min/src/shaders/fill.vertex.glsl.js +2 -2
- package/build/min/src/shaders/fill_extrusion.fragment.glsl.js +2 -2
- package/build/min/src/shaders/fill_extrusion.vertex.glsl.js +2 -2
- package/build/min/src/shaders/fill_extrusion_pattern.fragment.glsl.js +2 -2
- package/build/min/src/shaders/fill_extrusion_pattern.vertex.glsl.js +2 -2
- package/build/min/src/shaders/fill_outline.fragment.glsl.js +2 -2
- package/build/min/src/shaders/fill_outline.vertex.glsl.js +2 -2
- package/build/min/src/shaders/fill_outline_pattern.fragment.glsl.js +2 -2
- package/build/min/src/shaders/fill_outline_pattern.vertex.glsl.js +2 -2
- package/build/min/src/shaders/fill_pattern.fragment.glsl.js +2 -2
- package/build/min/src/shaders/fill_pattern.vertex.glsl.js +2 -2
- package/build/min/src/shaders/heatmap.fragment.glsl.js +2 -2
- package/build/min/src/shaders/heatmap.vertex.glsl.js +2 -2
- package/build/min/src/shaders/heatmap_texture.fragment.glsl.js +2 -2
- package/build/min/src/shaders/heatmap_texture.vertex.glsl.js +1 -1
- package/build/min/src/shaders/hillshade.fragment.glsl.js +2 -2
- package/build/min/src/shaders/hillshade.vertex.glsl.js +1 -1
- package/build/min/src/shaders/hillshade_prepare.fragment.glsl.js +2 -2
- package/build/min/src/shaders/hillshade_prepare.vertex.glsl.js +1 -1
- package/build/min/src/shaders/line.fragment.glsl.js +2 -2
- package/build/min/src/shaders/line.vertex.glsl.js +2 -2
- package/build/min/src/shaders/line_gradient.fragment.glsl.js +2 -2
- package/build/min/src/shaders/line_gradient.vertex.glsl.js +2 -2
- package/build/min/src/shaders/line_pattern.fragment.glsl.js +2 -2
- package/build/min/src/shaders/line_pattern.vertex.glsl.js +2 -2
- package/build/min/src/shaders/line_sdf.fragment.glsl.js +2 -2
- package/build/min/src/shaders/line_sdf.vertex.glsl.js +2 -2
- package/build/min/src/shaders/raster.fragment.glsl.js +2 -2
- package/build/min/src/shaders/raster.vertex.glsl.js +1 -1
- package/build/min/src/shaders/symbol_icon.fragment.glsl.js +2 -2
- package/build/min/src/shaders/symbol_icon.vertex.glsl.js +2 -2
- package/build/min/src/shaders/symbol_sdf.fragment.glsl.js +2 -2
- package/build/min/src/shaders/symbol_sdf.vertex.glsl.js +2 -2
- package/package.json +3 -3
- package/src/data/array_types.js +1 -36
- package/src/data/bucket/circle_bucket.js +8 -5
- package/src/data/bucket/fill_bucket.js +8 -5
- package/src/data/bucket/fill_extrusion_bucket.js +8 -5
- package/src/data/bucket/heatmap_bucket.js +0 -4
- package/src/data/bucket/line_bucket.js +9 -6
- package/src/data/bucket/pattern_bucket_features.js +2 -2
- package/src/data/bucket/symbol_bucket.js +99 -129
- package/src/data/bucket.js +26 -21
- package/src/data/dem_data.js +0 -3
- package/src/data/feature_index.js +3 -8
- package/src/data/program_configuration.js +24 -33
- package/src/data/segment.js +0 -4
- package/src/render/draw_background.js +3 -3
- package/src/render/draw_circle.js +4 -4
- package/src/render/draw_fill.js +8 -8
- package/src/render/draw_fill_extrusion.js +8 -8
- package/src/render/draw_heatmap.js +4 -4
- package/src/render/draw_line.js +6 -6
- package/src/render/draw_raster.js +6 -6
- package/src/render/draw_symbol.js +16 -16
- package/src/render/glyph_atlas.js +0 -3
- package/src/render/glyph_manager.js +1 -2
- package/src/render/image_atlas.js +0 -4
- package/src/render/image_manager.js +33 -19
- package/src/render/painter.js +13 -14
- package/src/render/program/circle_program.js +4 -4
- package/src/render/program/fill_extrusion_program.js +1 -1
- package/src/render/program/heatmap_program.js +1 -1
- package/src/render/program/hillshade_program.js +6 -6
- package/src/render/program/line_program.js +3 -3
- package/src/render/program/raster_program.js +6 -6
- package/src/source/geojson_source.js +15 -24
- package/src/source/geojson_worker_source.js +40 -68
- package/src/source/geojson_wrapper.js +9 -1
- package/src/source/image_source.js +6 -16
- package/src/source/query_features.js +4 -5
- package/src/source/raster_dem_tile_source.js +45 -64
- package/src/source/raster_tile_source.js +1 -6
- package/src/source/resources/glyphs.js +2 -2
- package/src/source/resources/index.js +3 -9
- package/src/source/rtl_text_plugin.js +58 -31
- package/src/source/source.js +11 -13
- package/src/source/source_cache.js +135 -151
- package/src/source/source_state.js +101 -12
- package/src/source/tile.js +32 -46
- package/src/source/tile_bounds.js +26 -26
- package/src/source/tile_id.js +2 -5
- package/src/source/vector_tile_source.js +14 -14
- package/src/source/vector_tile_worker_source.js +19 -23
- package/src/source/worker_tile.js +122 -119
- package/src/style/create_style_layer.js +1 -1
- package/src/style/pauseable_placement.js +4 -5
- package/src/style/properties.js +1 -8
- package/src/style/query_utils.js +3 -3
- package/src/style/style.js +286 -216
- package/src/style/style_layer/circle_style_layer.js +13 -11
- package/src/style/style_layer/fill_extrusion_style_layer.js +42 -27
- package/src/style/style_layer/fill_style_layer.js +5 -5
- package/src/style/style_layer/heatmap_style_layer.js +1 -1
- package/src/style/style_layer/hillshade_style_layer.js +1 -1
- package/src/style/style_layer/line_style_layer.js +23 -19
- package/src/style/style_layer/symbol_style_layer.js +13 -13
- package/src/style/style_layer.js +71 -30
- package/src/style/style_layer_index.js +16 -41
- package/src/symbol/anchor.js +0 -4
- package/src/symbol/cross_tile_symbol_index.js +2 -5
- package/src/symbol/opacity_state.js +0 -4
- package/src/symbol/placement.js +3 -3
- package/src/symbol/quads.js +4 -4
- package/src/symbol/symbol_layout.js +7 -7
- package/src/symbol/transform_text.js +1 -1
- package/src/ui/map.js +52 -15
- package/src/util/group_layers.js +41 -0
- package/src/util/image.js +0 -5
- package/src/util/key.js +21 -0
- package/src/util/object.js +8 -53
- package/src/worker.js +1 -4
- package/src/source/resources/images.js +0 -68
- package/src/source/worker.js +0 -110
- package/src/source/worker_source.js +0 -14
- package/src/style-spec/deref.js +0 -51
- package/src/style-spec/group_by_layout.js +0 -46
- package/src/util/actor.js +0 -108
- package/src/util/dispatcher.js +0 -65
- package/src/util/global_worker_pool.js +0 -15
- package/src/util/transfer_registry.js +0 -168
- package/src/util/web_worker_transfer.js +0 -43
- package/src/util/worker_pool.js +0 -41
package/src/render/draw_fill.js
CHANGED
|
@@ -11,8 +11,8 @@ const {
|
|
|
11
11
|
module.exports = drawFill;
|
|
12
12
|
|
|
13
13
|
function drawFill(painter, sourceCache, layer, coords) {
|
|
14
|
-
const color = layer.
|
|
15
|
-
const opacity = layer.
|
|
14
|
+
const color = layer._paint.get('fill-color');
|
|
15
|
+
const opacity = layer._paint.get('fill-opacity');
|
|
16
16
|
|
|
17
17
|
if (opacity.constantOr(1) === 0) {
|
|
18
18
|
return;
|
|
@@ -20,7 +20,7 @@ function drawFill(painter, sourceCache, layer, coords) {
|
|
|
20
20
|
|
|
21
21
|
const colorMode = painter.colorModeForRenderPass();
|
|
22
22
|
|
|
23
|
-
const pattern = layer.
|
|
23
|
+
const pattern = layer._paint.get('fill-pattern');
|
|
24
24
|
const pass =
|
|
25
25
|
painter.opaquePassEnabledForLayer() &&
|
|
26
26
|
!pattern.constantOr(1) &&
|
|
@@ -39,7 +39,7 @@ function drawFill(painter, sourceCache, layer, coords) {
|
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
// Draw stroke
|
|
42
|
-
if (painter.renderPass === 'translucent' && layer.
|
|
42
|
+
if (painter.renderPass === 'translucent' && layer._paint.get('fill-antialias')) {
|
|
43
43
|
// If we defined a different color for the fill outline, we are
|
|
44
44
|
// going to ignore the bits in 0x07 and just care about the global
|
|
45
45
|
// clipping mask.
|
|
@@ -59,7 +59,7 @@ function drawFill(painter, sourceCache, layer, coords) {
|
|
|
59
59
|
function drawFillTiles(painter, sourceCache, layer, coords, depthMode, colorMode, isOutline) {
|
|
60
60
|
const gl = painter.context.gl;
|
|
61
61
|
|
|
62
|
-
const patternProperty = layer.
|
|
62
|
+
const patternProperty = layer._paint.get('fill-pattern');
|
|
63
63
|
const image = patternProperty?.constantOr(1);
|
|
64
64
|
const crossfade = layer.getCrossfadeParameters();
|
|
65
65
|
|
|
@@ -103,8 +103,8 @@ function drawFillTiles(painter, sourceCache, layer, coords, depthMode, colorMode
|
|
|
103
103
|
const tileMatrix = painter.translatePosMatrix(
|
|
104
104
|
coord.posMatrix,
|
|
105
105
|
tile,
|
|
106
|
-
layer.
|
|
107
|
-
layer.
|
|
106
|
+
layer._paint.get('fill-translate'),
|
|
107
|
+
layer._paint.get('fill-translate-anchor')
|
|
108
108
|
);
|
|
109
109
|
|
|
110
110
|
if (!isOutline) {
|
|
@@ -135,7 +135,7 @@ function drawFillTiles(painter, sourceCache, layer, coords, depthMode, colorMode
|
|
|
135
135
|
bucket.layoutVertexBuffer,
|
|
136
136
|
indexBuffer,
|
|
137
137
|
segments,
|
|
138
|
-
layer.
|
|
138
|
+
layer._paint,
|
|
139
139
|
painter.transform.zoom,
|
|
140
140
|
programConfiguration
|
|
141
141
|
);
|
|
@@ -7,7 +7,7 @@ const { fillExtrusionUniformValues, fillExtrusionPatternUniformValues } = requir
|
|
|
7
7
|
module.exports = draw;
|
|
8
8
|
|
|
9
9
|
function draw(painter, source, layer, coords) {
|
|
10
|
-
const opacity = layer.
|
|
10
|
+
const opacity = layer._paint.get('fill-extrusion-opacity');
|
|
11
11
|
if (opacity === 0) {
|
|
12
12
|
return;
|
|
13
13
|
}
|
|
@@ -15,7 +15,7 @@ function draw(painter, source, layer, coords) {
|
|
|
15
15
|
if (painter.renderPass === 'translucent') {
|
|
16
16
|
const depthMode = new DepthMode(painter.context.gl.LEQUAL, DepthMode.ReadWrite, painter.depthRangeFor3D);
|
|
17
17
|
|
|
18
|
-
if (opacity === 1 && !layer.
|
|
18
|
+
if (opacity === 1 && !layer._paint.get('fill-extrusion-pattern').constantOr(1)) {
|
|
19
19
|
const colorMode = painter.colorModeForRenderPass();
|
|
20
20
|
drawExtrusionTiles(painter, source, layer, coords, depthMode, StencilMode.disabled, colorMode);
|
|
21
21
|
} else {
|
|
@@ -43,10 +43,10 @@ function drawExtrusionTiles(painter, source, layer, coords, depthMode, stencilMo
|
|
|
43
43
|
const context = painter.context;
|
|
44
44
|
const gl = context.gl;
|
|
45
45
|
|
|
46
|
-
const patternProperty = layer.
|
|
46
|
+
const patternProperty = layer._paint.get('fill-extrusion-pattern');
|
|
47
47
|
const image = patternProperty.constantOr(1);
|
|
48
48
|
const crossfade = layer.getCrossfadeParameters();
|
|
49
|
-
const opacity = layer.
|
|
49
|
+
const opacity = layer._paint.get('fill-extrusion-opacity');
|
|
50
50
|
|
|
51
51
|
for (const coord of coords) {
|
|
52
52
|
const tile = source.getTile(coord);
|
|
@@ -72,11 +72,11 @@ function drawExtrusionTiles(painter, source, layer, coords, depthMode, stencilMo
|
|
|
72
72
|
const matrix = painter.translatePosMatrix(
|
|
73
73
|
coord.posMatrix,
|
|
74
74
|
tile,
|
|
75
|
-
layer.
|
|
76
|
-
layer.
|
|
75
|
+
layer._paint.get('fill-extrusion-translate'),
|
|
76
|
+
layer._paint.get('fill-extrusion-translate-anchor')
|
|
77
77
|
);
|
|
78
78
|
|
|
79
|
-
const shouldUseVerticalGradient = layer.
|
|
79
|
+
const shouldUseVerticalGradient = layer._paint.get('fill-extrusion-vertical-gradient');
|
|
80
80
|
const uniformValues = image
|
|
81
81
|
? fillExtrusionPatternUniformValues(matrix, painter, shouldUseVerticalGradient, opacity, coord, crossfade, tile)
|
|
82
82
|
: fillExtrusionUniformValues(matrix, painter, shouldUseVerticalGradient, opacity);
|
|
@@ -93,7 +93,7 @@ function drawExtrusionTiles(painter, source, layer, coords, depthMode, stencilMo
|
|
|
93
93
|
bucket.layoutVertexBuffer,
|
|
94
94
|
bucket.indexBuffer,
|
|
95
95
|
bucket.segments,
|
|
96
|
-
layer.
|
|
96
|
+
layer._paint,
|
|
97
97
|
painter.transform.zoom,
|
|
98
98
|
programConfiguration
|
|
99
99
|
);
|
|
@@ -9,7 +9,7 @@ const { heatmapUniformValues, heatmapTextureUniformValues } = require('./program
|
|
|
9
9
|
module.exports = drawHeatmap;
|
|
10
10
|
|
|
11
11
|
function drawHeatmap(painter, sourceCache, layer, coords) {
|
|
12
|
-
if (layer.
|
|
12
|
+
if (layer._paint.get('heatmap-opacity') === 0) {
|
|
13
13
|
return;
|
|
14
14
|
}
|
|
15
15
|
|
|
@@ -51,12 +51,12 @@ function drawHeatmap(painter, sourceCache, layer, coords) {
|
|
|
51
51
|
stencilMode,
|
|
52
52
|
colorMode,
|
|
53
53
|
CullFaceMode.disabled,
|
|
54
|
-
heatmapUniformValues(coord.posMatrix, tile, zoom, layer.
|
|
54
|
+
heatmapUniformValues(coord.posMatrix, tile, zoom, layer._paint.get('heatmap-intensity')),
|
|
55
55
|
layer.id,
|
|
56
56
|
bucket.layoutVertexBuffer,
|
|
57
57
|
bucket.indexBuffer,
|
|
58
58
|
bucket.segments,
|
|
59
|
-
layer.
|
|
59
|
+
layer._paint,
|
|
60
60
|
painter.transform.zoom,
|
|
61
61
|
programConfiguration
|
|
62
62
|
);
|
|
@@ -153,7 +153,7 @@ function renderTextureToMap(painter, layer) {
|
|
|
153
153
|
painter.viewportBuffer,
|
|
154
154
|
painter.quadTriangleIndexBuffer,
|
|
155
155
|
painter.viewportSegments,
|
|
156
|
-
layer.
|
|
156
|
+
layer._paint,
|
|
157
157
|
painter.transform.zoom
|
|
158
158
|
);
|
|
159
159
|
}
|
package/src/render/draw_line.js
CHANGED
|
@@ -11,17 +11,17 @@ const {
|
|
|
11
11
|
module.exports = function drawLine(painter, sourceCache, layer, coords) {
|
|
12
12
|
if (painter.renderPass !== 'translucent') return;
|
|
13
13
|
|
|
14
|
-
const opacity = layer.
|
|
15
|
-
const width = layer.
|
|
14
|
+
const opacity = layer._paint.get('line-opacity');
|
|
15
|
+
const width = layer._paint.get('line-width');
|
|
16
16
|
if (opacity.constantOr(1) === 0 || width.constantOr(1) === 0) return;
|
|
17
17
|
|
|
18
18
|
const depthMode = painter.depthModeForSublayer(0, DepthMode.ReadOnly);
|
|
19
19
|
const colorMode = painter.colorModeForRenderPass();
|
|
20
20
|
|
|
21
|
-
const dasharray = layer.
|
|
22
|
-
const patternProperty = layer.
|
|
21
|
+
const dasharray = layer._paint.get('line-dasharray');
|
|
22
|
+
const patternProperty = layer._paint.get('line-pattern');
|
|
23
23
|
const image = patternProperty.constantOr(1);
|
|
24
|
-
const gradient = layer.
|
|
24
|
+
const gradient = layer._paint.get('line-gradient');
|
|
25
25
|
const crossfade = layer.getCrossfadeParameters();
|
|
26
26
|
|
|
27
27
|
const programId = dasharray ? 'lineSDF' : image ? 'linePattern' : gradient ? 'lineGradient' : 'line';
|
|
@@ -88,7 +88,7 @@ module.exports = function drawLine(painter, sourceCache, layer, coords) {
|
|
|
88
88
|
bucket.layoutVertexBuffer,
|
|
89
89
|
bucket.indexBuffer,
|
|
90
90
|
bucket.segments,
|
|
91
|
-
layer.
|
|
91
|
+
layer._paint,
|
|
92
92
|
painter.transform.zoom,
|
|
93
93
|
programConfiguration
|
|
94
94
|
);
|
|
@@ -11,7 +11,7 @@ module.exports = drawRaster;
|
|
|
11
11
|
|
|
12
12
|
function drawRaster(painter, sourceCache, layer, coords) {
|
|
13
13
|
if (painter.renderPass !== 'translucent') return;
|
|
14
|
-
if (layer.
|
|
14
|
+
if (layer._paint.get('raster-opacity') === 0) return;
|
|
15
15
|
|
|
16
16
|
const context = painter.context;
|
|
17
17
|
const gl = context.gl;
|
|
@@ -27,14 +27,14 @@ function drawRaster(painter, sourceCache, layer, coords) {
|
|
|
27
27
|
// Use gl.LESS to prevent double drawing in areas where tiles overlap.
|
|
28
28
|
const depthMode = painter.depthModeForSublayer(
|
|
29
29
|
coord.overscaledZ - minTileZ,
|
|
30
|
-
layer.
|
|
30
|
+
layer._paint.get('raster-opacity') === 1 ? DepthMode.ReadWrite : DepthMode.ReadOnly,
|
|
31
31
|
gl.LESS
|
|
32
32
|
);
|
|
33
33
|
|
|
34
34
|
const tile = sourceCache.getTile(coord);
|
|
35
35
|
const posMatrix = painter.transform.calculatePosMatrix(coord.toUnwrapped(), align);
|
|
36
36
|
|
|
37
|
-
tile.registerFadeDuration(layer.
|
|
37
|
+
tile.registerFadeDuration(layer._paint.get('raster-fade-duration'));
|
|
38
38
|
|
|
39
39
|
const parentTile = sourceCache.findLoadedParent(coord, 0);
|
|
40
40
|
const fade = getFadeValues(tile, parentTile, sourceCache, layer, painter.transform);
|
|
@@ -42,7 +42,7 @@ function drawRaster(painter, sourceCache, layer, coords) {
|
|
|
42
42
|
let parentScaleBy;
|
|
43
43
|
let parentTL;
|
|
44
44
|
|
|
45
|
-
const textureFilter = layer.
|
|
45
|
+
const textureFilter = layer._paint.get('raster-resampling') === 'nearest' ? gl.NEAREST : gl.LINEAR;
|
|
46
46
|
|
|
47
47
|
context.activeTexture.set(gl.TEXTURE0);
|
|
48
48
|
tile.texture.bind(textureFilter, gl.CLAMP_TO_EDGE, gl.LINEAR_MIPMAP_NEAREST);
|
|
@@ -86,7 +86,7 @@ function drawRaster(painter, sourceCache, layer, coords) {
|
|
|
86
86
|
tile.maskedBoundsBuffer,
|
|
87
87
|
tile.maskedIndexBuffer,
|
|
88
88
|
tile.segments,
|
|
89
|
-
layer.
|
|
89
|
+
layer._paint,
|
|
90
90
|
painter.transform.zoom
|
|
91
91
|
);
|
|
92
92
|
} else {
|
|
@@ -108,7 +108,7 @@ function drawRaster(painter, sourceCache, layer, coords) {
|
|
|
108
108
|
}
|
|
109
109
|
|
|
110
110
|
function getFadeValues(tile, parentTile, sourceCache, layer, transform) {
|
|
111
|
-
const fadeDuration = layer.
|
|
111
|
+
const fadeDuration = layer._paint.get('raster-fade-duration');
|
|
112
112
|
|
|
113
113
|
if (fadeDuration > 0) {
|
|
114
114
|
const now = browser.now();
|
|
@@ -21,35 +21,35 @@ function drawSymbols(painter, sourceCache, layer, coords) {
|
|
|
21
21
|
const stencilMode = StencilMode.disabled;
|
|
22
22
|
const colorMode = painter.colorModeForRenderPass();
|
|
23
23
|
|
|
24
|
-
if (layer.
|
|
24
|
+
if (layer._paint.get('icon-opacity').constantOr(1) !== 0) {
|
|
25
25
|
drawLayerSymbols(
|
|
26
26
|
painter,
|
|
27
27
|
sourceCache,
|
|
28
28
|
layer,
|
|
29
29
|
coords,
|
|
30
30
|
false,
|
|
31
|
-
layer.
|
|
32
|
-
layer.
|
|
33
|
-
layer.
|
|
34
|
-
layer.
|
|
35
|
-
layer.
|
|
31
|
+
layer._paint.get('icon-translate'),
|
|
32
|
+
layer._paint.get('icon-translate-anchor'),
|
|
33
|
+
layer._layout.get('icon-rotation-alignment'),
|
|
34
|
+
layer._layout.get('icon-pitch-alignment'),
|
|
35
|
+
layer._layout.get('icon-keep-upright'),
|
|
36
36
|
stencilMode,
|
|
37
37
|
colorMode
|
|
38
38
|
);
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
if (layer.
|
|
41
|
+
if (layer._paint.get('text-opacity').constantOr(1) !== 0) {
|
|
42
42
|
drawLayerSymbols(
|
|
43
43
|
painter,
|
|
44
44
|
sourceCache,
|
|
45
45
|
layer,
|
|
46
46
|
coords,
|
|
47
47
|
true,
|
|
48
|
-
layer.
|
|
49
|
-
layer.
|
|
50
|
-
layer.
|
|
51
|
-
layer.
|
|
52
|
-
layer.
|
|
48
|
+
layer._paint.get('text-translate'),
|
|
49
|
+
layer._paint.get('text-translate-anchor'),
|
|
50
|
+
layer._layout.get('text-rotation-alignment'),
|
|
51
|
+
layer._layout.get('text-pitch-alignment'),
|
|
52
|
+
layer._layout.get('text-keep-upright'),
|
|
53
53
|
stencilMode,
|
|
54
54
|
colorMode
|
|
55
55
|
);
|
|
@@ -80,7 +80,7 @@ function drawLayerSymbols(
|
|
|
80
80
|
|
|
81
81
|
const rotateWithMap = rotationAlignment === 'map';
|
|
82
82
|
const pitchWithMap = pitchAlignment === 'map';
|
|
83
|
-
const alongLine = rotateWithMap && layer.
|
|
83
|
+
const alongLine = rotateWithMap && layer._layout.get('symbol-placement') !== 'point';
|
|
84
84
|
// Line label rotation happens in `updateLineLabels`
|
|
85
85
|
// Pitched point labels are automatically rotated by the labelPlaneMatrix projection
|
|
86
86
|
// Unpitched point labels need to have their rotation applied after projection
|
|
@@ -119,7 +119,7 @@ function drawLayerSymbols(
|
|
|
119
119
|
tile.glyphAtlasTexture.bind(gl.LINEAR, gl.CLAMP_TO_EDGE);
|
|
120
120
|
texSize = tile.glyphAtlasTexture.size;
|
|
121
121
|
} else {
|
|
122
|
-
const iconScaled = layer.
|
|
122
|
+
const iconScaled = layer._layout.get('icon-size').constantOr(0) !== 1 || bucket.iconsNeedLinear;
|
|
123
123
|
const iconTransformed = pitchWithMap || tr.pitch !== 0;
|
|
124
124
|
|
|
125
125
|
tile.imageAtlasTexture.bind(
|
|
@@ -167,7 +167,7 @@ function drawLayerSymbols(
|
|
|
167
167
|
|
|
168
168
|
let uniformValues;
|
|
169
169
|
if (isSDF) {
|
|
170
|
-
const hasHalo = layer.
|
|
170
|
+
const hasHalo = layer._paint.get(isText ? 'text-halo-width' : 'icon-halo-width').constantOr(1) !== 0;
|
|
171
171
|
|
|
172
172
|
uniformValues = symbolSDFUniformValues(
|
|
173
173
|
sizeData.functionType,
|
|
@@ -222,7 +222,7 @@ function drawSymbolElements(buffers, layer, painter, program, depthMode, stencil
|
|
|
222
222
|
buffers.layoutVertexBuffer,
|
|
223
223
|
buffers.indexBuffer,
|
|
224
224
|
buffers.segments,
|
|
225
|
-
layer.
|
|
225
|
+
layer._paint,
|
|
226
226
|
painter.transform.zoom,
|
|
227
227
|
buffers.programConfigurations.get(layer.id),
|
|
228
228
|
buffers.dynamicLayoutVertexBuffer,
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
const { AlphaImage } = require('../util/image');
|
|
2
|
-
const { register } = require('../util/transfer_registry');
|
|
3
2
|
const { default: potpack } = require('potpack');
|
|
4
3
|
|
|
5
4
|
const padding = 1;
|
|
@@ -47,6 +46,4 @@ class GlyphAtlas {
|
|
|
47
46
|
}
|
|
48
47
|
}
|
|
49
48
|
|
|
50
|
-
register('GlyphAtlas', GlyphAtlas);
|
|
51
|
-
|
|
52
49
|
module.exports = GlyphAtlas;
|
|
@@ -8,8 +8,7 @@ class GlyphManager {
|
|
|
8
8
|
async loadGlyphRange(stack, range) {
|
|
9
9
|
this.#cache[stack] ??= {};
|
|
10
10
|
const promise = (this.#cache[stack][range] ??= this.loader(stack, range));
|
|
11
|
-
|
|
12
|
-
return response.slice();
|
|
11
|
+
return await promise;
|
|
13
12
|
}
|
|
14
13
|
}
|
|
15
14
|
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
const { RGBAImage } = require('../util/image');
|
|
2
|
-
const { register } = require('../util/transfer_registry');
|
|
3
2
|
const { default: potpack } = require('potpack');
|
|
4
3
|
|
|
5
4
|
const padding = 1;
|
|
@@ -89,6 +88,3 @@ class ImageAtlas {
|
|
|
89
88
|
|
|
90
89
|
ImageAtlas.ImagePosition = ImagePosition;
|
|
91
90
|
module.exports = ImageAtlas;
|
|
92
|
-
|
|
93
|
-
register('ImagePosition', ImagePosition);
|
|
94
|
-
register('ImageAtlas', ImageAtlas);
|
|
@@ -23,10 +23,11 @@ const padding = 1;
|
|
|
23
23
|
*/
|
|
24
24
|
class ImageManager {
|
|
25
25
|
#loadedState = Promise.withResolvers();
|
|
26
|
+
#imageQueue = new Map();
|
|
26
27
|
constructor() {
|
|
27
|
-
this.images =
|
|
28
|
+
this.images = new Map();
|
|
28
29
|
|
|
29
|
-
this.patterns =
|
|
30
|
+
this.patterns = new Map();
|
|
30
31
|
this.atlasImage = new RGBAImage({ width: 1, height: 1 });
|
|
31
32
|
this.dirty = true;
|
|
32
33
|
}
|
|
@@ -44,22 +45,31 @@ class ImageManager {
|
|
|
44
45
|
}
|
|
45
46
|
|
|
46
47
|
getImage(id) {
|
|
47
|
-
return this.images
|
|
48
|
+
return this.images.get(id);
|
|
48
49
|
}
|
|
49
50
|
|
|
50
51
|
addImage(id, image) {
|
|
51
|
-
assert(!this.images
|
|
52
|
-
|
|
52
|
+
assert(!(this.images.has(id) || this.#imageQueue.has(id)));
|
|
53
|
+
if (image.promise) {
|
|
54
|
+
this.#imageQueue.set(id, image.promise);
|
|
55
|
+
image.promise.then(image => {
|
|
56
|
+
this.#imageQueue.delete(id);
|
|
57
|
+
this.images.set(id, image);
|
|
58
|
+
});
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
this.images.set(id, image);
|
|
53
62
|
}
|
|
54
63
|
|
|
55
64
|
removeImage(id) {
|
|
56
|
-
assert(this.images
|
|
57
|
-
|
|
58
|
-
|
|
65
|
+
assert(this.images.has(id) || this.#imageQueue.has(id));
|
|
66
|
+
this.images.delete(id);
|
|
67
|
+
this.#imageQueue.delete(id);
|
|
68
|
+
this.patterns.delete(id);
|
|
59
69
|
}
|
|
60
70
|
|
|
61
71
|
listImages() {
|
|
62
|
-
return
|
|
72
|
+
return Array.from(this.images.keys());
|
|
63
73
|
}
|
|
64
74
|
|
|
65
75
|
async getImages(ids) {
|
|
@@ -67,11 +77,16 @@ class ImageManager {
|
|
|
67
77
|
|
|
68
78
|
const response = {};
|
|
69
79
|
for (const id of ids) {
|
|
70
|
-
|
|
80
|
+
let image = this.images.get(id);
|
|
81
|
+
if (!image) {
|
|
82
|
+
if (!this.#imageQueue.has(id)) {
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
image = await this.#imageQueue.get(id);
|
|
86
|
+
}
|
|
71
87
|
if (image) {
|
|
72
|
-
// Clone the image so that our own copy of its ArrayBuffer doesn't get transferred.
|
|
73
88
|
response[id] = {
|
|
74
|
-
data: image.data
|
|
89
|
+
data: image.data,
|
|
75
90
|
pixelRatio: image.pixelRatio,
|
|
76
91
|
sdf: image.sdf
|
|
77
92
|
};
|
|
@@ -88,7 +103,7 @@ class ImageManager {
|
|
|
88
103
|
}
|
|
89
104
|
|
|
90
105
|
getPattern(id) {
|
|
91
|
-
const pattern = this.patterns
|
|
106
|
+
const pattern = this.patterns.get(id);
|
|
92
107
|
if (pattern) {
|
|
93
108
|
return pattern.position;
|
|
94
109
|
}
|
|
@@ -102,7 +117,7 @@ class ImageManager {
|
|
|
102
117
|
const h = image.data.height + padding * 2;
|
|
103
118
|
const bin = { w, h, x: 0, y: 0 };
|
|
104
119
|
const position = new ImagePosition(bin, image);
|
|
105
|
-
this.patterns
|
|
120
|
+
this.patterns.set(id, { bin, position });
|
|
106
121
|
this._updatePatternAtlas();
|
|
107
122
|
|
|
108
123
|
return position;
|
|
@@ -122,8 +137,8 @@ class ImageManager {
|
|
|
122
137
|
|
|
123
138
|
_updatePatternAtlas() {
|
|
124
139
|
const bins = [];
|
|
125
|
-
for (const
|
|
126
|
-
bins.push(
|
|
140
|
+
for (const { bin } of this.patterns.values()) {
|
|
141
|
+
bins.push(bin);
|
|
127
142
|
}
|
|
128
143
|
|
|
129
144
|
const { w, h } = potpack(bins);
|
|
@@ -131,11 +146,10 @@ class ImageManager {
|
|
|
131
146
|
const dst = this.atlasImage;
|
|
132
147
|
dst.resize({ width: w ?? 1, height: h ?? 1 });
|
|
133
148
|
|
|
134
|
-
for (const id
|
|
135
|
-
const { bin } = this.patterns[id];
|
|
149
|
+
for (const [id, { bin }] of this.patterns) {
|
|
136
150
|
const x = bin.x + padding;
|
|
137
151
|
const y = bin.y + padding;
|
|
138
|
-
const src = this.images
|
|
152
|
+
const src = this.images.get(id).data;
|
|
139
153
|
const w = src.width;
|
|
140
154
|
const h = src.height;
|
|
141
155
|
|
package/src/render/painter.js
CHANGED
|
@@ -83,8 +83,8 @@ class Painter {
|
|
|
83
83
|
this.context.viewport.set([0, 0, this.width, this.height]);
|
|
84
84
|
|
|
85
85
|
if (this.style) {
|
|
86
|
-
for (const
|
|
87
|
-
|
|
86
|
+
for (const layer of this.style._layers.values()) {
|
|
87
|
+
layer.resize();
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
90
|
|
|
@@ -284,8 +284,7 @@ class Painter {
|
|
|
284
284
|
|
|
285
285
|
this.symbolFadeChange = style.placement.symbolFadeChange(browser.now());
|
|
286
286
|
|
|
287
|
-
const
|
|
288
|
-
const sourceCaches = this.style.sourceCaches;
|
|
287
|
+
const sourceCaches = style._sources;
|
|
289
288
|
|
|
290
289
|
for (const id in sourceCaches) {
|
|
291
290
|
const sourceCache = sourceCaches[id];
|
|
@@ -314,10 +313,11 @@ class Painter {
|
|
|
314
313
|
updateTileMasks(visibleTiles, this.context);
|
|
315
314
|
}
|
|
316
315
|
|
|
316
|
+
const layers = Array.from(style._layers.values());
|
|
317
|
+
|
|
317
318
|
this.opaquePassCutoff = Number.POSITIVE_INFINITY;
|
|
318
|
-
for (let i = 0; i <
|
|
319
|
-
|
|
320
|
-
if (this.style._layers[layerId].is3D()) {
|
|
319
|
+
for (let i = 0; i < layers.length; i++) {
|
|
320
|
+
if (layers[i].is3D()) {
|
|
321
321
|
this.opaquePassCutoff = i;
|
|
322
322
|
break;
|
|
323
323
|
}
|
|
@@ -330,8 +330,7 @@ class Painter {
|
|
|
330
330
|
this.renderPass = 'offscreen';
|
|
331
331
|
this.depthRboNeedsClear = true;
|
|
332
332
|
|
|
333
|
-
for (const
|
|
334
|
-
const layer = this.style._layers[layerId];
|
|
333
|
+
for (const layer of layers) {
|
|
335
334
|
if (!layer.hasOffscreenPass() || layer.isHidden(this.transform.zoom)) continue;
|
|
336
335
|
|
|
337
336
|
const coords = coordsDescending[layer.source];
|
|
@@ -349,14 +348,14 @@ class Painter {
|
|
|
349
348
|
this.clearStencil();
|
|
350
349
|
|
|
351
350
|
this._showOverdrawInspector = options.showOverdrawInspector;
|
|
352
|
-
this.depthRangeFor3D = [0, 1 - (style.
|
|
351
|
+
this.depthRangeFor3D = [0, 1 - (style._layers.size + 2) * this.numSublayers * this.depthEpsilon];
|
|
353
352
|
|
|
354
353
|
// Opaque pass ===============================================
|
|
355
354
|
// Draw opaque layers top-to-bottom first.
|
|
356
355
|
this.renderPass = 'opaque';
|
|
357
356
|
|
|
358
|
-
for (this.currentLayer =
|
|
359
|
-
const layer =
|
|
357
|
+
for (this.currentLayer = layers.length - 1; this.currentLayer >= 0; this.currentLayer--) {
|
|
358
|
+
const layer = layers[this.currentLayer];
|
|
360
359
|
const sourceCache = sourceCaches[layer.source];
|
|
361
360
|
const coords = coordsAscending[layer.source];
|
|
362
361
|
|
|
@@ -368,8 +367,8 @@ class Painter {
|
|
|
368
367
|
// Draw all other layers bottom-to-top.
|
|
369
368
|
this.renderPass = 'translucent';
|
|
370
369
|
|
|
371
|
-
for (this.currentLayer = 0; this.currentLayer <
|
|
372
|
-
const layer =
|
|
370
|
+
for (this.currentLayer = 0; this.currentLayer < layers.length; this.currentLayer++) {
|
|
371
|
+
const layer = layers[this.currentLayer];
|
|
373
372
|
const sourceCache = sourceCaches[layer.source];
|
|
374
373
|
|
|
375
374
|
// For symbol layers in the translucent pass, we add extra tiles to the renderable set
|
|
@@ -14,7 +14,7 @@ const circleUniformValues = (painter, coord, tile, layer) => {
|
|
|
14
14
|
|
|
15
15
|
let pitchWithMap;
|
|
16
16
|
let extrudeScale;
|
|
17
|
-
if (layer.
|
|
17
|
+
if (layer._paint.get('circle-pitch-alignment') === 'map') {
|
|
18
18
|
const pixelRatio = pixelsToTileUnits(tile, 1, transform.zoom);
|
|
19
19
|
pitchWithMap = true;
|
|
20
20
|
extrudeScale = [pixelRatio, pixelRatio];
|
|
@@ -25,12 +25,12 @@ const circleUniformValues = (painter, coord, tile, layer) => {
|
|
|
25
25
|
|
|
26
26
|
return {
|
|
27
27
|
u_camera_to_center_distance: transform.cameraToCenterDistance,
|
|
28
|
-
u_scale_with_map: +(layer.
|
|
28
|
+
u_scale_with_map: +(layer._paint.get('circle-pitch-scale') === 'map'),
|
|
29
29
|
u_matrix: painter.translatePosMatrix(
|
|
30
30
|
coord.posMatrix,
|
|
31
31
|
tile,
|
|
32
|
-
layer.
|
|
33
|
-
layer.
|
|
32
|
+
layer._paint.get('circle-translate'),
|
|
33
|
+
layer._paint.get('circle-translate-anchor')
|
|
34
34
|
),
|
|
35
35
|
u_pitch_with_map: +pitchWithMap,
|
|
36
36
|
u_extrude_scale: extrudeScale
|
|
@@ -29,7 +29,7 @@ const fillExtrusionPatternUniforms = (context, locations) => ({
|
|
|
29
29
|
});
|
|
30
30
|
|
|
31
31
|
const fillExtrusionUniformValues = (matrix, painter, shouldUseVerticalGradient, opacity) => {
|
|
32
|
-
const light = painter.style.
|
|
32
|
+
const light = painter.style._light;
|
|
33
33
|
const _lp = light.properties.get('position');
|
|
34
34
|
const lightPos = [_lp.x, _lp.y, _lp.z];
|
|
35
35
|
const lightMat = mat3.create();
|
|
@@ -34,7 +34,7 @@ const heatmapTextureUniformValues = (painter, layer, textureUnit, colorRampUnit)
|
|
|
34
34
|
u_world: [gl.drawingBufferWidth, gl.drawingBufferHeight],
|
|
35
35
|
u_image: textureUnit,
|
|
36
36
|
u_color_ramp: colorRampUnit,
|
|
37
|
-
u_opacity: layer.
|
|
37
|
+
u_opacity: layer._paint.get('heatmap-opacity')
|
|
38
38
|
};
|
|
39
39
|
};
|
|
40
40
|
|
|
@@ -24,13 +24,13 @@ const hillshadePrepareUniforms = (context, locations) => ({
|
|
|
24
24
|
});
|
|
25
25
|
|
|
26
26
|
const hillshadeUniformValues = (painter, tile, layer) => {
|
|
27
|
-
const shadow = layer.
|
|
28
|
-
const highlight = layer.
|
|
29
|
-
const accent = layer.
|
|
27
|
+
const shadow = layer._paint.get('hillshade-shadow-color');
|
|
28
|
+
const highlight = layer._paint.get('hillshade-highlight-color');
|
|
29
|
+
const accent = layer._paint.get('hillshade-accent-color');
|
|
30
30
|
|
|
31
|
-
let azimuthal = layer.
|
|
31
|
+
let azimuthal = layer._paint.get('hillshade-illumination-direction') * (Math.PI / 180);
|
|
32
32
|
// modify azimuthal angle by map rotation if light is anchored at the viewport
|
|
33
|
-
if (layer.
|
|
33
|
+
if (layer._paint.get('hillshade-illumination-anchor') === 'viewport') {
|
|
34
34
|
azimuthal -= painter.transform.angle;
|
|
35
35
|
}
|
|
36
36
|
const align = !painter.options.moving;
|
|
@@ -38,7 +38,7 @@ const hillshadeUniformValues = (painter, tile, layer) => {
|
|
|
38
38
|
u_matrix: painter.transform.calculatePosMatrix(tile.tileID.toUnwrapped(), align),
|
|
39
39
|
u_image: 0,
|
|
40
40
|
u_latrange: getTileLatRange(painter, tile.tileID),
|
|
41
|
-
u_light: [layer.
|
|
41
|
+
u_light: [layer._paint.get('hillshade-exaggeration'), azimuthal],
|
|
42
42
|
u_shadow: shadow,
|
|
43
43
|
u_highlight: highlight,
|
|
44
44
|
u_accent: accent
|
|
@@ -75,7 +75,7 @@ const lineSDFUniformValues = (painter, tile, layer, dasharray, crossfade) => {
|
|
|
75
75
|
const lineAtlas = painter.lineAtlas;
|
|
76
76
|
const tileRatio = calculateTileRatio(tile, transform);
|
|
77
77
|
|
|
78
|
-
const round = layer.
|
|
78
|
+
const round = layer._layout.get('line-cap') === 'round';
|
|
79
79
|
|
|
80
80
|
const posA = lineAtlas.getDash(dasharray.from, round);
|
|
81
81
|
const posB = lineAtlas.getDash(dasharray.to, round);
|
|
@@ -102,8 +102,8 @@ function calculateMatrix(painter, tile, layer) {
|
|
|
102
102
|
return painter.translatePosMatrix(
|
|
103
103
|
tile.tileID.posMatrix,
|
|
104
104
|
tile,
|
|
105
|
-
layer.
|
|
106
|
-
layer.
|
|
105
|
+
layer._paint.get('line-translate'),
|
|
106
|
+
layer._paint.get('line-translate-anchor')
|
|
107
107
|
);
|
|
108
108
|
}
|
|
109
109
|
|
|
@@ -22,14 +22,14 @@ const rasterUniformValues = (matrix, parentTL, parentScaleBy, fade, layer) => ({
|
|
|
22
22
|
u_scale_parent: parentScaleBy,
|
|
23
23
|
u_buffer_scale: 1,
|
|
24
24
|
u_fade_t: fade.mix,
|
|
25
|
-
u_opacity: fade.opacity * layer.
|
|
25
|
+
u_opacity: fade.opacity * layer._paint.get('raster-opacity'),
|
|
26
26
|
u_image0: 0,
|
|
27
27
|
u_image1: 1,
|
|
28
|
-
u_brightness_low: layer.
|
|
29
|
-
u_brightness_high: layer.
|
|
30
|
-
u_saturation_factor: saturationFactor(layer.
|
|
31
|
-
u_contrast_factor: contrastFactor(layer.
|
|
32
|
-
u_spin_weights: spinWeights(layer.
|
|
28
|
+
u_brightness_low: layer._paint.get('raster-brightness-min'),
|
|
29
|
+
u_brightness_high: layer._paint.get('raster-brightness-max'),
|
|
30
|
+
u_saturation_factor: saturationFactor(layer._paint.get('raster-saturation')),
|
|
31
|
+
u_contrast_factor: contrastFactor(layer._paint.get('raster-contrast')),
|
|
32
|
+
u_spin_weights: spinWeights(layer._paint.get('raster-hue-rotate'))
|
|
33
33
|
});
|
|
34
34
|
|
|
35
35
|
function spinWeights(angle) {
|