@mapwhit/tilerenderer 0.50.0 → 0.51.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.
Files changed (142) hide show
  1. package/build/min/package.json +1 -1
  2. package/build/min/src/shaders/.dir +0 -0
  3. package/build/min/src/shaders/_prelude.fragment.glsl.js +14 -0
  4. package/build/min/src/shaders/_prelude.vertex.glsl.js +14 -0
  5. package/build/min/src/shaders/background.fragment.glsl.js +5 -0
  6. package/build/min/src/shaders/background.vertex.glsl.js +1 -0
  7. package/build/min/src/shaders/background_pattern.fragment.glsl.js +5 -0
  8. package/build/min/src/shaders/background_pattern.vertex.glsl.js +1 -0
  9. package/build/min/src/shaders/circle.fragment.glsl.js +20 -0
  10. package/build/min/src/shaders/circle.vertex.glsl.js +17 -0
  11. package/build/min/src/shaders/clipping_mask.fragment.glsl.js +1 -0
  12. package/build/min/src/shaders/clipping_mask.vertex.glsl.js +1 -0
  13. package/build/min/src/shaders/collision_box.fragment.glsl.js +1 -0
  14. package/build/min/src/shaders/collision_box.vertex.glsl.js +1 -0
  15. package/build/min/src/shaders/collision_circle.fragment.glsl.js +1 -0
  16. package/build/min/src/shaders/collision_circle.vertex.glsl.js +1 -0
  17. package/build/min/src/shaders/debug.fragment.glsl.js +1 -0
  18. package/build/min/src/shaders/debug.vertex.glsl.js +1 -0
  19. package/build/min/src/shaders/fill.fragment.glsl.js +10 -0
  20. package/build/min/src/shaders/fill.vertex.glsl.js +7 -0
  21. package/build/min/src/shaders/fill_extrusion.fragment.glsl.js +5 -0
  22. package/build/min/src/shaders/fill_extrusion.vertex.glsl.js +9 -0
  23. package/build/min/src/shaders/fill_extrusion_pattern.fragment.glsl.js +15 -0
  24. package/build/min/src/shaders/fill_extrusion_pattern.vertex.glsl.js +11 -0
  25. package/build/min/src/shaders/fill_outline.fragment.glsl.js +10 -0
  26. package/build/min/src/shaders/fill_outline.vertex.glsl.js +7 -0
  27. package/build/min/src/shaders/fill_outline_pattern.fragment.glsl.js +13 -0
  28. package/build/min/src/shaders/fill_outline_pattern.vertex.glsl.js +9 -0
  29. package/build/min/src/shaders/fill_pattern.fragment.glsl.js +13 -0
  30. package/build/min/src/shaders/fill_pattern.vertex.glsl.js +9 -0
  31. package/build/min/src/shaders/heatmap.fragment.glsl.js +10 -0
  32. package/build/min/src/shaders/heatmap.vertex.glsl.js +8 -0
  33. package/build/min/src/shaders/heatmap_texture.fragment.glsl.js +5 -0
  34. package/build/min/src/shaders/heatmap_texture.vertex.glsl.js +1 -0
  35. package/build/min/src/shaders/hillshade.fragment.glsl.js +7 -0
  36. package/build/min/src/shaders/hillshade.vertex.glsl.js +1 -0
  37. package/build/min/src/shaders/hillshade_prepare.fragment.glsl.js +8 -0
  38. package/build/min/src/shaders/hillshade_prepare.vertex.glsl.js +1 -0
  39. package/build/min/src/shaders/line.fragment.glsl.js +12 -0
  40. package/build/min/src/shaders/line.vertex.glsl.js +17 -0
  41. package/build/min/src/shaders/line_gradient.fragment.glsl.js +10 -0
  42. package/build/min/src/shaders/line_gradient.vertex.glsl.js +16 -0
  43. package/build/min/src/shaders/line_pattern.fragment.glsl.js +15 -0
  44. package/build/min/src/shaders/line_pattern.vertex.glsl.js +20 -0
  45. package/build/min/src/shaders/line_sdf.fragment.glsl.js +17 -0
  46. package/build/min/src/shaders/line_sdf.vertex.glsl.js +20 -0
  47. package/build/min/src/shaders/raster.fragment.glsl.js +5 -0
  48. package/build/min/src/shaders/raster.vertex.glsl.js +1 -0
  49. package/build/min/src/shaders/symbol_icon.fragment.glsl.js +9 -0
  50. package/build/min/src/shaders/symbol_icon.vertex.glsl.js +5 -0
  51. package/build/min/src/shaders/symbol_sdf.fragment.glsl.js +19 -0
  52. package/build/min/src/shaders/symbol_sdf.vertex.glsl.js +13 -0
  53. package/package.json +7 -7
  54. package/src/data/bucket/fill_bucket.js +1 -1
  55. package/src/data/bucket/fill_extrusion_bucket.js +2 -2
  56. package/src/data/bucket/line_bucket.js +1 -1
  57. package/src/data/bucket/symbol_bucket.js +2 -2
  58. package/src/data/feature_index.js +1 -1
  59. package/src/data/program_configuration.js +1 -1
  60. package/src/gl/color_mode.js +1 -1
  61. package/src/gl/value.js +1 -1
  62. package/src/render/draw_debug.js +1 -1
  63. package/src/render/draw_fill.js +1 -1
  64. package/src/render/draw_heatmap.js +1 -1
  65. package/src/render/glyph_manager.js +6 -130
  66. package/src/render/painter.js +1 -1
  67. package/src/render/uniform_binding.js +1 -1
  68. package/src/shaders/index.js +50 -50
  69. package/src/source/geojson_worker_source.js +4 -4
  70. package/src/source/geojson_wrapper.js +34 -26
  71. package/src/source/resources/glyphs.js +73 -0
  72. package/src/source/resources/images.js +68 -0
  73. package/src/source/resources/index.js +22 -0
  74. package/src/source/vector_tile_worker_source.js +5 -5
  75. package/src/source/worker.js +6 -5
  76. package/src/source/worker_tile.js +4 -4
  77. package/src/style/properties.js +1 -2
  78. package/src/style/style.js +3 -3
  79. package/src/style/style_layer/symbol_style_layer.js +1 -1
  80. package/src/style/style_layer.js +1 -1
  81. package/src/style-spec/feature_filter/index.js +43 -34
  82. package/src/style-spec/group_by_layout.js +10 -32
  83. package/src/symbol/mergelines.js +0 -2
  84. package/src/symbol/symbol_layout.js +0 -1
  85. package/src/symbol/symbol_size.js +1 -1
  86. package/src/symbol/transform_text.js +0 -1
  87. package/src/ui/map.js +11 -39
  88. package/src/util/browser.js +3 -18
  89. package/src/util/classify_rings.js +1 -1
  90. package/src/util/dom.js +0 -88
  91. package/src/util/find_pole_of_inaccessibility.js +2 -2
  92. package/src/util/web_worker_transfer.js +4 -4
  93. package/src/style/load_glyph_range.js +0 -17
  94. package/src/style-spec/expression/compound_expression.js +0 -132
  95. package/src/style-spec/expression/definitions/assertion.js +0 -116
  96. package/src/style-spec/expression/definitions/at.js +0 -57
  97. package/src/style-spec/expression/definitions/case.js +0 -73
  98. package/src/style-spec/expression/definitions/coalesce.js +0 -66
  99. package/src/style-spec/expression/definitions/coercion.js +0 -120
  100. package/src/style-spec/expression/definitions/collator.js +0 -80
  101. package/src/style-spec/expression/definitions/comparison.js +0 -193
  102. package/src/style-spec/expression/definitions/format.js +0 -97
  103. package/src/style-spec/expression/definitions/index.js +0 -339
  104. package/src/style-spec/expression/definitions/interpolate.js +0 -245
  105. package/src/style-spec/expression/definitions/length.js +0 -54
  106. package/src/style-spec/expression/definitions/let.js +0 -60
  107. package/src/style-spec/expression/definitions/literal.js +0 -69
  108. package/src/style-spec/expression/definitions/match.js +0 -142
  109. package/src/style-spec/expression/definitions/step.js +0 -116
  110. package/src/style-spec/expression/definitions/var.js +0 -38
  111. package/src/style-spec/expression/evaluation_context.js +0 -38
  112. package/src/style-spec/expression/index.js +0 -330
  113. package/src/style-spec/expression/is_constant.js +0 -63
  114. package/src/style-spec/expression/parsing_context.js +0 -221
  115. package/src/style-spec/expression/parsing_error.js +0 -9
  116. package/src/style-spec/expression/runtime_error.js +0 -12
  117. package/src/style-spec/expression/scope.js +0 -34
  118. package/src/style-spec/expression/stops.js +0 -37
  119. package/src/style-spec/expression/types/collator.js +0 -24
  120. package/src/style-spec/expression/types/formatted.js +0 -39
  121. package/src/style-spec/expression/types.js +0 -88
  122. package/src/style-spec/expression/values.js +0 -149
  123. package/src/style-spec/function/convert.js +0 -240
  124. package/src/style-spec/function/index.js +0 -303
  125. package/src/style-spec/util/color.js +0 -73
  126. package/src/style-spec/util/color_spaces.js +0 -128
  127. package/src/style-spec/util/get_type.js +0 -18
  128. package/src/style-spec/util/interpolate.js +0 -21
  129. package/src/style-spec/util/properties.js +0 -17
  130. package/src/style-spec/util/result.js +0 -19
  131. package/src/ui/anchor.js +0 -24
  132. package/src/ui/bind_handlers.js +0 -199
  133. package/src/ui/events.js +0 -210
  134. package/src/ui/handler/box_zoom.js +0 -151
  135. package/src/ui/handler/dblclick_zoom.js +0 -91
  136. package/src/ui/handler/drag_pan.js +0 -285
  137. package/src/ui/handler/drag_rotate.js +0 -290
  138. package/src/ui/handler/frame.js +0 -28
  139. package/src/ui/handler/inertia.js +0 -45
  140. package/src/ui/handler/keyboard.js +0 -148
  141. package/src/ui/handler/scroll_zoom.js +0 -284
  142. package/src/ui/handler/touch_zoom_rotate.js +0 -263
@@ -4,7 +4,7 @@ const { members: layoutAttributes } = require('./fill_attributes');
4
4
  const SegmentVector = require('../segment');
5
5
  const { ProgramConfigurationSet } = require('../program_configuration');
6
6
  const { LineIndexArray, TriangleIndexArray } = require('../index_array_type');
7
- const earcut = require('earcut');
7
+ const { default: earcut } = require('earcut');
8
8
  const classifyRings = require('../../util/classify_rings');
9
9
  const assert = require('assert');
10
10
  const EARCUT_MAX_RINGS = 500;
@@ -5,10 +5,10 @@ const SegmentVector = require('../segment');
5
5
  const { ProgramConfigurationSet } = require('../program_configuration');
6
6
  const { TriangleIndexArray } = require('../index_array_type');
7
7
  const EXTENT = require('../extent');
8
- const earcut = require('earcut');
8
+ const { default: earcut } = require('earcut');
9
9
  const {
10
10
  VectorTileFeature: { types: vectorTileFeatureTypes }
11
- } = require('@mapbox/vector-tile');
11
+ } = require('@mapwhit/vector-tile');
12
12
  const classifyRings = require('../../util/classify_rings');
13
13
  const assert = require('assert');
14
14
  const EARCUT_MAX_RINGS = 500;
@@ -5,7 +5,7 @@ const SegmentVector = require('../segment');
5
5
  const { ProgramConfigurationSet } = require('../program_configuration');
6
6
  const { TriangleIndexArray } = require('../index_array_type');
7
7
  const EXTENT = require('../extent');
8
- const mvt = require('@mapbox/vector-tile');
8
+ const mvt = require('@mapwhit/vector-tile');
9
9
  const vectorTileFeatureTypes = mvt.VectorTileFeature.types;
10
10
  const { register } = require('../../util/transfer_registry');
11
11
  const { hasPattern, addPatternDependencies } = require('./pattern_bucket_features');
@@ -26,13 +26,13 @@ const transformText = require('../../symbol/transform_text');
26
26
  const mergeLines = require('../../symbol/mergelines');
27
27
  const { allowsVerticalWritingMode } = require('../../util/script_detection');
28
28
  const loadGeometry = require('../load_geometry');
29
- const mvt = require('@mapbox/vector-tile');
29
+ const mvt = require('@mapwhit/vector-tile');
30
30
  const vectorTileFeatureTypes = mvt.VectorTileFeature.types;
31
31
  const { verticalizedCharacterMap } = require('../../util/verticalize_punctuation');
32
32
  const { getSizeData } = require('../../symbol/symbol_size');
33
33
  const { register } = require('../../util/transfer_registry');
34
34
  const EvaluationParameters = require('../../style/evaluation_parameters');
35
- const { Formatted } = require('../../style-spec/expression/types/formatted');
35
+ const { Formatted } = require('@mapwhit/style-expressions');
36
36
 
37
37
  // Opacity arrays are frequently updated but don't contain a lot of information, so we pack them
38
38
  // tight. Each Uint32 is actually four duplicate Uint8s for the four corners of a glyph
@@ -3,7 +3,7 @@ const EXTENT = require('./extent');
3
3
  const featureFilter = require('../style-spec/feature_filter');
4
4
  const Grid = require('grid-index');
5
5
  const dictionaryCoder = require('../util/dictionary_coder');
6
- const vt = require('@mapbox/vector-tile');
6
+ const vt = require('@mapwhit/vector-tile');
7
7
  const Protobuf = require('@mapwhit/pbf');
8
8
  const GeoJSONFeature = require('../util/vectortile_to_geojson');
9
9
  const { arraysIntersect } = require('../util/object');
@@ -1,5 +1,5 @@
1
1
  const { packUint8ToFloat } = require('../shaders/encode_attribute');
2
- const { supportsPropertyExpression } = require('../style-spec/util/properties');
2
+ const { supportsPropertyExpression } = require('@mapwhit/style-expressions');
3
3
  const { register } = require('../util/transfer_registry');
4
4
  const { PossiblyEvaluatedPropertyValue } = require('../style/properties');
5
5
  const {
@@ -1,4 +1,4 @@
1
- const Color = require('../style-spec/util/color');
1
+ const { Color } = require('@mapwhit/style-expressions');
2
2
 
3
3
  const ZERO = 0x0000;
4
4
  const ONE = 0x0001;
package/src/gl/value.js CHANGED
@@ -1,4 +1,4 @@
1
- const Color = require('../style-spec/util/color');
1
+ const { Color } = require('@mapwhit/style-expressions');
2
2
 
3
3
  class ClearColor {
4
4
  constructor(context) {
@@ -8,7 +8,7 @@ const DepthMode = require('../gl/depth_mode');
8
8
  const StencilMode = require('../gl/stencil_mode');
9
9
  const CullFaceMode = require('../gl/cull_face_mode');
10
10
  const { debugUniformValues } = require('./program/debug_program');
11
- const Color = require('../style-spec/util/color');
11
+ const { Color } = require('@mapwhit/style-expressions');
12
12
 
13
13
  module.exports = drawDebug;
14
14
 
@@ -1,4 +1,4 @@
1
- const Color = require('../style-spec/util/color');
1
+ const { Color } = require('@mapwhit/style-expressions');
2
2
  const DepthMode = require('../gl/depth_mode');
3
3
  const CullFaceMode = require('../gl/cull_face_mode');
4
4
  const {
@@ -1,5 +1,5 @@
1
1
  const Texture = require('./texture');
2
- const Color = require('../style-spec/util/color');
2
+ const { Color } = require('@mapwhit/style-expressions');
3
3
  const DepthMode = require('../gl/depth_mode');
4
4
  const StencilMode = require('../gl/stencil_mode');
5
5
  const ColorMode = require('../gl/color_mode');
@@ -1,140 +1,16 @@
1
- const loadGlyphRange = require('../style/load_glyph_range');
2
-
3
- const TinySDF = require('@mapbox/tiny-sdf');
4
- const isChar = require('../util/is_char_in_unicode_block');
5
- const { AlphaImage } = require('../util/image');
6
-
7
1
  class GlyphManager {
8
- // exposed as statics to enable stubbing in unit tests
9
- static loadGlyphRange = loadGlyphRange;
10
- static TinySDF = TinySDF;
11
-
12
- constructor(localIdeographFontFamily) {
13
- this.localIdeographFontFamily = localIdeographFontFamily;
14
- this.entries = {};
15
- }
2
+ #cache = {};
16
3
 
17
4
  setGlyphsLoader(loader) {
18
5
  this.loader = loader;
19
6
  }
20
7
 
21
- async getGlyphs(glyphs) {
22
- const all = [];
23
- for (const stack in glyphs) {
24
- for (const id of glyphs[stack]) {
25
- all.push(retrieveGlyph(this, { stack, id }));
26
- }
27
- }
28
- const fetchedGlyphs = await Promise.all(all);
29
- const result = {};
30
- for (const { stack, id, glyph } of fetchedGlyphs) {
31
- // Clone the glyph so that our own copy of its ArrayBuffer doesn't get transferred.
32
- (result[stack] ??= {})[id] = cloneGlyph(glyph);
33
- }
34
- return result;
35
-
36
- function cloneGlyph(glyph) {
37
- if (glyph) {
38
- return {
39
- id: glyph.id,
40
- bitmap: glyph.bitmap.clone(),
41
- metrics: glyph.metrics
42
- };
43
- }
44
- }
45
-
46
- async function retrieveGlyph({ entries, loader, localIdeographFontFamily }, { stack, id }) {
47
- const entry = (entries[stack] ??= { glyphs: {}, requests: {} });
48
-
49
- let glyph = entry.glyphs[id];
50
- if (glyph) {
51
- return { stack, id, glyph };
52
- }
53
-
54
- glyph = tinySDF(localIdeographFontFamily, entry, stack, id);
55
- if (glyph) {
56
- return { stack, id, glyph };
57
- }
58
-
59
- const range = Math.floor(id / 256);
60
- if (range * 256 > 65535) {
61
- throw new Error('glyphs > 65535 not supported');
62
- }
63
-
64
- const promise = (entry.requests[range] ??= GlyphManager.loadGlyphRange(stack, range, loader));
65
- const response = await promise;
66
- if (response) {
67
- for (const id in response) {
68
- entry.glyphs[+id] = response[+id];
69
- }
70
- }
71
- delete entry.requests[range];
72
- return { stack, id, glyph: response?.[id] || null };
73
- }
8
+ async loadGlyphRange(stack, range) {
9
+ this.#cache[stack] ??= {};
10
+ const promise = (this.#cache[stack][range] ??= this.loader(stack, range));
11
+ const response = await promise;
12
+ return response.slice();
74
13
  }
75
14
  }
76
15
 
77
16
  module.exports = GlyphManager;
78
-
79
- /**
80
- * Creates a glyph descriptor for a character using TinySDF if the character belongs to
81
- * the CJK Unified Ideographs or Hangul Syllables ranges.
82
- *
83
- * The function checks if the provided font family is valid and whether the Unicode code
84
- * point (id) falls within the supported character ranges. If so, it creates or reuses a
85
- * TinySDF instance from the given entry to generate a bitmap for the character.
86
- *
87
- * @param {string} family - The font family to be used for rendering the glyph.
88
- * @param {Object} entry - An object containing glyph-related data. May store a cached TinySDF instance.
89
- * @param {string} stack - A string representing the font style stack (e.g., "bold", "medium", "light") to determine the font weight.
90
- * @param {number} id - The Unicode code point of the character to render.
91
- * @returns {Object|undefined} An object with the glyph descriptor containing:
92
- * - id {number}: The Unicode code point.
93
- * - bitmap {AlphaImage}: An image instance created from the glyph bitmap.
94
- * - metrics {Object}: An object containing rendering metrics:
95
- * - width {number}: The width of the glyph.
96
- * - height {number}: The height of the glyph.
97
- * - left {number}: The left bearing for the glyph.
98
- * - top {number}: The top bearing for the glyph (used for vertical offset).
99
- * - advance {number}: The advance width for spacing the glyph.
100
- *
101
- * Returns undefined if no font family is provided or if the character is not within the supported ranges.
102
- */
103
- function tinySDF(family, entry, stack, id) {
104
- if (!family) {
105
- return;
106
- }
107
-
108
- if (!isChar['CJK Unified Ideographs'](id) && !isChar['Hangul Syllables'](id)) {
109
- return;
110
- }
111
-
112
- const tinySDF = getTinySDF();
113
- return {
114
- id,
115
- bitmap: new AlphaImage({ width: 30, height: 30 }, tinySDF.draw(String.fromCharCode(id))),
116
- metrics: {
117
- width: 24,
118
- height: 24,
119
- left: 0,
120
- top: -8,
121
- advance: 24
122
- }
123
- };
124
-
125
- function getTinySDF() {
126
- const { tinySDF } = entry;
127
- if (tinySDF) {
128
- return tinySDF;
129
- }
130
- let fontWeight = '400';
131
- if (/bold/i.test(stack)) {
132
- fontWeight = '900';
133
- } else if (/medium/i.test(stack)) {
134
- fontWeight = '500';
135
- } else if (/light/i.test(stack)) {
136
- fontWeight = '200';
137
- }
138
- return (entry.tinySDF = new GlyphManager.TinySDF(24, 3, 8, 0.25, family, fontWeight));
139
- }
140
- }
@@ -20,7 +20,7 @@ const ColorMode = require('../gl/color_mode');
20
20
  const CullFaceMode = require('../gl/cull_face_mode');
21
21
  const updateTileMasks = require('./tile_mask');
22
22
  const { clippingMaskUniformValues } = require('./program/clipping_mask_program');
23
- const Color = require('../style-spec/util/color');
23
+ const { Color } = require('@mapwhit/style-expressions');
24
24
  const symbol = require('./draw_symbol');
25
25
  const circle = require('./draw_circle');
26
26
  const heatmap = require('./draw_heatmap');
@@ -1,4 +1,4 @@
1
- const Color = require('../style-spec/util/color');
1
+ const { Color } = require('@mapwhit/style-expressions');
2
2
 
3
3
  class Uniform {
4
4
  constructor(context, location) {
@@ -1,103 +1,103 @@
1
1
  const shaders = {
2
2
  prelude: {
3
- fragmentSource: require('../../build/min/src/shaders/_prelude.fragment.glsl.txt'),
4
- vertexSource: require('../../build/min/src/shaders/_prelude.vertex.glsl.txt')
3
+ fragmentSource: require('../../build/min/src/shaders/_prelude.fragment.glsl.js'),
4
+ vertexSource: require('../../build/min/src/shaders/_prelude.vertex.glsl.js')
5
5
  },
6
6
  background: {
7
- fragmentSource: require('../../build/min/src/shaders/background.fragment.glsl.txt'),
8
- vertexSource: require('../../build/min/src/shaders/background.vertex.glsl.txt')
7
+ fragmentSource: require('../../build/min/src/shaders/background.fragment.glsl.js'),
8
+ vertexSource: require('../../build/min/src/shaders/background.vertex.glsl.js')
9
9
  },
10
10
  backgroundPattern: {
11
- fragmentSource: require('../../build/min/src/shaders/background_pattern.fragment.glsl.txt'),
12
- vertexSource: require('../../build/min/src/shaders/background_pattern.vertex.glsl.txt')
11
+ fragmentSource: require('../../build/min/src/shaders/background_pattern.fragment.glsl.js'),
12
+ vertexSource: require('../../build/min/src/shaders/background_pattern.vertex.glsl.js')
13
13
  },
14
14
  circle: {
15
- fragmentSource: require('../../build/min/src/shaders/circle.fragment.glsl.txt'),
16
- vertexSource: require('../../build/min/src/shaders/circle.vertex.glsl.txt')
15
+ fragmentSource: require('../../build/min/src/shaders/circle.fragment.glsl.js'),
16
+ vertexSource: require('../../build/min/src/shaders/circle.vertex.glsl.js')
17
17
  },
18
18
  clippingMask: {
19
- fragmentSource: require('../../build/min/src/shaders/clipping_mask.fragment.glsl.txt'),
20
- vertexSource: require('../../build/min/src/shaders/clipping_mask.vertex.glsl.txt')
19
+ fragmentSource: require('../../build/min/src/shaders/clipping_mask.fragment.glsl.js'),
20
+ vertexSource: require('../../build/min/src/shaders/clipping_mask.vertex.glsl.js')
21
21
  },
22
22
  heatmap: {
23
- fragmentSource: require('../../build/min/src/shaders/heatmap.fragment.glsl.txt'),
24
- vertexSource: require('../../build/min/src/shaders/heatmap.vertex.glsl.txt')
23
+ fragmentSource: require('../../build/min/src/shaders/heatmap.fragment.glsl.js'),
24
+ vertexSource: require('../../build/min/src/shaders/heatmap.vertex.glsl.js')
25
25
  },
26
26
  heatmapTexture: {
27
- fragmentSource: require('../../build/min/src/shaders/heatmap_texture.fragment.glsl.txt'),
28
- vertexSource: require('../../build/min/src/shaders/heatmap_texture.vertex.glsl.txt')
27
+ fragmentSource: require('../../build/min/src/shaders/heatmap_texture.fragment.glsl.js'),
28
+ vertexSource: require('../../build/min/src/shaders/heatmap_texture.vertex.glsl.js')
29
29
  },
30
30
  collisionBox: {
31
- fragmentSource: require('../../build/min/src/shaders/collision_box.fragment.glsl.txt'),
32
- vertexSource: require('../../build/min/src/shaders/collision_box.vertex.glsl.txt')
31
+ fragmentSource: require('../../build/min/src/shaders/collision_box.fragment.glsl.js'),
32
+ vertexSource: require('../../build/min/src/shaders/collision_box.vertex.glsl.js')
33
33
  },
34
34
  collisionCircle: {
35
- fragmentSource: require('../../build/min/src/shaders/collision_circle.fragment.glsl.txt'),
36
- vertexSource: require('../../build/min/src/shaders/collision_circle.vertex.glsl.txt')
35
+ fragmentSource: require('../../build/min/src/shaders/collision_circle.fragment.glsl.js'),
36
+ vertexSource: require('../../build/min/src/shaders/collision_circle.vertex.glsl.js')
37
37
  },
38
38
  debug: {
39
- fragmentSource: require('../../build/min/src/shaders/debug.fragment.glsl.txt'),
40
- vertexSource: require('../../build/min/src/shaders/debug.vertex.glsl.txt')
39
+ fragmentSource: require('../../build/min/src/shaders/debug.fragment.glsl.js'),
40
+ vertexSource: require('../../build/min/src/shaders/debug.vertex.glsl.js')
41
41
  },
42
42
  fill: {
43
- fragmentSource: require('../../build/min/src/shaders/fill.fragment.glsl.txt'),
44
- vertexSource: require('../../build/min/src/shaders/fill.vertex.glsl.txt')
43
+ fragmentSource: require('../../build/min/src/shaders/fill.fragment.glsl.js'),
44
+ vertexSource: require('../../build/min/src/shaders/fill.vertex.glsl.js')
45
45
  },
46
46
  fillOutline: {
47
- fragmentSource: require('../../build/min/src/shaders/fill_outline.fragment.glsl.txt'),
48
- vertexSource: require('../../build/min/src/shaders/fill_outline.vertex.glsl.txt')
47
+ fragmentSource: require('../../build/min/src/shaders/fill_outline.fragment.glsl.js'),
48
+ vertexSource: require('../../build/min/src/shaders/fill_outline.vertex.glsl.js')
49
49
  },
50
50
  fillOutlinePattern: {
51
- fragmentSource: require('../../build/min/src/shaders/fill_outline_pattern.fragment.glsl.txt'),
52
- vertexSource: require('../../build/min/src/shaders/fill_outline_pattern.vertex.glsl.txt')
51
+ fragmentSource: require('../../build/min/src/shaders/fill_outline_pattern.fragment.glsl.js'),
52
+ vertexSource: require('../../build/min/src/shaders/fill_outline_pattern.vertex.glsl.js')
53
53
  },
54
54
  fillPattern: {
55
- fragmentSource: require('../../build/min/src/shaders/fill_pattern.fragment.glsl.txt'),
56
- vertexSource: require('../../build/min/src/shaders/fill_pattern.vertex.glsl.txt')
55
+ fragmentSource: require('../../build/min/src/shaders/fill_pattern.fragment.glsl.js'),
56
+ vertexSource: require('../../build/min/src/shaders/fill_pattern.vertex.glsl.js')
57
57
  },
58
58
  fillExtrusion: {
59
- fragmentSource: require('../../build/min/src/shaders/fill_extrusion.fragment.glsl.txt'),
60
- vertexSource: require('../../build/min/src/shaders/fill_extrusion.vertex.glsl.txt')
59
+ fragmentSource: require('../../build/min/src/shaders/fill_extrusion.fragment.glsl.js'),
60
+ vertexSource: require('../../build/min/src/shaders/fill_extrusion.vertex.glsl.js')
61
61
  },
62
62
  fillExtrusionPattern: {
63
- fragmentSource: require('../../build/min/src/shaders/fill_extrusion_pattern.fragment.glsl.txt'),
64
- vertexSource: require('../../build/min/src/shaders/fill_extrusion_pattern.vertex.glsl.txt')
63
+ fragmentSource: require('../../build/min/src/shaders/fill_extrusion_pattern.fragment.glsl.js'),
64
+ vertexSource: require('../../build/min/src/shaders/fill_extrusion_pattern.vertex.glsl.js')
65
65
  },
66
66
  hillshadePrepare: {
67
- fragmentSource: require('../../build/min/src/shaders/hillshade_prepare.fragment.glsl.txt'),
68
- vertexSource: require('../../build/min/src/shaders/hillshade_prepare.vertex.glsl.txt')
67
+ fragmentSource: require('../../build/min/src/shaders/hillshade_prepare.fragment.glsl.js'),
68
+ vertexSource: require('../../build/min/src/shaders/hillshade_prepare.vertex.glsl.js')
69
69
  },
70
70
  hillshade: {
71
- fragmentSource: require('../../build/min/src/shaders/hillshade.fragment.glsl.txt'),
72
- vertexSource: require('../../build/min/src/shaders/hillshade.vertex.glsl.txt')
71
+ fragmentSource: require('../../build/min/src/shaders/hillshade.fragment.glsl.js'),
72
+ vertexSource: require('../../build/min/src/shaders/hillshade.vertex.glsl.js')
73
73
  },
74
74
  line: {
75
- fragmentSource: require('../../build/min/src/shaders/line.fragment.glsl.txt'),
76
- vertexSource: require('../../build/min/src/shaders/line.vertex.glsl.txt')
75
+ fragmentSource: require('../../build/min/src/shaders/line.fragment.glsl.js'),
76
+ vertexSource: require('../../build/min/src/shaders/line.vertex.glsl.js')
77
77
  },
78
78
  lineGradient: {
79
- fragmentSource: require('../../build/min/src/shaders/line_gradient.fragment.glsl.txt'),
80
- vertexSource: require('../../build/min/src/shaders/line_gradient.vertex.glsl.txt')
79
+ fragmentSource: require('../../build/min/src/shaders/line_gradient.fragment.glsl.js'),
80
+ vertexSource: require('../../build/min/src/shaders/line_gradient.vertex.glsl.js')
81
81
  },
82
82
  linePattern: {
83
- fragmentSource: require('../../build/min/src/shaders/line_pattern.fragment.glsl.txt'),
84
- vertexSource: require('../../build/min/src/shaders/line_pattern.vertex.glsl.txt')
83
+ fragmentSource: require('../../build/min/src/shaders/line_pattern.fragment.glsl.js'),
84
+ vertexSource: require('../../build/min/src/shaders/line_pattern.vertex.glsl.js')
85
85
  },
86
86
  lineSDF: {
87
- fragmentSource: require('../../build/min/src/shaders/line_sdf.fragment.glsl.txt'),
88
- vertexSource: require('../../build/min/src/shaders/line_sdf.vertex.glsl.txt')
87
+ fragmentSource: require('../../build/min/src/shaders/line_sdf.fragment.glsl.js'),
88
+ vertexSource: require('../../build/min/src/shaders/line_sdf.vertex.glsl.js')
89
89
  },
90
90
  raster: {
91
- fragmentSource: require('../../build/min/src/shaders/raster.fragment.glsl.txt'),
92
- vertexSource: require('../../build/min/src/shaders/raster.vertex.glsl.txt')
91
+ fragmentSource: require('../../build/min/src/shaders/raster.fragment.glsl.js'),
92
+ vertexSource: require('../../build/min/src/shaders/raster.vertex.glsl.js')
93
93
  },
94
94
  symbolIcon: {
95
- fragmentSource: require('../../build/min/src/shaders/symbol_icon.fragment.glsl.txt'),
96
- vertexSource: require('../../build/min/src/shaders/symbol_icon.vertex.glsl.txt')
95
+ fragmentSource: require('../../build/min/src/shaders/symbol_icon.fragment.glsl.js'),
96
+ vertexSource: require('../../build/min/src/shaders/symbol_icon.vertex.glsl.js')
97
97
  },
98
98
  symbolSDF: {
99
- fragmentSource: require('../../build/min/src/shaders/symbol_sdf.fragment.glsl.txt'),
100
- vertexSource: require('../../build/min/src/shaders/symbol_sdf.vertex.glsl.txt')
99
+ fragmentSource: require('../../build/min/src/shaders/symbol_sdf.fragment.glsl.js'),
100
+ vertexSource: require('../../build/min/src/shaders/symbol_sdf.vertex.glsl.js')
101
101
  }
102
102
  };
103
103
 
@@ -2,7 +2,7 @@ const rewind = require('@mapwhit/geojson-rewind');
2
2
  const GeoJSONWrapper = require('./geojson_wrapper');
3
3
  const vtpbf = require('@mapwhit/vt-pbf');
4
4
  const supercluster = require('supercluster');
5
- const geojsonvt = require('geojson-vt');
5
+ const { default: geojsonvt } = require('geojson-vt');
6
6
  const VectorTileWorkerSource = require('./vector_tile_worker_source');
7
7
 
8
8
  function loadGeoJSONTile(params) {
@@ -46,7 +46,7 @@ function loadGeoJSONTile(params) {
46
46
  * This class is designed to be easily reused to support custom source types
47
47
  * for data formats that can be parsed/converted into an in-memory GeoJSON
48
48
  * representation. To do so, create it with
49
- * `new GeoJSONWorkerSource(actor, layerIndex, customLoadGeoJSONFunction)`.
49
+ * `new GeoJSONWorkerSource(resources, layerIndex, customLoadGeoJSONFunction)`.
50
50
  * For a full example, see [mapbox-gl-topojson](https://github.com/developmentseed/mapbox-gl-topojson).
51
51
  *
52
52
  */
@@ -56,8 +56,8 @@ class GeoJSONWorkerSource extends VectorTileWorkerSource {
56
56
  * GeoJSON based on parameters passed from the main-thread Source.
57
57
  * See {@link GeoJSONWorkerSource#loadGeoJSON}.
58
58
  */
59
- constructor(actor, layerIndex, loadGeoJSON) {
60
- super(actor, layerIndex, loadGeoJSONTile);
59
+ constructor(resources, layerIndex, loadGeoJSON) {
60
+ super(resources, layerIndex, loadGeoJSONTile);
61
61
  if (loadGeoJSON) {
62
62
  this.loadGeoJSON = loadGeoJSON;
63
63
  }
@@ -1,9 +1,9 @@
1
1
  const Point = require('@mapbox/point-geometry');
2
-
3
- const mvt = require('@mapbox/vector-tile');
4
- const toGeoJSON = mvt.VectorTileFeature.prototype.toGeoJSON;
2
+ const { VectorTileFeature } = require('@mapwhit/vector-tile');
5
3
  const EXTENT = require('../data/extent');
6
4
 
5
+ const { toGeoJSON } = VectorTileFeature.prototype;
6
+
7
7
  // The feature type used by geojson-vt and supercluster. Should be extracted to
8
8
  // global type and used in module definitions for those two modules.
9
9
 
@@ -11,10 +11,6 @@ class FeatureWrapper {
11
11
  constructor(feature) {
12
12
  this._feature = feature;
13
13
 
14
- this.extent = EXTENT;
15
- this.type = feature.type;
16
- this.properties = feature.tags;
17
-
18
14
  // If the feature has a top-level `id` property, copy it over, but only
19
15
  // if it can be coerced to an integer, because this wrapper is used for
20
16
  // serializing geojson feature data into vector tile PBF data, and the
@@ -26,23 +22,22 @@ class FeatureWrapper {
26
22
  }
27
23
  }
28
24
 
25
+ get type() {
26
+ return this._feature.type;
27
+ }
28
+
29
+ get properties() {
30
+ return this._feature.tags;
31
+ }
32
+
33
+ get extent() {
34
+ return EXTENT;
35
+ }
36
+
29
37
  loadGeometry() {
30
- if (this._feature.type === 1) {
31
- const geometry = [];
32
- for (const point of this._feature.geometry) {
33
- geometry.push([new Point(point[0], point[1])]);
34
- }
35
- return geometry;
36
- }
37
- const geometry = [];
38
- for (const ring of this._feature.geometry) {
39
- const newRing = [];
40
- for (const point of ring) {
41
- newRing.push(new Point(point[0], point[1]));
42
- }
43
- geometry.push(newRing);
44
- }
45
- return geometry;
38
+ return this.type === 1
39
+ ? this._feature.geometry.map(p => [makePoint(p)])
40
+ : this._feature.geometry.map(ring => ring.map(makePoint));
46
41
  }
47
42
 
48
43
  toGeoJSON(x, y, z) {
@@ -53,15 +48,28 @@ class FeatureWrapper {
53
48
  class GeoJSONWrapper {
54
49
  constructor(features) {
55
50
  this.layers = { _geojsonTileLayer: this };
56
- this.name = '_geojsonTileLayer';
57
- this.extent = EXTENT;
58
- this.length = features.length;
59
51
  this._features = features;
60
52
  }
61
53
 
54
+ get extent() {
55
+ return EXTENT;
56
+ }
57
+
58
+ get length() {
59
+ return this._features.length;
60
+ }
61
+
62
+ get name() {
63
+ return '_geojsonTileLayer';
64
+ }
65
+
62
66
  feature(i) {
63
67
  return new FeatureWrapper(this._features[i]);
64
68
  }
65
69
  }
66
70
 
67
71
  module.exports = GeoJSONWrapper;
72
+
73
+ function makePoint(arr) {
74
+ return new Point(arr[0], arr[1]);
75
+ }
@@ -0,0 +1,73 @@
1
+ const parseGlyphPBF = require('../../style/parse_glyph_pbf');
2
+
3
+ module.exports = glyphCache;
4
+
5
+ const MAX_GLYPH_ID = 65535;
6
+
7
+ function glyphCache({ actor, mapId, parseGlyphs = parseGlyphPBF }) {
8
+ const entries = {};
9
+
10
+ return {
11
+ getGlyphs
12
+ };
13
+
14
+ async function getGlyphs({ stacks }) {
15
+ const all = [];
16
+ for (const [stack, ids] of Object.entries(stacks)) {
17
+ const addedRanges = new Set();
18
+ for (const id of ids) {
19
+ if (id > MAX_GLYPH_ID) {
20
+ continue;
21
+ }
22
+ const range = Math.floor(id / 256);
23
+ if (!addedRanges.has(range) && !hasRange(stack, range)) {
24
+ addedRanges.add(range);
25
+ all.push(retrieveGlyphRange({ stack, range }));
26
+ }
27
+ }
28
+ }
29
+ if (all.length > 0) {
30
+ await Promise.all(all);
31
+ }
32
+ const result = {};
33
+ for (const [stack, ids] of Object.entries(stacks)) {
34
+ const entry = getEntry(stack);
35
+ const resultStack = (result[stack] ??= {});
36
+ for (const id of ids) {
37
+ if (id <= MAX_GLYPH_ID) {
38
+ resultStack[id] = entry.glyphs[id] ?? null;
39
+ } else {
40
+ resultStack[id] = null;
41
+ }
42
+ }
43
+ }
44
+ return result;
45
+ }
46
+
47
+ async function retrieveGlyphRange({ stack, range }) {
48
+ const entry = getEntry(stack);
49
+ const data = await loadGlyphRange(entry, stack, range);
50
+ if (!data) {
51
+ return null;
52
+ }
53
+ for (const glyph of parseGlyphs(data)) {
54
+ entry.glyphs[glyph.id] = glyph;
55
+ }
56
+ }
57
+
58
+ async function loadGlyphRange(entry, stack, range) {
59
+ const promise = (entry.requests[range] ??= actor.send('loadGlyphRange', { stack, range }, mapId));
60
+ const data = await promise;
61
+ delete entry.requests[range];
62
+ entry.ranges[range] = true;
63
+ return data;
64
+ }
65
+
66
+ function getEntry(stack) {
67
+ return (entries[stack] ??= { glyphs: {}, requests: {}, ranges: {} });
68
+ }
69
+
70
+ function hasRange(stack, range) {
71
+ return getEntry(stack).ranges[range];
72
+ }
73
+ }