@mapwhit/tilerenderer 0.52.1 → 1.1.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 +2 -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 +5 -4
- package/src/data/array_types.js +55 -117
- package/src/data/bucket/circle_attributes.js +2 -4
- package/src/data/bucket/circle_bucket.js +19 -16
- package/src/data/bucket/fill_attributes.js +2 -4
- package/src/data/bucket/fill_bucket.js +38 -27
- package/src/data/bucket/fill_extrusion_attributes.js +2 -4
- package/src/data/bucket/fill_extrusion_bucket.js +56 -37
- package/src/data/bucket/heatmap_bucket.js +2 -11
- package/src/data/bucket/line_attributes.js +2 -4
- package/src/data/bucket/line_bucket.js +208 -163
- package/src/data/bucket/pattern_attributes.js +2 -4
- package/src/data/bucket/pattern_bucket_features.js +7 -9
- package/src/data/bucket/symbol_attributes.js +12 -26
- package/src/data/bucket/symbol_bucket.js +174 -323
- package/src/data/bucket/symbol_buffers.js +62 -0
- package/src/data/bucket/symbol_collision_buffers.js +33 -0
- package/src/data/bucket.js +26 -25
- package/src/data/dem_data.js +11 -10
- package/src/data/extent.js +1 -1
- package/src/data/feature_index.js +38 -28
- package/src/data/index_array_type.js +1 -6
- package/src/data/load_geometry.js +6 -9
- package/src/data/pos_attributes.js +2 -3
- package/src/data/program_configuration.js +47 -38
- package/src/data/raster_bounds_attributes.js +2 -2
- package/src/data/segment.js +4 -7
- package/src/geo/coordinate.js +1 -1
- package/src/geo/lng_lat.js +3 -3
- package/src/geo/lng_lat_bounds.js +8 -4
- package/src/geo/transform.js +69 -30
- package/src/gl/color_mode.js +2 -2
- package/src/gl/context.js +28 -29
- package/src/gl/cull_face_mode.js +1 -1
- package/src/gl/depth_mode.js +1 -1
- package/src/gl/framebuffer.js +8 -4
- package/src/gl/index_buffer.js +2 -2
- package/src/gl/stencil_mode.js +1 -1
- package/src/gl/value.js +33 -68
- package/src/gl/vertex_buffer.js +2 -2
- package/src/index.js +49 -25
- package/src/render/draw_background.js +17 -12
- package/src/render/draw_circle.js +15 -12
- package/src/render/draw_collision_debug.js +11 -8
- package/src/render/draw_debug.js +16 -14
- package/src/render/draw_fill.js +27 -20
- package/src/render/draw_fill_extrusion.js +20 -17
- package/src/render/draw_heatmap.js +21 -16
- package/src/render/draw_hillshade.js +12 -9
- package/src/render/draw_line.js +36 -22
- package/src/render/draw_raster.js +22 -18
- package/src/render/draw_symbol.js +38 -33
- package/src/render/glyph_atlas.js +9 -8
- package/src/render/glyph_manager.js +2 -3
- package/src/render/image_atlas.js +4 -11
- package/src/render/image_manager.js +39 -28
- package/src/render/line_atlas.js +2 -2
- package/src/render/painter.js +78 -61
- package/src/render/program/background_program.js +6 -13
- package/src/render/program/circle_program.js +8 -10
- package/src/render/program/clipping_mask_program.js +3 -5
- package/src/render/program/collision_program.js +4 -6
- package/src/render/program/debug_program.js +3 -5
- package/src/render/program/fill_extrusion_program.js +9 -15
- package/src/render/program/fill_program.js +10 -21
- package/src/render/program/heatmap_program.js +9 -15
- package/src/render/program/hillshade_program.js +16 -22
- package/src/render/program/line_program.js +14 -25
- package/src/render/program/pattern.js +5 -7
- package/src/render/program/program_uniforms.js +13 -20
- package/src/render/program/raster_program.js +9 -11
- package/src/render/program/symbol_program.js +5 -7
- package/src/render/program.js +5 -6
- package/src/render/texture.js +1 -1
- package/src/render/tile_mask.js +6 -4
- package/src/render/uniform_binding.js +9 -20
- package/src/render/vertex_array_object.js +5 -3
- package/src/shaders/encode_attribute.js +2 -6
- package/src/shaders/index.js +103 -51
- package/src/source/geojson_source.js +25 -30
- package/src/source/geojson_worker_source.js +46 -74
- package/src/source/geojson_wrapper.js +13 -5
- package/src/source/image_source.js +17 -28
- package/src/source/load_tilejson.js +3 -3
- package/src/source/pixels_to_tile_units.js +3 -3
- package/src/source/query_features.js +17 -15
- package/src/source/raster_dem_tile_source.js +54 -71
- package/src/source/raster_tile_source.js +14 -15
- package/src/source/resources/glyphs.js +4 -5
- package/src/source/resources/index.js +4 -12
- package/src/source/rtl_text_plugin.js +62 -35
- package/src/source/source.js +14 -22
- package/src/source/source_cache.js +221 -179
- package/src/source/source_state.js +125 -13
- package/src/source/tile.js +67 -66
- package/src/source/tile_bounds.js +36 -29
- package/src/source/tile_cache.js +2 -2
- package/src/source/tile_id.js +30 -26
- package/src/source/vector_tile_source.js +23 -21
- package/src/source/vector_tile_worker_source.js +22 -26
- package/src/source/worker_tile.js +139 -134
- package/src/style/create_style_layer.js +11 -11
- package/src/style/evaluation_parameters.js +4 -6
- package/src/style/light.js +5 -5
- package/src/style/load_sprite.js +6 -6
- package/src/style/parse_glyph_pbf.js +21 -17
- package/src/style/pauseable_placement.js +7 -9
- package/src/style/properties.js +21 -51
- package/src/style/query_utils.js +7 -13
- package/src/style/style.js +314 -221
- package/src/style/style_layer/background_style_layer.js +3 -4
- package/src/style/style_layer/background_style_layer_properties.js +2 -2
- package/src/style/style_layer/circle_style_layer.js +25 -20
- package/src/style/style_layer/circle_style_layer_properties.js +2 -2
- package/src/style/style_layer/fill_extrusion_style_layer.js +55 -37
- package/src/style/style_layer/fill_extrusion_style_layer_properties.js +2 -2
- package/src/style/style_layer/fill_style_layer.js +11 -12
- package/src/style/style_layer/fill_style_layer_properties.js +2 -2
- package/src/style/style_layer/heatmap_style_layer.js +6 -7
- package/src/style/style_layer/heatmap_style_layer_properties.js +2 -2
- package/src/style/style_layer/hillshade_style_layer.js +4 -5
- package/src/style/style_layer/hillshade_style_layer_properties.js +2 -2
- package/src/style/style_layer/line_style_layer.js +33 -30
- package/src/style/style_layer/line_style_layer_properties.js +5 -5
- package/src/style/style_layer/raster_style_layer.js +3 -4
- package/src/style/style_layer/raster_style_layer_properties.js +2 -2
- package/src/style/style_layer/symbol_style_layer.js +20 -21
- package/src/style/style_layer/symbol_style_layer_properties.js +2 -2
- package/src/style/style_layer.js +66 -47
- package/src/style/style_layer_index.js +17 -42
- package/src/style/zoom_history.js +1 -1
- package/src/style-spec/error/parsing_error.js +1 -1
- package/src/style-spec/error/validation_error.js +5 -3
- package/src/style-spec/feature_filter/convert.js +17 -9
- package/src/style-spec/feature_filter/index.js +13 -9
- package/src/style-spec/util/eval_support.js +2 -2
- package/src/style-spec/util/ref_properties.js +1 -1
- package/src/symbol/anchor.js +2 -6
- package/src/symbol/check_max_angle.js +13 -5
- package/src/symbol/clip_line.js +2 -3
- package/src/symbol/collision_feature.js +8 -4
- package/src/symbol/collision_index.js +5 -7
- package/src/symbol/cross_tile_symbol_index.js +7 -10
- package/src/symbol/get_anchors.js +15 -8
- package/src/symbol/grid_index.js +5 -3
- package/src/symbol/mergelines.js +2 -2
- package/src/symbol/opacity_state.js +1 -5
- package/src/symbol/placement.js +28 -23
- package/src/symbol/projection.js +29 -28
- package/src/symbol/quads.js +14 -16
- package/src/symbol/shaping.js +27 -19
- package/src/symbol/symbol_layout.js +24 -28
- package/src/symbol/symbol_size.js +13 -12
- package/src/symbol/transform_text.js +4 -4
- package/src/ui/camera.js +34 -18
- package/src/ui/map.js +102 -44
- package/src/util/async.js +11 -5
- package/src/util/browser.js +1 -1
- package/src/util/callback.js +3 -9
- package/src/util/classify_rings.js +13 -8
- package/src/util/color_ramp.js +3 -3
- package/src/util/config.js +4 -4
- package/src/util/dictionary_coder.js +2 -3
- package/src/util/dom.js +7 -3
- package/src/util/find_pole_of_inaccessibility.js +29 -14
- package/src/util/group_layers.js +41 -0
- package/src/util/image.js +3 -13
- package/src/util/interpolate.js +1 -1
- package/src/util/intersection_tests.js +80 -42
- package/src/util/is_char_in_unicode_block.js +1 -1
- package/src/util/key.js +25 -0
- package/src/util/loader/image.js +1 -1
- package/src/util/object.js +33 -76
- package/src/util/script_detection.js +212 -91
- package/src/util/struct_array.js +8 -40
- package/src/util/task_queue.js +11 -7
- package/src/util/throttle.js +2 -2
- package/src/util/tile_cover.js +8 -5
- package/src/util/token.js +1 -1
- package/src/util/unique_id.js +2 -2
- package/src/util/util.js +21 -29
- package/src/util/vectortile_to_geojson.js +4 -2
- package/src/util/verticalize_punctuation.js +3 -7
- package/src/util/warn.js +4 -4
- package/src/util/web_worker.js +3 -3
- 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
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
module.exports = draw;
|
|
1
|
+
import ColorMode from '../gl/color_mode.js';
|
|
2
|
+
import CullFaceMode from '../gl/cull_face_mode.js';
|
|
3
|
+
import DepthMode from '../gl/depth_mode.js';
|
|
4
|
+
import StencilMode from '../gl/stencil_mode.js';
|
|
5
|
+
import { fillExtrusionPatternUniformValues, fillExtrusionUniformValues } from './program/fill_extrusion_program.js';
|
|
6
|
+
export default draw;
|
|
8
7
|
|
|
9
8
|
function draw(painter, source, layer, coords) {
|
|
10
|
-
const opacity = layer.
|
|
9
|
+
const opacity = layer._paint.get('fill-extrusion-opacity');
|
|
11
10
|
if (opacity === 0) {
|
|
12
11
|
return;
|
|
13
12
|
}
|
|
@@ -15,7 +14,7 @@ function draw(painter, source, layer, coords) {
|
|
|
15
14
|
if (painter.renderPass === 'translucent') {
|
|
16
15
|
const depthMode = new DepthMode(painter.context.gl.LEQUAL, DepthMode.ReadWrite, painter.depthRangeFor3D);
|
|
17
16
|
|
|
18
|
-
if (opacity === 1 && !layer.
|
|
17
|
+
if (opacity === 1 && !layer._paint.get('fill-extrusion-pattern').constantOr(1)) {
|
|
19
18
|
const colorMode = painter.colorModeForRenderPass();
|
|
20
19
|
drawExtrusionTiles(painter, source, layer, coords, depthMode, StencilMode.disabled, colorMode);
|
|
21
20
|
} else {
|
|
@@ -43,15 +42,17 @@ function drawExtrusionTiles(painter, source, layer, coords, depthMode, stencilMo
|
|
|
43
42
|
const context = painter.context;
|
|
44
43
|
const gl = context.gl;
|
|
45
44
|
|
|
46
|
-
const patternProperty = layer.
|
|
45
|
+
const patternProperty = layer._paint.get('fill-extrusion-pattern');
|
|
47
46
|
const image = patternProperty.constantOr(1);
|
|
48
47
|
const crossfade = layer.getCrossfadeParameters();
|
|
49
|
-
const opacity = layer.
|
|
48
|
+
const opacity = layer._paint.get('fill-extrusion-opacity');
|
|
50
49
|
|
|
51
50
|
for (const coord of coords) {
|
|
52
51
|
const tile = source.getTile(coord);
|
|
53
52
|
const bucket = tile.getBucket(layer);
|
|
54
|
-
if (!bucket)
|
|
53
|
+
if (!bucket) {
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
55
56
|
|
|
56
57
|
const programConfiguration = bucket.programConfigurations.get(layer.id);
|
|
57
58
|
const program = painter.useProgram(image ? 'fillExtrusionPattern' : 'fillExtrusion', programConfiguration);
|
|
@@ -66,17 +67,19 @@ function drawExtrusionTiles(painter, source, layer, coords, depthMode, stencilMo
|
|
|
66
67
|
if (constantPattern && tile.imageAtlas) {
|
|
67
68
|
const posTo = tile.imageAtlas.patternPositions[constantPattern.to];
|
|
68
69
|
const posFrom = tile.imageAtlas.patternPositions[constantPattern.from];
|
|
69
|
-
if (posTo && posFrom)
|
|
70
|
+
if (posTo && posFrom) {
|
|
71
|
+
programConfiguration.setConstantPatternPositions(posTo, posFrom);
|
|
72
|
+
}
|
|
70
73
|
}
|
|
71
74
|
|
|
72
75
|
const matrix = painter.translatePosMatrix(
|
|
73
76
|
coord.posMatrix,
|
|
74
77
|
tile,
|
|
75
|
-
layer.
|
|
76
|
-
layer.
|
|
78
|
+
layer._paint.get('fill-extrusion-translate'),
|
|
79
|
+
layer._paint.get('fill-extrusion-translate-anchor')
|
|
77
80
|
);
|
|
78
81
|
|
|
79
|
-
const shouldUseVerticalGradient = layer.
|
|
82
|
+
const shouldUseVerticalGradient = layer._paint.get('fill-extrusion-vertical-gradient');
|
|
80
83
|
const uniformValues = image
|
|
81
84
|
? fillExtrusionPatternUniformValues(matrix, painter, shouldUseVerticalGradient, opacity, coord, crossfade, tile)
|
|
82
85
|
: fillExtrusionUniformValues(matrix, painter, shouldUseVerticalGradient, opacity);
|
|
@@ -93,7 +96,7 @@ function drawExtrusionTiles(painter, source, layer, coords, depthMode, stencilMo
|
|
|
93
96
|
bucket.layoutVertexBuffer,
|
|
94
97
|
bucket.indexBuffer,
|
|
95
98
|
bucket.segments,
|
|
96
|
-
layer.
|
|
99
|
+
layer._paint,
|
|
97
100
|
painter.transform.zoom,
|
|
98
101
|
programConfiguration
|
|
99
102
|
);
|
|
@@ -1,15 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
module.exports = drawHeatmap;
|
|
1
|
+
import { Color } from '@mapwhit/style-expressions';
|
|
2
|
+
import ColorMode from '../gl/color_mode.js';
|
|
3
|
+
import CullFaceMode from '../gl/cull_face_mode.js';
|
|
4
|
+
import DepthMode from '../gl/depth_mode.js';
|
|
5
|
+
import StencilMode from '../gl/stencil_mode.js';
|
|
6
|
+
import { heatmapTextureUniformValues, heatmapUniformValues } from './program/heatmap_program.js';
|
|
7
|
+
import Texture from './texture.js';
|
|
8
|
+
export default drawHeatmap;
|
|
10
9
|
|
|
11
10
|
function drawHeatmap(painter, sourceCache, layer, coords) {
|
|
12
|
-
if (layer.
|
|
11
|
+
if (layer._paint.get('heatmap-opacity') === 0) {
|
|
13
12
|
return;
|
|
14
13
|
}
|
|
15
14
|
|
|
@@ -34,11 +33,15 @@ function drawHeatmap(painter, sourceCache, layer, coords) {
|
|
|
34
33
|
// Skip tiles that have uncovered parents to avoid flickering; we don't need
|
|
35
34
|
// to use complex tile masking here because the change between zoom levels is subtle,
|
|
36
35
|
// so it's fine to simply render the parent until all its 4 children are loaded
|
|
37
|
-
if (sourceCache.hasRenderableParent(coord))
|
|
36
|
+
if (sourceCache.hasRenderableParent(coord)) {
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
38
39
|
|
|
39
40
|
const tile = sourceCache.getTile(coord);
|
|
40
41
|
const bucket = tile.getBucket(layer);
|
|
41
|
-
if (!bucket)
|
|
42
|
+
if (!bucket) {
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
42
45
|
|
|
43
46
|
const programConfiguration = bucket.programConfigurations.get(layer.id);
|
|
44
47
|
const program = painter.useProgram('heatmap', programConfiguration);
|
|
@@ -51,12 +54,12 @@ function drawHeatmap(painter, sourceCache, layer, coords) {
|
|
|
51
54
|
stencilMode,
|
|
52
55
|
colorMode,
|
|
53
56
|
CullFaceMode.disabled,
|
|
54
|
-
heatmapUniformValues(coord.posMatrix, tile, zoom, layer.
|
|
57
|
+
heatmapUniformValues(coord.posMatrix, tile, zoom, layer._paint.get('heatmap-intensity')),
|
|
55
58
|
layer.id,
|
|
56
59
|
bucket.layoutVertexBuffer,
|
|
57
60
|
bucket.indexBuffer,
|
|
58
61
|
bucket.segments,
|
|
59
|
-
layer.
|
|
62
|
+
layer._paint,
|
|
60
63
|
painter.transform.zoom,
|
|
61
64
|
programConfiguration
|
|
62
65
|
);
|
|
@@ -128,7 +131,9 @@ function renderTextureToMap(painter, layer) {
|
|
|
128
131
|
// heatmaps: the kernel texture, prepared in the offscreen pass, and a
|
|
129
132
|
// color ramp texture.
|
|
130
133
|
const fbo = layer.heatmapFbo;
|
|
131
|
-
if (!fbo)
|
|
134
|
+
if (!fbo) {
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
132
137
|
context.activeTexture.set(gl.TEXTURE0);
|
|
133
138
|
gl.bindTexture(gl.TEXTURE_2D, fbo.colorAttachment.get());
|
|
134
139
|
|
|
@@ -153,7 +158,7 @@ function renderTextureToMap(painter, layer) {
|
|
|
153
158
|
painter.viewportBuffer,
|
|
154
159
|
painter.quadTriangleIndexBuffer,
|
|
155
160
|
painter.viewportSegments,
|
|
156
|
-
layer.
|
|
161
|
+
layer._paint,
|
|
157
162
|
painter.transform.zoom
|
|
158
163
|
);
|
|
159
164
|
}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
module.exports = drawHillshade;
|
|
1
|
+
import CullFaceMode from '../gl/cull_face_mode.js';
|
|
2
|
+
import DepthMode from '../gl/depth_mode.js';
|
|
3
|
+
import StencilMode from '../gl/stencil_mode.js';
|
|
4
|
+
import { hillshadeUniformPrepareValues, hillshadeUniformValues } from './program/hillshade_program.js';
|
|
5
|
+
import Texture from './texture.js';
|
|
6
|
+
export default drawHillshade;
|
|
8
7
|
|
|
9
8
|
function drawHillshade(painter, sourceCache, layer, tileIDs) {
|
|
10
|
-
if (painter.renderPass !== 'offscreen' && painter.renderPass !== 'translucent')
|
|
9
|
+
if (painter.renderPass !== 'offscreen' && painter.renderPass !== 'translucent') {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
11
12
|
|
|
12
13
|
const context = painter.context;
|
|
13
14
|
const sourceMaxZoom = sourceCache.getSource().maxzoom;
|
|
@@ -32,7 +33,9 @@ function renderHillshade(painter, tile, layer, depthMode, stencilMode, colorMode
|
|
|
32
33
|
const context = painter.context;
|
|
33
34
|
const gl = context.gl;
|
|
34
35
|
const fbo = tile.fbo;
|
|
35
|
-
if (!fbo)
|
|
36
|
+
if (!fbo) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
36
39
|
|
|
37
40
|
const program = painter.useProgram('hillshade');
|
|
38
41
|
|
package/src/render/draw_line.js
CHANGED
|
@@ -1,27 +1,31 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
lineUniformValues,
|
|
1
|
+
import CullFaceMode from '../gl/cull_face_mode.js';
|
|
2
|
+
import DepthMode from '../gl/depth_mode.js';
|
|
3
|
+
import {
|
|
4
|
+
lineGradientUniformValues,
|
|
6
5
|
linePatternUniformValues,
|
|
7
6
|
lineSDFUniformValues,
|
|
8
|
-
|
|
9
|
-
}
|
|
7
|
+
lineUniformValues
|
|
8
|
+
} from './program/line_program.js';
|
|
9
|
+
import Texture from './texture.js';
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
if (painter.renderPass !== 'translucent')
|
|
11
|
+
export default function drawLine(painter, sourceCache, layer, coords) {
|
|
12
|
+
if (painter.renderPass !== 'translucent') {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
13
15
|
|
|
14
|
-
const opacity = layer.
|
|
15
|
-
const width = layer.
|
|
16
|
-
if (opacity.constantOr(1) === 0 || width.constantOr(1) === 0)
|
|
16
|
+
const opacity = layer._paint.get('line-opacity');
|
|
17
|
+
const width = layer._paint.get('line-width');
|
|
18
|
+
if (opacity.constantOr(1) === 0 || width.constantOr(1) === 0) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
17
21
|
|
|
18
22
|
const depthMode = painter.depthModeForSublayer(0, DepthMode.ReadOnly);
|
|
19
23
|
const colorMode = painter.colorModeForRenderPass();
|
|
20
24
|
|
|
21
|
-
const dasharray = layer.
|
|
22
|
-
const patternProperty = layer.
|
|
25
|
+
const dasharray = layer._paint.get('line-dasharray');
|
|
26
|
+
const patternProperty = layer._paint.get('line-pattern');
|
|
23
27
|
const image = patternProperty.constantOr(1);
|
|
24
|
-
const gradient = layer.
|
|
28
|
+
const gradient = layer._paint.get('line-gradient');
|
|
25
29
|
const crossfade = layer.getCrossfadeParameters();
|
|
26
30
|
|
|
27
31
|
const programId = dasharray ? 'lineSDF' : image ? 'linePattern' : gradient ? 'lineGradient' : 'line';
|
|
@@ -35,18 +39,26 @@ module.exports = function drawLine(painter, sourceCache, layer, coords) {
|
|
|
35
39
|
context.activeTexture.set(gl.TEXTURE0);
|
|
36
40
|
|
|
37
41
|
let gradientTexture = layer.gradientTexture;
|
|
38
|
-
if (!layer.gradient)
|
|
39
|
-
|
|
42
|
+
if (!layer.gradient) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (!gradientTexture) {
|
|
46
|
+
gradientTexture = layer.gradientTexture = new Texture(context, layer.gradient, gl.RGBA);
|
|
47
|
+
}
|
|
40
48
|
gradientTexture.bind(gl.LINEAR, gl.CLAMP_TO_EDGE);
|
|
41
49
|
}
|
|
42
50
|
|
|
43
51
|
for (const coord of coords) {
|
|
44
52
|
const tile = sourceCache.getTile(coord);
|
|
45
53
|
|
|
46
|
-
if (image && !tile.patternsLoaded())
|
|
54
|
+
if (image && !tile.patternsLoaded()) {
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
47
57
|
|
|
48
58
|
const bucket = tile.getBucket(layer);
|
|
49
|
-
if (!bucket)
|
|
59
|
+
if (!bucket) {
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
50
62
|
|
|
51
63
|
const programConfiguration = bucket.programConfigurations.get(layer.id);
|
|
52
64
|
const prevProgram = painter.context.program.get();
|
|
@@ -57,7 +69,9 @@ module.exports = function drawLine(painter, sourceCache, layer, coords) {
|
|
|
57
69
|
if (constantPattern && tile.imageAtlas) {
|
|
58
70
|
const posTo = tile.imageAtlas.patternPositions[constantPattern.to];
|
|
59
71
|
const posFrom = tile.imageAtlas.patternPositions[constantPattern.from];
|
|
60
|
-
if (posTo && posFrom)
|
|
72
|
+
if (posTo && posFrom) {
|
|
73
|
+
programConfiguration.setConstantPatternPositions(posTo, posFrom);
|
|
74
|
+
}
|
|
61
75
|
}
|
|
62
76
|
|
|
63
77
|
const uniformValues = dasharray
|
|
@@ -88,7 +102,7 @@ module.exports = function drawLine(painter, sourceCache, layer, coords) {
|
|
|
88
102
|
bucket.layoutVertexBuffer,
|
|
89
103
|
bucket.indexBuffer,
|
|
90
104
|
bucket.segments,
|
|
91
|
-
layer.
|
|
105
|
+
layer._paint,
|
|
92
106
|
painter.transform.zoom,
|
|
93
107
|
programConfiguration
|
|
94
108
|
);
|
|
@@ -96,4 +110,4 @@ module.exports = function drawLine(painter, sourceCache, layer, coords) {
|
|
|
96
110
|
firstTile = false;
|
|
97
111
|
// once refactored so that bound texture state is managed, we'll also be able to remove this firstTile/programChanged logic
|
|
98
112
|
}
|
|
99
|
-
}
|
|
113
|
+
}
|
|
@@ -1,17 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
module.exports = drawRaster;
|
|
1
|
+
import CullFaceMode from '../gl/cull_face_mode.js';
|
|
2
|
+
import DepthMode from '../gl/depth_mode.js';
|
|
3
|
+
import StencilMode from '../gl/stencil_mode.js';
|
|
4
|
+
import ImageSource from '../source/image_source.js';
|
|
5
|
+
import browser from '../util/browser.js';
|
|
6
|
+
import { clamp } from '../util/util.js';
|
|
7
|
+
import { rasterUniformValues } from './program/raster_program.js';
|
|
8
|
+
export default drawRaster;
|
|
11
9
|
|
|
12
10
|
function drawRaster(painter, sourceCache, layer, coords) {
|
|
13
|
-
if (painter.renderPass !== 'translucent')
|
|
14
|
-
|
|
11
|
+
if (painter.renderPass !== 'translucent') {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
if (layer._paint.get('raster-opacity') === 0) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
15
17
|
|
|
16
18
|
const context = painter.context;
|
|
17
19
|
const gl = context.gl;
|
|
@@ -27,14 +29,14 @@ function drawRaster(painter, sourceCache, layer, coords) {
|
|
|
27
29
|
// Use gl.LESS to prevent double drawing in areas where tiles overlap.
|
|
28
30
|
const depthMode = painter.depthModeForSublayer(
|
|
29
31
|
coord.overscaledZ - minTileZ,
|
|
30
|
-
layer.
|
|
32
|
+
layer._paint.get('raster-opacity') === 1 ? DepthMode.ReadWrite : DepthMode.ReadOnly,
|
|
31
33
|
gl.LESS
|
|
32
34
|
);
|
|
33
35
|
|
|
34
36
|
const tile = sourceCache.getTile(coord);
|
|
35
37
|
const posMatrix = painter.transform.calculatePosMatrix(coord.toUnwrapped(), align);
|
|
36
38
|
|
|
37
|
-
tile.registerFadeDuration(layer.
|
|
39
|
+
tile.registerFadeDuration(layer._paint.get('raster-fade-duration'));
|
|
38
40
|
|
|
39
41
|
const parentTile = sourceCache.findLoadedParent(coord, 0);
|
|
40
42
|
const fade = getFadeValues(tile, parentTile, sourceCache, layer, painter.transform);
|
|
@@ -42,7 +44,7 @@ function drawRaster(painter, sourceCache, layer, coords) {
|
|
|
42
44
|
let parentScaleBy;
|
|
43
45
|
let parentTL;
|
|
44
46
|
|
|
45
|
-
const textureFilter = layer.
|
|
47
|
+
const textureFilter = layer._paint.get('raster-resampling') === 'nearest' ? gl.NEAREST : gl.LINEAR;
|
|
46
48
|
|
|
47
49
|
context.activeTexture.set(gl.TEXTURE0);
|
|
48
50
|
tile.texture.bind(textureFilter, gl.CLAMP_TO_EDGE, gl.LINEAR_MIPMAP_NEAREST);
|
|
@@ -86,7 +88,7 @@ function drawRaster(painter, sourceCache, layer, coords) {
|
|
|
86
88
|
tile.maskedBoundsBuffer,
|
|
87
89
|
tile.maskedIndexBuffer,
|
|
88
90
|
tile.segments,
|
|
89
|
-
layer.
|
|
91
|
+
layer._paint,
|
|
90
92
|
painter.transform.zoom
|
|
91
93
|
);
|
|
92
94
|
} else {
|
|
@@ -108,7 +110,7 @@ function drawRaster(painter, sourceCache, layer, coords) {
|
|
|
108
110
|
}
|
|
109
111
|
|
|
110
112
|
function getFadeValues(tile, parentTile, sourceCache, layer, transform) {
|
|
111
|
-
const fadeDuration = layer.
|
|
113
|
+
const fadeDuration = layer._paint.get('raster-fade-duration');
|
|
112
114
|
|
|
113
115
|
if (fadeDuration > 0) {
|
|
114
116
|
const now = browser.now();
|
|
@@ -131,7 +133,9 @@ function getFadeValues(tile, parentTile, sourceCache, layer, transform) {
|
|
|
131
133
|
// once they're old enough to pass the crossfading threshold
|
|
132
134
|
// (fadeDuration), unset the `refreshedUponExpiration` flag so we don't
|
|
133
135
|
// incorrectly fail to crossfade them when zooming
|
|
134
|
-
if (tile.refreshedUponExpiration && sinceTile >= 1)
|
|
136
|
+
if (tile.refreshedUponExpiration && sinceTile >= 1) {
|
|
137
|
+
tile.refreshedUponExpiration = false;
|
|
138
|
+
}
|
|
135
139
|
|
|
136
140
|
if (parentTile) {
|
|
137
141
|
return {
|
|
@@ -1,55 +1,56 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import glMatrix from '@mapbox/gl-matrix';
|
|
2
|
+
import CullFaceMode from '../gl/cull_face_mode.js';
|
|
3
|
+
import DepthMode from '../gl/depth_mode.js';
|
|
4
|
+
import StencilMode from '../gl/stencil_mode.js';
|
|
5
|
+
import pixelsToTileUnits from '../source/pixels_to_tile_units.js';
|
|
6
|
+
import properties from '../style/style_layer/symbol_style_layer_properties.js';
|
|
7
|
+
import * as symbolProjection from '../symbol/projection.js';
|
|
8
|
+
import * as symbolSize from '../symbol/symbol_size.js';
|
|
9
|
+
import drawCollisionDebug from './draw_collision_debug.js';
|
|
10
|
+
import { symbolIconUniformValues, symbolSDFUniformValues } from './program/symbol_program.js';
|
|
11
|
+
|
|
12
|
+
const { mat4 } = glMatrix;
|
|
7
13
|
const identityMat4 = mat4.identity(new Float32Array(16));
|
|
8
|
-
const properties = require('../style/style_layer/symbol_style_layer_properties');
|
|
9
14
|
const symbolLayoutProperties = properties.layout;
|
|
10
|
-
const StencilMode = require('../gl/stencil_mode');
|
|
11
|
-
const DepthMode = require('../gl/depth_mode');
|
|
12
|
-
const CullFaceMode = require('../gl/cull_face_mode');
|
|
13
|
-
const { symbolIconUniformValues, symbolSDFUniformValues } = require('./program/symbol_program');
|
|
14
|
-
|
|
15
|
-
module.exports = drawSymbols;
|
|
16
15
|
|
|
17
|
-
function drawSymbols(painter, sourceCache, layer, coords) {
|
|
18
|
-
if (painter.renderPass !== 'translucent')
|
|
16
|
+
export default function drawSymbols(painter, sourceCache, layer, coords) {
|
|
17
|
+
if (painter.renderPass !== 'translucent') {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
19
20
|
|
|
20
21
|
// Disable the stencil test so that labels aren't clipped to tile boundaries.
|
|
21
22
|
const stencilMode = StencilMode.disabled;
|
|
22
23
|
const colorMode = painter.colorModeForRenderPass();
|
|
23
24
|
|
|
24
|
-
if (layer.
|
|
25
|
+
if (layer._paint.get('icon-opacity').constantOr(1) !== 0) {
|
|
25
26
|
drawLayerSymbols(
|
|
26
27
|
painter,
|
|
27
28
|
sourceCache,
|
|
28
29
|
layer,
|
|
29
30
|
coords,
|
|
30
31
|
false,
|
|
31
|
-
layer.
|
|
32
|
-
layer.
|
|
33
|
-
layer.
|
|
34
|
-
layer.
|
|
35
|
-
layer.
|
|
32
|
+
layer._paint.get('icon-translate'),
|
|
33
|
+
layer._paint.get('icon-translate-anchor'),
|
|
34
|
+
layer._layout.get('icon-rotation-alignment'),
|
|
35
|
+
layer._layout.get('icon-pitch-alignment'),
|
|
36
|
+
layer._layout.get('icon-keep-upright'),
|
|
36
37
|
stencilMode,
|
|
37
38
|
colorMode
|
|
38
39
|
);
|
|
39
40
|
}
|
|
40
41
|
|
|
41
|
-
if (layer.
|
|
42
|
+
if (layer._paint.get('text-opacity').constantOr(1) !== 0) {
|
|
42
43
|
drawLayerSymbols(
|
|
43
44
|
painter,
|
|
44
45
|
sourceCache,
|
|
45
46
|
layer,
|
|
46
47
|
coords,
|
|
47
48
|
true,
|
|
48
|
-
layer.
|
|
49
|
-
layer.
|
|
50
|
-
layer.
|
|
51
|
-
layer.
|
|
52
|
-
layer.
|
|
49
|
+
layer._paint.get('text-translate'),
|
|
50
|
+
layer._paint.get('text-translate-anchor'),
|
|
51
|
+
layer._layout.get('text-rotation-alignment'),
|
|
52
|
+
layer._layout.get('text-pitch-alignment'),
|
|
53
|
+
layer._layout.get('text-keep-upright'),
|
|
53
54
|
stencilMode,
|
|
54
55
|
colorMode
|
|
55
56
|
);
|
|
@@ -80,7 +81,7 @@ function drawLayerSymbols(
|
|
|
80
81
|
|
|
81
82
|
const rotateWithMap = rotationAlignment === 'map';
|
|
82
83
|
const pitchWithMap = pitchAlignment === 'map';
|
|
83
|
-
const alongLine = rotateWithMap && layer.
|
|
84
|
+
const alongLine = rotateWithMap && layer._layout.get('symbol-placement') !== 'point';
|
|
84
85
|
// Line label rotation happens in `updateLineLabels`
|
|
85
86
|
// Pitched point labels are automatically rotated by the labelPlaneMatrix projection
|
|
86
87
|
// Unpitched point labels need to have their rotation applied after projection
|
|
@@ -94,9 +95,13 @@ function drawLayerSymbols(
|
|
|
94
95
|
for (const coord of coords) {
|
|
95
96
|
const tile = sourceCache.getTile(coord);
|
|
96
97
|
const bucket = tile.getBucket(layer);
|
|
97
|
-
if (!bucket)
|
|
98
|
+
if (!bucket) {
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
98
101
|
const buffers = isText ? bucket.text : bucket.icon;
|
|
99
|
-
if (!buffers || !buffers.segments.get().length)
|
|
102
|
+
if (!buffers || !buffers.segments.get().length) {
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
100
105
|
const programConfiguration = buffers.programConfigurations.get(layer.id);
|
|
101
106
|
|
|
102
107
|
const isSDF = isText || bucket.sdfIcons;
|
|
@@ -119,7 +124,7 @@ function drawLayerSymbols(
|
|
|
119
124
|
tile.glyphAtlasTexture.bind(gl.LINEAR, gl.CLAMP_TO_EDGE);
|
|
120
125
|
texSize = tile.glyphAtlasTexture.size;
|
|
121
126
|
} else {
|
|
122
|
-
const iconScaled = layer.
|
|
127
|
+
const iconScaled = layer._layout.get('icon-size').constantOr(0) !== 1 || bucket.iconsNeedLinear;
|
|
123
128
|
const iconTransformed = pitchWithMap || tr.pitch !== 0;
|
|
124
129
|
|
|
125
130
|
tile.imageAtlasTexture.bind(
|
|
@@ -167,7 +172,7 @@ function drawLayerSymbols(
|
|
|
167
172
|
|
|
168
173
|
let uniformValues;
|
|
169
174
|
if (isSDF) {
|
|
170
|
-
const hasHalo = layer.
|
|
175
|
+
const hasHalo = layer._paint.get(isText ? 'text-halo-width' : 'icon-halo-width').constantOr(1) !== 0;
|
|
171
176
|
|
|
172
177
|
uniformValues = symbolSDFUniformValues(
|
|
173
178
|
sizeData.functionType,
|
|
@@ -222,7 +227,7 @@ function drawSymbolElements(buffers, layer, painter, program, depthMode, stencil
|
|
|
222
227
|
buffers.layoutVertexBuffer,
|
|
223
228
|
buffers.indexBuffer,
|
|
224
229
|
buffers.segments,
|
|
225
|
-
layer.
|
|
230
|
+
layer._paint,
|
|
226
231
|
painter.transform.zoom,
|
|
227
232
|
buffers.programConfigurations.get(layer.id),
|
|
228
233
|
buffers.dynamicLayoutVertexBuffer,
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const { default: potpack } = require('potpack');
|
|
1
|
+
import potpack from 'potpack';
|
|
2
|
+
import { AlphaImage } from '../util/image.js';
|
|
4
3
|
|
|
5
4
|
const padding = 1;
|
|
6
5
|
|
|
@@ -15,7 +14,9 @@ class GlyphAtlas {
|
|
|
15
14
|
|
|
16
15
|
for (const id in glyphs) {
|
|
17
16
|
const src = glyphs[+id];
|
|
18
|
-
if (!src || src.bitmap.width === 0 || src.bitmap.height === 0)
|
|
17
|
+
if (!src || src.bitmap.width === 0 || src.bitmap.height === 0) {
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
19
20
|
|
|
20
21
|
const bin = {
|
|
21
22
|
x: 0,
|
|
@@ -36,7 +37,9 @@ class GlyphAtlas {
|
|
|
36
37
|
|
|
37
38
|
for (const id in glyphs) {
|
|
38
39
|
const src = glyphs[+id];
|
|
39
|
-
if (!src || src.bitmap.width === 0 || src.bitmap.height === 0)
|
|
40
|
+
if (!src || src.bitmap.width === 0 || src.bitmap.height === 0) {
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
40
43
|
const bin = positions[stack][id].rect;
|
|
41
44
|
AlphaImage.copy(src.bitmap, image, { x: 0, y: 0 }, { x: bin.x + padding, y: bin.y + padding }, src.bitmap);
|
|
42
45
|
}
|
|
@@ -47,6 +50,4 @@ class GlyphAtlas {
|
|
|
47
50
|
}
|
|
48
51
|
}
|
|
49
52
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
module.exports = GlyphAtlas;
|
|
53
|
+
export default GlyphAtlas;
|
|
@@ -8,9 +8,8 @@ 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
|
|
|
16
|
-
|
|
15
|
+
export default GlyphManager;
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const { default: potpack } = require('potpack');
|
|
1
|
+
import potpack from 'potpack';
|
|
2
|
+
import { RGBAImage } from '../util/image.js';
|
|
4
3
|
|
|
5
4
|
const padding = 1;
|
|
6
5
|
|
|
7
|
-
class ImagePosition {
|
|
6
|
+
export class ImagePosition {
|
|
8
7
|
constructor(paddedRect, { pixelRatio }) {
|
|
9
8
|
this.paddedRect = paddedRect;
|
|
10
9
|
this.pixelRatio = pixelRatio;
|
|
@@ -27,7 +26,7 @@ class ImagePosition {
|
|
|
27
26
|
}
|
|
28
27
|
}
|
|
29
28
|
|
|
30
|
-
class ImageAtlas {
|
|
29
|
+
export default class ImageAtlas {
|
|
31
30
|
constructor(icons, patterns) {
|
|
32
31
|
const iconPositions = {};
|
|
33
32
|
const patternPositions = {};
|
|
@@ -86,9 +85,3 @@ class ImageAtlas {
|
|
|
86
85
|
this.patternPositions = patternPositions;
|
|
87
86
|
}
|
|
88
87
|
}
|
|
89
|
-
|
|
90
|
-
ImageAtlas.ImagePosition = ImagePosition;
|
|
91
|
-
module.exports = ImageAtlas;
|
|
92
|
-
|
|
93
|
-
register('ImagePosition', ImagePosition);
|
|
94
|
-
register('ImageAtlas', ImageAtlas);
|