maplibre-gl 2.1.0 → 2.1.4
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/build/{banner.js → banner.ts} +1 -1
- package/build/generate-query-test-fixtures.ts +123 -0
- package/build/generate-shaders.ts +35 -0
- package/build/generate-struct-arrays.ts +7 -7
- package/build/generate-style-code.ts +8 -8
- package/build/generate-style-spec.ts +5 -4
- package/build/generate-typings.ts +16 -0
- package/build/readme.md +8 -18
- package/build/release-notes.js +9 -13
- package/build/{rollup_plugin_minify_style_spec.js → rollup_plugin_minify_style_spec.ts} +4 -3
- package/build/{rollup_plugins.js → rollup_plugins.ts} +12 -26
- package/dist/maplibre-gl-dev.js +54885 -0
- package/dist/maplibre-gl.css +1 -1
- package/dist/maplibre-gl.d.ts +1537 -1011
- package/dist/maplibre-gl.js +3 -3
- package/dist/maplibre-gl.js.map +1 -1
- package/package.json +83 -107
- package/postinstall.js +5 -0
- package/src/css/maplibre-gl.css +28 -28
- package/src/data/{array_types.ts → array_types.g.ts} +0 -0
- package/src/data/bucket/circle_bucket.ts +1 -1
- package/src/data/bucket/fill_bucket.test.ts +1 -1
- package/src/data/bucket/fill_bucket.ts +4 -4
- package/src/data/bucket/fill_extrusion_bucket.ts +1 -1
- package/src/data/bucket/line_bucket.test.ts +1 -1
- package/src/data/bucket/line_bucket.ts +6 -6
- package/src/data/bucket/symbol_bucket.test.ts +16 -16
- package/src/data/bucket/symbol_bucket.ts +53 -53
- package/src/data/bucket.ts +43 -43
- package/src/data/dem_data.ts +12 -12
- package/src/data/evaluation_feature.ts +10 -10
- package/src/data/feature_index.ts +37 -37
- package/src/data/feature_position_map.ts +5 -5
- package/src/data/index_array_type.ts +1 -1
- package/src/data/load_geometry.test.ts +1 -1
- package/src/data/program_configuration.ts +46 -46
- package/src/data/segment.ts +14 -14
- package/src/geo/edge_insets.ts +2 -2
- package/src/geo/lng_lat.ts +4 -4
- package/src/geo/lng_lat_bounds.ts +35 -35
- package/src/geo/mercator_coordinate.ts +5 -5
- package/src/geo/transform.test.ts +1 -1
- package/src/geo/transform.ts +14 -14
- package/src/gl/context.ts +3 -3
- package/src/gl/types.ts +19 -19
- package/src/gl/value.ts +6 -6
- package/src/gl/vertex_buffer.test.ts +1 -1
- package/src/index.ts +24 -9
- package/src/render/draw_circle.ts +8 -8
- package/src/render/draw_collision_debug.ts +5 -5
- package/src/render/draw_line.ts +4 -4
- package/src/render/draw_symbol.ts +21 -21
- package/src/render/glyph_atlas.ts +12 -12
- package/src/render/glyph_manager.test.ts +10 -21
- package/src/render/glyph_manager.ts +33 -32
- package/src/render/image_manager.ts +4 -4
- package/src/render/painter.ts +11 -11
- package/src/render/program/background_program.ts +29 -29
- package/src/render/program/circle_program.ts +10 -10
- package/src/render/program/clipping_mask_program.ts +1 -1
- package/src/render/program/collision_program.ts +9 -9
- package/src/render/program/debug_program.ts +4 -4
- package/src/render/program/fill_extrusion_program.ts +31 -31
- package/src/render/program/fill_program.ts +29 -29
- package/src/render/program/heatmap_program.ts +12 -12
- package/src/render/program/hillshade_program.ts +12 -12
- package/src/render/program/line_program.ts +38 -38
- package/src/render/program/pattern.ts +28 -28
- package/src/render/program/raster_program.ts +21 -21
- package/src/render/program/symbol_program.ts +96 -96
- package/src/render/program.ts +25 -25
- package/src/render/texture.ts +9 -9
- package/src/render/uniform_binding.ts +1 -1
- package/src/render/vertex_array_object.ts +13 -13
- package/src/shaders/_prelude.fragment.glsl.g.ts +2 -0
- package/src/shaders/_prelude.vertex.glsl.g.ts +2 -0
- package/src/shaders/background.fragment.glsl.g.ts +2 -0
- package/src/shaders/background.vertex.glsl.g.ts +2 -0
- package/src/shaders/background_pattern.fragment.glsl.g.ts +2 -0
- package/src/shaders/background_pattern.vertex.glsl.g.ts +2 -0
- package/src/shaders/circle.fragment.glsl.g.ts +2 -0
- package/src/shaders/circle.vertex.glsl.g.ts +2 -0
- package/src/shaders/clipping_mask.fragment.glsl.g.ts +2 -0
- package/src/shaders/clipping_mask.vertex.glsl.g.ts +2 -0
- package/src/shaders/collision_box.fragment.glsl.g.ts +2 -0
- package/src/shaders/collision_box.vertex.glsl.g.ts +2 -0
- package/src/shaders/collision_circle.fragment.glsl.g.ts +2 -0
- package/src/shaders/collision_circle.vertex.glsl.g.ts +2 -0
- package/src/shaders/debug.fragment.glsl.g.ts +2 -0
- package/src/shaders/debug.vertex.glsl.g.ts +2 -0
- package/src/shaders/fill.fragment.glsl.g.ts +2 -0
- package/src/shaders/fill.vertex.glsl.g.ts +2 -0
- package/src/shaders/fill_extrusion.fragment.glsl.g.ts +2 -0
- package/src/shaders/fill_extrusion.vertex.glsl.g.ts +2 -0
- package/src/shaders/fill_extrusion_pattern.fragment.glsl.g.ts +2 -0
- package/src/shaders/fill_extrusion_pattern.vertex.glsl.g.ts +2 -0
- package/src/shaders/fill_outline.fragment.glsl.g.ts +2 -0
- package/src/shaders/fill_outline.vertex.glsl.g.ts +2 -0
- package/src/shaders/fill_outline_pattern.fragment.glsl.g.ts +2 -0
- package/src/shaders/fill_outline_pattern.vertex.glsl.g.ts +2 -0
- package/src/shaders/fill_pattern.fragment.glsl.g.ts +2 -0
- package/src/shaders/fill_pattern.vertex.glsl.g.ts +2 -0
- package/src/shaders/heatmap.fragment.glsl.g.ts +2 -0
- package/src/shaders/heatmap.vertex.glsl.g.ts +2 -0
- package/src/shaders/heatmap_texture.fragment.glsl.g.ts +2 -0
- package/src/shaders/heatmap_texture.vertex.glsl.g.ts +2 -0
- package/src/shaders/hillshade.fragment.glsl.g.ts +2 -0
- package/src/shaders/hillshade.vertex.glsl.g.ts +2 -0
- package/src/shaders/hillshade_prepare.fragment.glsl.g.ts +2 -0
- package/src/shaders/hillshade_prepare.vertex.glsl.g.ts +2 -0
- package/src/shaders/line.fragment.glsl.g.ts +2 -0
- package/src/shaders/line.vertex.glsl.g.ts +2 -0
- package/src/shaders/line_gradient.fragment.glsl.g.ts +2 -0
- package/src/shaders/line_gradient.vertex.glsl.g.ts +2 -0
- package/src/shaders/line_pattern.fragment.glsl.g.ts +2 -0
- package/src/shaders/line_pattern.vertex.glsl.g.ts +2 -0
- package/src/shaders/line_sdf.fragment.glsl.g.ts +2 -0
- package/src/shaders/line_sdf.vertex.glsl.g.ts +2 -0
- package/src/shaders/raster.fragment.glsl.g.ts +2 -0
- package/src/shaders/raster.vertex.glsl.g.ts +2 -0
- package/src/shaders/shaders.ts +52 -55
- package/src/shaders/symbol_icon.fragment.glsl.g.ts +2 -0
- package/src/shaders/symbol_icon.vertex.glsl.g.ts +2 -0
- package/src/shaders/symbol_sdf.fragment.glsl.g.ts +2 -0
- package/src/shaders/symbol_sdf.vertex.glsl.g.ts +2 -0
- package/src/shaders/symbol_text_and_icon.fragment.glsl.g.ts +2 -0
- package/src/shaders/symbol_text_and_icon.vertex.glsl.g.ts +2 -0
- package/src/source/canvas_source.test.ts +11 -12
- package/src/source/canvas_source.ts +4 -4
- package/src/source/geojson_worker_source.ts +23 -23
- package/src/source/geojson_wrapper.ts +8 -8
- package/src/source/image_source.test.ts +2 -2
- package/src/source/image_source.ts +6 -6
- package/src/source/pixels_to_tile_units.ts +6 -6
- package/src/source/query_features.ts +20 -20
- package/src/source/raster_dem_tile_source.test.ts +2 -2
- package/src/source/raster_tile_source.test.ts +2 -2
- package/src/source/rtl_text_plugin.ts +10 -10
- package/src/source/source.ts +29 -29
- package/src/source/source_cache.test.ts +32 -0
- package/src/source/source_cache.ts +7 -5
- package/src/source/source_state.ts +1 -1
- package/src/source/tile.test.ts +3 -3
- package/src/source/tile.ts +15 -15
- package/src/source/tile_cache.test.ts +6 -4
- package/src/source/tile_cache.ts +6 -6
- package/src/source/tile_id.test.ts +0 -1
- package/src/source/vector_tile_source.test.ts +16 -5
- package/src/source/vector_tile_source.ts +2 -3
- package/src/source/vector_tile_worker_source.test.ts +4 -4
- package/src/source/vector_tile_worker_source.ts +5 -5
- package/src/source/worker.test.ts +1 -1
- package/src/source/worker.ts +22 -22
- package/src/source/worker_source.ts +56 -56
- package/src/source/worker_tile.ts +4 -4
- package/src/style/evaluation_parameters.ts +3 -3
- package/src/style/format_section_override.test.ts +1 -1
- package/src/style/light.ts +10 -10
- package/src/style/load_glyph_range.test.ts +3 -5
- package/src/style/load_glyph_range.ts +6 -6
- package/src/style/load_sprite.ts +4 -4
- package/src/style/pauseable_placement.ts +1 -1
- package/src/style/properties.ts +69 -69
- package/src/style/query_utils.ts +7 -7
- package/src/style/style.test.ts +22 -15
- package/src/style/style.ts +29 -29
- package/src/style/style_glyph.ts +8 -8
- package/src/style/style_image.ts +58 -58
- package/src/style/style_layer/background_style_layer.ts +2 -2
- package/src/style/style_layer/{background_style_layer_properties.ts → background_style_layer_properties.g.ts} +0 -0
- package/src/style/style_layer/circle_style_layer.ts +10 -10
- package/src/style/style_layer/{circle_style_layer_properties.ts → circle_style_layer_properties.g.ts} +0 -0
- package/src/style/style_layer/custom_style_layer.ts +17 -17
- package/src/style/style_layer/fill_extrusion_style_layer.ts +10 -10
- package/src/style/style_layer/{fill_extrusion_style_layer_properties.ts → fill_extrusion_style_layer_properties.g.ts} +0 -0
- package/src/style/style_layer/fill_style_layer.ts +9 -9
- package/src/style/style_layer/{fill_style_layer_properties.ts → fill_style_layer_properties.g.ts} +0 -0
- package/src/style/style_layer/heatmap_style_layer.ts +2 -2
- package/src/style/style_layer/{heatmap_style_layer_properties.ts → heatmap_style_layer_properties.g.ts} +0 -0
- package/src/style/style_layer/hillshade_style_layer.ts +2 -2
- package/src/style/style_layer/{hillshade_style_layer_properties.ts → hillshade_style_layer_properties.g.ts} +0 -0
- package/src/style/style_layer/line_style_layer.ts +9 -9
- package/src/style/style_layer/{line_style_layer_properties.ts → line_style_layer_properties.g.ts} +0 -0
- package/src/style/style_layer/raster_style_layer.ts +2 -2
- package/src/style/style_layer/{raster_style_layer_properties.ts → raster_style_layer_properties.g.ts} +0 -0
- package/src/style/style_layer/symbol_style_layer.ts +7 -7
- package/src/style/style_layer/{symbol_style_layer_properties.ts → symbol_style_layer_properties.g.ts} +0 -0
- package/src/style/style_layer.ts +10 -10
- package/src/style/style_layer_index.ts +3 -3
- package/src/style/validate_style.ts +15 -15
- package/src/style-spec/error/validation_error.ts +1 -1
- package/src/style-spec/expression/compound_expression.ts +3 -3
- package/src/style-spec/expression/definitions/format.ts +11 -11
- package/src/style-spec/expression/definitions/interpolate.ts +5 -5
- package/src/style-spec/expression/definitions/match.ts +2 -2
- package/src/style-spec/expression/definitions/number_format.ts +11 -11
- package/src/style-spec/expression/expression.ts +8 -8
- package/src/style-spec/expression/index.ts +97 -97
- package/src/style-spec/expression/parsing_context.ts +11 -11
- package/src/style-spec/expression/types/collator.ts +9 -9
- package/src/style-spec/expression/types/resolved_image.ts +2 -2
- package/src/style-spec/expression/types.ts +14 -14
- package/src/style-spec/expression/values.ts +1 -1
- package/src/style-spec/feature_filter/index.ts +66 -66
- package/src/style-spec/function/convert.ts +3 -3
- package/src/style-spec/style-spec.ts +44 -44
- package/src/style-spec/util/color_spaces.ts +8 -8
- package/src/style-spec/util/result.ts +4 -4
- package/src/style-spec/validate/validate_filter.ts +58 -58
- package/src/style-spec/validate/validate_source.ts +63 -63
- package/src/style-spec/visit.ts +11 -11
- package/src/symbol/collision_feature.test.ts +1 -1
- package/src/symbol/collision_feature.ts +10 -10
- package/src/symbol/collision_index.ts +26 -26
- package/src/symbol/cross_tile_symbol_index.ts +17 -17
- package/src/symbol/get_anchors.ts +16 -16
- package/src/symbol/grid_index.ts +7 -7
- package/src/symbol/placement.ts +72 -72
- package/src/symbol/projection.ts +30 -30
- package/src/symbol/quads.ts +30 -30
- package/src/symbol/shaping.ts +160 -160
- package/src/symbol/symbol_layout.ts +119 -119
- package/src/symbol/symbol_size.ts +29 -29
- package/src/symbol/symbol_style_layer.test.ts +1 -1
- package/src/types/cancelable.ts +1 -1
- package/src/types/tilejson.ts +13 -13
- package/src/ui/anchor.ts +1 -1
- package/src/ui/camera.test.ts +9 -9
- package/src/ui/camera.ts +18 -18
- package/src/ui/control/attribution_control.test.ts +51 -16
- package/src/ui/control/attribution_control.ts +35 -16
- package/src/ui/control/control.ts +40 -40
- package/src/ui/control/fullscreen_control.ts +1 -1
- package/src/ui/control/geolocate_control.test.ts +1 -1
- package/src/ui/control/geolocate_control.ts +102 -102
- package/src/ui/control/logo_control.test.ts +5 -4
- package/src/ui/control/navigation_control.ts +3 -3
- package/src/ui/control/scale_control.test.ts +2 -2
- package/src/ui/control/scale_control.ts +5 -5
- package/src/ui/events.ts +289 -200
- package/src/ui/handler/box_zoom.test.ts +1 -1
- package/src/ui/handler/box_zoom.ts +1 -1
- package/src/ui/handler/dblclick_zoom.test.ts +1 -1
- package/src/ui/handler/drag_pan.test.ts +1 -1
- package/src/ui/handler/drag_rotate.test.ts +1 -1
- package/src/ui/handler/keyboard.test.ts +1 -1
- package/src/ui/handler/keyboard.ts +51 -51
- package/src/ui/handler/map_event.test.ts +1 -1
- package/src/ui/handler/map_event.ts +1 -1
- package/src/ui/handler/mouse.ts +1 -1
- package/src/ui/handler/mouse_rotate.test.ts +1 -1
- package/src/ui/handler/scroll_zoom.test.ts +3 -2
- package/src/ui/handler/scroll_zoom.ts +9 -9
- package/src/ui/handler/shim/drag_pan.ts +4 -4
- package/src/ui/handler/shim/drag_rotate.ts +1 -1
- package/src/ui/handler/shim/touch_zoom_rotate.ts +1 -1
- package/src/ui/handler/tap_recognizer.ts +4 -4
- package/src/ui/handler/touch_pan.ts +2 -2
- package/src/ui/handler/touch_zoom_rotate.test.ts +1 -1
- package/src/ui/handler/touch_zoom_rotate.ts +1 -1
- package/src/ui/handler_inertia.ts +6 -6
- package/src/ui/handler_manager.ts +44 -44
- package/src/ui/map/isMoving.test.ts +1 -1
- package/src/ui/map/isRotating.test.ts +1 -1
- package/src/ui/map/isZooming.test.ts +1 -1
- package/src/ui/map.test.ts +26 -14
- package/src/ui/map.ts +107 -102
- package/src/ui/map_events.test.ts +1 -1
- package/src/ui/marker.test.ts +12 -12
- package/src/ui/marker.ts +37 -37
- package/src/ui/popup.test.ts +7 -7
- package/src/ui/popup.ts +9 -9
- package/src/util/actor.test.ts +41 -10
- package/src/util/actor.ts +8 -8
- package/src/util/ajax.test.ts +29 -21
- package/src/util/ajax.ts +51 -30
- package/src/util/browser.ts +1 -1
- package/src/util/classify_rings.test.ts +1 -1
- package/src/util/color_ramp.ts +5 -5
- package/src/util/config.ts +2 -2
- package/src/util/dispatcher.ts +1 -1
- package/src/util/dom.ts +2 -2
- package/src/util/evented.ts +1 -1
- package/src/util/find_pole_of_inaccessibility.ts +3 -3
- package/src/util/image.ts +5 -5
- package/src/util/performance.ts +7 -7
- package/src/util/request_manager.ts +4 -4
- package/src/util/resolve_tokens.ts +4 -4
- package/src/util/struct_array.test.ts +1 -1
- package/src/util/struct_array.ts +15 -15
- package/src/util/task_queue.ts +3 -3
- package/src/util/tile_request_cache.ts +3 -3
- package/src/util/transferable_grid_index.ts +4 -4
- package/src/util/util.ts +8 -8
- package/src/util/web_worker.ts +4 -68
- package/src/util/web_worker_transfer.test.ts +3 -0
- package/src/util/web_worker_transfer.ts +21 -17
- package/src/util/worker_pool.ts +1 -1
- package/build/.eslintrc +0 -21
- package/build/glsl_to_js.js +0 -12
- package/build/post-ts-build.js +0 -43
- package/build/release-notes.md.ejs +0 -8
- package/build/test/build-tape.js +0 -17
- package/build/web_worker_replacement.js +0 -5
- package/dist/package.json +0 -1
- package/src/style-spec/validate_spec.test.ts +0 -29
- package/src/symbol/shaping.test.ts +0 -392
- package/src/types/glsl.d.ts +0 -4
package/src/render/draw_line.ts
CHANGED
|
@@ -36,8 +36,8 @@ export default function drawLine(painter: Painter, sourceCache: SourceCache, lay
|
|
|
36
36
|
|
|
37
37
|
const programId =
|
|
38
38
|
image ? 'linePattern' :
|
|
39
|
-
|
|
40
|
-
|
|
39
|
+
dasharray ? 'lineSDF' :
|
|
40
|
+
gradient ? 'lineGradient' : 'line';
|
|
41
41
|
|
|
42
42
|
const context = painter.context;
|
|
43
43
|
const gl = context.gl;
|
|
@@ -67,8 +67,8 @@ export default function drawLine(painter: Painter, sourceCache: SourceCache, lay
|
|
|
67
67
|
|
|
68
68
|
const uniformValues = image ? linePatternUniformValues(painter, tile, layer, crossfade) :
|
|
69
69
|
dasharray ? lineSDFUniformValues(painter, tile, layer, dasharray, crossfade) :
|
|
70
|
-
|
|
71
|
-
|
|
70
|
+
gradient ? lineGradientUniformValues(painter, tile, layer, bucket.lineClipsArray.length) :
|
|
71
|
+
lineUniformValues(painter, tile, layer);
|
|
72
72
|
|
|
73
73
|
if (image) {
|
|
74
74
|
context.activeTexture.set(gl.TEXTURE0);
|
|
@@ -34,25 +34,25 @@ import type {CrossTileID, VariableOffset} from '../symbol/placement';
|
|
|
34
34
|
export default drawSymbols;
|
|
35
35
|
|
|
36
36
|
type SymbolTileRenderState = {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
37
|
+
segments: SegmentVector;
|
|
38
|
+
sortKey: number;
|
|
39
|
+
state: {
|
|
40
|
+
program: any;
|
|
41
|
+
buffers: SymbolBuffers;
|
|
42
|
+
uniformValues: any;
|
|
43
|
+
atlasTexture: Texture;
|
|
44
|
+
atlasTextureIcon: Texture | null;
|
|
45
|
+
atlasInterpolation: any;
|
|
46
|
+
atlasInterpolationIcon: any;
|
|
47
|
+
isSDF: boolean;
|
|
48
|
+
hasHalo: boolean;
|
|
49
|
+
};
|
|
50
50
|
};
|
|
51
51
|
|
|
52
52
|
const identityMat4 = mat4.identity(new Float32Array(16));
|
|
53
53
|
|
|
54
54
|
function drawSymbols(painter: Painter, sourceCache: SourceCache, layer: SymbolStyleLayer, coords: Array<OverscaledTileID>, variableOffsets: {
|
|
55
|
-
|
|
55
|
+
[_ in CrossTileID]: VariableOffset;
|
|
56
56
|
}) {
|
|
57
57
|
if (painter.renderPass !== 'translucent') return;
|
|
58
58
|
|
|
@@ -132,13 +132,13 @@ function updateVariableAnchors(coords, painter, layer, sourceCache, rotationAlig
|
|
|
132
132
|
if (size) {
|
|
133
133
|
const tileScale = Math.pow(2, tr.zoom - tile.tileID.overscaledZ);
|
|
134
134
|
updateVariableAnchorsForBucket(bucket, rotateWithMap, pitchWithMap, variableOffsets, symbolSize,
|
|
135
|
-
|
|
135
|
+
tr, labelPlaneMatrix, coord.posMatrix, tileScale, size, updateTextFitIcon);
|
|
136
136
|
}
|
|
137
137
|
}
|
|
138
138
|
}
|
|
139
139
|
|
|
140
140
|
function updateVariableAnchorsForBucket(bucket, rotateWithMap, pitchWithMap, variableOffsets, symbolSize,
|
|
141
|
-
|
|
141
|
+
transform, labelPlaneMatrix, posMatrix, tileScale, size, updateTextFitIcon) {
|
|
142
142
|
const placedSymbols = bucket.text.placedSymbolArray;
|
|
143
143
|
const dynamicTextLayoutVertexArray = bucket.text.dynamicLayoutVertexArray;
|
|
144
144
|
const dynamicIconLayoutVertexArray = bucket.icon.dynamicLayoutVertexArray;
|
|
@@ -223,7 +223,7 @@ function getSymbolProgramName(isSDF: boolean, isText: boolean, bucket: SymbolBuc
|
|
|
223
223
|
}
|
|
224
224
|
|
|
225
225
|
function drawLayerSymbols(painter, sourceCache, layer, coords, isText, translate, translateAnchor,
|
|
226
|
-
|
|
226
|
+
rotationAlignment, pitchAlignment, keepUpright, stencilMode, colorMode) {
|
|
227
227
|
|
|
228
228
|
const context = painter.context;
|
|
229
229
|
const gl = context.gl;
|
|
@@ -310,12 +310,12 @@ function drawLayerSymbols(painter, sourceCache, layer, coords, isText, translate
|
|
|
310
310
|
if (isSDF) {
|
|
311
311
|
if (!bucket.iconsInText) {
|
|
312
312
|
uniformValues = symbolSDFUniformValues(sizeData.kind,
|
|
313
|
-
|
|
314
|
-
|
|
313
|
+
size, rotateInShader, pitchWithMap, painter, matrix,
|
|
314
|
+
uLabelPlaneMatrix, uglCoordMatrix, isText, texSize, true);
|
|
315
315
|
} else {
|
|
316
316
|
uniformValues = symbolTextAndIconUniformValues(sizeData.kind,
|
|
317
|
-
|
|
318
|
-
|
|
317
|
+
size, rotateInShader, pitchWithMap, painter, matrix,
|
|
318
|
+
uLabelPlaneMatrix, uglCoordMatrix, texSize, texSizeIcon);
|
|
319
319
|
}
|
|
320
320
|
} else {
|
|
321
321
|
uniformValues = symbolIconUniformValues(sizeData.kind,
|
|
@@ -7,21 +7,21 @@ import type {GlyphMetrics, StyleGlyph} from '../style/style_glyph';
|
|
|
7
7
|
const padding = 1;
|
|
8
8
|
|
|
9
9
|
export type Rect = {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
x: number;
|
|
11
|
+
y: number;
|
|
12
|
+
w: number;
|
|
13
|
+
h: number;
|
|
14
14
|
};
|
|
15
15
|
|
|
16
16
|
export type GlyphPosition = {
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
rect: Rect;
|
|
18
|
+
metrics: GlyphMetrics;
|
|
19
19
|
};
|
|
20
20
|
|
|
21
21
|
export type GlyphPositions = {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
[_: string]: {
|
|
23
|
+
[_: number]: GlyphPosition;
|
|
24
|
+
};
|
|
25
25
|
};
|
|
26
26
|
|
|
27
27
|
export default class GlyphAtlas {
|
|
@@ -29,9 +29,9 @@ export default class GlyphAtlas {
|
|
|
29
29
|
positions: GlyphPositions;
|
|
30
30
|
|
|
31
31
|
constructor(stacks: {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
[_: string]: {
|
|
33
|
+
[_: number]: StyleGlyph;
|
|
34
|
+
};
|
|
35
35
|
}) {
|
|
36
36
|
const positions = {};
|
|
37
37
|
const bins = [];
|
|
@@ -4,7 +4,7 @@ import fs from 'fs';
|
|
|
4
4
|
import {RequestManager} from '../util/request_manager';
|
|
5
5
|
|
|
6
6
|
const glyphs = {};
|
|
7
|
-
for (const glyph of parseGlyphPBF(fs.readFileSync('./test/
|
|
7
|
+
for (const glyph of parseGlyphPBF(fs.readFileSync('./test/unit/assets/0-255.pbf'))) {
|
|
8
8
|
glyphs[glyph.id] = glyph;
|
|
9
9
|
}
|
|
10
10
|
|
|
@@ -21,12 +21,6 @@ const createLoadGlyphRangeStub = () => {
|
|
|
21
21
|
};
|
|
22
22
|
|
|
23
23
|
const createGlyphManager = (font?) => {
|
|
24
|
-
GlyphManager.TinySDF = class {
|
|
25
|
-
// Return empty 30x30 bitmap (24 fontsize + 3 * 2 buffer)
|
|
26
|
-
draw() {
|
|
27
|
-
return {data: new Uint8ClampedArray(900)} as any;
|
|
28
|
-
}
|
|
29
|
-
};
|
|
30
24
|
const manager = new GlyphManager(identityTransform, font);
|
|
31
25
|
manager.setURL('https://localhost/fonts/v1/{fontstack}/{range}.pbf');
|
|
32
26
|
return manager;
|
|
@@ -106,8 +100,8 @@ describe('GlyphManager', () => {
|
|
|
106
100
|
expect(err).toBeFalsy();
|
|
107
101
|
const glyph = glyphs['Arial Unicode MS'][0x30c6];
|
|
108
102
|
//Ensure that te is locally generated.
|
|
109
|
-
expect(glyph.bitmap.height).toBe(
|
|
110
|
-
expect(glyph.bitmap.width).toBe(
|
|
103
|
+
expect(glyph.bitmap.height).toBe(6);
|
|
104
|
+
expect(glyph.bitmap.width).toBe(6);
|
|
111
105
|
done();
|
|
112
106
|
});
|
|
113
107
|
});
|
|
@@ -118,7 +112,7 @@ describe('GlyphManager', () => {
|
|
|
118
112
|
|
|
119
113
|
manager.getGlyphs({'Arial Unicode MS': [0x5e73]}, (err, glyphs) => {
|
|
120
114
|
expect(err).toBeFalsy();
|
|
121
|
-
expect(glyphs['Arial Unicode MS'][0x5e73].metrics.advance).toBe(
|
|
115
|
+
expect(glyphs['Arial Unicode MS'][0x5e73].metrics.advance).toBe(1);
|
|
122
116
|
done();
|
|
123
117
|
});
|
|
124
118
|
});
|
|
@@ -129,7 +123,7 @@ describe('GlyphManager', () => {
|
|
|
129
123
|
// Katakana letter te
|
|
130
124
|
manager.getGlyphs({'Arial Unicode MS': [0x30c6]}, (err, glyphs) => {
|
|
131
125
|
expect(err).toBeFalsy();
|
|
132
|
-
expect(glyphs['Arial Unicode MS'][0x30c6].metrics.advance).toBe(
|
|
126
|
+
expect(glyphs['Arial Unicode MS'][0x30c6].metrics.advance).toBe(1);
|
|
133
127
|
done();
|
|
134
128
|
});
|
|
135
129
|
});
|
|
@@ -140,7 +134,7 @@ describe('GlyphManager', () => {
|
|
|
140
134
|
//Hiragana letter te
|
|
141
135
|
manager.getGlyphs({'Arial Unicode MS': [0x3066]}, (err, glyphs) => {
|
|
142
136
|
expect(err).toBeFalsy();
|
|
143
|
-
expect(glyphs['Arial Unicode MS'][0x3066].metrics.advance).toBe(
|
|
137
|
+
expect(glyphs['Arial Unicode MS'][0x3066].metrics.advance).toBe(1);
|
|
144
138
|
done();
|
|
145
139
|
});
|
|
146
140
|
});
|
|
@@ -148,21 +142,16 @@ describe('GlyphManager', () => {
|
|
|
148
142
|
test('GlyphManager caches locally generated glyphs', done => {
|
|
149
143
|
|
|
150
144
|
const manager = createGlyphManager('sans-serif');
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
draw() {
|
|
155
|
-
drawCallCount++;
|
|
156
|
-
return {data: new Uint8ClampedArray(900)} as any;
|
|
157
|
-
}
|
|
158
|
-
};
|
|
145
|
+
const drawSpy = GlyphManager.TinySDF.prototype.draw = jest.fn().mockImplementation(() => {
|
|
146
|
+
return {data: new Uint8ClampedArray(900)} as any;
|
|
147
|
+
});
|
|
159
148
|
|
|
160
149
|
// Katakana letter te
|
|
161
150
|
manager.getGlyphs({'Arial Unicode MS': [0x30c6]}, (err, glyphs) => {
|
|
162
151
|
expect(err).toBeFalsy();
|
|
163
152
|
expect(glyphs['Arial Unicode MS'][0x30c6].metrics.advance).toBe(24);
|
|
164
153
|
manager.getGlyphs({'Arial Unicode MS': [0x30c6]}, () => {
|
|
165
|
-
expect(
|
|
154
|
+
expect(drawSpy).toHaveBeenCalledTimes(1);
|
|
166
155
|
done();
|
|
167
156
|
});
|
|
168
157
|
});
|
|
@@ -10,26 +10,26 @@ import type {RequestManager} from '../util/request_manager';
|
|
|
10
10
|
import type {Callback} from '../types/callback';
|
|
11
11
|
|
|
12
12
|
type Entry = {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
13
|
+
// null means we've requested the range, but the glyph wasn't included in the result.
|
|
14
|
+
glyphs: {
|
|
15
|
+
[id: number]: StyleGlyph | null;
|
|
16
|
+
};
|
|
17
|
+
requests: {
|
|
18
|
+
[range: number]: Array<Callback<{
|
|
19
|
+
[_: number]: StyleGlyph | null;
|
|
20
|
+
}>>;
|
|
21
|
+
};
|
|
22
|
+
ranges: {
|
|
23
|
+
[range: number]: boolean | null;
|
|
24
|
+
};
|
|
25
|
+
tinySDF?: TinySDF;
|
|
26
26
|
};
|
|
27
27
|
|
|
28
28
|
export default class GlyphManager {
|
|
29
29
|
requestManager: RequestManager;
|
|
30
30
|
localIdeographFontFamily: string;
|
|
31
31
|
entries: {
|
|
32
|
-
|
|
32
|
+
[_: string]: Entry;
|
|
33
33
|
};
|
|
34
34
|
url: string;
|
|
35
35
|
|
|
@@ -48,11 +48,11 @@ export default class GlyphManager {
|
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
getGlyphs(glyphs: {
|
|
51
|
-
|
|
51
|
+
[stack: string]: Array<number>;
|
|
52
52
|
}, callback: Callback<{
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
53
|
+
[stack: string]: {
|
|
54
|
+
[id: number]: StyleGlyph;
|
|
55
|
+
};
|
|
56
56
|
}>) {
|
|
57
57
|
const all = [];
|
|
58
58
|
|
|
@@ -63,9 +63,9 @@ export default class GlyphManager {
|
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
asyncAll(all, ({stack, id}, callback: Callback<{
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
66
|
+
stack: string;
|
|
67
|
+
id: number;
|
|
68
|
+
glyph: StyleGlyph;
|
|
69
69
|
}>) => {
|
|
70
70
|
let entry = this.entries[stack];
|
|
71
71
|
if (!entry) {
|
|
@@ -105,7 +105,7 @@ export default class GlyphManager {
|
|
|
105
105
|
requests = entry.requests[range] = [];
|
|
106
106
|
GlyphManager.loadGlyphRange(stack, range, this.url, this.requestManager,
|
|
107
107
|
(err, response?: {
|
|
108
|
-
|
|
108
|
+
[_: number]: StyleGlyph | null;
|
|
109
109
|
} | null) => {
|
|
110
110
|
if (response) {
|
|
111
111
|
for (const id in response) {
|
|
@@ -123,7 +123,7 @@ export default class GlyphManager {
|
|
|
123
123
|
}
|
|
124
124
|
|
|
125
125
|
requests.push((err, result?: {
|
|
126
|
-
|
|
126
|
+
[_: number]: StyleGlyph | null;
|
|
127
127
|
} | null) => {
|
|
128
128
|
if (err) {
|
|
129
129
|
callback(err);
|
|
@@ -132,9 +132,9 @@ export default class GlyphManager {
|
|
|
132
132
|
}
|
|
133
133
|
});
|
|
134
134
|
}, (err, glyphs?: Array<{
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
135
|
+
stack: string;
|
|
136
|
+
id: number;
|
|
137
|
+
glyph: StyleGlyph;
|
|
138
138
|
}> | null) => {
|
|
139
139
|
if (err) {
|
|
140
140
|
callback(err);
|
|
@@ -195,15 +195,16 @@ export default class GlyphManager {
|
|
|
195
195
|
});
|
|
196
196
|
}
|
|
197
197
|
|
|
198
|
+
const char = tinySDF.draw(String.fromCharCode(id));
|
|
198
199
|
return {
|
|
199
200
|
id,
|
|
200
|
-
bitmap: new AlphaImage({width: 30, height: 30},
|
|
201
|
+
bitmap: new AlphaImage({width: char.width || 30, height: char.height || 30}, char.data),
|
|
201
202
|
metrics: {
|
|
202
|
-
width: 24,
|
|
203
|
-
height: 24,
|
|
204
|
-
left: 0,
|
|
205
|
-
top: -8,
|
|
206
|
-
advance: 24
|
|
203
|
+
width: char.glyphWidth || 24,
|
|
204
|
+
height: char.glyphHeight || 24,
|
|
205
|
+
left: char.glyphLeft || 0,
|
|
206
|
+
top: char.glyphTop || -8,
|
|
207
|
+
advance: char.glyphAdvance || 24
|
|
207
208
|
}
|
|
208
209
|
};
|
|
209
210
|
}
|
|
@@ -14,8 +14,8 @@ import type {PotpackBox} from 'potpack';
|
|
|
14
14
|
import type {Callback} from '../types/callback';
|
|
15
15
|
|
|
16
16
|
type Pattern = {
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
bin: PotpackBox;
|
|
18
|
+
position: ImagePosition;
|
|
19
19
|
};
|
|
20
20
|
|
|
21
21
|
// When copied into the atlas texture, image data is padded by one pixel on each side. Icon
|
|
@@ -41,8 +41,8 @@ class ImageManager extends Evented {
|
|
|
41
41
|
callbackDispatchedThisFrame: {[_: string]: boolean};
|
|
42
42
|
loaded: boolean;
|
|
43
43
|
requestors: Array<{
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
ids: Array<string>;
|
|
45
|
+
callback: Callback<{[_: string]: StyleImage}>;
|
|
46
46
|
}>;
|
|
47
47
|
|
|
48
48
|
patterns: {[_: string]: Pattern};
|
package/src/render/painter.ts
CHANGED
|
@@ -5,7 +5,7 @@ import SourceCache from '../source/source_cache';
|
|
|
5
5
|
import EXTENT from '../data/extent';
|
|
6
6
|
import pixelsToTileUnits from '../source/pixels_to_tile_units';
|
|
7
7
|
import SegmentVector from '../data/segment';
|
|
8
|
-
import {RasterBoundsArray, PosArray, TriangleIndexArray, LineStripIndexArray} from '../data/array_types';
|
|
8
|
+
import {RasterBoundsArray, PosArray, TriangleIndexArray, LineStripIndexArray} from '../data/array_types.g';
|
|
9
9
|
import rasterBoundsAttributes from '../data/raster_bounds_attributes';
|
|
10
10
|
import posAttributes from '../data/pos_attributes';
|
|
11
11
|
import ProgramConfiguration from '../data/program_configuration';
|
|
@@ -65,14 +65,14 @@ import type {RGBAImage} from '../util/image';
|
|
|
65
65
|
export type RenderPass = 'offscreen' | 'opaque' | 'translucent';
|
|
66
66
|
|
|
67
67
|
type PainterOptions = {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
68
|
+
showOverdrawInspector: boolean;
|
|
69
|
+
showTileBoundaries: boolean;
|
|
70
|
+
showPadding: boolean;
|
|
71
|
+
rotating: boolean;
|
|
72
|
+
zooming: boolean;
|
|
73
|
+
moving: boolean;
|
|
74
|
+
gpuTiming: boolean;
|
|
75
|
+
fadeDuration: number;
|
|
76
76
|
};
|
|
77
77
|
|
|
78
78
|
/**
|
|
@@ -85,7 +85,7 @@ class Painter {
|
|
|
85
85
|
context: Context;
|
|
86
86
|
transform: Transform;
|
|
87
87
|
_tileTextures: {
|
|
88
|
-
|
|
88
|
+
[_: number]: Array<Texture>;
|
|
89
89
|
};
|
|
90
90
|
numSublayers: number;
|
|
91
91
|
depthEpsilon: number;
|
|
@@ -305,7 +305,7 @@ class Painter {
|
|
|
305
305
|
* Returns [StencilMode for tile overscaleZ map, sortedCoords].
|
|
306
306
|
*/
|
|
307
307
|
stencilConfigForOverlap(tileIDs: Array<OverscaledTileID>): [{
|
|
308
|
-
|
|
308
|
+
[_: number]: Readonly<StencilMode>;
|
|
309
309
|
}, Array<OverscaledTileID>] {
|
|
310
310
|
const gl = this.context.gl;
|
|
311
311
|
const coords = tileIDs.sort((a, b) => b.overscaledZ - a.overscaledZ);
|
|
@@ -19,29 +19,29 @@ import type ResolvedImage from '../../style-spec/expression/types/resolved_image
|
|
|
19
19
|
import {mat4} from 'gl-matrix';
|
|
20
20
|
|
|
21
21
|
export type BackgroundUniformsType = {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
'u_matrix': UniformMatrix4f;
|
|
23
|
+
'u_opacity': Uniform1f;
|
|
24
|
+
'u_color': UniformColor;
|
|
25
25
|
};
|
|
26
26
|
|
|
27
27
|
export type BackgroundPatternUniformsType = {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
28
|
+
'u_matrix': UniformMatrix4f;
|
|
29
|
+
'u_opacity': Uniform1f;
|
|
30
|
+
// pattern uniforms:
|
|
31
|
+
'u_image': Uniform1i;
|
|
32
|
+
'u_pattern_tl_a': Uniform2f;
|
|
33
|
+
'u_pattern_br_a': Uniform2f;
|
|
34
|
+
'u_pattern_tl_b': Uniform2f;
|
|
35
|
+
'u_pattern_br_b': Uniform2f;
|
|
36
|
+
'u_texsize': Uniform2f;
|
|
37
|
+
'u_mix': Uniform1f;
|
|
38
|
+
'u_pattern_size_a': Uniform2f;
|
|
39
|
+
'u_pattern_size_b': Uniform2f;
|
|
40
|
+
'u_scale_a': Uniform1f;
|
|
41
|
+
'u_scale_b': Uniform1f;
|
|
42
|
+
'u_pixel_coord_upper': Uniform2f;
|
|
43
|
+
'u_pixel_coord_lower': Uniform2f;
|
|
44
|
+
'u_tile_units_to_pixels': Uniform1f;
|
|
45
45
|
};
|
|
46
46
|
|
|
47
47
|
const backgroundUniforms = (context: Context, locations: UniformLocations): BackgroundUniformsType => ({
|
|
@@ -76,15 +76,15 @@ const backgroundUniformValues = (matrix: mat4, opacity: number, color: Color): U
|
|
|
76
76
|
});
|
|
77
77
|
|
|
78
78
|
const backgroundPatternUniformValues = (
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
79
|
+
matrix: mat4,
|
|
80
|
+
opacity: number,
|
|
81
|
+
painter: Painter,
|
|
82
|
+
image: CrossFaded<ResolvedImage>,
|
|
83
|
+
tile: {
|
|
84
|
+
tileID: OverscaledTileID;
|
|
85
|
+
tileSize: number;
|
|
86
|
+
},
|
|
87
|
+
crossfade: CrossfadeParameters
|
|
88
88
|
): UniformValues<BackgroundPatternUniformsType> => extend(
|
|
89
89
|
bgPatternUniformValues(image, crossfade, painter, tile),
|
|
90
90
|
{
|
|
@@ -9,12 +9,12 @@ import type CircleStyleLayer from '../../style/style_layer/circle_style_layer';
|
|
|
9
9
|
import type Painter from '../painter';
|
|
10
10
|
|
|
11
11
|
export type CircleUniformsType = {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
12
|
+
'u_camera_to_center_distance': Uniform1f;
|
|
13
|
+
'u_scale_with_map': Uniform1i;
|
|
14
|
+
'u_pitch_with_map': Uniform1i;
|
|
15
|
+
'u_extrude_scale': Uniform2f;
|
|
16
|
+
'u_device_pixel_ratio': Uniform1f;
|
|
17
|
+
'u_matrix': UniformMatrix4f;
|
|
18
18
|
};
|
|
19
19
|
|
|
20
20
|
const circleUniforms = (context: Context, locations: UniformLocations): CircleUniformsType => ({
|
|
@@ -27,10 +27,10 @@ const circleUniforms = (context: Context, locations: UniformLocations): CircleUn
|
|
|
27
27
|
});
|
|
28
28
|
|
|
29
29
|
const circleUniformValues = (
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
painter: Painter,
|
|
31
|
+
coord: OverscaledTileID,
|
|
32
|
+
tile: Tile,
|
|
33
|
+
layer: CircleStyleLayer
|
|
34
34
|
): UniformValues<CircleUniformsType> => {
|
|
35
35
|
const transform = painter.transform;
|
|
36
36
|
|
|
@@ -5,7 +5,7 @@ import type {UniformValues, UniformLocations} from '../uniform_binding';
|
|
|
5
5
|
import {mat4} from 'gl-matrix';
|
|
6
6
|
|
|
7
7
|
export type ClippingMaskUniformsType = {
|
|
8
|
-
|
|
8
|
+
'u_matrix': UniformMatrix4f;
|
|
9
9
|
};
|
|
10
10
|
|
|
11
11
|
const clippingMaskUniforms = (context: Context, locations: UniformLocations): ClippingMaskUniformsType => ({
|
|
@@ -8,18 +8,18 @@ import type Tile from '../../source/tile';
|
|
|
8
8
|
import {mat4} from 'gl-matrix';
|
|
9
9
|
|
|
10
10
|
export type CollisionUniformsType = {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
'u_matrix': UniformMatrix4f;
|
|
12
|
+
'u_camera_to_center_distance': Uniform1f;
|
|
13
|
+
'u_pixels_to_tile_units': Uniform1f;
|
|
14
|
+
'u_extrude_scale': Uniform2f;
|
|
15
|
+
'u_overscale_factor': Uniform1f;
|
|
16
16
|
};
|
|
17
17
|
|
|
18
18
|
export type CollisionCircleUniformsType = {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
19
|
+
'u_matrix': UniformMatrix4f;
|
|
20
|
+
'u_inv_matrix': UniformMatrix4f;
|
|
21
|
+
'u_camera_to_center_distance': Uniform1f;
|
|
22
|
+
'u_viewport_size': Uniform2f;
|
|
23
23
|
};
|
|
24
24
|
|
|
25
25
|
const collisionUniforms = (context: Context, locations: UniformLocations): CollisionUniformsType => ({
|
|
@@ -6,10 +6,10 @@ import type Color from '../../style-spec/util/color';
|
|
|
6
6
|
import {mat4} from 'gl-matrix';
|
|
7
7
|
|
|
8
8
|
export type DebugUniformsType = {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
'u_color': UniformColor;
|
|
10
|
+
'u_matrix': UniformMatrix4f;
|
|
11
|
+
'u_overlay': Uniform1i;
|
|
12
|
+
'u_overlay_scale': Uniform1f;
|
|
13
13
|
};
|
|
14
14
|
|
|
15
15
|
const debugUniforms = (context: Context, locations: UniformLocations): DebugUniformsType => ({
|