@tangram.gl/tangram-renderer 0.0.0-stage → 0.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 (321) hide show
  1. package/README.md +59 -2
  2. package/dist/core.js +36923 -0
  3. package/dist/core.js.map +6 -0
  4. package/dist/index.js +32 -0
  5. package/dist/loaders-gl-worker.js +82 -0
  6. package/dist/loaders-gl-worker.js.map +6 -0
  7. package/dist/map-logic.js +2 -0
  8. package/dist/map-logic.js.map +6 -0
  9. package/dist/projected-basemaps-worker.js +3 -0
  10. package/dist/projected-basemaps-worker.js.map +6 -0
  11. package/dist/shader-modules.js +141 -0
  12. package/dist/shader-modules.js.map +6 -0
  13. package/dist/style-schema.js +126 -0
  14. package/dist/style-schema.js.map +6 -0
  15. package/dist/tangram-style.schema.json +882 -0
  16. package/dist/tangram.debug.mjs +37139 -0
  17. package/dist/tangram.debug.mjs.map +6 -0
  18. package/dist/tangram.min.mjs +4950 -0
  19. package/dist/types/builders/earcut.d.ts +15 -0
  20. package/dist/types/core.d.ts +29 -0
  21. package/dist/types/gl/constants.d.ts +2 -0
  22. package/dist/types/gl/globe_mesh.d.ts +48 -0
  23. package/dist/types/gl/glsl.d.ts +17 -0
  24. package/dist/types/gl/vertex-constants.d.ts +4 -0
  25. package/dist/types/gl/vertex-types.d.ts +34 -0
  26. package/dist/types/gl/vertex_data.d.ts +32 -0
  27. package/dist/types/gl/vertex_elements.d.ts +8 -0
  28. package/dist/types/gl/vertex_layout.d.ts +32 -0
  29. package/dist/types/glsl.d.ts +14 -0
  30. package/dist/types/gpu/luma_device_renderer.d.ts +66 -0
  31. package/dist/types/gpu/resource_lifecycle.d.ts +4 -0
  32. package/dist/types/gpu/tangram_gpu_backend.d.ts +151 -0
  33. package/dist/types/index.d.ts +155 -0
  34. package/dist/types/lights/light-definitions.d.ts +121 -0
  35. package/dist/types/map-logic/draped-terrain-bounds.d.ts +41 -0
  36. package/dist/types/map-logic/globe-terrain-preparation.d.ts +85 -0
  37. package/dist/types/map-logic/globe-terrain.d.ts +54 -0
  38. package/dist/types/map-logic/index.d.ts +33 -0
  39. package/dist/types/map-logic/label-identity.d.ts +22 -0
  40. package/dist/types/map-logic/label-placement.d.ts +32 -0
  41. package/dist/types/map-logic/screen-bounds.d.ts +15 -0
  42. package/dist/types/map-logic/terrain-data.d.ts +55 -0
  43. package/dist/types/map-logic/terrain-error.d.ts +51 -0
  44. package/dist/types/map-logic/terrain-ground-topology.d.ts +26 -0
  45. package/dist/types/map-logic/terrain-height-field.d.ts +59 -0
  46. package/dist/types/map-logic/terrain-navigation.d.ts +27 -0
  47. package/dist/types/map-logic/terrain-neighborhood.d.ts +5 -0
  48. package/dist/types/map-logic/terrain-query.d.ts +33 -0
  49. package/dist/types/map-logic/terrain-resource-budget.d.ts +51 -0
  50. package/dist/types/map-logic/terrain-transition-topology.d.ts +23 -0
  51. package/dist/types/map-logic/tile-build-queue.d.ts +51 -0
  52. package/dist/types/map-logic/tile-cache-policy.d.ts +46 -0
  53. package/dist/types/map-logic/tile-residency.d.ts +17 -0
  54. package/dist/types/map-logic/triangle-query-index.d.ts +87 -0
  55. package/dist/types/procedures/js-yaml.d.ts +15 -0
  56. package/dist/types/procedures/mesh-projector.d.ts +107 -0
  57. package/dist/types/procedures/mvt-dependencies.d.ts +20 -0
  58. package/dist/types/procedures/projected-coordinate-transform.d.ts +27 -0
  59. package/dist/types/procedures/projection-batch-executor.d.ts +53 -0
  60. package/dist/types/procedures/scene-yaml-legacy.d.ts +6 -0
  61. package/dist/types/procedures/terrain-draping.d.ts +165 -0
  62. package/dist/types/procedures/terrain-globe.d.ts +6 -0
  63. package/dist/types/procedures/terrain-styled-topology.d.ts +34 -0
  64. package/dist/types/procedures/web-mercator-legacy.d.ts +4 -0
  65. package/dist/types/procedures/web-mercator-math.d.ts +4 -0
  66. package/dist/types/scene/globals.d.ts +11 -0
  67. package/dist/types/scene/ground_footprint.d.ts +16 -0
  68. package/dist/types/scene/host_frame.d.ts +54 -0
  69. package/dist/types/scene/projection_math.d.ts +52 -0
  70. package/dist/types/scene/scene-resource-types.d.ts +177 -0
  71. package/dist/types/scene/scene_bundle.d.ts +69 -0
  72. package/dist/types/scene/visibility_adapter.d.ts +106 -0
  73. package/dist/types/selection/draped-terrain-surface.d.ts +78 -0
  74. package/dist/types/selection/terrain_surface.d.ts +149 -0
  75. package/dist/types/shader-modules/globe-horizon.d.ts +15 -0
  76. package/dist/types/shader-modules/height-decode.d.ts +13 -0
  77. package/dist/types/shader-modules/hillshade.d.ts +13 -0
  78. package/dist/types/shader-modules/index.d.ts +6 -0
  79. package/dist/types/shader-modules/planar.d.ts +12 -0
  80. package/dist/types/shader-modules/sphere-map.d.ts +13 -0
  81. package/dist/types/shader-modules/triplanar.d.ts +15 -0
  82. package/dist/types/sources/decoded_tile_store.d.ts +95 -0
  83. package/dist/types/sources/tile_source_metadata.d.ts +32 -0
  84. package/dist/types/styles/text/fontfaceobserver.d.ts +10 -0
  85. package/dist/types/tile/tile_id.d.ts +37 -0
  86. package/dist/types/tile/tile_traversal_adapter.d.ts +63 -0
  87. package/dist/types/types.d.ts +293 -0
  88. package/dist/types/utils/geo.d.ts +57 -0
  89. package/dist/types/utils/hash.d.ts +1 -0
  90. package/dist/types/utils/log.d.ts +27 -0
  91. package/dist/types/utils/props.d.ts +6 -0
  92. package/dist/types/utils/subscribe.d.ts +10 -0
  93. package/dist/types/utils/thread.d.ts +6 -0
  94. package/dist/types/utils/urls.d.ts +26 -0
  95. package/dist/types/utils/utils.d.ts +26 -0
  96. package/dist/types/utils/version.d.ts +2 -0
  97. package/dist/types/utils/worker-types.d.ts +68 -0
  98. package/dist/types/utils/worker_broker.d.ts +3 -0
  99. package/package.json +103 -3
  100. package/src/builders/common.ts +41 -0
  101. package/src/builders/earcut.d.ts +15 -0
  102. package/src/builders/geometry-types.ts +60 -0
  103. package/src/builders/points.ts +115 -0
  104. package/src/builders/polygons.ts +225 -0
  105. package/src/builders/polylines.ts +682 -0
  106. package/src/builders/wireframe.ts +31 -0
  107. package/src/core.d.ts +29 -0
  108. package/src/core.ts +33 -0
  109. package/src/experimental/loaders-gl-worker.ts +19 -0
  110. package/src/experimental/projected-basemaps-worker.ts +13 -0
  111. package/src/experimental/projected-mesh-cache.ts +137 -0
  112. package/src/experimental/projected-mesh-domain.ts +110 -0
  113. package/src/experimental/projected-mesh-refinement.ts +193 -0
  114. package/src/experimental/projected-mesh.ts +399 -0
  115. package/src/experimental/projected-normal.ts +26 -0
  116. package/src/experimental/projected-symbol-mesh.ts +74 -0
  117. package/src/gl/constants.ts +18 -0
  118. package/src/gl/context.ts +103 -0
  119. package/src/gl/extensions.ts +30 -0
  120. package/src/gl/globe_mesh.ts +285 -0
  121. package/src/gl/glsl.ts +257 -0
  122. package/src/gl/mesh-types.ts +56 -0
  123. package/src/gl/render_state.ts +111 -0
  124. package/src/gl/shader_program.ts +1310 -0
  125. package/src/gl/texture.ts +814 -0
  126. package/src/gl/uniform_buffer.ts +340 -0
  127. package/src/gl/vao.ts +154 -0
  128. package/src/gl/vbo_mesh.ts +349 -0
  129. package/src/gl/vertex-constants.ts +19 -0
  130. package/src/gl/vertex-types.ts +35 -0
  131. package/src/gl/vertex_data.ts +126 -0
  132. package/src/gl/vertex_elements.ts +54 -0
  133. package/src/gl/vertex_layout.ts +241 -0
  134. package/src/glsl.d.ts +14 -0
  135. package/src/gpu/luma_device_renderer.ts +579 -0
  136. package/src/gpu/pixel_readback.ts +51 -0
  137. package/src/gpu/resource_lifecycle.ts +32 -0
  138. package/src/gpu/tangram_gpu_backend.ts +195 -0
  139. package/src/index.d.ts +155 -0
  140. package/src/index.ts +105 -0
  141. package/src/labels/collision-types.ts +94 -0
  142. package/src/labels/collision.ts +273 -0
  143. package/src/labels/collision_grid.ts +61 -0
  144. package/src/labels/intersect.ts +30 -0
  145. package/src/labels/label-types.ts +91 -0
  146. package/src/labels/label.ts +207 -0
  147. package/src/labels/label_line.ts +801 -0
  148. package/src/labels/label_point.ts +131 -0
  149. package/src/labels/main-pass-types.ts +73 -0
  150. package/src/labels/main_pass.ts +221 -0
  151. package/src/labels/point_anchor.ts +100 -0
  152. package/src/labels/point_placement.ts +150 -0
  153. package/src/labels/projected-pass.ts +259 -0
  154. package/src/labels/repeat_group.ts +72 -0
  155. package/src/lights/ambient_light.glsl +18 -0
  156. package/src/lights/directional_light.glsl +39 -0
  157. package/src/lights/geographic-lights.ts +21 -0
  158. package/src/lights/light-definitions.ts +285 -0
  159. package/src/lights/light.ts +590 -0
  160. package/src/lights/lighting-uniforms.ts +80 -0
  161. package/src/lights/lighting-wgsl.ts +116 -0
  162. package/src/lights/material.glsl +237 -0
  163. package/src/lights/material.ts +145 -0
  164. package/src/lights/native-falloff.ts +37 -0
  165. package/src/lights/point_light.glsl +96 -0
  166. package/src/lights/spot_light.glsl +111 -0
  167. package/src/map-logic/draped-terrain-bounds.ts +71 -0
  168. package/src/map-logic/globe-terrain-preparation.ts +217 -0
  169. package/src/map-logic/globe-terrain.ts +296 -0
  170. package/src/map-logic/index.ts +37 -0
  171. package/src/map-logic/label-identity.ts +36 -0
  172. package/src/map-logic/label-placement.ts +117 -0
  173. package/src/map-logic/screen-bounds.ts +34 -0
  174. package/src/map-logic/terrain-data.ts +107 -0
  175. package/src/map-logic/terrain-error.ts +134 -0
  176. package/src/map-logic/terrain-ground-topology.ts +164 -0
  177. package/src/map-logic/terrain-height-field.ts +254 -0
  178. package/src/map-logic/terrain-navigation.ts +50 -0
  179. package/src/map-logic/terrain-neighborhood.ts +43 -0
  180. package/src/map-logic/terrain-query.ts +51 -0
  181. package/src/map-logic/terrain-resource-budget.ts +124 -0
  182. package/src/map-logic/terrain-transition-topology.ts +164 -0
  183. package/src/map-logic/tile-build-queue.ts +110 -0
  184. package/src/map-logic/tile-cache-policy.ts +89 -0
  185. package/src/map-logic/tile-residency.ts +50 -0
  186. package/src/map-logic/triangle-query-index.ts +265 -0
  187. package/src/procedures/js-yaml.d.ts +15 -0
  188. package/src/procedures/mesh-projector.ts +191 -0
  189. package/src/procedures/mlt-loaders.ts +55 -0
  190. package/src/procedures/mvt-dependencies.d.ts +20 -0
  191. package/src/procedures/mvt-legacy.ts +150 -0
  192. package/src/procedures/mvt-loaders.ts +53 -0
  193. package/src/procedures/mvt-parser.ts +48 -0
  194. package/src/procedures/mvt-properties.ts +36 -0
  195. package/src/procedures/mvt-tile-provider.ts +72 -0
  196. package/src/procedures/pmtiles-loader.ts +75 -0
  197. package/src/procedures/projected-coordinate-transform.ts +79 -0
  198. package/src/procedures/projection-batch-executor.ts +140 -0
  199. package/src/procedures/scene-yaml-legacy.ts +16 -0
  200. package/src/procedures/scene-yaml-loaders.ts +10 -0
  201. package/src/procedures/terrain-draping.ts +713 -0
  202. package/src/procedures/terrain-globe.ts +32 -0
  203. package/src/procedures/terrain-styled-topology.ts +184 -0
  204. package/src/procedures/web-mercator-legacy.ts +24 -0
  205. package/src/procedures/web-mercator-math.ts +50 -0
  206. package/src/scene/camera.ts +298 -0
  207. package/src/scene/camera_base.ts +116 -0
  208. package/src/scene/classic_scene.ts +20 -0
  209. package/src/scene/external_camera.ts +101 -0
  210. package/src/scene/globals.ts +120 -0
  211. package/src/scene/ground_footprint.ts +139 -0
  212. package/src/scene/host_frame.ts +326 -0
  213. package/src/scene/projected_tile_lod.ts +125 -0
  214. package/src/scene/projection_math.ts +142 -0
  215. package/src/scene/projection_shaders.ts +183 -0
  216. package/src/scene/renderer.ts +516 -0
  217. package/src/scene/scene-resource-types.ts +174 -0
  218. package/src/scene/scene.ts +2378 -0
  219. package/src/scene/scene_bundle.ts +304 -0
  220. package/src/scene/scene_debug.ts +129 -0
  221. package/src/scene/scene_loader.ts +402 -0
  222. package/src/scene/scene_worker.ts +528 -0
  223. package/src/scene/view.ts +683 -0
  224. package/src/scene/visibility_adapter.ts +319 -0
  225. package/src/scene/worker_url.ts +15 -0
  226. package/src/selection/draped-terrain-surface.ts +377 -0
  227. package/src/selection/selection-types.ts +79 -0
  228. package/src/selection/selection.ts +542 -0
  229. package/src/selection/selection_fragment.glsl +18 -0
  230. package/src/selection/selection_globals.glsl +9 -0
  231. package/src/selection/selection_pixels.ts +59 -0
  232. package/src/selection/selection_vertex.glsl +15 -0
  233. package/src/selection/terrain_surface.ts +298 -0
  234. package/src/shader-modules/globe-horizon.ts +52 -0
  235. package/src/shader-modules/height-decode.ts +41 -0
  236. package/src/shader-modules/hillshade.ts +70 -0
  237. package/src/shader-modules/index.ts +10 -0
  238. package/src/shader-modules/planar.ts +24 -0
  239. package/src/shader-modules/sphere-map.ts +38 -0
  240. package/src/shader-modules/triplanar.ts +45 -0
  241. package/src/sources/aligned_tile_source.ts +122 -0
  242. package/src/sources/data_source.ts +655 -0
  243. package/src/sources/decoded_tile_store.ts +245 -0
  244. package/src/sources/geojson.ts +300 -0
  245. package/src/sources/mvt.ts +247 -0
  246. package/src/sources/raster.ts +341 -0
  247. package/src/sources/shared_tile_source_adapter.ts +117 -0
  248. package/src/sources/sources.ts +10 -0
  249. package/src/sources/tile_source_adapter.ts +84 -0
  250. package/src/sources/tile_source_metadata.ts +65 -0
  251. package/src/sources/tile_source_state.ts +112 -0
  252. package/src/sources/topojson.ts +90 -0
  253. package/src/styles/feature_annotations.ts +16 -0
  254. package/src/styles/filter.ts +190 -0
  255. package/src/styles/geometry-style-types.ts +209 -0
  256. package/src/styles/globe_visibility_wgsl.ts +22 -0
  257. package/src/styles/layer-types.ts +45 -0
  258. package/src/styles/layer.ts +586 -0
  259. package/src/styles/lines/dasharray.ts +49 -0
  260. package/src/styles/lines/lines.ts +707 -0
  261. package/src/styles/lines/lines_wgsl.ts +224 -0
  262. package/src/styles/points/point-runtime-types.ts +125 -0
  263. package/src/styles/points/points.ts +1079 -0
  264. package/src/styles/points/points_fragment.glsl +126 -0
  265. package/src/styles/points/points_vertex.glsl +230 -0
  266. package/src/styles/points/points_wgsl.ts +189 -0
  267. package/src/styles/polygons/polygons.ts +268 -0
  268. package/src/styles/polygons/polygons_fragment.glsl +173 -0
  269. package/src/styles/polygons/polygons_vertex.glsl +213 -0
  270. package/src/styles/polygons/polygons_wgsl.ts +127 -0
  271. package/src/styles/property-types.ts +125 -0
  272. package/src/styles/raster/raster.ts +33 -0
  273. package/src/styles/raster/raster_globals.glsl +46 -0
  274. package/src/styles/style-mixing-types.ts +101 -0
  275. package/src/styles/style-runtime-types.ts +220 -0
  276. package/src/styles/style-schema.ts +133 -0
  277. package/src/styles/style.ts +1033 -0
  278. package/src/styles/style_globals.glsl +69 -0
  279. package/src/styles/style_manager.ts +464 -0
  280. package/src/styles/style_parser.ts +620 -0
  281. package/src/styles/text/font_manager.ts +180 -0
  282. package/src/styles/text/fontfaceobserver.d.ts +10 -0
  283. package/src/styles/text/text-types.ts +220 -0
  284. package/src/styles/text/text.ts +378 -0
  285. package/src/styles/text/text_canvas.ts +773 -0
  286. package/src/styles/text/text_labels.ts +436 -0
  287. package/src/styles/text/text_segments.ts +142 -0
  288. package/src/styles/text/text_settings.ts +228 -0
  289. package/src/styles/text/text_wgsl.ts +159 -0
  290. package/src/styles/text/text_wrap.ts +194 -0
  291. package/src/tile/globe_tile_preload.ts +40 -0
  292. package/src/tile/tangram_tileset_2d.ts +108 -0
  293. package/src/tile/tile-build-types.ts +155 -0
  294. package/src/tile/tile.ts +807 -0
  295. package/src/tile/tile_id.ts +172 -0
  296. package/src/tile/tile_manager.ts +889 -0
  297. package/src/tile/tile_pyramid.ts +119 -0
  298. package/src/tile/tile_resource_cache.ts +91 -0
  299. package/src/tile/tile_traversal_adapter.ts +132 -0
  300. package/src/types.ts +332 -0
  301. package/src/utils/debounce.ts +17 -0
  302. package/src/utils/debug_settings.ts +43 -0
  303. package/src/utils/errors.ts +12 -0
  304. package/src/utils/functions.ts +95 -0
  305. package/src/utils/geo.ts +364 -0
  306. package/src/utils/hash.ts +14 -0
  307. package/src/utils/log.ts +108 -0
  308. package/src/utils/media_capture.ts +193 -0
  309. package/src/utils/merge.ts +44 -0
  310. package/src/utils/obb.ts +134 -0
  311. package/src/utils/props.ts +43 -0
  312. package/src/utils/slice.ts +14 -0
  313. package/src/utils/subscribe.ts +58 -0
  314. package/src/utils/task.ts +154 -0
  315. package/src/utils/thread.ts +26 -0
  316. package/src/utils/urls.ts +223 -0
  317. package/src/utils/utils.ts +310 -0
  318. package/src/utils/vector.ts +197 -0
  319. package/src/utils/version.ts +8 -0
  320. package/src/utils/worker-types.ts +79 -0
  321. package/src/utils/worker_broker.ts +523 -0
package/package.json CHANGED
@@ -1,6 +1,106 @@
1
1
  {
2
2
  "name": "@tangram.gl/tangram-renderer",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.0.0",
4
+ "description": "Tangram vector-tile scene renderer powered by luma.gl",
5
+ "homepage": "https://vis.gl/tangram.gl/",
6
+ "type": "module",
7
+ "main": "dist/index.js",
8
+ "module": "dist/index.js",
9
+ "types": "dist/types/index.d.ts",
10
+ "exports": {
11
+ ".": {
12
+ "types": "./dist/types/index.d.ts",
13
+ "import": "./dist/index.js",
14
+ "default": "./dist/index.js"
15
+ },
16
+ "./dist/*": "./dist/*",
17
+ "./core": {
18
+ "types": "./dist/types/core.d.ts",
19
+ "import": "./dist/core.js",
20
+ "default": "./dist/core.js"
21
+ },
22
+ "./style-schema": {
23
+ "import": "./dist/style-schema.js"
24
+ },
25
+ "./map-logic": {
26
+ "types": "./dist/types/map-logic/index.d.ts",
27
+ "import": "./dist/map-logic.js",
28
+ "default": "./dist/map-logic.js"
29
+ },
30
+ "./experimental/shader-modules": {
31
+ "types": "./dist/types/shader-modules/index.d.ts",
32
+ "import": "./dist/shader-modules.js",
33
+ "default": "./dist/shader-modules.js"
34
+ },
35
+ "./tangram-style.schema.json": "./dist/tangram-style.schema.json"
36
+ },
37
+ "files": [
38
+ "dist",
39
+ "src"
40
+ ],
41
+ "sideEffects": true,
42
+ "repository": {
43
+ "type": "git",
44
+ "url": "https://github.com/visgl/tangram.gl.git",
45
+ "directory": "modules/tangram-renderer"
46
+ },
47
+ "license": "MIT",
48
+ "publishConfig": {
49
+ "access": "public"
50
+ },
51
+ "scripts": {
52
+ "build": "yarn build:types && node scripts/build.mjs && yarn build:entry && yarn build:map-logic && yarn build:shader-modules && yarn build:style-schema && yarn generate-style-schema && yarn build:loaders-gl-worker && yarn build:projection-worker && yarn build:size",
53
+ "build:types": "node ../../scripts/build-package-types.mjs modules/tangram-renderer index.d.ts core.d.ts types.ts map-logic/index.ts shader-modules/index.ts",
54
+ "build:shader-modules": "yarn --cwd ../.. ocular-bundle modules/tangram-renderer/src/shader-modules/index.ts --format=esm --output=modules/tangram-renderer/dist/shader-modules.js --externals=@tangram.gl/tangram-layers --sourcemap=true --sourcesContent=false",
55
+ "build:map-logic": "yarn --cwd ../.. ocular-bundle modules/tangram-renderer/src/map-logic/index.ts --format=esm --output=modules/tangram-renderer/dist/map-logic.js --externals=@tangram.gl/tangram-layers --sourcemap=true --sourcesContent=false",
56
+ "build:projection-worker": "yarn --cwd ../.. ocular-bundle modules/tangram-renderer/src/experimental/projected-basemaps-worker.ts --format=iife --globalName=TangramProjectedBasemaps --output=modules/tangram-renderer/dist/projected-basemaps-worker.js --externals=@tangram.gl/tangram-layers --sourcemap=true --sourcesContent=false",
57
+ "build:entry": "node scripts/write-package-entry.mjs",
58
+ "build:style-schema": "yarn --cwd ../.. ocular-bundle modules/tangram-renderer/src/styles/style-schema.ts --env=dev --format=esm --output=modules/tangram-renderer/dist/style-schema.js --externals=zod --sourcemap=true --sourcesContent=false",
59
+ "build:loaders-gl-worker": "yarn --cwd ../.. ocular-bundle modules/tangram-renderer/src/experimental/loaders-gl-worker.ts --format=iife --globalName=TangramLoadersGL --output=modules/tangram-renderer/dist/loaders-gl-worker.js --externals=@tangram.gl/tangram-layers --sourcemap=true --sourcesContent=false",
60
+ "generate-style-schema": "node scripts/generate-style-schema.mjs",
61
+ "build:size": "gzip dist/tangram.min.mjs -c | wc -c | awk '{kb=$1/1000; print kb}' OFMT='Renderer ESM:\\t%.0f KB (min/gzip)'",
62
+ "prepack": "yarn build",
63
+ "watch": "node scripts/build.mjs --watch",
64
+ "test-build-worker": "node scripts/build.mjs --test-worker"
65
+ },
66
+ "devDependencies": {
67
+ "@loaders.gl/config": "5.0.0-alpha.11",
68
+ "@loaders.gl/core": "5.0.0-alpha.11",
69
+ "@loaders.gl/loader-utils": "5.0.0-alpha.11",
70
+ "@loaders.gl/mlt": "5.0.0-alpha.11",
71
+ "@loaders.gl/mvt": "5.0.0-alpha.11",
72
+ "@loaders.gl/pmtiles": "5.0.0-alpha.11",
73
+ "@loaders.gl/tiles": "5.0.0-alpha.11",
74
+ "@math.gl/geospatial": "5.0.0-alpha.18",
75
+ "@math.gl/projection": "5.0.0-alpha.18",
76
+ "esbuild": "^0.28.1"
77
+ },
78
+ "dependencies": {
79
+ "@luma.gl/core": "^9.4.2",
80
+ "@luma.gl/shadertools": "^9.4.2",
81
+ "@mapbox/vector-tile": "1.3.0",
82
+ "@math.gl/core": "5.0.0-alpha.18",
83
+ "@math.gl/culling": "5.0.0-alpha.18",
84
+ "@math.gl/web-mercator": "5.0.0-alpha.18",
85
+ "core-js": "^3.39.0",
86
+ "csscolorparser": "1.0.3",
87
+ "earcut": "2.2.2",
88
+ "fontfaceobserver": "2.0.7",
89
+ "geojson-vt": "3.2.1",
90
+ "gl-shader-errors": "1.0.3",
91
+ "js-yaml": "https://github.com/tangrams/js-yaml.git#read-only",
92
+ "jszip": "^3.10.1",
93
+ "pbf": "3.1.0",
94
+ "quickselect": "3.0.0",
95
+ "topojson-client": "https://github.com/tangrams/topojson-client.git#read-only",
96
+ "zod": "^4.1.12"
97
+ },
98
+ "peerDependencies": {
99
+ "@math.gl/projection": "5.0.0-alpha.18"
100
+ },
101
+ "peerDependenciesMeta": {
102
+ "@math.gl/projection": {
103
+ "optional": true
104
+ }
105
+ }
6
106
  }
@@ -0,0 +1,41 @@
1
+ // Tangram
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) 2013-2016 Brett Camper and Mapzen
4
+ // Copyright (c) 2026 vis.gl contributors
5
+
6
+ // Geometry building functions
7
+ import Geo from '../utils/geo';
8
+
9
+ export const tile_bounds = [
10
+ { x: 0, y: 0},
11
+ { x: Geo.tile_scale, y: -Geo.tile_scale } // TODO: correct for flipped y-axis?
12
+ ];
13
+
14
+ export const default_uvs = [0, 0, 1, 1];
15
+
16
+ // Tests if a line segment (from point A to B) is outside the tile bounds
17
+ // (within a certain tolerance to account for geometry nearly on tile edges)
18
+ export function outsideTile (_a: number[], _b: number[], tolerance: number): boolean {
19
+ let tile_min = tile_bounds[0];
20
+ let tile_max = tile_bounds[1];
21
+
22
+ // TODO: fix flipped Y coords here, confusing with 'max' reference
23
+ if ((_a[0] <= tile_min.x + tolerance && _b[0] <= tile_min.x + tolerance) ||
24
+ (_a[0] >= tile_max.x - tolerance && _b[0] >= tile_max.x - tolerance) ||
25
+ (_a[1] >= tile_min.y - tolerance && _b[1] >= tile_min.y - tolerance) ||
26
+ (_a[1] <= tile_max.y + tolerance && _b[1] <= tile_max.y + tolerance)) {
27
+ return true;
28
+ }
29
+
30
+ return false;
31
+ }
32
+
33
+ export function isCoordOutsideTile (coord: number[], tolerance = 0): boolean {
34
+ let tile_min = tile_bounds[0];
35
+ let tile_max = tile_bounds[1];
36
+
37
+ return coord[0] <= tile_min.x + tolerance ||
38
+ coord[0] >= tile_max.x - tolerance ||
39
+ coord[1] >= tile_min.y - tolerance ||
40
+ coord[1] <= tile_max.y + tolerance;
41
+ }
@@ -0,0 +1,15 @@
1
+ // tangram-layers
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ declare module 'earcut' {
6
+ type EarcutResult = number[];
7
+
8
+ interface EarcutFunction {
9
+ (vertices: number[], holes?: number[], dimensions?: number): EarcutResult;
10
+ flatten(data: number[][][]): {vertices: number[]; holes: number[]; dimensions: number};
11
+ }
12
+
13
+ const earcut: EarcutFunction;
14
+ export default earcut;
15
+ }
@@ -0,0 +1,60 @@
1
+ // tangram-layers
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ /** Tile-local coordinates; additional height components are retained by builders. */
6
+ export type GeometryCoordinate = number[];
7
+ /** One ordered polyline or closed polygon ring. */
8
+ export type GeometryLine = GeometryCoordinate[];
9
+ /** Polygon rings may carry area metadata assigned during source preprocessing. */
10
+ export type GeometryRing = GeometryLine & {area?: number};
11
+ /** Polygon exterior followed by holes in source winding order. */
12
+ export type GeometryPolygon = GeometryRing[];
13
+ /** Builder sink shared by real packed buffers and deterministic geometry fixtures. */
14
+ export interface GeometryVertexData {
15
+ vertex_count: number;
16
+ vertex_elements: {push(index: number): void};
17
+ addVertex(vertex: number[]): void;
18
+ }
19
+ /** Resolved line geometry parameters, independent of authored property caches. */
20
+ export interface PolylineStyle {
21
+ width: number;
22
+ cap?: 'butt' | 'square' | 'round';
23
+ join?: 'miter' | 'bevel' | 'round';
24
+ miter_limit?: number;
25
+ texcoord_width: number;
26
+ offset: number;
27
+ }
28
+ /** Attribute component indices; portable untextured lines explicitly disable UV writes. */
29
+ export interface PolylineVertexIndices {
30
+ a_extrude: number;
31
+ a_offset?: number;
32
+ a_texcoord?: number | null;
33
+ /** Optional CPU-projection source normals and authored stroke dimensions. */
34
+ a_projected_normals?: number;
35
+ a_projected_widths?: number;
36
+ }
37
+ /** Per-build mutable state; deferred segments retain the same geometry sink. */
38
+ export interface PolylineBuildContext {
39
+ closed_polygon: boolean | undefined;
40
+ remove_tile_edges: boolean | undefined;
41
+ tile_edge_tolerance: number;
42
+ miter_len_sq: number | undefined;
43
+ join_type: number;
44
+ cap_type: number;
45
+ vertex_data: GeometryVertexData;
46
+ vertex_template: number[];
47
+ half_width: number;
48
+ extrude_index: number;
49
+ offset_index: number | undefined;
50
+ v_scale: number | undefined;
51
+ texcoord_index: number | null | undefined;
52
+ texcoord_width: number;
53
+ offset: number;
54
+ geom_count: number;
55
+ extra_lines?: GeometryLine[];
56
+ /** Adjacent source normals retained only by opt-in projected line layouts. */
57
+ projected_normals_index?: number;
58
+ projected_widths_index?: number;
59
+ projected_normals?: number[];
60
+ }
@@ -0,0 +1,115 @@
1
+ // Tangram
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) 2013-2016 Brett Camper and Mapzen
4
+
5
+ // Point builders
6
+
7
+ import { default_uvs } from './common';
8
+ import type VertexData from '../gl/vertex_data';
9
+
10
+ type VertexIndex = Record<string, number>;
11
+
12
+ // Scaling values to encode fractional values with fixed-point integer attributes
13
+ const pre_angles_normalize = 128 / Math.PI;
14
+ const angles_normalize = 16384 / Math.PI;
15
+ const offsets_normalize = 64;
16
+ const texcoord_normalize = 65535;
17
+ const size_normalize = 128; // width/height are 8.8 fixed-point, but are halved (so multiply by 128 instead of 256)
18
+
19
+ // These index values map a 4-element vertex position counter from this pattern (used for size and UVs):
20
+ // [min_x, min_y, max_x, max_y]
21
+ // to this pattern:
22
+ // [min_x, min_y],
23
+ // [max_x, min_y],
24
+ // [max_x, max_y],
25
+ // [min_x, max_y]
26
+ const ix = [0, 2, 2, 0];
27
+ const iy = [1, 1, 3, 3];
28
+ const shape = new Array(4); // single, reusable allocation
29
+
30
+ // Build a billboard sprite quad centered on a point. Sprites are intended to be drawn in screenspace, and have
31
+ // properties for width, height, angle, and texture UVs. Curved label segment sprites have additional properties
32
+ // for interpolating their position and angle across zooms.
33
+ export function buildQuadForPoint (
34
+ point: number[],
35
+ vertex_data: VertexData,
36
+ vertex_template: number[],
37
+ vindex: VertexIndex,
38
+ size: number[],
39
+ offset: number[],
40
+ offsets: number[] | null,
41
+ pre_angles: number[] | null,
42
+ angle: number,
43
+ angles: number[] | null,
44
+ texcoords: number[] | undefined,
45
+ curve: boolean) {
46
+
47
+ // Half-sized point dimensions in fixed point
48
+ const w2 = size[0] * size_normalize;
49
+ const h2 = size[1] * size_normalize;
50
+ shape[0] = -w2;
51
+ shape[1] = -h2;
52
+ shape[2] = w2;
53
+ shape[3] = h2;
54
+
55
+ const uvs = texcoords || default_uvs;
56
+
57
+ const vertex_elements = vertex_data.vertex_elements;
58
+ let element_offset = vertex_data.vertex_count;
59
+
60
+ for (let p=0; p < 4; p++) {
61
+ vertex_template[vindex.a_position + 0] = point[0];
62
+ vertex_template[vindex.a_position + 1] = point[1];
63
+
64
+ vertex_template[vindex.a_shape + 0] = shape[ix[p]];
65
+ vertex_template[vindex.a_shape + 1] = shape[iy[p]];
66
+ vertex_template[vindex.a_shape + 2] = angle;
67
+
68
+ vertex_template[vindex.a_offset + 0] = offset[0];
69
+ vertex_template[vindex.a_offset + 1] = offset[1];
70
+
71
+ // Add texcoords
72
+ if (vindex.a_texcoord) {
73
+ vertex_template[vindex.a_texcoord + 0] = uvs[ix[p]] * texcoord_normalize;
74
+ vertex_template[vindex.a_texcoord + 1] = uvs[iy[p]] * texcoord_normalize;
75
+ }
76
+
77
+ // Add curved label segment props
78
+ if (curve) {
79
+ if (!pre_angles || !angles || !offsets) throw new TypeError('Curved quads require per-segment angle and offset samples');
80
+ // 1 byte (signed) range: [-127, 128]
81
+ // actual range: [-2pi, 2pi]
82
+ // total: multiply by 128 / (2 PI)
83
+ vertex_template[vindex.a_pre_angles + 0] = pre_angles_normalize * pre_angles[0];
84
+ vertex_template[vindex.a_pre_angles + 1] = pre_angles_normalize * pre_angles[1];
85
+ vertex_template[vindex.a_pre_angles + 2] = pre_angles_normalize * pre_angles[2];
86
+ vertex_template[vindex.a_pre_angles + 3] = pre_angles_normalize * pre_angles[3];
87
+
88
+ // 2 byte (signed) of resolution [-32767, 32768]
89
+ // actual range: [-2pi, 2pi]
90
+ // total: multiply by 32768 / (2 PI) = 16384 / PI
91
+ vertex_template[vindex.a_angles + 0] = angles_normalize * angles[0];
92
+ vertex_template[vindex.a_angles + 1] = angles_normalize * angles[1];
93
+ vertex_template[vindex.a_angles + 2] = angles_normalize * angles[2];
94
+ vertex_template[vindex.a_angles + 3] = angles_normalize * angles[3];
95
+
96
+ // offset range can be [0, 65535]
97
+ // actual range: [0, 1024]
98
+ vertex_template[vindex.a_offsets + 0] = offsets_normalize * offsets[0];
99
+ vertex_template[vindex.a_offsets + 1] = offsets_normalize * offsets[1];
100
+ vertex_template[vindex.a_offsets + 2] = offsets_normalize * offsets[2];
101
+ vertex_template[vindex.a_offsets + 3] = offsets_normalize * offsets[3];
102
+ }
103
+
104
+ vertex_data.addVertex(vertex_template);
105
+ }
106
+
107
+ vertex_elements.push(element_offset + 0);
108
+ vertex_elements.push(element_offset + 1);
109
+ vertex_elements.push(element_offset + 2);
110
+ vertex_elements.push(element_offset + 2);
111
+ vertex_elements.push(element_offset + 3);
112
+ vertex_elements.push(element_offset + 0);
113
+
114
+ return 2; // geom count is always two triangles, for one quad
115
+ }
@@ -0,0 +1,225 @@
1
+ // Tangram
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) 2013-2016 Brett Camper and Mapzen
4
+ // Copyright (c) 2026 vis.gl contributors
5
+
6
+ // Polygon builders
7
+
8
+ import Geo from '../utils/geo';
9
+ import Vector from '../utils/vector';
10
+ import { default_uvs, outsideTile } from './common';
11
+
12
+ import earcut from 'earcut';
13
+ import quickselect from 'quickselect';
14
+ import type {GeometryPolygon, GeometryVertexData} from './geometry-types';
15
+
16
+ const up_vec3 = [0, 0, 1];
17
+
18
+ type PolygonCoordinates = GeometryPolygon;
19
+ type VertexData = GeometryVertexData;
20
+ type PolygonBuildOptions = {
21
+ texcoord_index?: number;
22
+ texcoord_scale?: number[];
23
+ texcoord_normalize?: number;
24
+ };
25
+
26
+
27
+ /**
28
+ * To tesselate flat 2D polygons.
29
+ * The x & y coordinates will be set as first two elements of provided vertex_template.
30
+ * @param {Array.<Array.<Array.<Array.<number>>>>} polygons The polygons to tesselate.
31
+ * @param {VertexData} vertex_data The VertexData were to store the results
32
+ * @param {Array.<number>} vertex_template The vertex template to use
33
+ * @param {Object} options The texture coordinate options to apply
34
+ * @return {number} the number of the resulting geometries (triangles)
35
+ */
36
+ export function buildPolygons (
37
+ polygons: PolygonCoordinates[], vertex_data: VertexData, vertex_template: number[],
38
+ { texcoord_index, texcoord_scale, texcoord_normalize }: PolygonBuildOptions) {
39
+ const normalizedTextureScale = texcoord_normalize || 1;
40
+
41
+ let vertex_elements = vertex_data.vertex_elements,
42
+ num_polygons = polygons.length,
43
+ geom_count = 0,
44
+ min_u = 0, min_v = 0, max_u = 0, max_v = 0,
45
+ min_x = 0, min_y = 0, max_x = 0, max_y = 0,
46
+ span_x = 0, span_y = 0, scale_u = 0, scale_v = 0;
47
+
48
+ if (texcoord_index) {
49
+ [min_u, min_v, max_u, max_v] = texcoord_scale || default_uvs;
50
+ }
51
+
52
+ for (let p = 0; p < num_polygons; p++) {
53
+
54
+ const max_rings = 500;
55
+ let polygon = polygons[p];
56
+
57
+ if (polygon.length > max_rings) {
58
+ polygon = [...polygon]; // copy to avoid modifying original
59
+ quickselect(polygon, max_rings, 1, polygon.length - 1, (a, b) => b.area! - a.area!);
60
+ polygon = polygon.slice(0, max_rings);
61
+ }
62
+
63
+ const indices = triangulatePolygon(earcut.flatten(polygon));
64
+ const num_indices = indices.length;
65
+ const element_offset = vertex_data.vertex_count;
66
+
67
+ // The vertices and vertex-elements must not be added if earcut returns no indices:
68
+ if (num_indices) {
69
+
70
+ // Find polygon extents to calculate UVs, fit them to the axis-aligned bounding box:
71
+ if (texcoord_index) {
72
+ [min_x, min_y, max_x, max_y] = Geo.findBoundingBox(polygon),
73
+ span_x = max_x - min_x,
74
+ span_y = max_y - min_y,
75
+ scale_u = (max_u - min_u) / span_x,
76
+ scale_v = (max_v - min_v) / span_y;
77
+ }
78
+
79
+ for (let ring_index = 0; ring_index < polygon.length; ring_index++) {
80
+ // Add vertex data:
81
+ let polygon_ring = polygon[ring_index];
82
+ for (let i = 0; i < polygon_ring.length; i++) {
83
+ let vertex = polygon_ring[i];
84
+ vertex_template[0] = vertex[0];
85
+ vertex_template[1] = vertex[1];
86
+
87
+ // Add UVs:
88
+ if (texcoord_index) {
89
+ vertex_template[texcoord_index + 0] = ((vertex[0] - min_x) * scale_u + min_u) * normalizedTextureScale;
90
+ vertex_template[texcoord_index + 1] = ((vertex[1] - min_y) * scale_v + min_v) * normalizedTextureScale;
91
+ }
92
+
93
+ vertex_data.addVertex(vertex_template);
94
+ }
95
+ }
96
+
97
+ // Add element indices:
98
+ for (let i = 0; i < num_indices; i++) {
99
+ vertex_elements.push(element_offset + indices[i]);
100
+ }
101
+ geom_count += num_indices / 3;
102
+
103
+ }
104
+ }
105
+ return geom_count;
106
+ }
107
+
108
+
109
+ // Tesselate and extrude a flat 2D polygon into a simple 3D model with fixed height and add to GL vertex buffer
110
+ export function buildExtrudedPolygons (
111
+ polygons: PolygonCoordinates[],
112
+ z: number, height: number, min_height: number,
113
+ vertex_data: VertexData, vertex_template: number[],
114
+ normal_index: number,
115
+ normal_normalize: number,
116
+ {
117
+ remove_tile_edges,
118
+ tile_edge_tolerance,
119
+ texcoord_index,
120
+ texcoord_scale,
121
+ texcoord_normalize,
122
+ winding
123
+ }: PolygonBuildOptions & {
124
+ remove_tile_edges?: boolean;
125
+ tile_edge_tolerance?: number;
126
+ normal_index?: number;
127
+ winding?: string;
128
+ }) {
129
+ const normalizedTextureScale = texcoord_normalize || 1;
130
+
131
+ // Top
132
+ var min_z = z + (min_height || 0);
133
+ var max_z = z + height;
134
+ vertex_template[2] = max_z;
135
+ var geom_count = buildPolygons(polygons, vertex_data, vertex_template, { texcoord_index, texcoord_scale, texcoord_normalize });
136
+
137
+ var vertex_elements = vertex_data.vertex_elements;
138
+ var element_offset = vertex_data.vertex_count;
139
+
140
+ // Walls
141
+ // Fit UVs to wall quad
142
+ let texcoords: number[][] = [];
143
+ if (texcoord_index) {
144
+ var [min_u, min_v, max_u, max_v] = texcoord_scale || default_uvs;
145
+ texcoords = [
146
+ [min_u, max_v],
147
+ [min_u, min_v],
148
+ [max_u, min_v],
149
+ [max_u, max_v]
150
+ ];
151
+ }
152
+
153
+ var num_polygons = polygons.length;
154
+ for (var p=0; p < num_polygons; p++) {
155
+ var polygon = polygons[p];
156
+
157
+ for (var q=0; q < polygon.length; q++) {
158
+ var contour = polygon[q];
159
+
160
+ for (var w=0; w < contour.length - 1; w++) {
161
+ if (remove_tile_edges && outsideTile(contour[w], contour[w+1], tile_edge_tolerance || 0)) {
162
+ continue; // don't extrude tile edges
163
+ }
164
+
165
+ // Wall order is dependent on winding order, so that normals face outward
166
+ let w0, w1;
167
+ if (winding === 'CCW') {
168
+ w0 = w;
169
+ w1 = w+1;
170
+ }
171
+ else {
172
+ w0 = w+1;
173
+ w1 = w;
174
+ }
175
+
176
+ // Two triangles for the quad formed by each vertex pair, going from bottom to top height
177
+ var wall_vertices = [
178
+ [contour[w1][0], contour[w1][1], max_z],
179
+ [contour[w1][0], contour[w1][1], min_z],
180
+ [contour[w0][0], contour[w0][1], min_z],
181
+ [contour[w0][0], contour[w0][1], max_z]
182
+ ];
183
+
184
+ // Calc the normal of the wall from up vector and one segment of the wall triangles
185
+ let wall_vec = Vector.normalize([contour[w1][0] - contour[w0][0], contour[w1][1] - contour[w0][1], 0]);
186
+ let normal = Vector.cross(up_vec3, wall_vec) as number[]; // Three-dimensional inputs produce a vector, not a 2D scalar.
187
+
188
+ // Update vertex template with current surface normal
189
+ vertex_template[normal_index + 0] = normal[0] * normal_normalize;
190
+ vertex_template[normal_index + 1] = normal[1] * normal_normalize;
191
+ vertex_template[normal_index + 2] = normal[2] * normal_normalize;
192
+
193
+ for (var wv=0; wv < wall_vertices.length; wv++) {
194
+ vertex_template[0] = wall_vertices[wv][0];
195
+ vertex_template[1] = wall_vertices[wv][1];
196
+ vertex_template[2] = wall_vertices[wv][2];
197
+
198
+ if (texcoord_index) {
199
+ vertex_template[texcoord_index + 0] = texcoords[wv][0] * normalizedTextureScale;
200
+ vertex_template[texcoord_index + 1] = texcoords[wv][1] * normalizedTextureScale;
201
+ }
202
+
203
+ vertex_data.addVertex(vertex_template);
204
+ }
205
+
206
+ vertex_elements.push(element_offset + 0);
207
+ vertex_elements.push(element_offset + 1);
208
+ vertex_elements.push(element_offset + 2);
209
+ vertex_elements.push(element_offset + 2);
210
+ vertex_elements.push(element_offset + 3);
211
+ vertex_elements.push(element_offset + 0);
212
+
213
+ element_offset += 4;
214
+ geom_count += 2;
215
+ }
216
+ }
217
+ }
218
+ return geom_count;
219
+ }
220
+
221
+ // Triangulation using earcut
222
+ // https://github.com/mapbox/earcut
223
+ export function triangulatePolygon (data: {vertices: number[]; holes: number[]; dimensions: number}) {
224
+ return earcut(data.vertices, data.holes, data.dimensions);
225
+ }