@mapwhit/tilerenderer 0.47.1

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 (356) hide show
  1. package/LICENSE.txt +87 -0
  2. package/README.md +25 -0
  3. package/build/min/.dir +0 -0
  4. package/build/min/package.json +3 -0
  5. package/build/min/src/shaders/_prelude.fragment.glsl.txt +13 -0
  6. package/build/min/src/shaders/_prelude.vertex.glsl.txt +14 -0
  7. package/build/min/src/shaders/background.fragment.glsl.txt +5 -0
  8. package/build/min/src/shaders/background.vertex.glsl.txt +1 -0
  9. package/build/min/src/shaders/background_pattern.fragment.glsl.txt +5 -0
  10. package/build/min/src/shaders/background_pattern.vertex.glsl.txt +1 -0
  11. package/build/min/src/shaders/circle.fragment.glsl.txt +20 -0
  12. package/build/min/src/shaders/circle.vertex.glsl.txt +17 -0
  13. package/build/min/src/shaders/clipping_mask.fragment.glsl.txt +1 -0
  14. package/build/min/src/shaders/clipping_mask.vertex.glsl.txt +1 -0
  15. package/build/min/src/shaders/collision_box.fragment.glsl.txt +1 -0
  16. package/build/min/src/shaders/collision_box.vertex.glsl.txt +1 -0
  17. package/build/min/src/shaders/collision_circle.fragment.glsl.txt +1 -0
  18. package/build/min/src/shaders/collision_circle.vertex.glsl.txt +1 -0
  19. package/build/min/src/shaders/debug.fragment.glsl.txt +1 -0
  20. package/build/min/src/shaders/debug.vertex.glsl.txt +1 -0
  21. package/build/min/src/shaders/fill.fragment.glsl.txt +10 -0
  22. package/build/min/src/shaders/fill.vertex.glsl.txt +7 -0
  23. package/build/min/src/shaders/fill_extrusion.fragment.glsl.txt +13 -0
  24. package/build/min/src/shaders/fill_extrusion.vertex.glsl.txt +9 -0
  25. package/build/min/src/shaders/fill_extrusion_pattern.fragment.glsl.txt +15 -0
  26. package/build/min/src/shaders/fill_extrusion_pattern.vertex.glsl.txt +11 -0
  27. package/build/min/src/shaders/fill_outline.fragment.glsl.txt +10 -0
  28. package/build/min/src/shaders/fill_outline.vertex.glsl.txt +7 -0
  29. package/build/min/src/shaders/fill_outline_pattern.fragment.glsl.txt +13 -0
  30. package/build/min/src/shaders/fill_outline_pattern.vertex.glsl.txt +9 -0
  31. package/build/min/src/shaders/fill_pattern.fragment.glsl.txt +13 -0
  32. package/build/min/src/shaders/fill_pattern.vertex.glsl.txt +9 -0
  33. package/build/min/src/shaders/heatmap.fragment.glsl.txt +10 -0
  34. package/build/min/src/shaders/heatmap.vertex.glsl.txt +8 -0
  35. package/build/min/src/shaders/heatmap_texture.fragment.glsl.txt +5 -0
  36. package/build/min/src/shaders/heatmap_texture.vertex.glsl.txt +1 -0
  37. package/build/min/src/shaders/hillshade.fragment.glsl.txt +7 -0
  38. package/build/min/src/shaders/hillshade.vertex.glsl.txt +1 -0
  39. package/build/min/src/shaders/hillshade_prepare.fragment.glsl.txt +8 -0
  40. package/build/min/src/shaders/hillshade_prepare.vertex.glsl.txt +1 -0
  41. package/build/min/src/shaders/line.fragment.glsl.txt +12 -0
  42. package/build/min/src/shaders/line.vertex.glsl.txt +17 -0
  43. package/build/min/src/shaders/line_gradient.fragment.glsl.txt +10 -0
  44. package/build/min/src/shaders/line_gradient.vertex.glsl.txt +16 -0
  45. package/build/min/src/shaders/line_pattern.fragment.glsl.txt +15 -0
  46. package/build/min/src/shaders/line_pattern.vertex.glsl.txt +20 -0
  47. package/build/min/src/shaders/line_sdf.fragment.glsl.txt +17 -0
  48. package/build/min/src/shaders/line_sdf.vertex.glsl.txt +20 -0
  49. package/build/min/src/shaders/raster.fragment.glsl.txt +5 -0
  50. package/build/min/src/shaders/raster.vertex.glsl.txt +1 -0
  51. package/build/min/src/shaders/symbol_icon.fragment.glsl.txt +9 -0
  52. package/build/min/src/shaders/symbol_icon.vertex.glsl.txt +5 -0
  53. package/build/min/src/shaders/symbol_sdf.fragment.glsl.txt +19 -0
  54. package/build/min/src/shaders/symbol_sdf.vertex.glsl.txt +13 -0
  55. package/package.json +44 -0
  56. package/src/css/mapbox-gl.css +506 -0
  57. package/src/css/svg/mapboxgl-ctrl-attrib.svg +3 -0
  58. package/src/css/svg/mapboxgl-ctrl-compass.svg +4 -0
  59. package/src/css/svg/mapboxgl-ctrl-fullscreen.svg +3 -0
  60. package/src/css/svg/mapboxgl-ctrl-geolocate-background.svg +3 -0
  61. package/src/css/svg/mapboxgl-ctrl-geolocate.svg +3 -0
  62. package/src/css/svg/mapboxgl-ctrl-logo-compact.svg +2 -0
  63. package/src/css/svg/mapboxgl-ctrl-logo.svg +1 -0
  64. package/src/css/svg/mapboxgl-ctrl-shrink.svg +3 -0
  65. package/src/css/svg/mapboxgl-ctrl-zoom-in.svg +3 -0
  66. package/src/css/svg/mapboxgl-ctrl-zoom-out.svg +3 -0
  67. package/src/data/array_types.js +1138 -0
  68. package/src/data/bucket/circle_attributes.js +5 -0
  69. package/src/data/bucket/circle_bucket.js +118 -0
  70. package/src/data/bucket/fill_attributes.js +5 -0
  71. package/src/data/bucket/fill_bucket.js +166 -0
  72. package/src/data/bucket/fill_extrusion_attributes.js +11 -0
  73. package/src/data/bucket/fill_extrusion_bucket.js +247 -0
  74. package/src/data/bucket/heatmap_bucket.js +12 -0
  75. package/src/data/bucket/line_attributes.js +11 -0
  76. package/src/data/bucket/line_bucket.js +625 -0
  77. package/src/data/bucket/pattern_attributes.js +9 -0
  78. package/src/data/bucket/pattern_bucket_features.js +44 -0
  79. package/src/data/bucket/symbol_attributes.js +95 -0
  80. package/src/data/bucket/symbol_bucket.js +697 -0
  81. package/src/data/bucket.js +53 -0
  82. package/src/data/dem_data.js +126 -0
  83. package/src/data/extent.js +17 -0
  84. package/src/data/feature_index.js +254 -0
  85. package/src/data/index_array_type.js +14 -0
  86. package/src/data/load_geometry.js +42 -0
  87. package/src/data/pos_attributes.js +3 -0
  88. package/src/data/program_configuration.js +782 -0
  89. package/src/data/raster_bounds_attributes.js +6 -0
  90. package/src/data/segment.js +63 -0
  91. package/src/geo/coordinate.js +78 -0
  92. package/src/geo/lng_lat.js +129 -0
  93. package/src/geo/lng_lat_bounds.js +253 -0
  94. package/src/geo/transform.js +605 -0
  95. package/src/gl/color_mode.js +21 -0
  96. package/src/gl/context.js +193 -0
  97. package/src/gl/cull_face_mode.js +22 -0
  98. package/src/gl/depth_mode.js +18 -0
  99. package/src/gl/framebuffer.js +28 -0
  100. package/src/gl/index_buffer.js +52 -0
  101. package/src/gl/stencil_mode.js +17 -0
  102. package/src/gl/types.js +0 -0
  103. package/src/gl/value.js +676 -0
  104. package/src/gl/vertex_buffer.js +101 -0
  105. package/src/index.js +50 -0
  106. package/src/render/draw_background.js +60 -0
  107. package/src/render/draw_circle.js +55 -0
  108. package/src/render/draw_collision_debug.js +45 -0
  109. package/src/render/draw_debug.js +429 -0
  110. package/src/render/draw_fill.js +143 -0
  111. package/src/render/draw_fill_extrusion.js +101 -0
  112. package/src/render/draw_heatmap.js +159 -0
  113. package/src/render/draw_hillshade.js +144 -0
  114. package/src/render/draw_line.js +99 -0
  115. package/src/render/draw_raster.js +151 -0
  116. package/src/render/draw_symbol.js +231 -0
  117. package/src/render/glyph_atlas.js +55 -0
  118. package/src/render/glyph_manager.js +145 -0
  119. package/src/render/image_atlas.js +97 -0
  120. package/src/render/image_manager.js +183 -0
  121. package/src/render/line_atlas.js +139 -0
  122. package/src/render/painter.js +483 -0
  123. package/src/render/program/background_program.js +46 -0
  124. package/src/render/program/circle_program.js +40 -0
  125. package/src/render/program/clipping_mask_program.js +11 -0
  126. package/src/render/program/collision_program.js +28 -0
  127. package/src/render/program/debug_program.js +13 -0
  128. package/src/render/program/fill_extrusion_program.js +76 -0
  129. package/src/render/program/fill_program.js +60 -0
  130. package/src/render/program/heatmap_program.js +46 -0
  131. package/src/render/program/hillshade_program.js +77 -0
  132. package/src/render/program/line_program.js +119 -0
  133. package/src/render/program/pattern.js +57 -0
  134. package/src/render/program/program_uniforms.js +46 -0
  135. package/src/render/program/raster_program.js +50 -0
  136. package/src/render/program/symbol_program.js +112 -0
  137. package/src/render/program.js +133 -0
  138. package/src/render/texture.js +88 -0
  139. package/src/render/tile_mask.js +108 -0
  140. package/src/render/uniform_binding.js +129 -0
  141. package/src/render/vertex_array_object.js +155 -0
  142. package/src/shaders/README.md +42 -0
  143. package/src/shaders/_prelude.fragment.glsl +17 -0
  144. package/src/shaders/_prelude.vertex.glsl +73 -0
  145. package/src/shaders/background.fragment.glsl +10 -0
  146. package/src/shaders/background.vertex.glsl +7 -0
  147. package/src/shaders/background_pattern.fragment.glsl +28 -0
  148. package/src/shaders/background_pattern.vertex.glsl +20 -0
  149. package/src/shaders/circle.fragment.glsl +39 -0
  150. package/src/shaders/circle.vertex.glsl +63 -0
  151. package/src/shaders/clipping_mask.fragment.glsl +3 -0
  152. package/src/shaders/clipping_mask.vertex.glsl +7 -0
  153. package/src/shaders/collision_box.fragment.glsl +21 -0
  154. package/src/shaders/collision_box.vertex.glsl +26 -0
  155. package/src/shaders/collision_circle.fragment.glsl +34 -0
  156. package/src/shaders/collision_circle.vertex.glsl +36 -0
  157. package/src/shaders/debug.fragment.glsl +5 -0
  158. package/src/shaders/debug.vertex.glsl +7 -0
  159. package/src/shaders/encode_attribute.js +19 -0
  160. package/src/shaders/fill.fragment.glsl +13 -0
  161. package/src/shaders/fill.vertex.glsl +13 -0
  162. package/src/shaders/fill_extrusion.fragment.glsl +16 -0
  163. package/src/shaders/fill_extrusion.vertex.glsl +66 -0
  164. package/src/shaders/fill_extrusion_pattern.fragment.glsl +41 -0
  165. package/src/shaders/fill_extrusion_pattern.vertex.glsl +76 -0
  166. package/src/shaders/fill_outline.fragment.glsl +17 -0
  167. package/src/shaders/fill_outline.vertex.glsl +17 -0
  168. package/src/shaders/fill_outline_pattern.fragment.glsl +43 -0
  169. package/src/shaders/fill_outline_pattern.vertex.glsl +41 -0
  170. package/src/shaders/fill_pattern.fragment.glsl +36 -0
  171. package/src/shaders/fill_pattern.vertex.glsl +36 -0
  172. package/src/shaders/heatmap.fragment.glsl +21 -0
  173. package/src/shaders/heatmap.vertex.glsl +53 -0
  174. package/src/shaders/heatmap_texture.fragment.glsl +14 -0
  175. package/src/shaders/heatmap_texture.vertex.glsl +11 -0
  176. package/src/shaders/hillshade.fragment.glsl +52 -0
  177. package/src/shaders/hillshade.vertex.glsl +11 -0
  178. package/src/shaders/hillshade_prepare.fragment.glsl +72 -0
  179. package/src/shaders/hillshade_prepare.vertex.glsl +15 -0
  180. package/src/shaders/index.js +194 -0
  181. package/src/shaders/line.fragment.glsl +28 -0
  182. package/src/shaders/line.vertex.glsl +84 -0
  183. package/src/shaders/line_gradient.fragment.glsl +34 -0
  184. package/src/shaders/line_gradient.vertex.glsl +84 -0
  185. package/src/shaders/line_pattern.fragment.glsl +69 -0
  186. package/src/shaders/line_pattern.vertex.glsl +88 -0
  187. package/src/shaders/line_sdf.fragment.glsl +44 -0
  188. package/src/shaders/line_sdf.vertex.glsl +95 -0
  189. package/src/shaders/raster.fragment.glsl +52 -0
  190. package/src/shaders/raster.vertex.glsl +21 -0
  191. package/src/shaders/symbol_icon.fragment.glsl +17 -0
  192. package/src/shaders/symbol_icon.vertex.glsl +91 -0
  193. package/src/shaders/symbol_sdf.fragment.glsl +50 -0
  194. package/src/shaders/symbol_sdf.vertex.glsl +117 -0
  195. package/src/source/geojson_source.js +267 -0
  196. package/src/source/geojson_worker_source.js +210 -0
  197. package/src/source/geojson_wrapper.js +67 -0
  198. package/src/source/image_source.js +213 -0
  199. package/src/source/load_tilejson.js +40 -0
  200. package/src/source/pixels_to_tile_units.js +17 -0
  201. package/src/source/query_features.js +198 -0
  202. package/src/source/raster_dem_tile_source.js +140 -0
  203. package/src/source/raster_dem_tile_worker_source.js +26 -0
  204. package/src/source/raster_tile_source.js +126 -0
  205. package/src/source/rtl_text_plugin.js +63 -0
  206. package/src/source/source.js +75 -0
  207. package/src/source/source_cache.js +794 -0
  208. package/src/source/source_state.js +55 -0
  209. package/src/source/tile.js +332 -0
  210. package/src/source/tile_bounds.js +40 -0
  211. package/src/source/tile_cache.js +122 -0
  212. package/src/source/tile_id.js +150 -0
  213. package/src/source/vector_tile_source.js +144 -0
  214. package/src/source/vector_tile_worker_source.js +126 -0
  215. package/src/source/worker.js +175 -0
  216. package/src/source/worker_source.js +14 -0
  217. package/src/source/worker_tile.js +199 -0
  218. package/src/style/create_style_layer.js +25 -0
  219. package/src/style/evaluation_parameters.js +45 -0
  220. package/src/style/light.js +112 -0
  221. package/src/style/load_glyph_range.js +17 -0
  222. package/src/style/load_sprite.js +26 -0
  223. package/src/style/parse_glyph_pbf.js +45 -0
  224. package/src/style/pauseable_placement.js +88 -0
  225. package/src/style/properties.js +691 -0
  226. package/src/style/query_utils.js +39 -0
  227. package/src/style/style.js +955 -0
  228. package/src/style/style_layer/background_style_layer.js +11 -0
  229. package/src/style/style_layer/background_style_layer_properties.js +25 -0
  230. package/src/style/style_layer/circle_style_layer.js +93 -0
  231. package/src/style/style_layer/circle_style_layer_properties.js +76 -0
  232. package/src/style/style_layer/fill_extrusion_style_layer.js +194 -0
  233. package/src/style/style_layer/fill_extrusion_style_layer_properties.js +56 -0
  234. package/src/style/style_layer/fill_style_layer.js +46 -0
  235. package/src/style/style_layer/fill_style_layer_properties.js +45 -0
  236. package/src/style/style_layer/heatmap_style_layer.js +51 -0
  237. package/src/style/style_layer/heatmap_style_layer_properties.js +52 -0
  238. package/src/style/style_layer/hillshade_style_layer.js +15 -0
  239. package/src/style/style_layer/hillshade_style_layer_properties.js +43 -0
  240. package/src/style/style_layer/line_style_layer.js +129 -0
  241. package/src/style/style_layer/line_style_layer_properties.js +104 -0
  242. package/src/style/style_layer/raster_style_layer.js +11 -0
  243. package/src/style/style_layer/raster_style_layer_properties.js +55 -0
  244. package/src/style/style_layer/symbol_style_layer.js +66 -0
  245. package/src/style/style_layer/symbol_style_layer_properties.js +288 -0
  246. package/src/style/style_layer.js +183 -0
  247. package/src/style/style_layer_index.js +61 -0
  248. package/src/style/zoom_history.js +36 -0
  249. package/src/style-spec/deref.js +51 -0
  250. package/src/style-spec/error/parsing_error.js +8 -0
  251. package/src/style-spec/error/validation_error.js +10 -0
  252. package/src/style-spec/expression/compound_expression.js +118 -0
  253. package/src/style-spec/expression/definitions/array.js +82 -0
  254. package/src/style-spec/expression/definitions/assertion.js +69 -0
  255. package/src/style-spec/expression/definitions/at.js +57 -0
  256. package/src/style-spec/expression/definitions/case.js +73 -0
  257. package/src/style-spec/expression/definitions/coalesce.js +68 -0
  258. package/src/style-spec/expression/definitions/coercion.js +96 -0
  259. package/src/style-spec/expression/definitions/collator.js +102 -0
  260. package/src/style-spec/expression/definitions/equals.js +93 -0
  261. package/src/style-spec/expression/definitions/index.js +407 -0
  262. package/src/style-spec/expression/definitions/interpolate.js +235 -0
  263. package/src/style-spec/expression/definitions/length.js +54 -0
  264. package/src/style-spec/expression/definitions/let.js +60 -0
  265. package/src/style-spec/expression/definitions/literal.js +64 -0
  266. package/src/style-spec/expression/definitions/match.js +142 -0
  267. package/src/style-spec/expression/definitions/step.js +116 -0
  268. package/src/style-spec/expression/definitions/var.js +38 -0
  269. package/src/style-spec/expression/evaluation_context.js +35 -0
  270. package/src/style-spec/expression/index.js +329 -0
  271. package/src/style-spec/expression/is_constant.js +63 -0
  272. package/src/style-spec/expression/parsing_context.js +213 -0
  273. package/src/style-spec/expression/parsing_error.js +9 -0
  274. package/src/style-spec/expression/runtime_error.js +12 -0
  275. package/src/style-spec/expression/scope.js +34 -0
  276. package/src/style-spec/expression/stops.js +37 -0
  277. package/src/style-spec/expression/types.js +77 -0
  278. package/src/style-spec/expression/values.js +126 -0
  279. package/src/style-spec/feature_filter/README.md +55 -0
  280. package/src/style-spec/feature_filter/index.js +158 -0
  281. package/src/style-spec/function/convert.js +256 -0
  282. package/src/style-spec/function/index.js +299 -0
  283. package/src/style-spec/group_by_layout.js +68 -0
  284. package/src/style-spec/reference/v8.json +5356 -0
  285. package/src/style-spec/util/color.js +73 -0
  286. package/src/style-spec/util/color_spaces.js +128 -0
  287. package/src/style-spec/util/eval_support.js +8 -0
  288. package/src/style-spec/util/get_type.js +18 -0
  289. package/src/style-spec/util/interpolate.js +21 -0
  290. package/src/style-spec/util/properties.js +17 -0
  291. package/src/style-spec/util/ref_properties.js +1 -0
  292. package/src/style-spec/util/result.js +19 -0
  293. package/src/symbol/anchor.js +21 -0
  294. package/src/symbol/check_max_angle.js +75 -0
  295. package/src/symbol/clip_line.js +73 -0
  296. package/src/symbol/collision_feature.js +230 -0
  297. package/src/symbol/collision_index.js +379 -0
  298. package/src/symbol/cross_tile_symbol_index.js +270 -0
  299. package/src/symbol/get_anchors.js +177 -0
  300. package/src/symbol/grid_index.js +318 -0
  301. package/src/symbol/mergelines.js +75 -0
  302. package/src/symbol/opacity_state.js +21 -0
  303. package/src/symbol/placement.js +563 -0
  304. package/src/symbol/projection.js +601 -0
  305. package/src/symbol/quads.js +173 -0
  306. package/src/symbol/shaping.js +347 -0
  307. package/src/symbol/symbol_layout.js +519 -0
  308. package/src/symbol/symbol_size.js +110 -0
  309. package/src/symbol/transform_text.js +16 -0
  310. package/src/ui/anchor.js +24 -0
  311. package/src/ui/bind_handlers.js +199 -0
  312. package/src/ui/camera.js +954 -0
  313. package/src/ui/events.js +210 -0
  314. package/src/ui/handler/box_zoom.js +151 -0
  315. package/src/ui/handler/dblclick_zoom.js +91 -0
  316. package/src/ui/handler/drag_pan.js +285 -0
  317. package/src/ui/handler/drag_rotate.js +290 -0
  318. package/src/ui/handler/frame.js +28 -0
  319. package/src/ui/handler/inertia.js +45 -0
  320. package/src/ui/handler/keyboard.js +148 -0
  321. package/src/ui/handler/scroll_zoom.js +284 -0
  322. package/src/ui/handler/touch_zoom_rotate.js +263 -0
  323. package/src/ui/map.js +1645 -0
  324. package/src/util/actor.js +104 -0
  325. package/src/util/async.js +23 -0
  326. package/src/util/browser.js +61 -0
  327. package/src/util/callback.js +26 -0
  328. package/src/util/classify_rings.js +43 -0
  329. package/src/util/color_ramp.js +24 -0
  330. package/src/util/config.js +24 -0
  331. package/src/util/dictionary_coder.js +25 -0
  332. package/src/util/dispatcher.js +68 -0
  333. package/src/util/dom.js +102 -0
  334. package/src/util/evented.js +182 -0
  335. package/src/util/find_pole_of_inaccessibility.js +129 -0
  336. package/src/util/global_worker_pool.js +15 -0
  337. package/src/util/image.js +124 -0
  338. package/src/util/interpolate.js +5 -0
  339. package/src/util/intersection_tests.js +207 -0
  340. package/src/util/is_char_in_unicode_block.js +287 -0
  341. package/src/util/loader/image.js +32 -0
  342. package/src/util/object.js +178 -0
  343. package/src/util/script_detection.js +337 -0
  344. package/src/util/struct_array.js +197 -0
  345. package/src/util/task_queue.js +57 -0
  346. package/src/util/throttle.js +26 -0
  347. package/src/util/tile_cover.js +114 -0
  348. package/src/util/token.js +13 -0
  349. package/src/util/unique_id.js +12 -0
  350. package/src/util/util.js +192 -0
  351. package/src/util/vectortile_to_geojson.js +44 -0
  352. package/src/util/verticalize_punctuation.js +112 -0
  353. package/src/util/warn.js +21 -0
  354. package/src/util/web_worker.js +5 -0
  355. package/src/util/web_worker_transfer.js +228 -0
  356. package/src/util/worker_pool.js +41 -0
@@ -0,0 +1,66 @@
1
+ uniform mat4 u_matrix;
2
+ uniform vec3 u_lightcolor;
3
+ uniform lowp vec3 u_lightpos;
4
+ uniform lowp float u_lightintensity;
5
+ uniform float u_vertical_gradient;
6
+ uniform lowp float u_opacity;
7
+
8
+ attribute vec2 a_pos;
9
+ attribute vec4 a_normal_ed;
10
+
11
+ varying vec4 v_color;
12
+
13
+ #pragma mapbox: define lowp float base
14
+ #pragma mapbox: define lowp float height
15
+
16
+ #pragma mapbox: define highp vec4 color
17
+
18
+ void main() {
19
+ #pragma mapbox: initialize lowp float base
20
+ #pragma mapbox: initialize lowp float height
21
+ #pragma mapbox: initialize highp vec4 color
22
+
23
+ vec3 normal = a_normal_ed.xyz;
24
+
25
+ base = max(0.0, base);
26
+ height = max(0.0, height);
27
+
28
+ float t = mod(normal.x, 2.0);
29
+
30
+ gl_Position = u_matrix * vec4(a_pos, t > 0.0 ? height : base, 1);
31
+
32
+ // Relative luminance (how dark/bright is the surface color?)
33
+ float colorvalue = color.r * 0.2126 + color.g * 0.7152 + color.b * 0.0722;
34
+
35
+ v_color = vec4(0.0, 0.0, 0.0, 1.0);
36
+
37
+ // Add slight ambient lighting so no extrusions are totally black
38
+ vec4 ambientlight = vec4(0.03, 0.03, 0.03, 1.0);
39
+ color += ambientlight;
40
+
41
+ // Calculate cos(theta), where theta is the angle between surface normal and diffuse light ray
42
+ float directional = clamp(dot(normal / 16384.0, u_lightpos), 0.0, 1.0);
43
+
44
+ // Adjust directional so that
45
+ // the range of values for highlight/shading is narrower
46
+ // with lower light intensity
47
+ // and with lighter/brighter surface colors
48
+ directional = mix((1.0 - u_lightintensity), max((1.0 - colorvalue + u_lightintensity), 1.0), directional);
49
+
50
+ // Add gradient along z axis of side surfaces
51
+ if (normal.y != 0.0) {
52
+ // This avoids another branching statement, but multiplies by a constant of 0.84 if no vertical gradient,
53
+ // and otherwise calculates the gradient based on base + height
54
+ directional *= (
55
+ (1.0 - u_vertical_gradient) +
56
+ (u_vertical_gradient * clamp((t + base) * pow(height / 150.0, 0.5), mix(0.7, 0.98, 1.0 - u_lightintensity), 1.0)));
57
+ }
58
+
59
+ // Assign final color based on surface + ambient light color, diffuse light directional, and light color
60
+ // with lower bounds adjusted to hue of light
61
+ // so that shading is tinted with the complementary (opposite) color to the light color
62
+ v_color.r += clamp(color.r * directional * u_lightcolor.r, mix(0.0, 0.3, 1.0 - u_lightcolor.r), 1.0);
63
+ v_color.g += clamp(color.g * directional * u_lightcolor.g, mix(0.0, 0.3, 1.0 - u_lightcolor.g), 1.0);
64
+ v_color.b += clamp(color.b * directional * u_lightcolor.b, mix(0.0, 0.3, 1.0 - u_lightcolor.b), 1.0);
65
+ v_color *= u_opacity;
66
+ }
@@ -0,0 +1,41 @@
1
+ uniform vec2 u_texsize;
2
+ uniform float u_fade;
3
+
4
+ uniform sampler2D u_image;
5
+
6
+ varying vec2 v_pos_a;
7
+ varying vec2 v_pos_b;
8
+ varying vec4 v_lighting;
9
+
10
+ #pragma mapbox: define lowp float base
11
+ #pragma mapbox: define lowp float height
12
+ #pragma mapbox: define lowp vec4 pattern_from
13
+ #pragma mapbox: define lowp vec4 pattern_to
14
+
15
+ void main() {
16
+ #pragma mapbox: initialize lowp float base
17
+ #pragma mapbox: initialize lowp float height
18
+ #pragma mapbox: initialize mediump vec4 pattern_from
19
+ #pragma mapbox: initialize mediump vec4 pattern_to
20
+
21
+ vec2 pattern_tl_a = pattern_from.xy;
22
+ vec2 pattern_br_a = pattern_from.zw;
23
+ vec2 pattern_tl_b = pattern_to.xy;
24
+ vec2 pattern_br_b = pattern_to.zw;
25
+
26
+ vec2 imagecoord = mod(v_pos_a, 1.0);
27
+ vec2 pos = mix(pattern_tl_a / u_texsize, pattern_br_a / u_texsize, imagecoord);
28
+ vec4 color1 = texture2D(u_image, pos);
29
+
30
+ vec2 imagecoord_b = mod(v_pos_b, 1.0);
31
+ vec2 pos2 = mix(pattern_tl_b / u_texsize, pattern_br_b / u_texsize, imagecoord_b);
32
+ vec4 color2 = texture2D(u_image, pos2);
33
+
34
+ vec4 mixedColor = mix(color1, color2, u_fade);
35
+
36
+ gl_FragColor = mixedColor * v_lighting;
37
+
38
+ #ifdef OVERDRAW_INSPECTOR
39
+ gl_FragColor = vec4(1.0);
40
+ #endif
41
+ }
@@ -0,0 +1,76 @@
1
+ uniform mat4 u_matrix;
2
+ uniform vec2 u_pixel_coord_upper;
3
+ uniform vec2 u_pixel_coord_lower;
4
+ uniform float u_height_factor;
5
+ uniform vec4 u_scale;
6
+ uniform float u_vertical_gradient;
7
+ uniform lowp float u_opacity;
8
+
9
+ uniform vec3 u_lightcolor;
10
+ uniform lowp vec3 u_lightpos;
11
+ uniform lowp float u_lightintensity;
12
+
13
+ attribute vec2 a_pos;
14
+ attribute vec4 a_normal_ed;
15
+
16
+ varying vec2 v_pos_a;
17
+ varying vec2 v_pos_b;
18
+ varying vec4 v_lighting;
19
+
20
+ #pragma mapbox: define lowp float base
21
+ #pragma mapbox: define lowp float height
22
+ #pragma mapbox: define lowp vec4 pattern_from
23
+ #pragma mapbox: define lowp vec4 pattern_to
24
+
25
+ void main() {
26
+ #pragma mapbox: initialize lowp float base
27
+ #pragma mapbox: initialize lowp float height
28
+ #pragma mapbox: initialize mediump vec4 pattern_from
29
+ #pragma mapbox: initialize mediump vec4 pattern_to
30
+
31
+ vec2 pattern_tl_a = pattern_from.xy;
32
+ vec2 pattern_br_a = pattern_from.zw;
33
+ vec2 pattern_tl_b = pattern_to.xy;
34
+ vec2 pattern_br_b = pattern_to.zw;
35
+
36
+ float pixelRatio = u_scale.x;
37
+ float tileRatio = u_scale.y;
38
+ float fromScale = u_scale.z;
39
+ float toScale = u_scale.w;
40
+
41
+ vec3 normal = a_normal_ed.xyz;
42
+ float edgedistance = a_normal_ed.w;
43
+
44
+ vec2 display_size_a = vec2((pattern_br_a.x - pattern_tl_a.x) / pixelRatio, (pattern_br_a.y - pattern_tl_a.y) / pixelRatio);
45
+ vec2 display_size_b = vec2((pattern_br_b.x - pattern_tl_b.x) / pixelRatio, (pattern_br_b.y - pattern_tl_b.y) / pixelRatio);
46
+
47
+ base = max(0.0, base);
48
+ height = max(0.0, height);
49
+
50
+ float t = mod(normal.x, 2.0);
51
+ float z = t > 0.0 ? height : base;
52
+
53
+ gl_Position = u_matrix * vec4(a_pos, z, 1);
54
+
55
+ vec2 pos = normal.x == 1.0 && normal.y == 0.0 && normal.z == 16384.0
56
+ ? a_pos // extrusion top
57
+ : vec2(edgedistance, z * u_height_factor); // extrusion side
58
+
59
+ v_pos_a = get_pattern_pos(u_pixel_coord_upper, u_pixel_coord_lower, fromScale * display_size_a, tileRatio, pos);
60
+ v_pos_b = get_pattern_pos(u_pixel_coord_upper, u_pixel_coord_lower, toScale * display_size_b, tileRatio, pos);
61
+
62
+ v_lighting = vec4(0.0, 0.0, 0.0, 1.0);
63
+ float directional = clamp(dot(normal / 16383.0, u_lightpos), 0.0, 1.0);
64
+ directional = mix((1.0 - u_lightintensity), max((0.5 + u_lightintensity), 1.0), directional);
65
+
66
+ if (normal.y != 0.0) {
67
+ // This avoids another branching statement, but multiplies by a constant of 0.84 if no vertical gradient,
68
+ // and otherwise calculates the gradient based on base + height
69
+ directional *= (
70
+ (1.0 - u_vertical_gradient) +
71
+ (u_vertical_gradient * clamp((t + base) * pow(height / 150.0, 0.5), mix(0.7, 0.98, 1.0 - u_lightintensity), 1.0)));
72
+ }
73
+
74
+ v_lighting.rgb += clamp(directional * u_lightcolor, mix(vec3(0.0), vec3(0.3), 1.0 - u_lightcolor), vec3(1.0));
75
+ v_lighting *= u_opacity;
76
+ }
@@ -0,0 +1,17 @@
1
+ #pragma mapbox: define highp vec4 outline_color
2
+ #pragma mapbox: define lowp float opacity
3
+
4
+ varying vec2 v_pos;
5
+
6
+ void main() {
7
+ #pragma mapbox: initialize highp vec4 outline_color
8
+ #pragma mapbox: initialize lowp float opacity
9
+
10
+ float dist = length(v_pos - gl_FragCoord.xy);
11
+ float alpha = 1.0 - smoothstep(0.0, 1.0, dist);
12
+ gl_FragColor = outline_color * (alpha * opacity);
13
+
14
+ #ifdef OVERDRAW_INSPECTOR
15
+ gl_FragColor = vec4(1.0);
16
+ #endif
17
+ }
@@ -0,0 +1,17 @@
1
+ attribute vec2 a_pos;
2
+
3
+ uniform mat4 u_matrix;
4
+ uniform vec2 u_world;
5
+
6
+ varying vec2 v_pos;
7
+
8
+ #pragma mapbox: define highp vec4 outline_color
9
+ #pragma mapbox: define lowp float opacity
10
+
11
+ void main() {
12
+ #pragma mapbox: initialize highp vec4 outline_color
13
+ #pragma mapbox: initialize lowp float opacity
14
+
15
+ gl_Position = u_matrix * vec4(a_pos, 0, 1);
16
+ v_pos = (gl_Position.xy / gl_Position.w + 1.0) / 2.0 * u_world;
17
+ }
@@ -0,0 +1,43 @@
1
+
2
+ uniform vec2 u_texsize;
3
+ uniform sampler2D u_image;
4
+ uniform float u_fade;
5
+
6
+ varying vec2 v_pos_a;
7
+ varying vec2 v_pos_b;
8
+ varying vec2 v_pos;
9
+
10
+ #pragma mapbox: define lowp float opacity
11
+ #pragma mapbox: define lowp vec4 pattern_from
12
+ #pragma mapbox: define lowp vec4 pattern_to
13
+
14
+ void main() {
15
+ #pragma mapbox: initialize lowp float opacity
16
+ #pragma mapbox: initialize mediump vec4 pattern_from
17
+ #pragma mapbox: initialize mediump vec4 pattern_to
18
+
19
+ vec2 pattern_tl_a = pattern_from.xy;
20
+ vec2 pattern_br_a = pattern_from.zw;
21
+ vec2 pattern_tl_b = pattern_to.xy;
22
+ vec2 pattern_br_b = pattern_to.zw;
23
+
24
+ vec2 imagecoord = mod(v_pos_a, 1.0);
25
+ vec2 pos = mix(pattern_tl_a / u_texsize, pattern_br_a / u_texsize, imagecoord);
26
+ vec4 color1 = texture2D(u_image, pos);
27
+
28
+ vec2 imagecoord_b = mod(v_pos_b, 1.0);
29
+ vec2 pos2 = mix(pattern_tl_b / u_texsize, pattern_br_b / u_texsize, imagecoord_b);
30
+ vec4 color2 = texture2D(u_image, pos2);
31
+
32
+ // find distance to outline for alpha interpolation
33
+
34
+ float dist = length(v_pos - gl_FragCoord.xy);
35
+ float alpha = 1.0 - smoothstep(0.0, 1.0, dist);
36
+
37
+
38
+ gl_FragColor = mix(color1, color2, u_fade) * alpha * opacity;
39
+
40
+ #ifdef OVERDRAW_INSPECTOR
41
+ gl_FragColor = vec4(1.0);
42
+ #endif
43
+ }
@@ -0,0 +1,41 @@
1
+ uniform mat4 u_matrix;
2
+ uniform vec2 u_world;
3
+ uniform vec2 u_pixel_coord_upper;
4
+ uniform vec2 u_pixel_coord_lower;
5
+ uniform vec4 u_scale;
6
+
7
+ attribute vec2 a_pos;
8
+
9
+ varying vec2 v_pos_a;
10
+ varying vec2 v_pos_b;
11
+ varying vec2 v_pos;
12
+
13
+ #pragma mapbox: define lowp float opacity
14
+ #pragma mapbox: define lowp vec4 pattern_from
15
+ #pragma mapbox: define lowp vec4 pattern_to
16
+
17
+ void main() {
18
+ #pragma mapbox: initialize lowp float opacity
19
+ #pragma mapbox: initialize mediump vec4 pattern_from
20
+ #pragma mapbox: initialize mediump vec4 pattern_to
21
+
22
+ vec2 pattern_tl_a = pattern_from.xy;
23
+ vec2 pattern_br_a = pattern_from.zw;
24
+ vec2 pattern_tl_b = pattern_to.xy;
25
+ vec2 pattern_br_b = pattern_to.zw;
26
+
27
+ float pixelRatio = u_scale.x;
28
+ float tileRatio = u_scale.y;
29
+ float fromScale = u_scale.z;
30
+ float toScale = u_scale.w;
31
+
32
+ gl_Position = u_matrix * vec4(a_pos, 0, 1);
33
+
34
+ vec2 display_size_a = vec2((pattern_br_a.x - pattern_tl_a.x) / pixelRatio, (pattern_br_a.y - pattern_tl_a.y) / pixelRatio);
35
+ vec2 display_size_b = vec2((pattern_br_b.x - pattern_tl_b.x) / pixelRatio, (pattern_br_b.y - pattern_tl_b.y) / pixelRatio);
36
+
37
+ v_pos_a = get_pattern_pos(u_pixel_coord_upper, u_pixel_coord_lower, fromScale * display_size_a, tileRatio, a_pos);
38
+ v_pos_b = get_pattern_pos(u_pixel_coord_upper, u_pixel_coord_lower, toScale * display_size_b, tileRatio, a_pos);
39
+
40
+ v_pos = (gl_Position.xy / gl_Position.w + 1.0) / 2.0 * u_world;
41
+ }
@@ -0,0 +1,36 @@
1
+ uniform vec2 u_texsize;
2
+ uniform float u_fade;
3
+
4
+ uniform sampler2D u_image;
5
+
6
+ varying vec2 v_pos_a;
7
+ varying vec2 v_pos_b;
8
+
9
+ #pragma mapbox: define lowp float opacity
10
+ #pragma mapbox: define lowp vec4 pattern_from
11
+ #pragma mapbox: define lowp vec4 pattern_to
12
+
13
+ void main() {
14
+ #pragma mapbox: initialize lowp float opacity
15
+ #pragma mapbox: initialize mediump vec4 pattern_from
16
+ #pragma mapbox: initialize mediump vec4 pattern_to
17
+
18
+ vec2 pattern_tl_a = pattern_from.xy;
19
+ vec2 pattern_br_a = pattern_from.zw;
20
+ vec2 pattern_tl_b = pattern_to.xy;
21
+ vec2 pattern_br_b = pattern_to.zw;
22
+
23
+ vec2 imagecoord = mod(v_pos_a, 1.0);
24
+ vec2 pos = mix(pattern_tl_a / u_texsize, pattern_br_a / u_texsize, imagecoord);
25
+ vec4 color1 = texture2D(u_image, pos);
26
+
27
+ vec2 imagecoord_b = mod(v_pos_b, 1.0);
28
+ vec2 pos2 = mix(pattern_tl_b / u_texsize, pattern_br_b / u_texsize, imagecoord_b);
29
+ vec4 color2 = texture2D(u_image, pos2);
30
+
31
+ gl_FragColor = mix(color1, color2, u_fade) * opacity;
32
+
33
+ #ifdef OVERDRAW_INSPECTOR
34
+ gl_FragColor = vec4(1.0);
35
+ #endif
36
+ }
@@ -0,0 +1,36 @@
1
+ uniform mat4 u_matrix;
2
+ uniform vec2 u_pixel_coord_upper;
3
+ uniform vec2 u_pixel_coord_lower;
4
+ uniform vec4 u_scale;
5
+
6
+ attribute vec2 a_pos;
7
+
8
+ varying vec2 v_pos_a;
9
+ varying vec2 v_pos_b;
10
+
11
+ #pragma mapbox: define lowp float opacity
12
+ #pragma mapbox: define lowp vec4 pattern_from
13
+ #pragma mapbox: define lowp vec4 pattern_to
14
+
15
+ void main() {
16
+ #pragma mapbox: initialize lowp float opacity
17
+ #pragma mapbox: initialize mediump vec4 pattern_from
18
+ #pragma mapbox: initialize mediump vec4 pattern_to
19
+
20
+ vec2 pattern_tl_a = pattern_from.xy;
21
+ vec2 pattern_br_a = pattern_from.zw;
22
+ vec2 pattern_tl_b = pattern_to.xy;
23
+ vec2 pattern_br_b = pattern_to.zw;
24
+
25
+ float pixelRatio = u_scale.x;
26
+ float tileZoomRatio = u_scale.y;
27
+ float fromScale = u_scale.z;
28
+ float toScale = u_scale.w;
29
+
30
+ vec2 display_size_a = vec2((pattern_br_a.x - pattern_tl_a.x) / pixelRatio, (pattern_br_a.y - pattern_tl_a.y) / pixelRatio);
31
+ vec2 display_size_b = vec2((pattern_br_b.x - pattern_tl_b.x) / pixelRatio, (pattern_br_b.y - pattern_tl_b.y) / pixelRatio);
32
+ gl_Position = u_matrix * vec4(a_pos, 0, 1);
33
+
34
+ v_pos_a = get_pattern_pos(u_pixel_coord_upper, u_pixel_coord_lower, fromScale * display_size_a, tileZoomRatio, a_pos);
35
+ v_pos_b = get_pattern_pos(u_pixel_coord_upper, u_pixel_coord_lower, toScale * display_size_b, tileZoomRatio, a_pos);
36
+ }
@@ -0,0 +1,21 @@
1
+ #pragma mapbox: define highp float weight
2
+
3
+ uniform highp float u_intensity;
4
+ varying vec2 v_extrude;
5
+
6
+ // Gaussian kernel coefficient: 1 / sqrt(2 * PI)
7
+ #define GAUSS_COEF 0.3989422804014327
8
+
9
+ void main() {
10
+ #pragma mapbox: initialize highp float weight
11
+
12
+ // Kernel density estimation with a Gaussian kernel of size 5x5
13
+ float d = -0.5 * 3.0 * 3.0 * dot(v_extrude, v_extrude);
14
+ float val = weight * u_intensity * GAUSS_COEF * exp(d);
15
+
16
+ gl_FragColor = vec4(val, 1.0, 1.0, 1.0);
17
+
18
+ #ifdef OVERDRAW_INSPECTOR
19
+ gl_FragColor = vec4(1.0);
20
+ #endif
21
+ }
@@ -0,0 +1,53 @@
1
+ #pragma mapbox: define highp float weight
2
+ #pragma mapbox: define mediump float radius
3
+
4
+ uniform mat4 u_matrix;
5
+ uniform float u_extrude_scale;
6
+ uniform float u_opacity;
7
+ uniform float u_intensity;
8
+
9
+ attribute vec2 a_pos;
10
+
11
+ varying vec2 v_extrude;
12
+
13
+ // Effective "0" in the kernel density texture to adjust the kernel size to;
14
+ // this empirically chosen number minimizes artifacts on overlapping kernels
15
+ // for typical heatmap cases (assuming clustered source)
16
+ const highp float ZERO = 1.0 / 255.0 / 16.0;
17
+
18
+ // Gaussian kernel coefficient: 1 / sqrt(2 * PI)
19
+ #define GAUSS_COEF 0.3989422804014327
20
+
21
+ void main(void) {
22
+ #pragma mapbox: initialize highp float weight
23
+ #pragma mapbox: initialize mediump float radius
24
+
25
+ // unencode the extrusion vector that we snuck into the a_pos vector
26
+ vec2 unscaled_extrude = vec2(mod(a_pos, 2.0) * 2.0 - 1.0);
27
+
28
+ // This 'extrude' comes in ranging from [-1, -1], to [1, 1]. We'll use
29
+ // it to produce the vertices of a square mesh framing the point feature
30
+ // we're adding to the kernel density texture. We'll also pass it as
31
+ // a varying, so that the fragment shader can determine the distance of
32
+ // each fragment from the point feature.
33
+ // Before we do so, we need to scale it up sufficiently so that the
34
+ // kernel falls effectively to zero at the edge of the mesh.
35
+ // That is, we want to know S such that
36
+ // weight * u_intensity * GAUSS_COEF * exp(-0.5 * 3.0^2 * S^2) == ZERO
37
+ // Which solves to:
38
+ // S = sqrt(-2.0 * log(ZERO / (weight * u_intensity * GAUSS_COEF))) / 3.0
39
+ float S = sqrt(-2.0 * log(ZERO / weight / u_intensity / GAUSS_COEF)) / 3.0;
40
+
41
+ // Pass the varying in units of radius
42
+ v_extrude = S * unscaled_extrude;
43
+
44
+ // Scale by radius and the zoom-based scale factor to produce actual
45
+ // mesh position
46
+ vec2 extrude = v_extrude * radius * u_extrude_scale;
47
+
48
+ // multiply a_pos by 0.5, since we had it * 2 in order to sneak
49
+ // in extrusion data
50
+ vec4 pos = vec4(floor(a_pos * 0.5) + extrude, 0, 1);
51
+
52
+ gl_Position = u_matrix * pos;
53
+ }
@@ -0,0 +1,14 @@
1
+ uniform sampler2D u_image;
2
+ uniform sampler2D u_color_ramp;
3
+ uniform float u_opacity;
4
+ varying vec2 v_pos;
5
+
6
+ void main() {
7
+ float t = texture2D(u_image, v_pos).r;
8
+ vec4 color = texture2D(u_color_ramp, vec2(t, 0.5));
9
+ gl_FragColor = color * u_opacity;
10
+
11
+ #ifdef OVERDRAW_INSPECTOR
12
+ gl_FragColor = vec4(0.0);
13
+ #endif
14
+ }
@@ -0,0 +1,11 @@
1
+ uniform mat4 u_matrix;
2
+ uniform vec2 u_world;
3
+ attribute vec2 a_pos;
4
+ varying vec2 v_pos;
5
+
6
+ void main() {
7
+ gl_Position = u_matrix * vec4(a_pos * u_world, 0, 1);
8
+
9
+ v_pos.x = a_pos.x;
10
+ v_pos.y = 1.0 - a_pos.y;
11
+ }
@@ -0,0 +1,52 @@
1
+ uniform sampler2D u_image;
2
+ varying vec2 v_pos;
3
+
4
+ uniform vec2 u_latrange;
5
+ uniform vec2 u_light;
6
+ uniform vec4 u_shadow;
7
+ uniform vec4 u_highlight;
8
+ uniform vec4 u_accent;
9
+
10
+ #define PI 3.141592653589793
11
+
12
+ void main() {
13
+ vec4 pixel = texture2D(u_image, v_pos);
14
+
15
+ vec2 deriv = ((pixel.rg * 2.0) - 1.0);
16
+
17
+ // We divide the slope by a scale factor based on the cosin of the pixel's approximate latitude
18
+ // to account for mercator projection distortion. see #4807 for details
19
+ float scaleFactor = cos(radians((u_latrange[0] - u_latrange[1]) * (1.0 - v_pos.y) + u_latrange[1]));
20
+ // We also multiply the slope by an arbitrary z-factor of 1.25
21
+ float slope = atan(1.25 * length(deriv) / scaleFactor);
22
+ float aspect = deriv.x != 0.0 ? atan(deriv.y, -deriv.x) : PI / 2.0 * (deriv.y > 0.0 ? 1.0 : -1.0);
23
+
24
+ float intensity = u_light.x;
25
+ // We add PI to make this property match the global light object, which adds PI/2 to the light's azimuthal
26
+ // position property to account for 0deg corresponding to north/the top of the viewport in the style spec
27
+ // and the original shader was written to accept (-illuminationDirection - 90) as the azimuthal.
28
+ float azimuth = u_light.y + PI;
29
+
30
+ // We scale the slope exponentially based on intensity, using a calculation similar to
31
+ // the exponential interpolation function in the style spec:
32
+ // https://github.com/mapbox/mapbox-gl-js/blob/master/src/style-spec/expression/definitions/interpolate.js#L217-L228
33
+ // so that higher intensity values create more opaque hillshading.
34
+ float base = 1.875 - intensity * 1.75;
35
+ float maxValue = 0.5 * PI;
36
+ float scaledSlope = intensity != 0.5 ? ((pow(base, slope) - 1.0) / (pow(base, maxValue) - 1.0)) * maxValue : slope;
37
+
38
+ // The accent color is calculated with the cosine of the slope while the shade color is calculated with the sine
39
+ // so that the accent color's rate of change eases in while the shade color's eases out.
40
+ float accent = cos(scaledSlope);
41
+ // We multiply both the accent and shade color by a clamped intensity value
42
+ // so that intensities >= 0.5 do not additionally affect the color values
43
+ // while intensity values < 0.5 make the overall color more transparent.
44
+ vec4 accent_color = (1.0 - accent) * u_accent * clamp(intensity * 2.0, 0.0, 1.0);
45
+ float shade = abs(mod((aspect + azimuth) / PI + 0.5, 2.0) - 1.0);
46
+ vec4 shade_color = mix(u_shadow, u_highlight, shade) * sin(scaledSlope) * clamp(intensity * 2.0, 0.0, 1.0);
47
+ gl_FragColor = accent_color * (1.0 - shade_color.a) + shade_color;
48
+
49
+ #ifdef OVERDRAW_INSPECTOR
50
+ gl_FragColor = vec4(1.0);
51
+ #endif
52
+ }
@@ -0,0 +1,11 @@
1
+ uniform mat4 u_matrix;
2
+
3
+ attribute vec2 a_pos;
4
+ attribute vec2 a_texture_pos;
5
+
6
+ varying vec2 v_pos;
7
+
8
+ void main() {
9
+ gl_Position = u_matrix * vec4(a_pos, 0, 1);
10
+ v_pos = a_texture_pos / 8192.0;
11
+ }
@@ -0,0 +1,72 @@
1
+ #ifdef GL_ES
2
+ precision highp float;
3
+ #endif
4
+
5
+ uniform sampler2D u_image;
6
+ varying vec2 v_pos;
7
+ uniform vec2 u_dimension;
8
+ uniform float u_zoom;
9
+ uniform float u_maxzoom;
10
+
11
+ float getElevation(vec2 coord, float bias) {
12
+ // Convert encoded elevation value to meters
13
+ vec4 data = texture2D(u_image, coord) * 255.0;
14
+ return (data.r + data.g * 256.0 + data.b * 256.0 * 256.0) / 4.0;
15
+ }
16
+
17
+ void main() {
18
+ vec2 epsilon = 1.0 / u_dimension;
19
+
20
+ // queried pixels:
21
+ // +-----------+
22
+ // | | | |
23
+ // | a | b | c |
24
+ // | | | |
25
+ // +-----------+
26
+ // | | | |
27
+ // | d | e | f |
28
+ // | | | |
29
+ // +-----------+
30
+ // | | | |
31
+ // | g | h | i |
32
+ // | | | |
33
+ // +-----------+
34
+
35
+ float a = getElevation(v_pos + vec2(-epsilon.x, -epsilon.y), 0.0);
36
+ float b = getElevation(v_pos + vec2(0, -epsilon.y), 0.0);
37
+ float c = getElevation(v_pos + vec2(epsilon.x, -epsilon.y), 0.0);
38
+ float d = getElevation(v_pos + vec2(-epsilon.x, 0), 0.0);
39
+ float e = getElevation(v_pos, 0.0);
40
+ float f = getElevation(v_pos + vec2(epsilon.x, 0), 0.0);
41
+ float g = getElevation(v_pos + vec2(-epsilon.x, epsilon.y), 0.0);
42
+ float h = getElevation(v_pos + vec2(0, epsilon.y), 0.0);
43
+ float i = getElevation(v_pos + vec2(epsilon.x, epsilon.y), 0.0);
44
+
45
+ // here we divide the x and y slopes by 8 * pixel size
46
+ // where pixel size (aka meters/pixel) is:
47
+ // circumference of the world / (pixels per tile * number of tiles)
48
+ // which is equivalent to: 8 * 40075016.6855785 / (512 * pow(2, u_zoom))
49
+ // which can be reduced to: pow(2, 19.25619978527 - u_zoom)
50
+ // we want to vertically exaggerate the hillshading though, because otherwise
51
+ // it is barely noticeable at low zooms. to do this, we multiply this by some
52
+ // scale factor pow(2, (u_zoom - u_maxzoom) * a) where a is an arbitrary value
53
+ // Here we use a=0.3 which works out to the expression below. see
54
+ // nickidlugash's awesome breakdown for more info
55
+ // https://github.com/mapbox/mapbox-gl-js/pull/5286#discussion_r148419556
56
+ float exaggeration = u_zoom < 2.0 ? 0.4 : u_zoom < 4.5 ? 0.35 : 0.3;
57
+
58
+ vec2 deriv = vec2(
59
+ (c + f + f + i) - (a + d + d + g),
60
+ (g + h + h + i) - (a + b + b + c)
61
+ ) / pow(2.0, (u_zoom - u_maxzoom) * exaggeration + 19.2562 - u_zoom);
62
+
63
+ gl_FragColor = clamp(vec4(
64
+ deriv.x / 2.0 + 0.5,
65
+ deriv.y / 2.0 + 0.5,
66
+ 1.0,
67
+ 1.0), 0.0, 1.0);
68
+
69
+ #ifdef OVERDRAW_INSPECTOR
70
+ gl_FragColor = vec4(1.0);
71
+ #endif
72
+ }
@@ -0,0 +1,15 @@
1
+ uniform mat4 u_matrix;
2
+ uniform vec2 u_dimension;
3
+
4
+ attribute vec2 a_pos;
5
+ attribute vec2 a_texture_pos;
6
+
7
+ varying vec2 v_pos;
8
+
9
+ void main() {
10
+ gl_Position = u_matrix * vec4(a_pos, 0, 1);
11
+
12
+ vec2 epsilon = 1.0 / u_dimension;
13
+ float scale = (u_dimension.x - 2.0) / u_dimension.x;
14
+ v_pos = (a_texture_pos / 8192.0) * scale + epsilon;
15
+ }