@sakuzu/maplibre-gl-draw 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (636) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/LICENSE +661 -0
  3. package/README.ja.md +248 -0
  4. package/README.md +255 -0
  5. package/THIRD_PARTY_NOTICES.md +275 -0
  6. package/dist/api/api.d.ts +1259 -0
  7. package/dist/api/api.js +86 -0
  8. package/dist/api/context.d.ts +173 -0
  9. package/dist/api/context.js +193 -0
  10. package/dist/api/display-api.d.ts +1 -0
  11. package/dist/api/display-api.js +23 -0
  12. package/dist/api/event-api.d.ts +13 -0
  13. package/dist/api/event-api.js +17 -0
  14. package/dist/api/extension-api.d.ts +46 -0
  15. package/dist/api/extension-api.js +85 -0
  16. package/dist/api/feature-api.d.ts +11 -0
  17. package/dist/api/feature-api.js +101 -0
  18. package/dist/api/geometry/apply.d.ts +51 -0
  19. package/dist/api/geometry/apply.js +114 -0
  20. package/dist/api/geometry/boolean.d.ts +28 -0
  21. package/dist/api/geometry/boolean.js +65 -0
  22. package/dist/api/geometry/buffer.d.ts +11 -0
  23. package/dist/api/geometry/buffer.js +105 -0
  24. package/dist/api/geometry/split.d.ts +16 -0
  25. package/dist/api/geometry/split.js +75 -0
  26. package/dist/api/geometry/targets.d.ts +76 -0
  27. package/dist/api/geometry/targets.js +158 -0
  28. package/dist/api/geometry/types.d.ts +31 -0
  29. package/dist/api/geometry/types.js +3 -0
  30. package/dist/api/geometry-operations.d.ts +162 -0
  31. package/dist/api/geometry-operations.js +94 -0
  32. package/dist/api/group-api.d.ts +10 -0
  33. package/dist/api/group-api.js +78 -0
  34. package/dist/api/import-export/constants.d.ts +29 -0
  35. package/dist/api/import-export/constants.js +40 -0
  36. package/dist/api/import-export/embedded-file.d.ts +13 -0
  37. package/dist/api/import-export/embedded-file.js +31 -0
  38. package/dist/api/import-export/file-name.d.ts +10 -0
  39. package/dist/api/import-export/file-name.js +20 -0
  40. package/dist/api/import-export/format-detection.d.ts +12 -0
  41. package/dist/api/import-export/format-detection.js +29 -0
  42. package/dist/api/import-export/geojson-export.d.ts +19 -0
  43. package/dist/api/import-export/geojson-export.js +262 -0
  44. package/dist/api/import-export/geojson-import.d.ts +34 -0
  45. package/dist/api/import-export/geojson-import.js +538 -0
  46. package/dist/api/import-export/geometry-validation.d.ts +20 -0
  47. package/dist/api/import-export/geometry-validation.js +107 -0
  48. package/dist/api/import-export/image-import.d.ts +12 -0
  49. package/dist/api/import-export/image-import.js +53 -0
  50. package/dist/api/import-export/index.d.ts +9 -0
  51. package/dist/api/import-export/index.js +107 -0
  52. package/dist/api/import-export/native-format.d.ts +15 -0
  53. package/dist/api/import-export/native-format.js +126 -0
  54. package/dist/api/import-export/native-validation.d.ts +28 -0
  55. package/dist/api/import-export/native-validation.js +212 -0
  56. package/dist/api/import-export/own-property.d.ts +10 -0
  57. package/dist/api/import-export/own-property.js +19 -0
  58. package/dist/api/import-export/style-validation.d.ts +27 -0
  59. package/dist/api/import-export/style-validation.js +49 -0
  60. package/dist/api/import-export/types.d.ts +26 -0
  61. package/dist/api/import-export/types.js +3 -0
  62. package/dist/api/index.d.ts +15 -0
  63. package/dist/api/index.js +3 -0
  64. package/dist/api/input-api.d.ts +158 -0
  65. package/dist/api/input-api.js +144 -0
  66. package/dist/api/instance-api.d.ts +38 -0
  67. package/dist/api/instance-api.js +136 -0
  68. package/dist/api/layer-api.d.ts +12 -0
  69. package/dist/api/layer-api.js +62 -0
  70. package/dist/api/selection-api.d.ts +7 -0
  71. package/dist/api/selection-api.js +78 -0
  72. package/dist/api/snapping-api.d.ts +125 -0
  73. package/dist/api/snapping-api.js +50 -0
  74. package/dist/api/topology-api.d.ts +30 -0
  75. package/dist/api/topology-api.js +16 -0
  76. package/dist/api/tracing-api.d.ts +31 -0
  77. package/dist/api/tracing-api.js +16 -0
  78. package/dist/dispatcher/hit-test/box-strategies.d.ts +19 -0
  79. package/dist/dispatcher/hit-test/box-strategies.js +275 -0
  80. package/dist/dispatcher/hit-test/box-strategy.d.ts +59 -0
  81. package/dist/dispatcher/hit-test/box-strategy.js +37 -0
  82. package/dist/dispatcher/hit-test/globe-shape.d.ts +46 -0
  83. package/dist/dispatcher/hit-test/globe-shape.js +70 -0
  84. package/dist/dispatcher/hit-test/index.d.ts +14 -0
  85. package/dist/dispatcher/hit-test/index.js +9 -0
  86. package/dist/dispatcher/hit-test/local-frame.d.ts +77 -0
  87. package/dist/dispatcher/hit-test/local-frame.js +112 -0
  88. package/dist/dispatcher/hit-test/segment-grid.d.ts +32 -0
  89. package/dist/dispatcher/hit-test/segment-grid.js +79 -0
  90. package/dist/dispatcher/hit-test/service.d.ts +120 -0
  91. package/dist/dispatcher/hit-test/service.js +333 -0
  92. package/dist/dispatcher/hit-test/strategies/base.d.ts +136 -0
  93. package/dist/dispatcher/hit-test/strategies/base.js +66 -0
  94. package/dist/dispatcher/hit-test/strategies/circle.d.ts +10 -0
  95. package/dist/dispatcher/hit-test/strategies/circle.js +56 -0
  96. package/dist/dispatcher/hit-test/strategies/image.d.ts +22 -0
  97. package/dist/dispatcher/hit-test/strategies/image.js +115 -0
  98. package/dist/dispatcher/hit-test/strategies/index.d.ts +11 -0
  99. package/dist/dispatcher/hit-test/strategies/index.js +10 -0
  100. package/dist/dispatcher/hit-test/strategies/line.d.ts +17 -0
  101. package/dist/dispatcher/hit-test/strategies/line.js +30 -0
  102. package/dist/dispatcher/hit-test/strategies/multi.d.ts +44 -0
  103. package/dist/dispatcher/hit-test/strategies/multi.js +141 -0
  104. package/dist/dispatcher/hit-test/strategies/point.d.ts +20 -0
  105. package/dist/dispatcher/hit-test/strategies/point.js +29 -0
  106. package/dist/dispatcher/hit-test/strategies/polygon.d.ts +52 -0
  107. package/dist/dispatcher/hit-test/strategies/polygon.js +138 -0
  108. package/dist/dispatcher/hit-test/topmost.d.ts +48 -0
  109. package/dist/dispatcher/hit-test/topmost.js +157 -0
  110. package/dist/dispatcher/hit-test/visibility-lookup.d.ts +23 -0
  111. package/dist/dispatcher/hit-test/visibility-lookup.js +40 -0
  112. package/dist/dispatcher/index.d.ts +15 -0
  113. package/dist/dispatcher/index.js +3 -0
  114. package/dist/dispatcher/input-router.d.ts +1 -0
  115. package/dist/dispatcher/input-router.js +288 -0
  116. package/dist/dispatcher/normalizer.d.ts +1 -0
  117. package/dist/dispatcher/normalizer.js +513 -0
  118. package/dist/dispatcher/types.d.ts +144 -0
  119. package/dist/dispatcher/types.js +15 -0
  120. package/dist/display/chunk-set.d.ts +24 -0
  121. package/dist/display/chunk-set.js +533 -0
  122. package/dist/display/chunk.d.ts +1 -0
  123. package/dist/display/chunk.js +104 -0
  124. package/dist/display/columnar/index.d.ts +12 -0
  125. package/dist/display/columnar/index.js +13 -0
  126. package/dist/display/columnar/prepare.d.ts +42 -0
  127. package/dist/display/columnar/prepare.js +116 -0
  128. package/dist/display/columnar/source.d.ts +1 -0
  129. package/dist/display/columnar/source.js +531 -0
  130. package/dist/display/columnar/table.d.ts +1 -0
  131. package/dist/display/columnar/table.js +471 -0
  132. package/dist/display/columnar/types.d.ts +223 -0
  133. package/dist/display/columnar/types.js +3 -0
  134. package/dist/display/dataset.d.ts +2 -0
  135. package/dist/display/dataset.js +891 -0
  136. package/dist/display/index.d.ts +13 -0
  137. package/dist/display/index.js +3 -0
  138. package/dist/display/interaction.d.ts +1 -0
  139. package/dist/display/interaction.js +90 -0
  140. package/dist/display/manager.d.ts +1 -0
  141. package/dist/display/manager.js +440 -0
  142. package/dist/display/packed-rtree.d.ts +1 -0
  143. package/dist/display/packed-rtree.js +244 -0
  144. package/dist/display/partition.d.ts +1 -0
  145. package/dist/display/partition.js +226 -0
  146. package/dist/display/provider.d.ts +1 -0
  147. package/dist/display/provider.js +342 -0
  148. package/dist/display/retained.d.ts +40 -0
  149. package/dist/display/retained.js +898 -0
  150. package/dist/display/selection.d.ts +13 -0
  151. package/dist/display/selection.js +226 -0
  152. package/dist/display/source.d.ts +1 -0
  153. package/dist/display/source.js +119 -0
  154. package/dist/display/spatial.d.ts +1 -0
  155. package/dist/display/spatial.js +71 -0
  156. package/dist/display/style.d.ts +1 -0
  157. package/dist/display/style.js +126 -0
  158. package/dist/display/thinning.d.ts +65 -0
  159. package/dist/display/thinning.js +910 -0
  160. package/dist/display/triangulation.d.ts +1 -0
  161. package/dist/display/triangulation.js +0 -0
  162. package/dist/display/types.d.ts +561 -0
  163. package/dist/display/types.js +43 -0
  164. package/dist/extension/feature-handler.d.ts +182 -0
  165. package/dist/extension/feature-handler.js +3 -0
  166. package/dist/extension/index.d.ts +9 -0
  167. package/dist/extension/index.js +3 -0
  168. package/dist/extension/renderers.d.ts +208 -0
  169. package/dist/extension/renderers.js +3 -0
  170. package/dist/geometry/angle.d.ts +47 -0
  171. package/dist/geometry/angle.js +44 -0
  172. package/dist/geometry/bbox.d.ts +48 -0
  173. package/dist/geometry/bbox.js +83 -0
  174. package/dist/geometry/boolean.d.ts +162 -0
  175. package/dist/geometry/boolean.js +331 -0
  176. package/dist/geometry/buffer.d.ts +72 -0
  177. package/dist/geometry/buffer.js +218 -0
  178. package/dist/geometry/circle.d.ts +55 -0
  179. package/dist/geometry/circle.js +107 -0
  180. package/dist/geometry/coords.d.ts +97 -0
  181. package/dist/geometry/coords.js +149 -0
  182. package/dist/geometry/distance.d.ts +79 -0
  183. package/dist/geometry/distance.js +111 -0
  184. package/dist/geometry/errors.d.ts +74 -0
  185. package/dist/geometry/errors.js +104 -0
  186. package/dist/geometry/index.d.ts +28 -0
  187. package/dist/geometry/index.js +38 -0
  188. package/dist/geometry/measure.d.ts +81 -0
  189. package/dist/geometry/measure.js +236 -0
  190. package/dist/geometry/predicates.d.ts +62 -0
  191. package/dist/geometry/predicates.js +132 -0
  192. package/dist/geometry/simplify.d.ts +74 -0
  193. package/dist/geometry/simplify.js +159 -0
  194. package/dist/geometry/split.d.ts +68 -0
  195. package/dist/geometry/split.js +430 -0
  196. package/dist/geometry/types.d.ts +95 -0
  197. package/dist/geometry/types.js +3 -0
  198. package/dist/geometry/units.d.ts +35 -0
  199. package/dist/geometry/units.js +41 -0
  200. package/dist/index.d.ts +72 -0
  201. package/dist/index.js +20 -0
  202. package/dist/maplibre-gl-draw.d.ts +47 -0
  203. package/dist/maplibre-gl-draw.js +407 -0
  204. package/dist/messages.d.ts +64 -0
  205. package/dist/messages.js +36 -0
  206. package/dist/modes/cursor.d.ts +1 -0
  207. package/dist/modes/cursor.js +72 -0
  208. package/dist/modes/draw/circle.d.ts +1 -0
  209. package/dist/modes/draw/circle.js +222 -0
  210. package/dist/modes/draw/commit-layer.d.ts +26 -0
  211. package/dist/modes/draw/commit-layer.js +31 -0
  212. package/dist/modes/draw/freehand.d.ts +1 -0
  213. package/dist/modes/draw/freehand.js +264 -0
  214. package/dist/modes/draw/image.d.ts +1 -0
  215. package/dist/modes/draw/image.js +60 -0
  216. package/dist/modes/draw/index.d.ts +9 -0
  217. package/dist/modes/draw/index.js +11 -0
  218. package/dist/modes/draw/line.d.ts +1 -0
  219. package/dist/modes/draw/line.js +363 -0
  220. package/dist/modes/draw/point.d.ts +1 -0
  221. package/dist/modes/draw/point.js +87 -0
  222. package/dist/modes/draw/polygon.d.ts +1 -0
  223. package/dist/modes/draw/polygon.js +378 -0
  224. package/dist/modes/draw/trace-support.d.ts +79 -0
  225. package/dist/modes/draw/trace-support.js +161 -0
  226. package/dist/modes/handler.d.ts +285 -0
  227. package/dist/modes/handler.js +3 -0
  228. package/dist/modes/index.d.ts +7 -0
  229. package/dist/modes/index.js +3 -0
  230. package/dist/modes/manager.d.ts +15 -0
  231. package/dist/modes/manager.js +196 -0
  232. package/dist/modes/select/box-selection.d.ts +52 -0
  233. package/dist/modes/select/box-selection.js +140 -0
  234. package/dist/modes/select/click-handler.d.ts +32 -0
  235. package/dist/modes/select/click-handler.js +166 -0
  236. package/dist/modes/select/cursor-handler.d.ts +15 -0
  237. package/dist/modes/select/cursor-handler.js +59 -0
  238. package/dist/modes/select/drag/auxiliary.d.ts +26 -0
  239. package/dist/modes/select/drag/auxiliary.js +56 -0
  240. package/dist/modes/select/drag/intermediate-writes.d.ts +1 -0
  241. package/dist/modes/select/drag/intermediate-writes.js +171 -0
  242. package/dist/modes/select/drag/move.d.ts +24 -0
  243. package/dist/modes/select/drag/move.js +59 -0
  244. package/dist/modes/select/drag/operation.d.ts +30 -0
  245. package/dist/modes/select/drag/operation.js +18 -0
  246. package/dist/modes/select/drag/radius.d.ts +15 -0
  247. package/dist/modes/select/drag/radius.js +49 -0
  248. package/dist/modes/select/drag/transform.d.ts +17 -0
  249. package/dist/modes/select/drag/transform.js +155 -0
  250. package/dist/modes/select/drag/vertex.d.ts +17 -0
  251. package/dist/modes/select/drag/vertex.js +163 -0
  252. package/dist/modes/select/drag-handler.d.ts +1 -0
  253. package/dist/modes/select/drag-handler.js +254 -0
  254. package/dist/modes/select/hit-helpers.d.ts +40 -0
  255. package/dist/modes/select/hit-helpers.js +51 -0
  256. package/dist/modes/select/mode.d.ts +1 -0
  257. package/dist/modes/select/mode.js +397 -0
  258. package/dist/modes/select/shortcut-handler.d.ts +40 -0
  259. package/dist/modes/select/shortcut-handler.js +128 -0
  260. package/dist/operations/index.d.ts +9 -0
  261. package/dist/operations/index.js +3 -0
  262. package/dist/operations/layer-operations.d.ts +1 -0
  263. package/dist/operations/layer-operations.js +350 -0
  264. package/dist/operations/resize.d.ts +71 -0
  265. package/dist/operations/resize.js +252 -0
  266. package/dist/operations/rotate.d.ts +17 -0
  267. package/dist/operations/rotate.js +166 -0
  268. package/dist/operations/selection-operations.d.ts +20 -0
  269. package/dist/operations/selection-operations.js +159 -0
  270. package/dist/operations/shared-vertex.d.ts +1 -0
  271. package/dist/operations/shared-vertex.js +210 -0
  272. package/dist/operations/trace-graph.d.ts +96 -0
  273. package/dist/operations/trace-graph.js +283 -0
  274. package/dist/operations/vertex.d.ts +1 -0
  275. package/dist/operations/vertex.js +538 -0
  276. package/dist/plugins/index.d.ts +10 -0
  277. package/dist/plugins/index.js +3 -0
  278. package/dist/plugins/mutation-hooks.d.ts +28 -0
  279. package/dist/plugins/mutation-hooks.js +84 -0
  280. package/dist/plugins/plugin-context.d.ts +1 -0
  281. package/dist/plugins/plugin-context.js +367 -0
  282. package/dist/plugins/plugin-manager.d.ts +103 -0
  283. package/dist/plugins/plugin-manager.js +316 -0
  284. package/dist/plugins/plugin.d.ts +529 -0
  285. package/dist/plugins/plugin.js +3 -0
  286. package/dist/shared/config/constants.d.ts +66 -0
  287. package/dist/shared/config/constants.js +60 -0
  288. package/dist/shared/config/feature-style.d.ts +155 -0
  289. package/dist/shared/config/feature-style.js +154 -0
  290. package/dist/shared/config/index.d.ts +17 -0
  291. package/dist/shared/config/index.js +8 -0
  292. package/dist/shared/config/rendering.d.ts +107 -0
  293. package/dist/shared/config/rendering.js +33 -0
  294. package/dist/shared/config/selection-highlight.d.ts +29 -0
  295. package/dist/shared/config/selection-highlight.js +35 -0
  296. package/dist/shared/config/selection.d.ts +273 -0
  297. package/dist/shared/config/selection.js +266 -0
  298. package/dist/shared/config/topology.d.ts +33 -0
  299. package/dist/shared/config/topology.js +17 -0
  300. package/dist/shared/config/trace.d.ts +40 -0
  301. package/dist/shared/config/trace.js +17 -0
  302. package/dist/shared/math/angle.d.ts +21 -0
  303. package/dist/shared/math/angle.js +34 -0
  304. package/dist/shared/math/circle.d.ts +6 -0
  305. package/dist/shared/math/circle.js +10 -0
  306. package/dist/shared/math/constants.d.ts +48 -0
  307. package/dist/shared/math/constants.js +59 -0
  308. package/dist/shared/math/distance.d.ts +78 -0
  309. package/dist/shared/math/distance.js +147 -0
  310. package/dist/shared/math/globe-subdivision.d.ts +62 -0
  311. package/dist/shared/math/globe-subdivision.js +99 -0
  312. package/dist/shared/math/index.d.ts +17 -0
  313. package/dist/shared/math/index.js +21 -0
  314. package/dist/shared/math/intersection.d.ts +63 -0
  315. package/dist/shared/math/intersection.js +236 -0
  316. package/dist/shared/math/longitude.d.ts +20 -0
  317. package/dist/shared/math/longitude.js +31 -0
  318. package/dist/shared/math/mercator-plane.d.ts +27 -0
  319. package/dist/shared/math/mercator-plane.js +26 -0
  320. package/dist/shared/math/obb.d.ts +65 -0
  321. package/dist/shared/math/obb.js +107 -0
  322. package/dist/shared/math/rotation.d.ts +93 -0
  323. package/dist/shared/math/rotation.js +186 -0
  324. package/dist/shared/math/segment-grid.d.ts +69 -0
  325. package/dist/shared/math/segment-grid.js +159 -0
  326. package/dist/shared/math/transform.d.ts +140 -0
  327. package/dist/shared/math/transform.js +189 -0
  328. package/dist/shared/types/events.d.ts +128 -0
  329. package/dist/shared/types/events.js +3 -0
  330. package/dist/shared/types/model.d.ts +950 -0
  331. package/dist/shared/types/model.js +3 -0
  332. package/dist/shared/types/selection-box.d.ts +23 -0
  333. package/dist/shared/types/selection-box.js +3 -0
  334. package/dist/shared/types/style.d.ts +68 -0
  335. package/dist/shared/types/style.js +3 -0
  336. package/dist/shared/utils/color.d.ts +49 -0
  337. package/dist/shared/utils/color.js +180 -0
  338. package/dist/shared/utils/coordinates.d.ts +52 -0
  339. package/dist/shared/utils/coordinates.js +75 -0
  340. package/dist/shared/utils/embedded-image.d.ts +34 -0
  341. package/dist/shared/utils/embedded-image.js +161 -0
  342. package/dist/shared/utils/event-emitter.d.ts +262 -0
  343. package/dist/shared/utils/event-emitter.js +44 -0
  344. package/dist/shared/utils/feature-bbox.d.ts +8 -0
  345. package/dist/shared/utils/feature-bbox.js +207 -0
  346. package/dist/shared/utils/feature-segments.d.ts +23 -0
  347. package/dist/shared/utils/feature-segments.js +179 -0
  348. package/dist/shared/utils/id.d.ts +1 -0
  349. package/dist/shared/utils/id.js +35 -0
  350. package/dist/shared/utils/image.d.ts +34 -0
  351. package/dist/shared/utils/image.js +106 -0
  352. package/dist/shared/utils/index.d.ts +15 -0
  353. package/dist/shared/utils/index.js +24 -0
  354. package/dist/shared/utils/map.d.ts +26 -0
  355. package/dist/shared/utils/map.js +35 -0
  356. package/dist/shared/utils/name-generator.d.ts +197 -0
  357. package/dist/shared/utils/name-generator.js +337 -0
  358. package/dist/shared/utils/pixel-ratio.d.ts +111 -0
  359. package/dist/shared/utils/pixel-ratio.js +85 -0
  360. package/dist/shared/utils/property.d.ts +88 -0
  361. package/dist/shared/utils/property.js +140 -0
  362. package/dist/shared/utils/vertex-ref.d.ts +23 -0
  363. package/dist/shared/utils/vertex-ref.js +20 -0
  364. package/dist/snapping/custom-targets.d.ts +1 -0
  365. package/dist/snapping/custom-targets.js +21 -0
  366. package/dist/snapping/geometry.d.ts +1 -0
  367. package/dist/snapping/geometry.js +61 -0
  368. package/dist/snapping/index.d.ts +14 -0
  369. package/dist/snapping/index.js +4 -0
  370. package/dist/snapping/indicator.d.ts +19 -0
  371. package/dist/snapping/indicator.js +145 -0
  372. package/dist/snapping/providers/display.d.ts +72 -0
  373. package/dist/snapping/providers/display.js +268 -0
  374. package/dist/snapping/providers/guide.d.ts +69 -0
  375. package/dist/snapping/providers/guide.js +187 -0
  376. package/dist/snapping/providers/intersection.d.ts +1 -0
  377. package/dist/snapping/providers/intersection.js +92 -0
  378. package/dist/snapping/providers/shared.d.ts +39 -0
  379. package/dist/snapping/providers/shared.js +146 -0
  380. package/dist/snapping/providers/store.d.ts +1 -0
  381. package/dist/snapping/providers/store.js +132 -0
  382. package/dist/snapping/service.d.ts +1 -0
  383. package/dist/snapping/service.js +272 -0
  384. package/dist/snapping/types.d.ts +267 -0
  385. package/dist/snapping/types.js +66 -0
  386. package/dist/store/change-merger.d.ts +1 -0
  387. package/dist/store/change-merger.js +102 -0
  388. package/dist/store/draw-store.d.ts +1 -0
  389. package/dist/store/draw-store.js +396 -0
  390. package/dist/store/event-bridge.d.ts +1 -0
  391. package/dist/store/event-bridge.js +161 -0
  392. package/dist/store/index.d.ts +12 -0
  393. package/dist/store/index.js +4 -0
  394. package/dist/store/local-visibility.d.ts +21 -0
  395. package/dist/store/local-visibility.js +27 -0
  396. package/dist/store/lock.d.ts +67 -0
  397. package/dist/store/lock.js +54 -0
  398. package/dist/store/memory/change-bus.d.ts +60 -0
  399. package/dist/store/memory/change-bus.js +232 -0
  400. package/dist/store/memory/file-store.d.ts +15 -0
  401. package/dist/store/memory/file-store.js +33 -0
  402. package/dist/store/memory/frozen.d.ts +21 -0
  403. package/dist/store/memory/frozen.js +51 -0
  404. package/dist/store/memory/ui-state.d.ts +51 -0
  405. package/dist/store/memory/ui-state.js +223 -0
  406. package/dist/store/memory.d.ts +26 -0
  407. package/dist/store/memory.js +708 -0
  408. package/dist/store/spatial/index.d.ts +6 -0
  409. package/dist/store/spatial/index.js +4 -0
  410. package/dist/store/spatial/spatial-index.d.ts +90 -0
  411. package/dist/store/spatial/spatial-index.js +148 -0
  412. package/dist/store/spatial/store-spatial-index.d.ts +60 -0
  413. package/dist/store/spatial/store-spatial-index.js +125 -0
  414. package/dist/store/store.d.ts +417 -0
  415. package/dist/store/store.js +3 -0
  416. package/dist/store/types.d.ts +8 -0
  417. package/dist/store/types.js +3 -0
  418. package/dist/store/writable-layer.d.ts +35 -0
  419. package/dist/store/writable-layer.js +20 -0
  420. package/dist/view/cache/buffer.d.ts +28 -0
  421. package/dist/view/cache/buffer.js +176 -0
  422. package/dist/view/cache/earcut.d.ts +1 -0
  423. package/dist/view/cache/earcut.js +122 -0
  424. package/dist/view/cache/style-rule.d.ts +1 -0
  425. package/dist/view/cache/style-rule.js +97 -0
  426. package/dist/view/cache/terrain-fill.d.ts +30 -0
  427. package/dist/view/cache/terrain-fill.js +60 -0
  428. package/dist/view/cache/texture.d.ts +14 -0
  429. package/dist/view/cache/texture.js +292 -0
  430. package/dist/view/coordinator.d.ts +27 -0
  431. package/dist/view/coordinator.js +72 -0
  432. package/dist/view/feature-companion.d.ts +173 -0
  433. package/dist/view/feature-companion.js +108 -0
  434. package/dist/view/globe-subdivision.d.ts +78 -0
  435. package/dist/view/globe-subdivision.js +128 -0
  436. package/dist/view/index.d.ts +47 -0
  437. package/dist/view/index.js +20 -0
  438. package/dist/view/layer/attach.d.ts +20 -0
  439. package/dist/view/layer/attach.js +47 -0
  440. package/dist/view/layer/blend.d.ts +57 -0
  441. package/dist/view/layer/blend.js +14 -0
  442. package/dist/view/layer/custom-layer.d.ts +1 -0
  443. package/dist/view/layer/custom-layer.js +509 -0
  444. package/dist/view/layer/depth-state.d.ts +14 -0
  445. package/dist/view/layer/depth-state.js +44 -0
  446. package/dist/view/layer/display-list.d.ts +1 -0
  447. package/dist/view/layer/display-list.js +111 -0
  448. package/dist/view/layer/drape-planner.d.ts +139 -0
  449. package/dist/view/layer/drape-planner.js +726 -0
  450. package/dist/view/layer/frame-render.d.ts +57 -0
  451. package/dist/view/layer/frame-render.js +209 -0
  452. package/dist/view/layer/frame-state.d.ts +147 -0
  453. package/dist/view/layer/frame-state.js +484 -0
  454. package/dist/view/layer/gl-state.d.ts +77 -0
  455. package/dist/view/layer/gl-state.js +132 -0
  456. package/dist/view/layer/index.d.ts +6 -0
  457. package/dist/view/layer/index.js +5 -0
  458. package/dist/view/layer/render-scope.d.ts +30 -0
  459. package/dist/view/layer/render-scope.js +28 -0
  460. package/dist/view/layer/render.d.ts +87 -0
  461. package/dist/view/layer/render.js +187 -0
  462. package/dist/view/layer/renderers.d.ts +81 -0
  463. package/dist/view/layer/renderers.js +142 -0
  464. package/dist/view/layer/slot-manager.d.ts +26 -0
  465. package/dist/view/layer/slot-manager.js +133 -0
  466. package/dist/view/layer/slots.d.ts +33 -0
  467. package/dist/view/layer/slots.js +50 -0
  468. package/dist/view/layer/store-retained-bbox.d.ts +36 -0
  469. package/dist/view/layer/store-retained-bbox.js +188 -0
  470. package/dist/view/layer/store-retained-chunk.d.ts +97 -0
  471. package/dist/view/layer/store-retained-chunk.js +94 -0
  472. package/dist/view/layer/store-retained-classify.d.ts +34 -0
  473. package/dist/view/layer/store-retained-classify.js +88 -0
  474. package/dist/view/layer/store-retained-collect.d.ts +24 -0
  475. package/dist/view/layer/store-retained-collect.js +121 -0
  476. package/dist/view/layer/store-retained-coord-patch.d.ts +119 -0
  477. package/dist/view/layer/store-retained-coord-patch.js +168 -0
  478. package/dist/view/layer/store-retained-immediate.d.ts +63 -0
  479. package/dist/view/layer/store-retained-immediate.js +49 -0
  480. package/dist/view/layer/store-retained-invalidation.d.ts +96 -0
  481. package/dist/view/layer/store-retained-invalidation.js +192 -0
  482. package/dist/view/layer/store-retained.d.ts +198 -0
  483. package/dist/view/layer/store-retained.js +430 -0
  484. package/dist/view/layer/terrain-resolver.d.ts +1 -0
  485. package/dist/view/layer/terrain-resolver.js +174 -0
  486. package/dist/view/renderers/batch-manager.d.ts +61 -0
  487. package/dist/view/renderers/batch-manager.js +718 -0
  488. package/dist/view/renderers/draw-factors.d.ts +60 -0
  489. package/dist/view/renderers/draw-factors.js +35 -0
  490. package/dist/view/renderers/drawer.d.ts +1 -0
  491. package/dist/view/renderers/drawer.js +346 -0
  492. package/dist/view/renderers/image.d.ts +1 -0
  493. package/dist/view/renderers/image.js +255 -0
  494. package/dist/view/renderers/line/dash.d.ts +31 -0
  495. package/dist/view/renderers/line/dash.js +152 -0
  496. package/dist/view/renderers/line/line-geometry.d.ts +39 -0
  497. package/dist/view/renderers/line/line-geometry.js +460 -0
  498. package/dist/view/renderers/line/line-gl.d.ts +1 -0
  499. package/dist/view/renderers/line/line-gl.js +236 -0
  500. package/dist/view/renderers/line/line-shader.d.ts +1 -0
  501. package/dist/view/renderers/line/line-shader.js +364 -0
  502. package/dist/view/renderers/line/line-types.d.ts +43 -0
  503. package/dist/view/renderers/line/line-types.js +3 -0
  504. package/dist/view/renderers/line/line-uniforms.d.ts +1 -0
  505. package/dist/view/renderers/line/line-uniforms.js +390 -0
  506. package/dist/view/renderers/line/sdf-line.d.ts +92 -0
  507. package/dist/view/renderers/line/sdf-line.js +567 -0
  508. package/dist/view/renderers/point/billboard-depth.d.ts +10 -0
  509. package/dist/view/renderers/point/billboard-depth.js +56 -0
  510. package/dist/view/renderers/point/point-instance.d.ts +124 -0
  511. package/dist/view/renderers/point/point-instance.js +738 -0
  512. package/dist/view/renderers/point/point-sdf.d.ts +58 -0
  513. package/dist/view/renderers/point/point-sdf.js +170 -0
  514. package/dist/view/renderers/point/point-shape.d.ts +99 -0
  515. package/dist/view/renderers/point/point-shape.js +504 -0
  516. package/dist/view/renderers/point/point-style.d.ts +1 -0
  517. package/dist/view/renderers/point/point-style.js +46 -0
  518. package/dist/view/renderers/polygon/batch.d.ts +26 -0
  519. package/dist/view/renderers/polygon/batch.js +336 -0
  520. package/dist/view/renderers/polygon/earcut-input.d.ts +37 -0
  521. package/dist/view/renderers/polygon/earcut-input.js +55 -0
  522. package/dist/view/renderers/polygon/earcut-sliced.d.ts +69 -0
  523. package/dist/view/renderers/polygon/earcut-sliced.js +960 -0
  524. package/dist/view/renderers/polygon/fill.d.ts +74 -0
  525. package/dist/view/renderers/polygon/fill.js +251 -0
  526. package/dist/view/renderers/polygon/sdf-polygon.d.ts +62 -0
  527. package/dist/view/renderers/polygon/sdf-polygon.js +919 -0
  528. package/dist/view/renderers/polygon/terrain-cull.d.ts +3 -0
  529. package/dist/view/renderers/polygon/terrain-cull.js +14 -0
  530. package/dist/view/renderers/polygon/triangulator.d.ts +41 -0
  531. package/dist/view/renderers/polygon/triangulator.js +3 -0
  532. package/dist/view/renderers/retained.d.ts +43 -0
  533. package/dist/view/renderers/retained.js +3 -0
  534. package/dist/view/renderers/stroke.d.ts +121 -0
  535. package/dist/view/renderers/stroke.js +621 -0
  536. package/dist/view/shaders/frame.d.ts +8 -0
  537. package/dist/view/shaders/frame.js +37 -0
  538. package/dist/view/shaders/helpers.d.ts +238 -0
  539. package/dist/view/shaders/helpers.js +611 -0
  540. package/dist/view/shaders/initializer.d.ts +27 -0
  541. package/dist/view/shaders/initializer.js +125 -0
  542. package/dist/view/shaders/projection.d.ts +123 -0
  543. package/dist/view/shaders/projection.js +299 -0
  544. package/dist/view/shaders/quad-grid.d.ts +77 -0
  545. package/dist/view/shaders/quad-grid.js +128 -0
  546. package/dist/view/shaders/quad.d.ts +189 -0
  547. package/dist/view/shaders/quad.js +582 -0
  548. package/dist/view/shaders/retained-origin.d.ts +50 -0
  549. package/dist/view/shaders/retained-origin.js +67 -0
  550. package/dist/view/shaders/terrain-shade.d.ts +23 -0
  551. package/dist/view/shaders/terrain-shade.js +93 -0
  552. package/dist/view/style-rule.d.ts +166 -0
  553. package/dist/view/style-rule.js +300 -0
  554. package/dist/view/terrain/anchor.d.ts +135 -0
  555. package/dist/view/terrain/anchor.js +226 -0
  556. package/dist/view/terrain/context.d.ts +132 -0
  557. package/dist/view/terrain/context.js +437 -0
  558. package/dist/view/terrain/dem-atlas.d.ts +97 -0
  559. package/dist/view/terrain/dem-atlas.js +534 -0
  560. package/dist/view/terrain/detect.d.ts +126 -0
  561. package/dist/view/terrain/detect.js +198 -0
  562. package/dist/view/terrain/drape/bin-store.d.ts +179 -0
  563. package/dist/view/terrain/drape/bin-store.js +529 -0
  564. package/dist/view/terrain/drape/binning.d.ts +259 -0
  565. package/dist/view/terrain/drape/binning.js +604 -0
  566. package/dist/view/terrain/drape/edge-constrain.d.ts +37 -0
  567. package/dist/view/terrain/drape/edge-constrain.js +175 -0
  568. package/dist/view/terrain/drape/geometry.d.ts +95 -0
  569. package/dist/view/terrain/drape/geometry.js +260 -0
  570. package/dist/view/terrain/drape/mesh.d.ts +50 -0
  571. package/dist/view/terrain/drape/mesh.js +86 -0
  572. package/dist/view/terrain/drape/pass.d.ts +122 -0
  573. package/dist/view/terrain/drape/pass.js +379 -0
  574. package/dist/view/terrain/drape/quad-glyphs.d.ts +64 -0
  575. package/dist/view/terrain/drape/quad-glyphs.js +117 -0
  576. package/dist/view/terrain/drape/quad.d.ts +249 -0
  577. package/dist/view/terrain/drape/quad.js +835 -0
  578. package/dist/view/terrain/drape/renderer.d.ts +184 -0
  579. package/dist/view/terrain/drape/renderer.js +706 -0
  580. package/dist/view/terrain/drape/shared.d.ts +80 -0
  581. package/dist/view/terrain/drape/shared.js +173 -0
  582. package/dist/view/terrain/drape/stitch.d.ts +155 -0
  583. package/dist/view/terrain/drape/stitch.js +228 -0
  584. package/dist/view/terrain/ground.d.ts +72 -0
  585. package/dist/view/terrain/ground.js +151 -0
  586. package/dist/view/terrain/metrics.d.ts +180 -0
  587. package/dist/view/terrain/metrics.js +231 -0
  588. package/dist/view/terrain/occlusion.d.ts +11 -0
  589. package/dist/view/terrain/occlusion.js +129 -0
  590. package/dist/view/terrain/polygon.d.ts +86 -0
  591. package/dist/view/terrain/polygon.js +301 -0
  592. package/dist/view/terrain/shade.d.ts +48 -0
  593. package/dist/view/terrain/shade.js +45 -0
  594. package/dist/view/terrain/state.d.ts +99 -0
  595. package/dist/view/terrain/state.js +186 -0
  596. package/dist/view/terrain/tessellation.d.ts +265 -0
  597. package/dist/view/terrain/tessellation.js +924 -0
  598. package/dist/view/terrain/tiling.d.ts +56 -0
  599. package/dist/view/terrain/tiling.js +155 -0
  600. package/dist/view/terrain/upstream-terrain.d.ts +82 -0
  601. package/dist/view/terrain/upstream-terrain.js +116 -0
  602. package/dist/view/ui/auxiliary-handles.d.ts +151 -0
  603. package/dist/view/ui/auxiliary-handles.js +22 -0
  604. package/dist/view/ui/bounds.d.ts +53 -0
  605. package/dist/view/ui/bounds.js +149 -0
  606. package/dist/view/ui/box-selection.d.ts +1 -0
  607. package/dist/view/ui/box-selection.js +83 -0
  608. package/dist/view/ui/handle-test.d.ts +1 -0
  609. package/dist/view/ui/handle-test.js +437 -0
  610. package/dist/view/ui/handle-thinning.d.ts +122 -0
  611. package/dist/view/ui/handle-thinning.js +430 -0
  612. package/dist/view/ui/handles.d.ts +25 -0
  613. package/dist/view/ui/handles.js +673 -0
  614. package/dist/view/ui/helper.d.ts +19 -0
  615. package/dist/view/ui/helper.js +76 -0
  616. package/dist/view/ui/index.d.ts +15 -0
  617. package/dist/view/ui/index.js +15 -0
  618. package/dist/view/ui/selection-scope.d.ts +25 -0
  619. package/dist/view/ui/selection-scope.js +34 -0
  620. package/dist/view/ui/selection-ui/bounding-box.d.ts +44 -0
  621. package/dist/view/ui/selection-ui/bounding-box.js +240 -0
  622. package/dist/view/ui/selection-ui/extension-registry.d.ts +76 -0
  623. package/dist/view/ui/selection-ui/extension-registry.js +78 -0
  624. package/dist/view/ui/selection-ui/index.d.ts +12 -0
  625. package/dist/view/ui/selection-ui/index.js +12 -0
  626. package/dist/view/ui/selection-ui/renderer.d.ts +29 -0
  627. package/dist/view/ui/selection-ui/renderer.js +227 -0
  628. package/dist/view/ui/selection-ui/types.d.ts +55 -0
  629. package/dist/view/ui/selection-ui/types.js +3 -0
  630. package/dist/view/ui/selection-ui-drawer.d.ts +52 -0
  631. package/dist/view/ui/selection-ui-drawer.js +329 -0
  632. package/dist/view/ui/tentative.d.ts +1 -0
  633. package/dist/view/ui/tentative.js +320 -0
  634. package/dist/view/viewport.d.ts +119 -0
  635. package/dist/view/viewport.js +254 -0
  636. package/package.json +113 -0
@@ -0,0 +1,125 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ import { calculateOffsetUniforms } from './helpers.js';
4
+ /**
5
+ * ShaderInitializer
6
+ *
7
+ * Manages the shader initialization and the projection data setup of every
8
+ * renderer
9
+ *
10
+ * @internal
11
+ */
12
+ export class ShaderInitializer {
13
+ constructor(renderers) {
14
+ Object.defineProperty(this, "renderers", {
15
+ enumerable: true,
16
+ configurable: true,
17
+ writable: true,
18
+ value: void 0
19
+ });
20
+ this.renderers = renderers;
21
+ }
22
+ /**
23
+ * Makes every renderer ensure its shader
24
+ */
25
+ ensureShaders(shaderData) {
26
+ const { featureDrawer, tentativeRenderer, quadShader, strokeRenderer, pointShapeRenderer, pointInstanceRenderer, sdfLineRenderer, polygonBatchRenderer, sdfPolygonRenderer, } = this.renderers;
27
+ if (featureDrawer) {
28
+ featureDrawer.ensureShader(shaderData);
29
+ }
30
+ if (tentativeRenderer) {
31
+ tentativeRenderer.ensureShader(shaderData);
32
+ }
33
+ if (quadShader) {
34
+ quadShader.ensureShader(shaderData);
35
+ }
36
+ if (strokeRenderer) {
37
+ strokeRenderer.ensureShader(shaderData);
38
+ }
39
+ if (pointShapeRenderer) {
40
+ pointShapeRenderer.ensureShader(shaderData);
41
+ }
42
+ if (pointInstanceRenderer) {
43
+ pointInstanceRenderer.ensureShader(shaderData);
44
+ }
45
+ if (sdfLineRenderer) {
46
+ sdfLineRenderer.ensureShader(shaderData);
47
+ }
48
+ if (polygonBatchRenderer) {
49
+ polygonBatchRenderer.ensureShader(shaderData);
50
+ }
51
+ if (sdfPolygonRenderer) {
52
+ sdfPolygonRenderer.ensureShader(shaderData);
53
+ }
54
+ }
55
+ /**
56
+ * Sets the projection data on the renderers that need it
57
+ */
58
+ setProjectionData(projectionData) {
59
+ const { pointShapeRenderer, pointInstanceRenderer } = this.renderers;
60
+ if (pointShapeRenderer) {
61
+ pointShapeRenderer.setProjectionData(projectionData);
62
+ }
63
+ if (pointInstanceRenderer) {
64
+ pointInstanceRenderer.setProjectionData(projectionData);
65
+ }
66
+ }
67
+ /**
68
+ * Sets the uniforms for offset mode on every renderer
69
+ * Computes projectionCenter at 64-bit precision on the CPU side and passes it to each renderer
70
+ * The uniforms for globe mode are set directly from ProjectionData
71
+ */
72
+ setOffsetUniforms(centerLngLat, mainMatrix) {
73
+ this.applyOffsetUniforms(calculateOffsetUniforms(centerLngLat, mainMatrix));
74
+ }
75
+ /**
76
+ * Sets uniforms for offset mode that are already computed on every renderer
77
+ *
78
+ * The rendering of one copy of the world (the view across the antimeridian) computes its
79
+ * uniforms once per frame and applies them for each slot.
80
+ */
81
+ applyOffsetUniforms(uniforms) {
82
+ const { featureDrawer, tentativeRenderer, quadShader, strokeRenderer, pointShapeRenderer, pointInstanceRenderer, sdfLineRenderer, polygonBatchRenderer, sdfPolygonRenderer, } = this.renderers;
83
+ if (featureDrawer) {
84
+ featureDrawer.setOffsetUniforms(uniforms);
85
+ }
86
+ if (tentativeRenderer) {
87
+ tentativeRenderer.setOffsetUniforms(uniforms);
88
+ }
89
+ if (quadShader) {
90
+ quadShader.setOffsetUniforms(uniforms);
91
+ }
92
+ if (strokeRenderer) {
93
+ strokeRenderer.setOffsetUniforms(uniforms);
94
+ }
95
+ if (pointShapeRenderer) {
96
+ pointShapeRenderer.setOffsetUniforms(uniforms);
97
+ }
98
+ if (pointInstanceRenderer) {
99
+ pointInstanceRenderer.setOffsetUniforms(uniforms);
100
+ }
101
+ if (sdfLineRenderer) {
102
+ sdfLineRenderer.setOffsetUniforms(uniforms);
103
+ }
104
+ if (polygonBatchRenderer) {
105
+ polygonBatchRenderer.setOffsetUniforms(uniforms);
106
+ }
107
+ if (sdfPolygonRenderer) {
108
+ sdfPolygonRenderer.setOffsetUniforms(uniforms);
109
+ }
110
+ }
111
+ /**
112
+ * Increments the frame count of SDFLineRenderer
113
+ */
114
+ incrementSdfLineFrame() {
115
+ if (this.renderers.sdfLineRenderer) {
116
+ this.renderers.sdfLineRenderer.incrementFrame();
117
+ }
118
+ }
119
+ }
120
+ /**
121
+ * Creates a ShaderInitializer
122
+ */
123
+ export function createShaderInitializer(renderers) {
124
+ return new ShaderInitializer(renderers);
125
+ }
@@ -0,0 +1,123 @@
1
+ /**
2
+ * ProjectionUniformManager
3
+ *
4
+ * A class that unifies the management of projection-related uniforms.
5
+ * It centralizes the uniform location lookup and setup that was duplicated in
6
+ * each renderer.
7
+ */
8
+ import type { ProjectionData } from 'maplibre-gl';
9
+ import type { TerrainContext } from '../terrain/context.js';
10
+ import type { OffsetUniforms } from './helpers.js';
11
+ /**
12
+ * The locations of the projection and terrain uniforms of one program, as
13
+ * {@link ProjectionUniformManager} looks them up. A location is null when the program does
14
+ * not declare the uniform.
15
+ */
16
+ export interface ProjectionUniformLocations {
17
+ /** `u_projection_matrix`: the projection matrix of the frame */
18
+ matrix: WebGLUniformLocation | null;
19
+ /** `u_center_lnglat`: the view center in degrees, rounded to Float32 (offset mode) */
20
+ centerLngLat: WebGLUniformLocation | null;
21
+ /** `u_projection_center`: the view center in clip space (offset mode) */
22
+ projectionCenter: WebGLUniformLocation | null;
23
+ /** `u_units_per_degree`: Mercator units per degree at the center (offset mode) */
24
+ unitsPerDegree: WebGLUniformLocation | null;
25
+ /** `u_units_per_degree2`: the latitude correction of the above (offset mode) */
26
+ unitsPerDegree2: WebGLUniformLocation | null;
27
+ /** `u_use_offset_mode`: 1 to project relative to the center, 0 otherwise */
28
+ useOffsetMode: WebGLUniformLocation | null;
29
+ /**
30
+ * The gap between the reference coordinates of a retained batch and the linearization
31
+ * center (immediate mode uses [0, 0])
32
+ */
33
+ originShift: WebGLUniformLocation | null;
34
+ /** Globe: the Mercator coordinates of the tile (from maplibre's prelude) */
35
+ mercatorCoords: WebGLUniformLocation | null;
36
+ /** Globe: the clipping plane (from maplibre's prelude) */
37
+ clippingPlane: WebGLUniformLocation | null;
38
+ /** Globe: the transition between Mercator (0) and globe (1) */
39
+ transition: WebGLUniformLocation | null;
40
+ /** Globe: the fallback matrix (from maplibre's prelude) */
41
+ fallbackMatrix: WebGLUniformLocation | null;
42
+ /** Terrain: the Mercator coordinates of the view center */
43
+ centerMercator: WebGLUniformLocation | null;
44
+ /** Terrain: 1 while the terrain is drawn, 0 otherwise */
45
+ terrainOn: WebGLUniformLocation | null;
46
+ /** Terrain: the sampler of the DEM atlas */
47
+ demAtlas: WebGLUniformLocation | null;
48
+ /** Terrain: the Mercator rectangle the DEM atlas covers */
49
+ demAtlasRect: WebGLUniformLocation | null;
50
+ /** Terrain: the size of the DEM atlas */
51
+ demAtlasSize: WebGLUniformLocation | null;
52
+ /** Terrain: the parameters of the elevation lookup */
53
+ elevationParams: WebGLUniformLocation | null;
54
+ /** Terrain shading: the light direction (polygon fills only) */
55
+ lightDir: WebGLUniformLocation | null;
56
+ /** Terrain shading: the strength of the shading (polygon fills only) */
57
+ shadeStrength: WebGLUniformLocation | null;
58
+ }
59
+ /**
60
+ * Looks up and sets the projection and terrain uniforms of a program, for a custom renderer
61
+ * that uses {@link OFFSET_MODE_GLSL}.
62
+ *
63
+ * A class that manages the projection-related uniforms in one place
64
+ */
65
+ export declare class ProjectionUniformManager {
66
+ private gl;
67
+ private locations;
68
+ private memo;
69
+ /**
70
+ * Whether this is a renderer that draws things stuck to the ground surface
71
+ * (polygons and lines)
72
+ *
73
+ * Only renderers with true stop applying the elevation on a frame that draws
74
+ * polygons and lines flat (the zoomed-out band; surfacesFlattened in
75
+ * `terrain/context.ts`). Symbols such as points, handles and text quads
76
+ * are determined by a single vertex and do not interpolate in between, so
77
+ * they do not create cliffs. Stopping the elevation would only put them out
78
+ * of step with hit testing (the anchor projection).
79
+ */
80
+ private readonly surface;
81
+ /**
82
+ * The terrain state of the draw instance being drawn (null draws without terrain)
83
+ *
84
+ * The renderers of a CustomLayer pass their instance's context at construction. A renderer
85
+ * of an extension implementation, which may be shared between draw instances, calls
86
+ * `setTerrain(context.terrain)` with the context it receives in each draw call.
87
+ */
88
+ private terrain;
89
+ constructor(gl: WebGL2RenderingContext, options?: {
90
+ surface?: boolean;
91
+ terrain?: TerrainContext | null;
92
+ });
93
+ /**
94
+ * Sets the terrain state the next uniforms are taken from (null draws without terrain)
95
+ */
96
+ setTerrain(terrain: TerrainContext | null): void;
97
+ /**
98
+ * Obtains the uniform locations from a program
99
+ *
100
+ * Rebuilding the program also resets the uniform values, so the record is
101
+ * discarded as well.
102
+ */
103
+ getLocations(program: WebGLProgram): ProjectionUniformLocations;
104
+ /**
105
+ * Obtains the current locations (getLocations() must be called first)
106
+ */
107
+ getCurrentLocations(): ProjectionUniformLocations | null;
108
+ /**
109
+ * Sets the projection uniforms
110
+ *
111
+ * A uniform whose value is the same as last time is not rewritten. Retained
112
+ * mode passes through here for every chunk, but the only thing that changes
113
+ * between chunks is u_origin_shift; the matrix and the camera-related values
114
+ * are invariant within a frame (see frame.ts).
115
+ *
116
+ * @param projectionData MapLibre's ProjectionData
117
+ * @param zoom The current zoom level
118
+ * @param offsetUniforms The uniforms for offset mode (null is allowed)
119
+ * @param originShift The gap between the reference coordinates of the vertex offsets and
120
+ * the linearization center (the default is [0,0])
121
+ */
122
+ setUniforms(projectionData: ProjectionData, zoom: number, offsetUniforms: OffsetUniforms | null, originShift?: [number, number]): void;
123
+ }
@@ -0,0 +1,299 @@
1
+ // SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ import { INACTIVE_TERRAIN_STATE, TERRAIN_ATLAS_TEXTURE_UNIT, } from '../terrain/state.js';
4
+ import { getRenderFrame } from './frame.js';
5
+ /**
6
+ * Creates a record in the not-yet-written state
7
+ */
8
+ function createMemo() {
9
+ return {
10
+ frame: -1,
11
+ mainMatrix: null,
12
+ globeSource: null,
13
+ useOffsetMode: Number.NaN,
14
+ originShiftX: Number.NaN,
15
+ originShiftY: Number.NaN,
16
+ centerSource: null,
17
+ offsetSource: null,
18
+ terrainSource: null,
19
+ terrainOn: Number.NaN,
20
+ terrainCenterSource: null,
21
+ shadeLight: null,
22
+ shadeStrength: Number.NaN,
23
+ };
24
+ }
25
+ /**
26
+ * Looks up and sets the projection and terrain uniforms of a program, for a custom renderer
27
+ * that uses {@link OFFSET_MODE_GLSL}.
28
+ *
29
+ * A class that manages the projection-related uniforms in one place
30
+ */
31
+ export class ProjectionUniformManager {
32
+ constructor(gl, options = {}) {
33
+ Object.defineProperty(this, "gl", {
34
+ enumerable: true,
35
+ configurable: true,
36
+ writable: true,
37
+ value: void 0
38
+ });
39
+ Object.defineProperty(this, "locations", {
40
+ enumerable: true,
41
+ configurable: true,
42
+ writable: true,
43
+ value: null
44
+ });
45
+ Object.defineProperty(this, "memo", {
46
+ enumerable: true,
47
+ configurable: true,
48
+ writable: true,
49
+ value: createMemo()
50
+ });
51
+ /**
52
+ * Whether this is a renderer that draws things stuck to the ground surface
53
+ * (polygons and lines)
54
+ *
55
+ * Only renderers with true stop applying the elevation on a frame that draws
56
+ * polygons and lines flat (the zoomed-out band; surfacesFlattened in
57
+ * `terrain/context.ts`). Symbols such as points, handles and text quads
58
+ * are determined by a single vertex and do not interpolate in between, so
59
+ * they do not create cliffs. Stopping the elevation would only put them out
60
+ * of step with hit testing (the anchor projection).
61
+ */
62
+ Object.defineProperty(this, "surface", {
63
+ enumerable: true,
64
+ configurable: true,
65
+ writable: true,
66
+ value: void 0
67
+ });
68
+ /**
69
+ * The terrain state of the draw instance being drawn (null draws without terrain)
70
+ *
71
+ * The renderers of a CustomLayer pass their instance's context at construction. A renderer
72
+ * of an extension implementation, which may be shared between draw instances, calls
73
+ * `setTerrain(context.terrain)` with the context it receives in each draw call.
74
+ */
75
+ Object.defineProperty(this, "terrain", {
76
+ enumerable: true,
77
+ configurable: true,
78
+ writable: true,
79
+ value: void 0
80
+ });
81
+ this.gl = gl;
82
+ this.surface = options.surface === true;
83
+ this.terrain = options.terrain ?? null;
84
+ }
85
+ /**
86
+ * Sets the terrain state the next uniforms are taken from (null draws without terrain)
87
+ */
88
+ setTerrain(terrain) {
89
+ this.terrain = terrain;
90
+ }
91
+ /**
92
+ * Obtains the uniform locations from a program
93
+ *
94
+ * Rebuilding the program also resets the uniform values, so the record is
95
+ * discarded as well.
96
+ */
97
+ getLocations(program) {
98
+ const gl = this.gl;
99
+ this.memo = createMemo();
100
+ this.locations = {
101
+ // The basic projection
102
+ matrix: gl.getUniformLocation(program, 'u_projection_matrix'),
103
+ // For offset mode
104
+ centerLngLat: gl.getUniformLocation(program, 'u_center_lnglat'),
105
+ projectionCenter: gl.getUniformLocation(program, 'u_projection_center'),
106
+ unitsPerDegree: gl.getUniformLocation(program, 'u_units_per_degree'),
107
+ unitsPerDegree2: gl.getUniformLocation(program, 'u_units_per_degree2'),
108
+ useOffsetMode: gl.getUniformLocation(program, 'u_use_offset_mode'),
109
+ originShift: gl.getUniformLocation(program, 'u_origin_shift'),
110
+ // For globe mode
111
+ mercatorCoords: gl.getUniformLocation(program, 'u_projection_tile_mercator_coords'),
112
+ clippingPlane: gl.getUniformLocation(program, 'u_projection_clipping_plane'),
113
+ transition: gl.getUniformLocation(program, 'u_projection_transition'),
114
+ fallbackMatrix: gl.getUniformLocation(program, 'u_projection_fallback_matrix'),
115
+ // For terrain
116
+ centerMercator: gl.getUniformLocation(program, 'u_center_mercator'),
117
+ terrainOn: gl.getUniformLocation(program, 'u_terrain_on'),
118
+ demAtlas: gl.getUniformLocation(program, 'u_dem_atlas'),
119
+ demAtlasRect: gl.getUniformLocation(program, 'u_dem_atlas_rect'),
120
+ demAtlasSize: gl.getUniformLocation(program, 'u_dem_atlas_size'),
121
+ elevationParams: gl.getUniformLocation(program, 'u_elevation_params'),
122
+ // For terrain shading (null in shaders that do not declare them, and nothing is written)
123
+ lightDir: gl.getUniformLocation(program, 'u_light_dir'),
124
+ shadeStrength: gl.getUniformLocation(program, 'u_shade_strength'),
125
+ };
126
+ return this.locations;
127
+ }
128
+ /**
129
+ * Obtains the current locations (getLocations() must be called first)
130
+ */
131
+ getCurrentLocations() {
132
+ return this.locations;
133
+ }
134
+ /**
135
+ * Sets the projection uniforms
136
+ *
137
+ * A uniform whose value is the same as last time is not rewritten. Retained
138
+ * mode passes through here for every chunk, but the only thing that changes
139
+ * between chunks is u_origin_shift; the matrix and the camera-related values
140
+ * are invariant within a frame (see frame.ts).
141
+ *
142
+ * @param projectionData MapLibre's ProjectionData
143
+ * @param zoom The current zoom level
144
+ * @param offsetUniforms The uniforms for offset mode (null is allowed)
145
+ * @param originShift The gap between the reference coordinates of the vertex offsets and
146
+ * the linearization center (the default is [0,0])
147
+ */
148
+ setUniforms(projectionData, zoom, offsetUniforms, originShift = [0, 0]) {
149
+ if (!this.locations)
150
+ return;
151
+ const gl = this.gl;
152
+ const locs = this.locations;
153
+ const memo = this.memo;
154
+ // Rewrite everything when the frame changes (insurance against a design where the
155
+ // contents change while the reference stays the same)
156
+ const frame = getRenderFrame();
157
+ const staleFrame = memo.frame !== frame;
158
+ // Use offset mode at high zoom levels (zoom >= 12)
159
+ const useOffsetMode = zoom >= 12 ? 1.0 : 0.0;
160
+ // Projection matrix
161
+ if (locs.matrix && (staleFrame || memo.mainMatrix !== projectionData.mainMatrix)) {
162
+ gl.uniformMatrix4fv(locs.matrix, false, projectionData.mainMatrix);
163
+ memo.mainMatrix = projectionData.mainMatrix;
164
+ }
165
+ // The offset mode flag
166
+ if (locs.useOffsetMode && (staleFrame || memo.useOffsetMode !== useOffsetMode)) {
167
+ gl.uniform1f(locs.useOffsetMode, useOffsetMode);
168
+ memo.useOffsetMode = useOffsetMode;
169
+ }
170
+ // The gap of the reference coordinates is always set (defaults to [0,0])
171
+ // This keeps a previous value from lingering when the same program is reused from a
172
+ // retained batch to immediate mode
173
+ // (only this one changes per chunk, so in practice it is written almost every time)
174
+ if (locs.originShift &&
175
+ (staleFrame || memo.originShiftX !== originShift[0] || memo.originShiftY !== originShift[1])) {
176
+ gl.uniform2f(locs.originShift, originShift[0], originShift[1]);
177
+ memo.originShiftX = originShift[0];
178
+ memo.originShiftY = originShift[1];
179
+ }
180
+ // centerLngLat is always set (because the relative coordinates are computed on the CPU
181
+ // side, it is required even at zoom < 12 so that the shader's fallback path can restore
182
+ // the absolute coordinates)
183
+ if (locs.centerLngLat && (staleFrame || memo.centerSource !== offsetUniforms)) {
184
+ if (offsetUniforms) {
185
+ gl.uniform2fv(locs.centerLngLat, offsetUniforms.centerLngLat);
186
+ }
187
+ else {
188
+ gl.uniform2fv(locs.centerLngLat, [0, 0]);
189
+ }
190
+ memo.centerSource = offsetUniforms;
191
+ }
192
+ // The uniforms specific to offset mode (used only when zoom >= 12)
193
+ // If the source is the same, the written values are the same too (null means the default
194
+ // values were written)
195
+ const offsetSource = offsetUniforms && useOffsetMode > 0 ? offsetUniforms : null;
196
+ if (staleFrame || memo.offsetSource !== offsetSource) {
197
+ if (offsetSource) {
198
+ if (locs.projectionCenter) {
199
+ gl.uniform4fv(locs.projectionCenter, offsetSource.projectionCenter);
200
+ }
201
+ if (locs.unitsPerDegree) {
202
+ gl.uniform3fv(locs.unitsPerDegree, offsetSource.unitsPerDegree);
203
+ }
204
+ if (locs.unitsPerDegree2) {
205
+ gl.uniform3fv(locs.unitsPerDegree2, offsetSource.unitsPerDegree2);
206
+ }
207
+ }
208
+ else {
209
+ // Default values when not in offset mode
210
+ if (locs.projectionCenter) {
211
+ gl.uniform4fv(locs.projectionCenter, [0, 0, 0, 0]);
212
+ }
213
+ if (locs.unitsPerDegree) {
214
+ gl.uniform3fv(locs.unitsPerDegree, [1, 1, 1]);
215
+ }
216
+ if (locs.unitsPerDegree2) {
217
+ gl.uniform3fv(locs.unitsPerDegree2, [0, 0, 0]);
218
+ }
219
+ }
220
+ memo.offsetSource = offsetSource;
221
+ }
222
+ // The uniforms for globe mode (taken from projectionData)
223
+ if (staleFrame || memo.globeSource !== projectionData) {
224
+ if (locs.mercatorCoords && projectionData.tileMercatorCoords) {
225
+ gl.uniform4fv(locs.mercatorCoords, projectionData.tileMercatorCoords);
226
+ }
227
+ if (locs.clippingPlane && projectionData.clippingPlane) {
228
+ gl.uniform4fv(locs.clippingPlane, projectionData.clippingPlane);
229
+ }
230
+ if (locs.transition) {
231
+ gl.uniform1f(locs.transition, projectionData.projectionTransition ?? 0);
232
+ }
233
+ if (locs.fallbackMatrix && projectionData.fallbackMatrix) {
234
+ gl.uniformMatrix4fv(locs.fallbackMatrix, false, projectionData.fallbackMatrix);
235
+ }
236
+ memo.globeSource = projectionData;
237
+ }
238
+ // The uniforms for terrain (taken from the frame state; when terrain is disabled,
239
+ // u_terrain_on = 0 makes the vertex computation exactly identical to before)
240
+ //
241
+ // The atlas origin is handed over as a value relative to the center Mercator
242
+ // coordinates. Sending absolute Mercator coordinates (values in 0-1 that use up the
243
+ // significant digits) as Float32 cannot express differences smaller than one atlas
244
+ // texel, which makes the elevation come out in steps.
245
+ const context = this.terrain;
246
+ const terrain = context?.renderState ?? INACTIVE_TERRAIN_STATE;
247
+ const suppressed = context?.elevationSuppressed === true;
248
+ const flattened = this.surface && context?.surfacesFlattened === true;
249
+ const terrainOn = terrain.active && !suppressed && !flattened ? 1 : 0;
250
+ if (staleFrame ||
251
+ memo.terrainSource !== terrain ||
252
+ memo.terrainOn !== terrainOn ||
253
+ memo.terrainCenterSource !== offsetUniforms) {
254
+ const centerMercX = offsetUniforms?.centerMercator[0] ?? 0;
255
+ const centerMercY = offsetUniforms?.centerMercator[1] ?? 0;
256
+ if (locs.terrainOn)
257
+ gl.uniform1f(locs.terrainOn, terrainOn);
258
+ if (locs.demAtlas)
259
+ gl.uniform1i(locs.demAtlas, TERRAIN_ATLAS_TEXTURE_UNIT);
260
+ if (locs.centerMercator)
261
+ gl.uniform2f(locs.centerMercator, centerMercX, centerMercY);
262
+ if (locs.demAtlasRect) {
263
+ gl.uniform4f(locs.demAtlasRect, terrain.atlasRect[0] - centerMercX, terrain.atlasRect[1] - centerMercY, terrain.atlasRect[2], terrain.atlasRect[3]);
264
+ }
265
+ if (locs.demAtlasSize) {
266
+ gl.uniform2f(locs.demAtlasSize, terrain.atlasSize[0], terrain.atlasSize[1]);
267
+ }
268
+ if (locs.elevationParams) {
269
+ gl.uniform2f(locs.elevationParams, terrain.elevationScale, terrain.liftMeters);
270
+ }
271
+ memo.terrainSource = terrain;
272
+ memo.terrainOn = terrainOn;
273
+ memo.terrainCenterSource = offsetUniforms;
274
+ }
275
+ // The uniforms of the terrain shading (declared only by the shaders of the polygon fill)
276
+ //
277
+ // The strength is set to 0 when there is no terrain and when drawing as a shape on the
278
+ // screen (things drawn with the elevation stopped, such as a rubber band). It is not set
279
+ // to 0 on a frame that draws polygons and lines flat (the zoomed-out band). Stopping the
280
+ // vertex displacement is a measure to avoid cliffs, and erasing the shading there as
281
+ // well would make the appearance of the fill jump at the boundary where the paths swap
282
+ // over (which is the very reason this shading was introduced).
283
+ if (locs.lightDir !== null || locs.shadeStrength !== null) {
284
+ const light = context?.shadeLight ?? null;
285
+ const shadeStrength = light !== null && terrain.active && !suppressed ? light.strength : 0;
286
+ if (staleFrame || memo.shadeLight !== light || memo.shadeStrength !== shadeStrength) {
287
+ if (locs.lightDir) {
288
+ const d = light?.direction ?? [0, 0, 1];
289
+ gl.uniform3fv(locs.lightDir, [d[0], d[1], d[2]]);
290
+ }
291
+ if (locs.shadeStrength)
292
+ gl.uniform1f(locs.shadeStrength, shadeStrength);
293
+ memo.shadeLight = light;
294
+ memo.shadeStrength = shadeStrength;
295
+ }
296
+ }
297
+ memo.frame = frame;
298
+ }
299
+ }
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Subdivision of a textured quad (the degraded path)
3
+ *
4
+ * On frames where the analytic drape (`terrain/drape/quad.ts`) cannot be used,
5
+ * the quad is split to a fineness close to the grid of the terrain mesh. The
6
+ * resulting vertices are lifted by the shared GLSL
7
+ * (`terrain_elevation_from_offset` in `OFFSET_MODE_GLSL`), which looks up the
8
+ * elevation from the DEM atlas, so unlike a billboard with only four corners
9
+ * the terrain never pokes through from the inside.
10
+ *
11
+ * The step is aimed at half the node spacing of the terrain mesh. In theory,
12
+ * splitting to match the nodes themselves would be best, but a quad is a
13
+ * rotated rectangle, so cutting it along the grid produces trapezoids. With a
14
+ * half step, the amount by which a chord dips below the terrain inside a cell
15
+ * drops to about 1/4 of the node-aligned case and falls within the depth bias
16
+ * (`TERRAIN_DEPTH_BIAS`) applied to the whole frame.
17
+ *
18
+ * There is an upper limit on the total number of cells. This is so that the
19
+ * cost does not diverge even for a huge quad that covers a whole country;
20
+ * when the limit is hit, the caller reports the coarsening factor via
21
+ * `reportTerrainCoarsening` and the depth bias grows by the same amount (it
22
+ * rides directly on the same mechanism as the subdivision of polygons and
23
+ * lines).
24
+ */
25
+ /** The maximum number of divisions per side */
26
+ export declare const QUAD_GRID_MAX_DIVISIONS = 128;
27
+ /** The upper limit on the total number of cells */
28
+ export declare const QUAD_GRID_MAX_CELLS = 16384;
29
+ /** The number of divisions of the subdivision */
30
+ export interface QuadGridSize {
31
+ /** The number of divisions in the u direction (top-left -> top-right) */
32
+ readonly nx: number;
33
+ /** The number of divisions in the v direction (top-left -> bottom-left) */
34
+ readonly ny: number;
35
+ /**
36
+ * The coarseness of the actual step relative to the terrain mesh node spacing
37
+ * (1 = same as the nodes)
38
+ */
39
+ readonly coarsening: number;
40
+ }
41
+ /**
42
+ * Decides the number of divisions
43
+ *
44
+ * @param quad The four corners in Mercator coordinates (x, y in the order top-left, top-right,
45
+ * bottom-right, bottom-left)
46
+ * @param stepGrid The node spacing of the terrain mesh (Mercator). No subdivision if 0 or less
47
+ * @param stepRatio The target step relative to `stepGrid` (half of it on terrain; the globe
48
+ * passes 1 to cut at its cell, `view/globe-subdivision.ts`)
49
+ */
50
+ export declare function computeQuadGridSize(quad: ArrayLike<number>, stepGrid: number, stepRatio?: number): QuadGridSize;
51
+ /**
52
+ * The subdivided grid (absolute coordinates; subtracting the per-frame center
53
+ * is done by the caller)
54
+ */
55
+ export interface QuadGridGeometry {
56
+ /** The WGS84 coordinates of the vertices (a sequence of [lng, lat]; kept at 64-bit) */
57
+ readonly lngLat: Float64Array;
58
+ /** The texture coordinates of the vertices */
59
+ readonly texCoords: Float32Array;
60
+ /** The triangle indices */
61
+ readonly indices: Uint16Array;
62
+ /** The number of vertices */
63
+ readonly vertexCount: number;
64
+ }
65
+ /**
66
+ * Builds a grid by subdividing the four corners
67
+ *
68
+ * The interpolation is done on the Mercator plane. The interpolation of the
69
+ * texture coordinates when the GPU draws the four-corner billboard is also
70
+ * linear on the Mercator plane, so the appearance does not change when
71
+ * subdivided (interpolating on the lng/lat plane would introduce a slight
72
+ * stretch in the latitude direction).
73
+ *
74
+ * @param quad The four corners in Mercator coordinates (x, y in the order top-left, top-right,
75
+ * bottom-right, bottom-left)
76
+ */
77
+ export declare function buildQuadGrid(quad: ArrayLike<number>, nx: number, ny: number): QuadGridGeometry;