ol 7.3.0 → 7.3.1-dev

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 (535) hide show
  1. package/Collection.d.ts +2 -2
  2. package/Collection.d.ts.map +1 -1
  3. package/DataTile.d.ts +1 -1
  4. package/DataTile.d.ts.map +1 -1
  5. package/DataTile.js +2 -1
  6. package/Feature.d.ts +1 -1
  7. package/Feature.d.ts.map +1 -1
  8. package/Geolocation.d.ts +2 -2
  9. package/Geolocation.d.ts.map +1 -1
  10. package/Image.d.ts +1 -1
  11. package/Image.d.ts.map +1 -1
  12. package/ImageBase.d.ts +1 -1
  13. package/ImageBase.d.ts.map +1 -1
  14. package/ImageCanvas.d.ts +1 -1
  15. package/ImageCanvas.d.ts.map +1 -1
  16. package/ImageTile.d.ts +1 -1
  17. package/ImageTile.d.ts.map +1 -1
  18. package/Map.d.ts +7 -7
  19. package/Map.d.ts.map +1 -1
  20. package/Map.js +2 -1
  21. package/MapBrowserEvent.d.ts +1 -1
  22. package/MapBrowserEvent.d.ts.map +1 -1
  23. package/MapBrowserEventHandler.d.ts +1 -1
  24. package/MapBrowserEventHandler.d.ts.map +1 -1
  25. package/MapEvent.d.ts +1 -1
  26. package/MapEvent.d.ts.map +1 -1
  27. package/Object.d.ts +2 -2
  28. package/Object.d.ts.map +1 -1
  29. package/Observable.d.ts +1 -1
  30. package/Observable.d.ts.map +1 -1
  31. package/Overlay.d.ts +1 -1
  32. package/Overlay.d.ts.map +1 -1
  33. package/Tile.d.ts +1 -1
  34. package/Tile.d.ts.map +1 -1
  35. package/TileCache.d.ts +1 -1
  36. package/TileCache.d.ts.map +1 -1
  37. package/TileQueue.d.ts +1 -1
  38. package/TileQueue.d.ts.map +1 -1
  39. package/VectorRenderTile.d.ts +1 -1
  40. package/VectorRenderTile.d.ts.map +1 -1
  41. package/VectorTile.d.ts +1 -1
  42. package/VectorTile.d.ts.map +1 -1
  43. package/View.d.ts +10 -6
  44. package/View.d.ts.map +1 -1
  45. package/View.js +9 -6
  46. package/array.d.ts.map +1 -1
  47. package/array.js +38 -20
  48. package/control/Attribution.d.ts +1 -1
  49. package/control/Attribution.d.ts.map +1 -1
  50. package/control/Control.d.ts +1 -1
  51. package/control/Control.d.ts.map +1 -1
  52. package/control/FullScreen.d.ts +1 -1
  53. package/control/FullScreen.d.ts.map +1 -1
  54. package/control/MousePosition.d.ts +1 -1
  55. package/control/MousePosition.d.ts.map +1 -1
  56. package/control/OverviewMap.d.ts +3 -3
  57. package/control/OverviewMap.d.ts.map +1 -1
  58. package/control/Rotate.d.ts +1 -1
  59. package/control/Rotate.d.ts.map +1 -1
  60. package/control/ScaleLine.d.ts +1 -1
  61. package/control/ScaleLine.d.ts.map +1 -1
  62. package/control/Zoom.d.ts +1 -1
  63. package/control/Zoom.d.ts.map +1 -1
  64. package/control/ZoomSlider.d.ts +1 -1
  65. package/control/ZoomSlider.d.ts.map +1 -1
  66. package/control/ZoomToExtent.d.ts +1 -1
  67. package/control/ZoomToExtent.d.ts.map +1 -1
  68. package/control/defaults.d.ts +1 -1
  69. package/control/defaults.d.ts.map +1 -1
  70. package/dist/ol.js +2 -2
  71. package/dist/ol.js.map +1 -1
  72. package/events/Key.d.ts +8 -0
  73. package/events/Key.d.ts.map +1 -0
  74. package/events/Key.js +14 -0
  75. package/events/Target.d.ts +1 -1
  76. package/events/Target.d.ts.map +1 -1
  77. package/events/condition.d.ts +2 -2
  78. package/events/condition.d.ts.map +1 -1
  79. package/extent.d.ts.map +1 -1
  80. package/extent.js +7 -2
  81. package/format/EsriJSON.d.ts +1 -1
  82. package/format/EsriJSON.d.ts.map +1 -1
  83. package/format/GML.d.ts +1 -1
  84. package/format/GML.d.ts.map +1 -1
  85. package/format/GML2.d.ts +1 -1
  86. package/format/GML2.d.ts.map +1 -1
  87. package/format/GML3.d.ts +5 -5
  88. package/format/GML3.d.ts.map +1 -1
  89. package/format/GML32.d.ts +1 -1
  90. package/format/GML32.d.ts.map +1 -1
  91. package/format/GMLBase.d.ts +9 -9
  92. package/format/GMLBase.d.ts.map +1 -1
  93. package/format/GPX.d.ts +2 -2
  94. package/format/GPX.d.ts.map +1 -1
  95. package/format/GeoJSON.d.ts +1 -1
  96. package/format/GeoJSON.d.ts.map +1 -1
  97. package/format/IGC.d.ts +1 -1
  98. package/format/IGC.d.ts.map +1 -1
  99. package/format/IIIFInfo.d.ts +8 -8
  100. package/format/IIIFInfo.d.ts.map +1 -1
  101. package/format/IIIFInfo.js +10 -9
  102. package/format/JSONFeature.d.ts +1 -1
  103. package/format/JSONFeature.d.ts.map +1 -1
  104. package/format/JSONFeature.js +2 -1
  105. package/format/KML.d.ts +121 -5
  106. package/format/KML.d.ts.map +1 -1
  107. package/format/KML.js +105 -7
  108. package/format/MVT.d.ts +2 -2
  109. package/format/MVT.d.ts.map +1 -1
  110. package/format/OSMXML.d.ts +1 -1
  111. package/format/OSMXML.d.ts.map +1 -1
  112. package/format/OSMXML.js +11 -4
  113. package/format/OWS.d.ts +1 -1
  114. package/format/OWS.d.ts.map +1 -1
  115. package/format/Polyline.d.ts +2 -2
  116. package/format/Polyline.d.ts.map +1 -1
  117. package/format/TextFeature.d.ts +1 -1
  118. package/format/TextFeature.d.ts.map +1 -1
  119. package/format/TopoJSON.d.ts +1 -1
  120. package/format/TopoJSON.d.ts.map +1 -1
  121. package/format/WFS.d.ts +2 -2
  122. package/format/WFS.d.ts.map +1 -1
  123. package/format/WFS.js +8 -4
  124. package/format/WKB.d.ts +1 -1
  125. package/format/WKB.d.ts.map +1 -1
  126. package/format/WKB.js +6 -4
  127. package/format/WKT.d.ts +1 -1
  128. package/format/WKT.d.ts.map +1 -1
  129. package/format/WMSCapabilities.d.ts +1 -1
  130. package/format/WMSCapabilities.d.ts.map +1 -1
  131. package/format/WMSGetFeatureInfo.d.ts +1 -1
  132. package/format/WMSGetFeatureInfo.d.ts.map +1 -1
  133. package/format/WMTSCapabilities.d.ts +1 -1
  134. package/format/WMTSCapabilities.d.ts.map +1 -1
  135. package/format/XML.d.ts.map +1 -1
  136. package/format/XML.js +4 -2
  137. package/format/XMLFeature.d.ts +1 -1
  138. package/format/XMLFeature.d.ts.map +1 -1
  139. package/format/XMLFeature.js +16 -8
  140. package/format/filter/And.d.ts +1 -1
  141. package/format/filter/And.d.ts.map +1 -1
  142. package/format/filter/Bbox.d.ts +1 -1
  143. package/format/filter/Bbox.d.ts.map +1 -1
  144. package/format/filter/Comparison.d.ts +1 -1
  145. package/format/filter/Comparison.d.ts.map +1 -1
  146. package/format/filter/ComparisonBinary.d.ts +1 -1
  147. package/format/filter/ComparisonBinary.d.ts.map +1 -1
  148. package/format/filter/Contains.d.ts +1 -1
  149. package/format/filter/Contains.d.ts.map +1 -1
  150. package/format/filter/DWithin.d.ts +1 -1
  151. package/format/filter/DWithin.d.ts.map +1 -1
  152. package/format/filter/Disjoint.d.ts +1 -1
  153. package/format/filter/Disjoint.d.ts.map +1 -1
  154. package/format/filter/During.d.ts +1 -1
  155. package/format/filter/During.d.ts.map +1 -1
  156. package/format/filter/EqualTo.d.ts +1 -1
  157. package/format/filter/EqualTo.d.ts.map +1 -1
  158. package/format/filter/GreaterThan.d.ts +1 -1
  159. package/format/filter/GreaterThan.d.ts.map +1 -1
  160. package/format/filter/GreaterThanOrEqualTo.d.ts +1 -1
  161. package/format/filter/GreaterThanOrEqualTo.d.ts.map +1 -1
  162. package/format/filter/Intersects.d.ts +1 -1
  163. package/format/filter/Intersects.d.ts.map +1 -1
  164. package/format/filter/IsBetween.d.ts +1 -1
  165. package/format/filter/IsBetween.d.ts.map +1 -1
  166. package/format/filter/IsLike.d.ts +1 -1
  167. package/format/filter/IsLike.d.ts.map +1 -1
  168. package/format/filter/IsNull.d.ts +1 -1
  169. package/format/filter/IsNull.d.ts.map +1 -1
  170. package/format/filter/LessThan.d.ts +1 -1
  171. package/format/filter/LessThan.d.ts.map +1 -1
  172. package/format/filter/LessThanOrEqualTo.d.ts +1 -1
  173. package/format/filter/LessThanOrEqualTo.d.ts.map +1 -1
  174. package/format/filter/LogicalNary.d.ts +1 -1
  175. package/format/filter/LogicalNary.d.ts.map +1 -1
  176. package/format/filter/Not.d.ts +1 -1
  177. package/format/filter/Not.d.ts.map +1 -1
  178. package/format/filter/NotEqualTo.d.ts +1 -1
  179. package/format/filter/NotEqualTo.d.ts.map +1 -1
  180. package/format/filter/Or.d.ts +2 -2
  181. package/format/filter/Or.d.ts.map +1 -1
  182. package/format/filter/Or.js +1 -1
  183. package/format/filter/ResourceId.d.ts +1 -1
  184. package/format/filter/ResourceId.d.ts.map +1 -1
  185. package/format/filter/Spatial.d.ts +1 -1
  186. package/format/filter/Spatial.d.ts.map +1 -1
  187. package/format/filter/Within.d.ts +1 -1
  188. package/format/filter/Within.d.ts.map +1 -1
  189. package/format/filter.d.ts +20 -20
  190. package/format/filter.d.ts.map +1 -1
  191. package/geom/Circle.d.ts +1 -1
  192. package/geom/Circle.d.ts.map +1 -1
  193. package/geom/Circle.js +1 -17
  194. package/geom/Geometry.d.ts +1 -1
  195. package/geom/Geometry.d.ts.map +1 -1
  196. package/geom/GeometryCollection.d.ts +1 -1
  197. package/geom/GeometryCollection.d.ts.map +1 -1
  198. package/geom/LineString.d.ts +1 -1
  199. package/geom/LineString.d.ts.map +1 -1
  200. package/geom/LinearRing.d.ts +1 -1
  201. package/geom/LinearRing.d.ts.map +1 -1
  202. package/geom/MultiLineString.d.ts +2 -2
  203. package/geom/MultiLineString.d.ts.map +1 -1
  204. package/geom/MultiPoint.d.ts +2 -2
  205. package/geom/MultiPoint.d.ts.map +1 -1
  206. package/geom/MultiPolygon.d.ts +3 -3
  207. package/geom/MultiPolygon.d.ts.map +1 -1
  208. package/geom/Point.d.ts +1 -1
  209. package/geom/Point.d.ts.map +1 -1
  210. package/geom/Polygon.d.ts +3 -3
  211. package/geom/Polygon.d.ts.map +1 -1
  212. package/geom/SimpleGeometry.d.ts +1 -1
  213. package/geom/SimpleGeometry.d.ts.map +1 -1
  214. package/geom/flat/interpolate.d.ts.map +1 -1
  215. package/geom/flat/interpolate.js +4 -2
  216. package/geom/flat/orient.d.ts +1 -1
  217. package/geom/flat/orient.js +1 -1
  218. package/interaction/DblClickDragZoom.d.ts +110 -0
  219. package/interaction/DblClickDragZoom.d.ts.map +1 -0
  220. package/interaction/DblClickDragZoom.js +251 -0
  221. package/interaction/DoubleClickZoom.d.ts +1 -1
  222. package/interaction/DoubleClickZoom.d.ts.map +1 -1
  223. package/interaction/DragAndDrop.d.ts +2 -2
  224. package/interaction/DragAndDrop.d.ts.map +1 -1
  225. package/interaction/DragBox.d.ts +2 -2
  226. package/interaction/DragBox.d.ts.map +1 -1
  227. package/interaction/DragPan.d.ts +1 -1
  228. package/interaction/DragPan.d.ts.map +1 -1
  229. package/interaction/DragRotate.d.ts +1 -1
  230. package/interaction/DragRotate.d.ts.map +1 -1
  231. package/interaction/DragRotateAndZoom.d.ts +1 -1
  232. package/interaction/DragRotateAndZoom.d.ts.map +1 -1
  233. package/interaction/DragZoom.d.ts +1 -1
  234. package/interaction/DragZoom.d.ts.map +1 -1
  235. package/interaction/Draw.d.ts +6 -6
  236. package/interaction/Draw.d.ts.map +1 -1
  237. package/interaction/Extent.d.ts +2 -2
  238. package/interaction/Extent.d.ts.map +1 -1
  239. package/interaction/Extent.js +2 -1
  240. package/interaction/Interaction.d.ts +1 -1
  241. package/interaction/Interaction.d.ts.map +1 -1
  242. package/interaction/KeyboardPan.d.ts +1 -1
  243. package/interaction/KeyboardPan.d.ts.map +1 -1
  244. package/interaction/KeyboardPan.js +9 -9
  245. package/interaction/KeyboardZoom.d.ts +1 -1
  246. package/interaction/KeyboardZoom.d.ts.map +1 -1
  247. package/interaction/Link.d.ts +1 -1
  248. package/interaction/Link.d.ts.map +1 -1
  249. package/interaction/Modify.d.ts +6 -6
  250. package/interaction/Modify.d.ts.map +1 -1
  251. package/interaction/Modify.js +6 -1
  252. package/interaction/MouseWheelZoom.d.ts +1 -1
  253. package/interaction/MouseWheelZoom.d.ts.map +1 -1
  254. package/interaction/PinchRotate.d.ts +1 -1
  255. package/interaction/PinchRotate.d.ts.map +1 -1
  256. package/interaction/PinchZoom.d.ts +1 -1
  257. package/interaction/PinchZoom.d.ts.map +1 -1
  258. package/interaction/Pointer.d.ts +1 -1
  259. package/interaction/Pointer.d.ts.map +1 -1
  260. package/interaction/Select.d.ts +5 -5
  261. package/interaction/Select.d.ts.map +1 -1
  262. package/interaction/Snap.d.ts +1 -1
  263. package/interaction/Snap.d.ts.map +1 -1
  264. package/interaction/Snap.js +10 -4
  265. package/interaction/Translate.d.ts +4 -4
  266. package/interaction/Translate.d.ts.map +1 -1
  267. package/interaction/Translate.js +18 -3
  268. package/interaction/defaults.d.ts +1 -1
  269. package/interaction/defaults.d.ts.map +1 -1
  270. package/interaction.d.ts +1 -0
  271. package/interaction.js +1 -0
  272. package/layer/Base.d.ts +4 -3
  273. package/layer/Base.d.ts.map +1 -1
  274. package/layer/Base.js +3 -2
  275. package/layer/BaseImage.d.ts +1 -1
  276. package/layer/BaseImage.d.ts.map +1 -1
  277. package/layer/BaseTile.d.ts +1 -1
  278. package/layer/BaseTile.d.ts.map +1 -1
  279. package/layer/BaseVector.d.ts +10 -4
  280. package/layer/BaseVector.d.ts.map +1 -1
  281. package/layer/BaseVector.js +9 -3
  282. package/layer/Graticule.d.ts +6 -6
  283. package/layer/Graticule.d.ts.map +1 -1
  284. package/layer/Group.d.ts +4 -4
  285. package/layer/Group.d.ts.map +1 -1
  286. package/layer/Heatmap.d.ts +2 -2
  287. package/layer/Heatmap.d.ts.map +1 -1
  288. package/layer/Image.d.ts +2 -2
  289. package/layer/Image.d.ts.map +1 -1
  290. package/layer/Layer.d.ts +14 -11
  291. package/layer/Layer.d.ts.map +1 -1
  292. package/layer/Layer.js +28 -8
  293. package/layer/MapboxVector.d.ts +1 -1
  294. package/layer/MapboxVector.d.ts.map +1 -1
  295. package/layer/Tile.d.ts +2 -2
  296. package/layer/Tile.d.ts.map +1 -1
  297. package/layer/Vector.d.ts +2 -2
  298. package/layer/Vector.d.ts.map +1 -1
  299. package/layer/VectorImage.d.ts +2 -2
  300. package/layer/VectorImage.d.ts.map +1 -1
  301. package/layer/VectorTile.d.ts +2 -2
  302. package/layer/VectorTile.d.ts.map +1 -1
  303. package/layer/WebGLPoints.d.ts +4 -4
  304. package/layer/WebGLPoints.d.ts.map +1 -1
  305. package/layer/WebGLPoints.js +13 -4
  306. package/layer/WebGLTile.d.ts +9 -2
  307. package/layer/WebGLTile.d.ts.map +1 -1
  308. package/layer/WebGLTile.js +6 -6
  309. package/package.json +2 -2
  310. package/proj/proj4.d.ts +2 -2
  311. package/proj/proj4.d.ts.map +1 -1
  312. package/proj/proj4.js +1 -1
  313. package/proj.d.ts +9 -9
  314. package/proj.d.ts.map +1 -1
  315. package/proj.js +9 -8
  316. package/render/Box.d.ts +1 -1
  317. package/render/Box.d.ts.map +1 -1
  318. package/render/Event.d.ts +1 -1
  319. package/render/Event.d.ts.map +1 -1
  320. package/render/Feature.d.ts +7 -7
  321. package/render/Feature.d.ts.map +1 -1
  322. package/render/canvas/Builder.d.ts +1 -1
  323. package/render/canvas/Builder.d.ts.map +1 -1
  324. package/render/canvas/ImageBuilder.d.ts +1 -1
  325. package/render/canvas/ImageBuilder.d.ts.map +1 -1
  326. package/render/canvas/Immediate.d.ts +1 -1
  327. package/render/canvas/Immediate.d.ts.map +1 -1
  328. package/render/canvas/Immediate.js +9 -1
  329. package/render/canvas/LineStringBuilder.d.ts +1 -1
  330. package/render/canvas/LineStringBuilder.d.ts.map +1 -1
  331. package/render/canvas/PolygonBuilder.d.ts +1 -1
  332. package/render/canvas/PolygonBuilder.d.ts.map +1 -1
  333. package/render/canvas/TextBuilder.d.ts +1 -1
  334. package/render/canvas/TextBuilder.d.ts.map +1 -1
  335. package/render/canvas.d.ts +1 -1
  336. package/render/canvas.d.ts.map +1 -1
  337. package/render/webgl/MixedGeometryBatch.d.ts +37 -131
  338. package/render/webgl/MixedGeometryBatch.d.ts.map +1 -1
  339. package/render/webgl/MixedGeometryBatch.js +230 -147
  340. package/render/webgl/VectorStyleRenderer.d.ts +256 -0
  341. package/render/webgl/VectorStyleRenderer.d.ts.map +1 -0
  342. package/render/webgl/VectorStyleRenderer.js +440 -0
  343. package/render/webgl/constants.d.ts +1 -1
  344. package/render/webgl/constants.js +1 -1
  345. package/render/webgl/renderinstructions.d.ts +36 -0
  346. package/render/webgl/renderinstructions.d.ts.map +1 -0
  347. package/render/webgl/renderinstructions.js +241 -0
  348. package/render/webgl/utils.d.ts +4 -4
  349. package/render/webgl/utils.d.ts.map +1 -1
  350. package/render/webgl/utils.js +9 -9
  351. package/render.d.ts +1 -1
  352. package/render.d.ts.map +1 -1
  353. package/renderer/Composite.d.ts +1 -1
  354. package/renderer/Composite.d.ts.map +1 -1
  355. package/renderer/Layer.d.ts +1 -1
  356. package/renderer/Layer.d.ts.map +1 -1
  357. package/renderer/Map.d.ts +1 -1
  358. package/renderer/Map.d.ts.map +1 -1
  359. package/renderer/canvas/ImageLayer.d.ts +1 -1
  360. package/renderer/canvas/ImageLayer.d.ts.map +1 -1
  361. package/renderer/canvas/Layer.d.ts +1 -1
  362. package/renderer/canvas/Layer.d.ts.map +1 -1
  363. package/renderer/canvas/TileLayer.d.ts +1 -1
  364. package/renderer/canvas/TileLayer.d.ts.map +1 -1
  365. package/renderer/canvas/VectorImageLayer.d.ts +1 -1
  366. package/renderer/canvas/VectorImageLayer.d.ts.map +1 -1
  367. package/renderer/canvas/VectorLayer.d.ts +3 -3
  368. package/renderer/canvas/VectorLayer.d.ts.map +1 -1
  369. package/renderer/canvas/VectorTileLayer.d.ts +2 -2
  370. package/renderer/canvas/VectorTileLayer.d.ts.map +1 -1
  371. package/renderer/webgl/Layer.d.ts +2 -2
  372. package/renderer/webgl/Layer.d.ts.map +1 -1
  373. package/renderer/webgl/PointsLayer.d.ts +3 -3
  374. package/renderer/webgl/PointsLayer.d.ts.map +1 -1
  375. package/renderer/webgl/PointsLayer.js +5 -8
  376. package/renderer/webgl/TileLayer.d.ts +32 -99
  377. package/renderer/webgl/TileLayer.d.ts.map +1 -1
  378. package/renderer/webgl/TileLayer.js +103 -644
  379. package/renderer/webgl/TileLayerBase.d.ts +194 -0
  380. package/renderer/webgl/TileLayerBase.d.ts.map +1 -0
  381. package/renderer/webgl/TileLayerBase.js +750 -0
  382. package/renderer/webgl/VectorLayer.d.ts +59 -60
  383. package/renderer/webgl/VectorLayer.d.ts.map +1 -1
  384. package/renderer/webgl/VectorLayer.js +118 -156
  385. package/renderer/webgl/VectorTileLayer.d.ts +87 -0
  386. package/renderer/webgl/VectorTileLayer.d.ts.map +1 -0
  387. package/renderer/webgl/VectorTileLayer.js +201 -0
  388. package/reproj/DataTile.d.ts +1 -1
  389. package/reproj/DataTile.d.ts.map +1 -1
  390. package/reproj/Image.d.ts +1 -1
  391. package/reproj/Image.d.ts.map +1 -1
  392. package/reproj/Image.js +22 -8
  393. package/reproj/Tile.d.ts +1 -1
  394. package/reproj/Tile.d.ts.map +1 -1
  395. package/reproj/Triangulation.js +2 -2
  396. package/source/BingMaps.d.ts +1 -1
  397. package/source/BingMaps.d.ts.map +1 -1
  398. package/source/CartoDB.d.ts +1 -1
  399. package/source/CartoDB.d.ts.map +1 -1
  400. package/source/Cluster.d.ts +3 -3
  401. package/source/Cluster.d.ts.map +1 -1
  402. package/source/DataTile.d.ts +4 -4
  403. package/source/DataTile.d.ts.map +1 -1
  404. package/source/DataTile.js +1 -1
  405. package/source/GeoTIFF.d.ts +1 -1
  406. package/source/GeoTIFF.d.ts.map +1 -1
  407. package/source/IIIF.d.ts +1 -1
  408. package/source/IIIF.d.ts.map +1 -1
  409. package/source/Image.d.ts +2 -2
  410. package/source/Image.d.ts.map +1 -1
  411. package/source/ImageArcGISRest.d.ts +1 -1
  412. package/source/ImageArcGISRest.d.ts.map +1 -1
  413. package/source/ImageCanvas.d.ts +1 -1
  414. package/source/ImageCanvas.d.ts.map +1 -1
  415. package/source/ImageMapGuide.d.ts +1 -1
  416. package/source/ImageMapGuide.d.ts.map +1 -1
  417. package/source/ImageStatic.d.ts +1 -1
  418. package/source/ImageStatic.d.ts.map +1 -1
  419. package/source/ImageWMS.d.ts +1 -1
  420. package/source/ImageWMS.d.ts.map +1 -1
  421. package/source/OGCMapTile.d.ts +1 -1
  422. package/source/OGCMapTile.d.ts.map +1 -1
  423. package/source/OGCVectorTile.d.ts +1 -1
  424. package/source/OGCVectorTile.d.ts.map +1 -1
  425. package/source/OSM.d.ts +1 -1
  426. package/source/OSM.d.ts.map +1 -1
  427. package/source/Raster.d.ts +3 -3
  428. package/source/Raster.d.ts.map +1 -1
  429. package/source/Source.d.ts +5 -5
  430. package/source/Source.d.ts.map +1 -1
  431. package/source/Source.js +2 -2
  432. package/source/Stamen.d.ts +1 -1
  433. package/source/Stamen.d.ts.map +1 -1
  434. package/source/Tile.d.ts +2 -2
  435. package/source/Tile.d.ts.map +1 -1
  436. package/source/TileArcGISRest.d.ts +1 -1
  437. package/source/TileArcGISRest.d.ts.map +1 -1
  438. package/source/TileDebug.d.ts +1 -1
  439. package/source/TileDebug.d.ts.map +1 -1
  440. package/source/TileImage.d.ts +4 -4
  441. package/source/TileImage.d.ts.map +1 -1
  442. package/source/TileJSON.d.ts +1 -1
  443. package/source/TileJSON.d.ts.map +1 -1
  444. package/source/TileWMS.d.ts +1 -1
  445. package/source/TileWMS.d.ts.map +1 -1
  446. package/source/UTFGrid.d.ts +2 -2
  447. package/source/UTFGrid.d.ts.map +1 -1
  448. package/source/UrlTile.d.ts +1 -1
  449. package/source/UrlTile.d.ts.map +1 -1
  450. package/source/Vector.d.ts +3 -3
  451. package/source/Vector.d.ts.map +1 -1
  452. package/source/Vector.js +6 -3
  453. package/source/VectorTile.d.ts +4 -4
  454. package/source/VectorTile.d.ts.map +1 -1
  455. package/source/WMTS.d.ts +1 -1
  456. package/source/WMTS.d.ts.map +1 -1
  457. package/source/XYZ.d.ts +1 -1
  458. package/source/XYZ.d.ts.map +1 -1
  459. package/source/Zoomify.d.ts +2 -2
  460. package/source/Zoomify.d.ts.map +1 -1
  461. package/structs/LRUCache.d.ts.map +1 -1
  462. package/structs/LRUCache.js +2 -1
  463. package/style/Circle.d.ts +1 -1
  464. package/style/Circle.d.ts.map +1 -1
  465. package/style/Icon.d.ts +4 -78
  466. package/style/Icon.d.ts.map +1 -1
  467. package/style/Icon.js +89 -86
  468. package/style/IconImage.d.ts +1 -1
  469. package/style/IconImage.d.ts.map +1 -1
  470. package/style/RegularShape.d.ts +1 -1
  471. package/style/RegularShape.d.ts.map +1 -1
  472. package/style/RegularShape.js +1 -1
  473. package/style/Style.d.ts +2 -2
  474. package/style/Style.d.ts.map +1 -1
  475. package/style/Text.d.ts +5 -5
  476. package/style/Text.d.ts.map +1 -1
  477. package/style/Text.js +2 -2
  478. package/style/expressions.d.ts +42 -17
  479. package/style/expressions.d.ts.map +1 -1
  480. package/style/expressions.js +258 -118
  481. package/style/flat.d.ts +14 -0
  482. package/style/flat.d.ts.map +1 -1
  483. package/style/flat.js +6 -0
  484. package/style/literal.d.ts +204 -3
  485. package/style/literal.d.ts.map +1 -1
  486. package/style/literal.js +106 -3
  487. package/tilegrid/TileGrid.d.ts +1 -9
  488. package/tilegrid/TileGrid.d.ts.map +1 -1
  489. package/tilegrid/TileGrid.js +0 -18
  490. package/tilegrid/WMTS.d.ts +1 -1
  491. package/tilegrid/WMTS.d.ts.map +1 -1
  492. package/tilegrid.d.ts +1 -1
  493. package/tilegrid.d.ts.map +1 -1
  494. package/util.d.ts.map +1 -1
  495. package/util.js +1 -1
  496. package/webgl/BaseTileRepresentation.d.ts +72 -0
  497. package/webgl/BaseTileRepresentation.d.ts.map +1 -0
  498. package/webgl/BaseTileRepresentation.js +108 -0
  499. package/webgl/Buffer.d.ts +9 -6
  500. package/webgl/Buffer.d.ts.map +1 -1
  501. package/webgl/Buffer.js +6 -0
  502. package/webgl/Helper.d.ts +19 -12
  503. package/webgl/Helper.d.ts.map +1 -1
  504. package/webgl/Helper.js +79 -71
  505. package/webgl/ShaderBuilder.d.ts +75 -65
  506. package/webgl/ShaderBuilder.d.ts.map +1 -1
  507. package/webgl/ShaderBuilder.js +382 -241
  508. package/webgl/TileGeometry.d.ts +29 -0
  509. package/webgl/TileGeometry.d.ts.map +1 -0
  510. package/webgl/TileGeometry.js +73 -0
  511. package/webgl/TileTexture.d.ts +8 -51
  512. package/webgl/TileTexture.d.ts.map +1 -1
  513. package/webgl/TileTexture.js +11 -62
  514. package/webgl/styleparser.d.ts +61 -0
  515. package/webgl/styleparser.d.ts.map +1 -0
  516. package/webgl/styleparser.js +406 -0
  517. package/worker/webgl.js +1 -1
  518. package/events/KeyCode.d.ts +0 -8
  519. package/events/KeyCode.d.ts.map +0 -1
  520. package/events/KeyCode.js +0 -14
  521. package/render/webgl/BatchRenderer.d.ts +0 -92
  522. package/render/webgl/BatchRenderer.d.ts.map +0 -1
  523. package/render/webgl/BatchRenderer.js +0 -200
  524. package/render/webgl/LineStringBatchRenderer.d.ts +0 -27
  525. package/render/webgl/LineStringBatchRenderer.d.ts.map +0 -1
  526. package/render/webgl/LineStringBatchRenderer.js +0 -114
  527. package/render/webgl/PointBatchRenderer.d.ts +0 -26
  528. package/render/webgl/PointBatchRenderer.d.ts.map +0 -1
  529. package/render/webgl/PointBatchRenderer.js +0 -95
  530. package/render/webgl/PolygonBatchRenderer.d.ts +0 -25
  531. package/render/webgl/PolygonBatchRenderer.d.ts.map +0 -1
  532. package/render/webgl/PolygonBatchRenderer.js +0 -115
  533. package/renderer/webgl/shaders.d.ts +0 -43
  534. package/renderer/webgl/shaders.d.ts.map +0 -1
  535. package/renderer/webgl/shaders.js +0 -198
@@ -1,14 +1,17 @@
1
1
  /**
2
- * Classes and utilities for generating shaders from literal style objects
2
+ * Class for generating shaders from literal style objects
3
3
  * @module ol/webgl/ShaderBuilder
4
4
  */
5
5
 
6
- import {
7
- ValueTypes,
8
- expressionToGlsl,
9
- getStringNumberEquivalent,
10
- uniformNameForVariable,
11
- } from '../style/expressions.js';
6
+ const BASE_UNIFORMS = `uniform mat4 u_projectionMatrix;
7
+ uniform mat4 u_screenToWorldMatrix;
8
+ uniform vec2 u_viewportSizePx;
9
+ uniform float u_pixelRatio;
10
+ uniform float u_globalAlpha;
11
+ uniform float u_time;
12
+ uniform float u_zoom;
13
+ uniform float u_resolution;
14
+ uniform vec4 u_renderExtent;`;
12
15
 
13
16
  /**
14
17
  * @typedef {Object} VaryingDescription
@@ -28,7 +31,7 @@ import {
28
31
  * .addVarying('v_width', 'float', 'a_width')
29
32
  * .addUniform('u_time')
30
33
  * .setColorExpression('...')
31
- * .setSizeExpression('...')
34
+ * .setSymbolSizeExpression('...')
32
35
  * .outputSymbolFragmentShader();
33
36
  * ```
34
37
  */
@@ -39,63 +42,93 @@ export class ShaderBuilder {
39
42
  * @type {Array<string>}
40
43
  * @private
41
44
  */
42
- this.uniforms = [];
45
+ this.uniforms_ = [];
43
46
 
44
47
  /**
45
48
  * Attributes; these will be declared in the header (should include the type).
46
49
  * @type {Array<string>}
47
50
  * @private
48
51
  */
49
- this.attributes = [];
52
+ this.attributes_ = [];
50
53
 
51
54
  /**
52
55
  * Varyings with a name, a type and an expression.
53
56
  * @type {Array<VaryingDescription>}
54
57
  * @private
55
58
  */
56
- this.varyings = [];
59
+ this.varyings_ = [];
57
60
 
58
61
  /**
59
62
  * @type {string}
60
63
  * @private
61
64
  */
62
- this.sizeExpression = 'vec2(1.0)';
65
+ this.symbolSizeExpression_ = 'vec2(1.0)';
63
66
 
64
67
  /**
65
68
  * @type {string}
66
69
  * @private
67
70
  */
68
- this.rotationExpression = '0.0';
71
+ this.symbolRotationExpression_ = '0.0';
69
72
 
70
73
  /**
71
74
  * @type {string}
72
75
  * @private
73
76
  */
74
- this.offsetExpression = 'vec2(0.0)';
77
+ this.symbolOffsetExpression_ = 'vec2(0.0)';
75
78
 
76
79
  /**
77
80
  * @type {string}
78
81
  * @private
79
82
  */
80
- this.colorExpression = 'vec4(1.0)';
83
+ this.symbolColorExpression_ = 'vec4(1.0)';
81
84
 
82
85
  /**
83
86
  * @type {string}
84
87
  * @private
85
88
  */
86
- this.texCoordExpression = 'vec4(0.0, 0.0, 1.0, 1.0)';
89
+ this.texCoordExpression_ = 'vec4(0.0, 0.0, 1.0, 1.0)';
87
90
 
88
91
  /**
89
92
  * @type {string}
90
93
  * @private
91
94
  */
92
- this.discardExpression = 'false';
95
+ this.discardExpression_ = 'false';
93
96
 
94
97
  /**
95
98
  * @type {boolean}
96
99
  * @private
97
100
  */
98
- this.rotateWithView = false;
101
+ this.symbolRotateWithView_ = false;
102
+
103
+ /**
104
+ * @type {string}
105
+ * @private
106
+ */
107
+ this.strokeWidthExpression_ = '1.0';
108
+
109
+ /**
110
+ * @type {string}
111
+ * @private
112
+ */
113
+ this.strokeColorExpression_ = 'vec4(1.0)';
114
+
115
+ /**
116
+ * @type {string}
117
+ * @private
118
+ */
119
+ this.fillColorExpression_ = 'vec4(1.0)';
120
+
121
+ /**
122
+ * @type {Array<string>}
123
+ * @private
124
+ */
125
+ this.vertexShaderFunctions_ = [];
126
+
127
+ /**
128
+ * @type {Array<string>}
129
+ * @private
130
+ */
131
+ this.fragmentShaderFunctions_ = [];
99
132
  }
100
133
 
101
134
  /**
@@ -105,7 +138,7 @@ export class ShaderBuilder {
105
138
  * @return {ShaderBuilder} the builder object
106
139
  */
107
140
  addUniform(name) {
108
- this.uniforms.push(name);
141
+ this.uniforms_.push(name);
109
142
  return this;
110
143
  }
111
144
 
@@ -116,7 +149,7 @@ export class ShaderBuilder {
116
149
  * @return {ShaderBuilder} the builder object
117
150
  */
118
151
  addAttribute(name) {
119
- this.attributes.push(name);
152
+ this.attributes_.push(name);
120
153
  return this;
121
154
  }
122
155
 
@@ -129,7 +162,7 @@ export class ShaderBuilder {
129
162
  * @return {ShaderBuilder} the builder object
130
163
  */
131
164
  addVarying(name, type, expression) {
132
- this.varyings.push({
165
+ this.varyings_.push({
133
166
  name: name,
134
167
  type: type,
135
168
  expression: expression,
@@ -144,8 +177,8 @@ export class ShaderBuilder {
144
177
  * @param {string} expression Size expression
145
178
  * @return {ShaderBuilder} the builder object
146
179
  */
147
- setSizeExpression(expression) {
148
- this.sizeExpression = expression;
180
+ setSymbolSizeExpression(expression) {
181
+ this.symbolSizeExpression_ = expression;
149
182
  return this;
150
183
  }
151
184
 
@@ -156,8 +189,8 @@ export class ShaderBuilder {
156
189
  * @param {string} expression Size expression
157
190
  * @return {ShaderBuilder} the builder object
158
191
  */
159
- setRotationExpression(expression) {
160
- this.rotationExpression = expression;
192
+ setSymbolRotationExpression(expression) {
193
+ this.symbolRotationExpression_ = expression;
161
194
  return this;
162
195
  }
163
196
 
@@ -170,7 +203,7 @@ export class ShaderBuilder {
170
203
  * @return {ShaderBuilder} the builder object
171
204
  */
172
205
  setSymbolOffsetExpression(expression) {
173
- this.offsetExpression = expression;
206
+ this.symbolOffsetExpression_ = expression;
174
207
  return this;
175
208
  }
176
209
 
@@ -181,8 +214,8 @@ export class ShaderBuilder {
181
214
  * @param {string} expression Color expression
182
215
  * @return {ShaderBuilder} the builder object
183
216
  */
184
- setColorExpression(expression) {
185
- this.colorExpression = expression;
217
+ setSymbolColorExpression(expression) {
218
+ this.symbolColorExpression_ = expression;
186
219
  return this;
187
220
  }
188
221
 
@@ -194,7 +227,7 @@ export class ShaderBuilder {
194
227
  * @return {ShaderBuilder} the builder object
195
228
  */
196
229
  setTextureCoordinateExpression(expression) {
197
- this.texCoordExpression = expression;
230
+ this.texCoordExpression_ = expression;
198
231
  return this;
199
232
  }
200
233
 
@@ -208,7 +241,7 @@ export class ShaderBuilder {
208
241
  * @return {ShaderBuilder} the builder object
209
242
  */
210
243
  setFragmentDiscardExpression(expression) {
211
- this.discardExpression = expression;
244
+ this.discardExpression_ = expression;
212
245
  return this;
213
246
  }
214
247
 
@@ -219,48 +252,44 @@ export class ShaderBuilder {
219
252
  * @return {ShaderBuilder} the builder object
220
253
  */
221
254
  setSymbolRotateWithView(rotateWithView) {
222
- this.rotateWithView = rotateWithView;
255
+ this.symbolRotateWithView_ = rotateWithView;
223
256
  return this;
224
257
  }
225
258
 
226
259
  /**
227
- * @return {string} Previously set size expression
260
+ * @param {string} expression Stroke width expression, returning value in pixels
261
+ * @return {ShaderBuilder} the builder object
228
262
  */
229
- getSizeExpression() {
230
- return this.sizeExpression;
263
+ setStrokeWidthExpression(expression) {
264
+ this.strokeWidthExpression_ = expression;
265
+ return this;
231
266
  }
232
267
 
233
- /**
234
- * @return {string} Previously set symbol offset expression
235
- */
236
- getOffsetExpression() {
237
- return this.offsetExpression;
268
+ setStrokeColorExpression(expression) {
269
+ this.strokeColorExpression_ = expression;
270
+ return this;
238
271
  }
239
272
 
240
- /**
241
- * @return {string} Previously set color expression
242
- */
243
- getColorExpression() {
244
- return this.colorExpression;
273
+ setFillColorExpression(expression) {
274
+ this.fillColorExpression_ = expression;
275
+ return this;
245
276
  }
246
277
 
247
- /**
248
- * @return {string} Previously set texture coordinate expression
249
- */
250
- getTextureCoordinateExpression() {
251
- return this.texCoordExpression;
278
+ addVertexShaderFunction(code) {
279
+ if (this.vertexShaderFunctions_.includes(code)) {
280
+ return;
281
+ }
282
+ this.vertexShaderFunctions_.push(code);
252
283
  }
253
-
254
- /**
255
- * @return {string} Previously set fragment discard expression
256
- */
257
- getFragmentDiscardExpression() {
258
- return this.discardExpression;
284
+ addFragmentShaderFunction(code) {
285
+ if (this.fragmentShaderFunctions_.includes(code)) {
286
+ return;
287
+ }
288
+ this.fragmentShaderFunctions_.push(code);
259
289
  }
260
290
 
261
291
  /**
262
- * Generates a symbol vertex shader from the builder parameters,
263
- * intended to be used on point geometries.
292
+ * Generates a symbol vertex shader from the builder parameters
264
293
  *
265
294
  * Four uniforms are hardcoded in all shaders: `u_projectionMatrix`, `u_offsetScaleMatrix`,
266
295
  * `u_offsetRotateMatrix`, `u_time`.
@@ -276,12 +305,12 @@ export class ShaderBuilder {
276
305
  * @return {string} The full shader as a string.
277
306
  */
278
307
  getSymbolVertexShader(forHitDetection) {
279
- const offsetMatrix = this.rotateWithView
308
+ const offsetMatrix = this.symbolRotateWithView_
280
309
  ? 'u_offsetScaleMatrix * u_offsetRotateMatrix'
281
310
  : 'u_offsetScaleMatrix';
282
311
 
283
- let attributes = this.attributes;
284
- let varyings = this.varyings;
312
+ let attributes = this.attributes_;
313
+ let varyings = this.varyings_;
285
314
 
286
315
  if (forHitDetection) {
287
316
  attributes = attributes.concat('vec4 a_hitColor');
@@ -299,7 +328,7 @@ uniform mat4 u_offsetRotateMatrix;
299
328
  uniform float u_time;
300
329
  uniform float u_zoom;
301
330
  uniform float u_resolution;
302
- ${this.uniforms
331
+ ${this.uniforms_
303
332
  .map(function (uniform) {
304
333
  return 'uniform ' + uniform + ';';
305
334
  })
@@ -318,11 +347,12 @@ ${varyings
318
347
  return 'varying ' + varying.type + ' ' + varying.name + ';';
319
348
  })
320
349
  .join('\n')}
350
+ ${this.vertexShaderFunctions_.join('\n')}
321
351
  void main(void) {
322
352
  mat4 offsetMatrix = ${offsetMatrix};
323
- vec2 halfSize = ${this.sizeExpression} * 0.5;
324
- vec2 offset = ${this.offsetExpression};
325
- float angle = ${this.rotationExpression};
353
+ vec2 halfSize = ${this.symbolSizeExpression_} * 0.5;
354
+ vec2 offset = ${this.symbolOffsetExpression_};
355
+ float angle = ${this.symbolRotationExpression_};
326
356
  float offsetX;
327
357
  float offsetY;
328
358
  if (a_index == 0.0) {
@@ -340,7 +370,7 @@ void main(void) {
340
370
  }
341
371
  vec4 offsets = offsetMatrix * vec4(offsetX, offsetY, 0.0, 0.0);
342
372
  gl_Position = u_projectionMatrix * vec4(a_position, 0.0, 1.0) + offsets;
343
- vec4 texCoord = ${this.texCoordExpression};
373
+ vec4 texCoord = ${this.texCoordExpression_};
344
374
  float u = a_index == 0.0 || a_index == 3.0 ? texCoord.s : texCoord.p;
345
375
  float v = a_index == 2.0 || a_index == 3.0 ? texCoord.t : texCoord.q;
346
376
  v_texCoord = vec2(u, v);
@@ -356,8 +386,7 @@ ${varyings
356
386
  }
357
387
 
358
388
  /**
359
- * Generates a symbol fragment shader from the builder parameters,
360
- * intended to be used on point geometries.
389
+ * Generates a symbol fragment shader from the builder parameters
361
390
  *
362
391
  * Expects the following varyings to be transmitted by the vertex shader:
363
392
  * `vec2 v_quadCoord`, `vec2 v_texCoord`
@@ -371,7 +400,7 @@ ${varyings
371
400
  ? ' if (gl_FragColor.a < 0.1) { discard; } gl_FragColor = v_hitColor;'
372
401
  : '';
373
402
 
374
- let varyings = this.varyings;
403
+ let varyings = this.varyings_;
375
404
 
376
405
  if (forHitDetection) {
377
406
  varyings = varyings.concat({
@@ -385,7 +414,7 @@ ${varyings
385
414
  uniform float u_time;
386
415
  uniform float u_zoom;
387
416
  uniform float u_resolution;
388
- ${this.uniforms
417
+ ${this.uniforms_
389
418
  .map(function (uniform) {
390
419
  return 'uniform ' + uniform + ';';
391
420
  })
@@ -397,196 +426,308 @@ ${varyings
397
426
  return 'varying ' + varying.type + ' ' + varying.name + ';';
398
427
  })
399
428
  .join('\n')}
429
+ ${this.fragmentShaderFunctions_.join('\n')}
400
430
  void main(void) {
401
- if (${this.discardExpression}) { discard; }
402
- gl_FragColor = ${this.colorExpression};
431
+ if (${this.discardExpression_}) { discard; }
432
+ gl_FragColor = ${this.symbolColorExpression_};
403
433
  gl_FragColor.rgb *= gl_FragColor.a;
404
434
  ${hitDetectionBypass}
405
435
  }`;
406
436
  }
437
+
438
+ /**
439
+ * Generates a stroke vertex shader from the builder parameters
440
+ *
441
+ * @param {boolean} [forHitDetection] If true, the shader will be modified to include hit detection variables
442
+ * (namely, hit color with encoded feature id).
443
+ * @return {string} The full shader as a string.
444
+ */
445
+ getStrokeVertexShader(forHitDetection) {
446
+ let attributes = this.attributes_;
447
+ let varyings = this.varyings_;
448
+
449
+ if (forHitDetection) {
450
+ attributes = attributes.concat('vec4 a_hitColor');
451
+ varyings = varyings.concat({
452
+ name: 'v_hitColor',
453
+ type: 'vec4',
454
+ expression: 'a_hitColor',
455
+ });
456
+ }
457
+
458
+ return `#ifdef GL_FRAGMENT_PRECISION_HIGH
459
+ precision highp float;
460
+ #else
461
+ precision mediump float;
462
+ #endif
463
+ ${BASE_UNIFORMS}
464
+ ${this.uniforms_
465
+ .map(function (uniform) {
466
+ return 'uniform ' + uniform + ';';
467
+ })
468
+ .join('\n')}
469
+ attribute vec2 a_position;
470
+ attribute float a_index;
471
+ attribute vec2 a_segmentStart;
472
+ attribute vec2 a_segmentEnd;
473
+ attribute float a_parameters;
474
+ ${attributes
475
+ .map(function (attribute) {
476
+ return 'attribute ' + attribute + ';';
477
+ })
478
+ .join('\n')}
479
+ varying vec2 v_segmentStart;
480
+ varying vec2 v_segmentEnd;
481
+ varying float v_angleStart;
482
+ varying float v_angleEnd;
483
+ varying float v_width;
484
+ ${varyings
485
+ .map(function (varying) {
486
+ return 'varying ' + varying.type + ' ' + varying.name + ';';
487
+ })
488
+ .join('\n')}
489
+ ${this.vertexShaderFunctions_.join('\n')}
490
+ vec2 worldToPx(vec2 worldPos) {
491
+ vec4 screenPos = u_projectionMatrix * vec4(worldPos, 0.0, 1.0);
492
+ return (0.5 * screenPos.xy + 0.5) * u_viewportSizePx;
407
493
  }
408
494
 
409
- /**
410
- * @typedef {Object} StyleParseResult
411
- * @property {ShaderBuilder} builder Shader builder pre-configured according to a given style
412
- * @property {Object<string,import("./Helper").UniformValue>} uniforms Uniform definitions.
413
- * @property {Array<import("../renderer/webgl/PointsLayer").CustomAttribute>} attributes Attribute descriptions.
414
- */
495
+ vec4 pxToScreen(vec2 pxPos) {
496
+ vec2 screenPos = pxPos * 4.0 / u_viewportSizePx;
497
+ return vec4(screenPos.xy, 0.0, 0.0);
498
+ }
415
499
 
416
- /**
417
- * Parses a {@link import("../style/literal").LiteralStyle} object and returns a {@link ShaderBuilder}
418
- * object that has been configured according to the given style, as well as `attributes` and `uniforms`
419
- * arrays to be fed to the `WebGLPointsRenderer` class.
420
- *
421
- * Also returns `uniforms` and `attributes` properties as expected by the
422
- * {@link module:ol/renderer/webgl/PointsLayer~WebGLPointsLayerRenderer}.
423
- *
424
- * @param {import("../style/literal").LiteralStyle} style Literal style.
425
- * @return {StyleParseResult} Result containing shader params, attributes and uniforms.
426
- */
427
- export function parseLiteralStyle(style) {
428
- const symbStyle = style.symbol;
429
- const size = symbStyle.size !== undefined ? symbStyle.size : 1;
430
- const color = symbStyle.color || 'white';
431
- const texCoord = symbStyle.textureCoord || [0, 0, 1, 1];
432
- const offset = symbStyle.offset || [0, 0];
433
- const opacity = symbStyle.opacity !== undefined ? symbStyle.opacity : 1;
434
- const rotation = symbStyle.rotation !== undefined ? symbStyle.rotation : 0;
500
+ vec2 getOffsetDirection(vec2 normalPx, vec2 tangentPx, float joinAngle) {
501
+ if (cos(joinAngle) > 0.93) return normalPx - tangentPx;
502
+ float halfAngle = joinAngle / 2.0;
503
+ vec2 angleBisectorNormal = vec2(
504
+ sin(halfAngle) * normalPx.x + cos(halfAngle) * normalPx.y,
505
+ -cos(halfAngle) * normalPx.x + sin(halfAngle) * normalPx.y
506
+ );
507
+ float length = 1.0 / sin(halfAngle);
508
+ return angleBisectorNormal * length;
509
+ }
510
+
511
+ void main(void) {
512
+ float lineWidth = ${this.strokeWidthExpression_};
513
+ float anglePrecision = 1500.0;
514
+ float paramShift = 10000.0;
515
+ v_angleStart = fract(a_parameters / paramShift) * paramShift / anglePrecision;
516
+ v_angleEnd = fract(floor(a_parameters / paramShift + 0.5) / paramShift) * paramShift / anglePrecision;
517
+ float vertexNumber = floor(a_parameters / paramShift / paramShift + 0.0001);
518
+ vec2 tangentPx = worldToPx(a_segmentEnd) - worldToPx(a_segmentStart);
519
+ tangentPx = normalize(tangentPx);
520
+ vec2 normalPx = vec2(-tangentPx.y, tangentPx.x);
521
+ float normalDir = vertexNumber < 0.5 || (vertexNumber > 1.5 && vertexNumber < 2.5) ? 1.0 : -1.0;
522
+ float tangentDir = vertexNumber < 1.5 ? 1.0 : -1.0;
523
+ float angle = vertexNumber < 1.5 ? v_angleStart : v_angleEnd;
524
+ vec2 offsetPx = getOffsetDirection(normalPx * normalDir, tangentDir * tangentPx, angle) * lineWidth * 0.5;
525
+ vec2 position = vertexNumber < 1.5 ? a_segmentStart : a_segmentEnd;
526
+ gl_Position = u_projectionMatrix * vec4(position, 0.0, 1.0) + pxToScreen(offsetPx);
527
+ v_segmentStart = worldToPx(a_segmentStart);
528
+ v_segmentEnd = worldToPx(a_segmentEnd);
529
+ v_width = lineWidth;
530
+ ${varyings
531
+ .map(function (varying) {
532
+ return ' ' + varying.name + ' = ' + varying.expression + ';';
533
+ })
534
+ .join('\n')}
535
+ }`;
536
+ }
435
537
 
436
538
  /**
437
- * @type {import("../style/expressions.js").ParsingContext}
539
+ * Generates a stroke fragment shader from the builder parameters
540
+ *
541
+ * @param {boolean} [forHitDetection] If true, the shader will be modified to include hit detection variables
542
+ * (namely, hit color with encoded feature id).
543
+ * @return {string} The full shader as a string.
438
544
  */
439
- const vertContext = {
440
- inFragmentShader: false,
441
- variables: [],
442
- attributes: [],
443
- stringLiteralsMap: {},
444
- functions: {},
445
- };
446
- const parsedSize = expressionToGlsl(
447
- vertContext,
448
- size,
449
- ValueTypes.NUMBER_ARRAY | ValueTypes.NUMBER
450
- );
451
- const parsedOffset = expressionToGlsl(
452
- vertContext,
453
- offset,
454
- ValueTypes.NUMBER_ARRAY
455
- );
456
- const parsedTexCoord = expressionToGlsl(
457
- vertContext,
458
- texCoord,
459
- ValueTypes.NUMBER_ARRAY
460
- );
461
- const parsedRotation = expressionToGlsl(
462
- vertContext,
463
- rotation,
464
- ValueTypes.NUMBER
465
- );
545
+ getStrokeFragmentShader(forHitDetection) {
546
+ const hitDetectionBypass = forHitDetection
547
+ ? ' if (gl_FragColor.a < 0.1) { discard; } gl_FragColor = v_hitColor;'
548
+ : '';
549
+
550
+ let varyings = this.varyings_;
551
+
552
+ if (forHitDetection) {
553
+ varyings = varyings.concat({
554
+ name: 'v_hitColor',
555
+ type: 'vec4',
556
+ expression: 'a_hitColor',
557
+ });
558
+ }
559
+
560
+ return `#ifdef GL_FRAGMENT_PRECISION_HIGH
561
+ precision highp float;
562
+ #else
563
+ precision mediump float;
564
+ #endif
565
+ ${BASE_UNIFORMS}
566
+ ${this.uniforms_
567
+ .map(function (uniform) {
568
+ return 'uniform ' + uniform + ';';
569
+ })
570
+ .join('\n')}
571
+ varying vec2 v_segmentStart;
572
+ varying vec2 v_segmentEnd;
573
+ varying float v_angleStart;
574
+ varying float v_angleEnd;
575
+ varying float v_width;
576
+ ${varyings
577
+ .map(function (varying) {
578
+ return 'varying ' + varying.type + ' ' + varying.name + ';';
579
+ })
580
+ .join('\n')}
581
+ ${this.fragmentShaderFunctions_.join('\n')}
582
+ vec2 pxToWorld(vec2 pxPos) {
583
+ vec2 screenPos = 2.0 * pxPos / u_viewportSizePx - 1.0;
584
+ return (u_screenToWorldMatrix * vec4(screenPos, 0.0, 1.0)).xy;
585
+ }
586
+
587
+ float segmentDistanceField(vec2 point, vec2 start, vec2 end, float radius) {
588
+ vec2 startToPoint = point - start;
589
+ vec2 startToEnd = end - start;
590
+ float ratio = clamp(dot(startToPoint, startToEnd) / dot(startToEnd, startToEnd), 0.0, 1.0);
591
+ float dist = length(startToPoint - ratio * startToEnd);
592
+ return 1.0 - smoothstep(radius - 1.0, radius, dist);
593
+ }
594
+
595
+ void main(void) {
596
+ vec2 v_currentPoint = gl_FragCoord.xy / u_pixelRatio;
597
+ #ifdef GL_FRAGMENT_PRECISION_HIGH
598
+ vec2 v_worldPos = pxToWorld(v_currentPoint);
599
+ if (
600
+ abs(u_renderExtent[0] - u_renderExtent[2]) > 0.0 && (
601
+ v_worldPos[0] < u_renderExtent[0] ||
602
+ v_worldPos[1] < u_renderExtent[1] ||
603
+ v_worldPos[0] > u_renderExtent[2] ||
604
+ v_worldPos[1] > u_renderExtent[3]
605
+ )
606
+ ) {
607
+ discard;
608
+ }
609
+ #endif
610
+ if (${this.discardExpression_}) { discard; }
611
+ gl_FragColor = ${this.strokeColorExpression_} * u_globalAlpha;
612
+ gl_FragColor *= segmentDistanceField(v_currentPoint, v_segmentStart, v_segmentEnd, v_width);
613
+ ${hitDetectionBypass}
614
+ }`;
615
+ }
466
616
 
467
617
  /**
468
- * @type {import("../style/expressions.js").ParsingContext}
618
+ * Generates a fill vertex shader from the builder parameters
619
+ *
620
+ * @param {boolean} [forHitDetection] If true, the shader will be modified to include hit detection variables
621
+ * (namely, hit color with encoded feature id).
622
+ * @return {string} The full shader as a string.
469
623
  */
470
- const fragContext = {
471
- inFragmentShader: true,
472
- variables: vertContext.variables,
473
- attributes: [],
474
- stringLiteralsMap: vertContext.stringLiteralsMap,
475
- functions: {},
476
- };
477
- const parsedColor = expressionToGlsl(fragContext, color, ValueTypes.COLOR);
478
- const parsedOpacity = expressionToGlsl(
479
- fragContext,
480
- opacity,
481
- ValueTypes.NUMBER
482
- );
624
+ getFillVertexShader(forHitDetection) {
625
+ let attributes = this.attributes_;
626
+ let varyings = this.varyings_;
483
627
 
484
- let opacityFilter = '1.0';
485
- const visibleSize = `vec2(${expressionToGlsl(
486
- fragContext,
487
- size,
488
- ValueTypes.NUMBER_ARRAY | ValueTypes.NUMBER
489
- )}).x`;
490
- switch (symbStyle.symbolType) {
491
- case 'square':
492
- break;
493
- case 'image':
494
- break;
495
- // taken from https://thebookofshaders.com/07/
496
- case 'circle':
497
- opacityFilter = `(1.0-smoothstep(1.-4./${visibleSize},1.,dot(v_quadCoord-.5,v_quadCoord-.5)*4.))`;
498
- break;
499
- case 'triangle':
500
- const st = '(v_quadCoord*2.-1.)';
501
- const a = `(atan(${st}.x,${st}.y))`;
502
- opacityFilter = `(1.0-smoothstep(.5-3./${visibleSize},.5,cos(floor(.5+${a}/2.094395102)*2.094395102-${a})*length(${st})))`;
503
- break;
504
-
505
- default:
506
- throw new Error('Unexpected symbol type: ' + symbStyle.symbolType);
507
- }
628
+ if (forHitDetection) {
629
+ attributes = attributes.concat('vec4 a_hitColor');
630
+ varyings = varyings.concat({
631
+ name: 'v_hitColor',
632
+ type: 'vec4',
633
+ expression: 'a_hitColor',
634
+ });
635
+ }
508
636
 
509
- const builder = new ShaderBuilder()
510
- .setSizeExpression(`vec2(${parsedSize})`)
511
- .setRotationExpression(parsedRotation)
512
- .setSymbolOffsetExpression(parsedOffset)
513
- .setTextureCoordinateExpression(parsedTexCoord)
514
- .setSymbolRotateWithView(!!symbStyle.rotateWithView)
515
- .setColorExpression(
516
- `vec4(${parsedColor}.rgb, ${parsedColor}.a * ${parsedOpacity} * ${opacityFilter})`
517
- );
518
-
519
- if (style.filter) {
520
- const parsedFilter = expressionToGlsl(
521
- fragContext,
522
- style.filter,
523
- ValueTypes.BOOLEAN
524
- );
525
- builder.setFragmentDiscardExpression(`!${parsedFilter}`);
637
+ return `#ifdef GL_FRAGMENT_PRECISION_HIGH
638
+ precision highp float;
639
+ #else
640
+ precision mediump float;
641
+ #endif
642
+ ${BASE_UNIFORMS}
643
+ ${this.uniforms_
644
+ .map(function (uniform) {
645
+ return 'uniform ' + uniform + ';';
646
+ })
647
+ .join('\n')}
648
+ attribute vec2 a_position;
649
+ ${attributes
650
+ .map(function (attribute) {
651
+ return 'attribute ' + attribute + ';';
652
+ })
653
+ .join('\n')}
654
+ ${varyings
655
+ .map(function (varying) {
656
+ return 'varying ' + varying.type + ' ' + varying.name + ';';
657
+ })
658
+ .join('\n')}
659
+ ${this.vertexShaderFunctions_.join('\n')}
660
+ void main(void) {
661
+ gl_Position = u_projectionMatrix * vec4(a_position, 0.0, 1.0);
662
+ ${varyings
663
+ .map(function (varying) {
664
+ return ' ' + varying.name + ' = ' + varying.expression + ';';
665
+ })
666
+ .join('\n')}
667
+ }`;
526
668
  }
527
669
 
528
- /** @type {Object<string,import("../webgl/Helper").UniformValue>} */
529
- const uniforms = {};
530
-
531
- // define one uniform per variable
532
- fragContext.variables.forEach(function (varName) {
533
- const uniformName = uniformNameForVariable(varName);
534
- builder.addUniform(`float ${uniformName}`);
535
- uniforms[uniformName] = function () {
536
- if (!style.variables || style.variables[varName] === undefined) {
537
- throw new Error(
538
- `The following variable is missing from the style: ${varName}`
539
- );
540
- }
541
- let value = style.variables[varName];
542
- if (typeof value === 'string') {
543
- value = getStringNumberEquivalent(vertContext, value);
544
- }
545
- return value !== undefined ? value : -9999999; // to avoid matching with the first string literal
546
- };
547
- });
548
-
549
- if (symbStyle.symbolType === 'image' && symbStyle.src) {
550
- const texture = new Image();
551
- texture.crossOrigin =
552
- symbStyle.crossOrigin === undefined ? 'anonymous' : symbStyle.crossOrigin;
553
- texture.src = symbStyle.src;
554
- builder
555
- .addUniform('sampler2D u_texture')
556
- .setColorExpression(
557
- builder.getColorExpression() + ' * texture2D(u_texture, v_texCoord)'
558
- );
559
- uniforms['u_texture'] = texture;
560
- }
670
+ /**
671
+ * Generates a fill fragment shader from the builder parameters
672
+ *
673
+ * @param {boolean} [forHitDetection] If true, the shader will be modified to include hit detection variables
674
+ * (namely, hit color with encoded feature id).
675
+ * @return {string} The full shader as a string.
676
+ */
677
+ getFillFragmentShader(forHitDetection) {
678
+ const hitDetectionBypass = forHitDetection
679
+ ? ' if (gl_FragColor.a < 0.1) { discard; } gl_FragColor = v_hitColor;'
680
+ : '';
681
+
682
+ let varyings = this.varyings_;
561
683
 
562
- // for each feature attribute used in the fragment shader, define a varying that will be used to pass data
563
- // from the vertex to the fragment shader, as well as an attribute in the vertex shader (if not already present)
564
- fragContext.attributes.forEach(function (attrName) {
565
- if (!vertContext.attributes.includes(attrName)) {
566
- vertContext.attributes.push(attrName);
684
+ if (forHitDetection) {
685
+ varyings = varyings.concat({
686
+ name: 'v_hitColor',
687
+ type: 'vec4',
688
+ expression: 'a_hitColor',
689
+ });
567
690
  }
568
- builder.addVarying(`v_${attrName}`, 'float', `a_${attrName}`);
569
- });
570
-
571
- // for each feature attribute used in the vertex shader, define an attribute in the vertex shader.
572
- vertContext.attributes.forEach(function (attrName) {
573
- builder.addAttribute(`float a_${attrName}`);
574
- });
575
-
576
- return {
577
- builder: builder,
578
- attributes: vertContext.attributes.map(function (attributeName) {
579
- return {
580
- name: attributeName,
581
- callback: function (feature, props) {
582
- let value = props[attributeName];
583
- if (typeof value === 'string') {
584
- value = getStringNumberEquivalent(vertContext, value);
585
- }
586
- return value !== undefined ? value : -9999999; // to avoid matching with the first string literal
587
- },
588
- };
589
- }),
590
- uniforms: uniforms,
591
- };
691
+
692
+ return `#ifdef GL_FRAGMENT_PRECISION_HIGH
693
+ precision highp float;
694
+ #else
695
+ precision mediump float;
696
+ #endif
697
+ ${BASE_UNIFORMS}
698
+ ${this.uniforms_
699
+ .map(function (uniform) {
700
+ return 'uniform ' + uniform + ';';
701
+ })
702
+ .join('\n')}
703
+ ${varyings
704
+ .map(function (varying) {
705
+ return 'varying ' + varying.type + ' ' + varying.name + ';';
706
+ })
707
+ .join('\n')}
708
+ ${this.fragmentShaderFunctions_.join('\n')}
709
+ vec2 pxToWorld(vec2 pxPos) {
710
+ vec2 screenPos = 2.0 * pxPos / u_viewportSizePx - 1.0;
711
+ return (u_screenToWorldMatrix * vec4(screenPos, 0.0, 1.0)).xy;
712
+ }
713
+
714
+ void main(void) {
715
+ #ifdef GL_FRAGMENT_PRECISION_HIGH
716
+ vec2 v_worldPos = pxToWorld(gl_FragCoord.xy / u_pixelRatio);
717
+ if (
718
+ abs(u_renderExtent[0] - u_renderExtent[2]) > 0.0 && (
719
+ v_worldPos[0] < u_renderExtent[0] ||
720
+ v_worldPos[1] < u_renderExtent[1] ||
721
+ v_worldPos[0] > u_renderExtent[2] ||
722
+ v_worldPos[1] > u_renderExtent[3]
723
+ )
724
+ ) {
725
+ discard;
726
+ }
727
+ #endif
728
+ if (${this.discardExpression_}) { discard; }
729
+ gl_FragColor = ${this.fillColorExpression_} * u_globalAlpha;
730
+ ${hitDetectionBypass}
731
+ }`;
732
+ }
592
733
  }