@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
@@ -0,0 +1,108 @@
1
+ // tangram-layers
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ import TileBuildQueue from '../map-logic/tile-build-queue';
6
+ import {TileResidency} from '../map-logic/tile-residency';
7
+ import TileResourceCache from './tile_resource_cache';
8
+ import type {ResourceTile} from './tile_resource_cache';
9
+ import type {HostTileResourceOptions, TileResourceStatistics} from '../types';
10
+ import type {TileCoordinates} from './tile_id';
11
+
12
+ /** Host-independent traversal/bounds surface shared with loaders.gl's adapter contract. */
13
+ export interface TileTraversalAdapter<ViewStateT> {
14
+ /** Logical tile indices before source/style normalization. */
15
+ getTileIndices(context: {viewState: ViewStateT}): TileCoordinates[];
16
+ }
17
+
18
+ /**
19
+ * Renderer-independent resident tile table, build scheduling, and cache policy.
20
+ *
21
+ * This is a pre-alignment boundary, not a replacement for loaders.gl's Tileset2D.
22
+ * Tangram's adapter still owns traversal, style keys, refinement, and GPU disposal.
23
+ */
24
+ export default class TangramTileset2D<TileT extends ResourceTile> {
25
+ /** Shared submission queue; the adapter reports final worker replies and cancellation. */
26
+ readonly buildQueue = new TileBuildQueue();
27
+ /** Legacy keyed table, retained until renderer/worker adapters stop depending on its shape. */
28
+ tileRecords: Record<string, TileT> = {};
29
+ /** Recency and mesh-accounting metadata, separate from payload ownership. */
30
+ private readonly resourceCache = new TileResourceCache();
31
+ /** Limits already validated and copied by the host-frame boundary. */
32
+ private resourceLimits?: Readonly<HostTileResourceOptions>;
33
+ /** Optional shared consumers; the legacy renderer still supplies its own eye union. */
34
+ private readonly residency = new TileResidency();
35
+
36
+ /** Delegate logical selection without importing a View, Scene or host viewport implementation. */
37
+ getTileIndices<ViewStateT>(context: {viewState: ViewStateT}, adapter: TileTraversalAdapter<ViewStateT>): TileCoordinates[] {
38
+ return adapter.getTileIndices(context);
39
+ }
40
+
41
+ /** Attach a consumer without changing existing renderer-visible flags. */
42
+ attachConsumer(id: symbol): void { this.residency.attachConsumer(id); }
43
+
44
+ /** Replace one consumer's selections; other views continue protecting their own content. */
45
+ updateConsumer(id: symbol, selected: readonly string[], visible: readonly string[]): void {
46
+ this.residency.updateConsumer(id, selected, visible);
47
+ }
48
+
49
+ /** Release only this consumer's protection, never dispose another consumer's content. */
50
+ detachConsumer(id: symbol): void { this.residency.detachConsumer(id); }
51
+
52
+ /** Stable union of requested identities across optional shared consumers. */
53
+ get selectedTileKeys(): string[] {
54
+ return this.residency.getSelectedTileKeys();
55
+ }
56
+
57
+ /** Retained tiles in the same stable property order as the legacy manager. */
58
+ get tiles(): TileT[] { return Object.values(this.tileRecords); }
59
+
60
+ /** Retain a renderer-owned tile without submitting work or applying refinement. */
61
+ setTile(tile: TileT): void {
62
+ this.tileRecords[tile.key] = tile;
63
+ this.resourceCache.touch(tile.key);
64
+ }
65
+
66
+ /** Resolve a source/style identity without re-normalizing its data coordinates. */
67
+ getTile(key: string): TileT | undefined { return this.tileRecords[key]; }
68
+
69
+ /** Release ownership, update the adapter's hierarchy, then forget already-disposed content. */
70
+ forgetTile(key: string, beforeDelete?: (tile: TileT) => void): void {
71
+ this.buildQueue.cancel(key);
72
+ this.resourceCache.forget(key);
73
+ const tile = this.getTile(key);
74
+ if (tile !== undefined) beforeDelete?.(tile);
75
+ delete this.tileRecords[key];
76
+ }
77
+
78
+ /** Install a shared policy without submitting old work before a visibility batch is installed. */
79
+ setOptions(options: Readonly<HostTileResourceOptions> | undefined): void {
80
+ this.resourceLimits = options;
81
+ this.buildQueue.setLimit(options?.maxConcurrentBuilds);
82
+ }
83
+
84
+ /** Select eviction candidates; only the renderer adapter may dispose payload resources. */
85
+ getEvictionKeys(isPinned: (key: string) => boolean): string[] {
86
+ const tiles = this.tiles;
87
+ const isProtected = (key: string): boolean => isPinned(key) || this.buildQueue.has(key) || this.residency.isProtected(key);
88
+ for (const tile of tiles) {
89
+ if (this.resourceCache.isProtected(tile, isProtected)) this.resourceCache.touch(tile.key);
90
+ }
91
+ return this.resourceCache.selectEvictions(tiles, this.resourceLimits, isProtected);
92
+ }
93
+
94
+ /** Detached shared residency and queue counters, independent of rendering backend. */
95
+ getStatistics(isPinned: (key: string) => boolean): TileResourceStatistics {
96
+ return this.resourceCache.getStatistics(this.tiles,
97
+ key => isPinned(key) || this.buildQueue.has(key) || this.residency.isProtected(key), this.buildQueue.getCounts());
98
+ }
99
+
100
+ /** Stop scheduling, dispose adapter-owned content, and release all resident metadata. */
101
+ finalize(onTileUnload: (tile: TileT) => void): void {
102
+ this.buildQueue.clear();
103
+ this.resourceCache.clear();
104
+ this.residency.clear();
105
+ for (const key in this.tileRecords) onTileUnload(this.tileRecords[key]);
106
+ this.tileRecords = {};
107
+ }
108
+ }
@@ -0,0 +1,155 @@
1
+ // tangram-layers
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ import type VBOMesh from '../gl/vbo_mesh';
6
+ import type {MeshOptions, MeshElementData} from '../gl/mesh-types';
7
+ import type {MeshLabel} from '../labels/main-pass-types';
8
+ import type {DrapedTerrainQueryMesh} from '../selection/draped-terrain-surface';
9
+ import type {StyleFeature, StyleParseTile, PropertyContext} from '../styles/property-types';
10
+ import type {LayerDrawGroup} from '../styles/layer-types';
11
+ import type {TileDataContext} from '../sources/tile_source_state';
12
+
13
+ /** Counters shared by worker replies and the main-thread tile debugger. */
14
+ export interface TileDebug extends Record<string, unknown> {
15
+ /** Elapsed geometry construction time, or its start timestamp while building. */
16
+ building?: number;
17
+ /** Features visited by the geometry builder. */
18
+ feature_count?: number;
19
+ /** Drawn primitive count accumulated across mesh batches. */
20
+ geometry_count?: number;
21
+ /** Uploaded buffer bytes accumulated across mesh batches. */
22
+ buffer_size?: number;
23
+ /** Formatted primitive/feature ratio after the final batch. */
24
+ geometry_ratio?: string;
25
+ /** Optional introspection counters grouped by authored layer. */
26
+ layers?: {list: Record<string, LayerDebugCounts>; tree: Record<string, LayerDebugCounts>} | null;
27
+ }
28
+
29
+ /** Hierarchical authored-layer counters without geometry or GPU ownership. */
30
+ export interface LayerDebugCounts {
31
+ /** Feature contributions. */
32
+ features: number;
33
+ /** Geometry contributions. */
34
+ geoms: number;
35
+ /** Style names contributing to this layer. */
36
+ styles: Record<string, number>;
37
+ /** Whether this node is an authored base layer. */
38
+ base: Record<string, number>;
39
+ /** Child layer counters. */
40
+ layers?: Record<string, LayerDebugCounts>;
41
+ }
42
+
43
+ /** Worker mesh attributes preserved during upload and temporal terrain replacement. */
44
+ export interface TileMeshVariant extends Record<string, unknown> {
45
+ /** Authored style draw order, absent on non-style fixture or incomplete meshes. */
46
+ blend_order?: number;
47
+ /** Stable variant draw order, assigned on upload if absent. */
48
+ mesh_order?: number;
49
+ /** Captured height-blend duration for admitted geometry. */
50
+ terrainTransitionDuration?: number;
51
+ /** Terrain field epoch whose meshes share one display transition origin, independent of scene rebuilds. */
52
+ terrainGeneration?: number;
53
+ /** Complete canonical ground cells require half-open tile ownership clipping. */
54
+ terrainGroundClip?: boolean;
55
+ /** Worker-side terrain cost captured on this final mesh variant. */
56
+ terrainStatistics?: import('../procedures/terrain-draping').TerrainMeshPreparation;
57
+ }
58
+
59
+ /** One transferred mesh variant; collision and ground query channels are optional. */
60
+ export interface TileMeshPayload {
61
+ /** Completed interleaved vertex buffer. */
62
+ vertex_data?: Uint8Array;
63
+ /** Indexed or non-indexed draw topology. */
64
+ vertex_elements?: MeshElementData;
65
+ /** Per-variant shader values. */
66
+ uniforms?: Record<string, unknown>;
67
+ /** Captured immutable style/refinement policy. */
68
+ variant: TileMeshVariant;
69
+ /** Worker label identities and byte ranges. */
70
+ labels?: Record<string, MeshLabel>;
71
+ /** Exact ground query channels, when requested by the host. */
72
+ terrain_surface?: DrapedTerrainQueryMesh;
73
+ }
74
+
75
+ /** Per-style worker output, including transferred texture references. */
76
+ export interface TileStylePayload extends MeshOptions {
77
+ /** Variant names preserve deterministic worker draw order. */
78
+ meshes: Record<string, TileMeshPayload>;
79
+ /** Variant metadata supplied only to an individual uploaded mesh. */
80
+ variant?: TileMeshVariant;
81
+ /** Source detail passed to mesh refinement. */
82
+ tileZoom?: number;
83
+ }
84
+
85
+ /** Worker-side build envelope; independent of the main-thread Tile class. */
86
+ export type DecodedTileFeature = Omit<StyleFeature, 'geometry'> & {type?: string; geometry: import('../utils/geo').Geometry | null};
87
+
88
+ /** Worker-side build envelope; independent of the main-thread Tile class. */
89
+ export interface WorkerBuildTile extends TileDataContext, StyleParseTile, Record<string, unknown> {
90
+ /** Source-normalized tile address retained in every build envelope. */
91
+ coords: import('./tile_id').TileCoordinate;
92
+ /** Absolute Mercator upper-left and lower-right tile corners. */
93
+ min: {x: number; y: number};
94
+ max: {x: number; y: number};
95
+ /** Source-detail scale relative to the worker style zoom. */
96
+ overzoom2?: number;
97
+ /** Collision/task identity. */
98
+ id: number | string;
99
+ /** Normalized source/style key. */
100
+ key: string;
101
+ /** Authored source name, not a main-thread DataSource instance. */
102
+ source: string;
103
+ /** Mutable build counters. */
104
+ debug: TileDebug;
105
+ /** Normalized decoded feature collections. */
106
+ source_data?: {layers?: Record<string, {features: DecodedTileFeature[]} | undefined>; request_id?: string | null; error?: string | null; url?: string};
107
+ /** Transferred style payloads, absent after upload. */
108
+ mesh_data?: Record<string, TileStylePayload>;
109
+ /** Loading and generation state carried in replies. */
110
+ loading?: boolean;
111
+ loaded?: boolean;
112
+ generation?: number | null;
113
+ error?: string | null;
114
+ /** Cancellation flag written before aborting pending source work. */
115
+ canceled?: boolean;
116
+ }
117
+
118
+ /** Per-style lifecycle required by the geometry builder and GPU uploader. */
119
+ export interface TileBuildStyle {
120
+ /** Style registry identity. */
121
+ name: string;
122
+ /** Collision work belongs to the deferred annotation batch. */
123
+ collision?: boolean;
124
+ /** External projection moves label collision to the host. */
125
+ cpu_projection?: unknown;
126
+ screen_space_labels?: boolean;
127
+ /** Whether this tile owns unfinished geometry for the style. */
128
+ hasDataForTile(tile: WorkerBuildTile): boolean;
129
+ /** Normalize an authored draw group before feature evaluation. */
130
+ preprocess(group: LayerDrawGroup): LayerDrawGroup | null;
131
+ /** Append one normalized feature to this style's tile batch. */
132
+ addFeature(feature: StyleFeature, group: LayerDrawGroup, context: PropertyContext): unknown;
133
+ /** Complete worker geometry, including asynchronous collision and textures. */
134
+ endData(tile: WorkerBuildTile): Promise<TileStylePayload | null | undefined>;
135
+ /** Allocate a main-thread mesh owner from a completed worker variant. */
136
+ makeMesh(vertices: Uint8Array, elements: MeshElementData, options: TileStylePayload): VBOMesh;
137
+ }
138
+
139
+ /** Incremental completion state shared by a tile's collision and non-collision batches. */
140
+ export interface TileBuildProgress {
141
+ /** First worker batch resets main-thread geometry counters. */
142
+ start?: boolean;
143
+ /** All style batches completed. */
144
+ done?: boolean;
145
+ /** First build failure, serialized across worker boundaries. */
146
+ error?: string;
147
+ }
148
+
149
+ /** Root scene layer capabilities used by geometry dispatch, not leaf-only tree nodes. */
150
+ export interface TileBuildLayer {
151
+ /** Authored source selector, validated by the scene's layer parser. */
152
+ config_data?: {source?: unknown; all_layers?: unknown; layer?: unknown} | null;
153
+ /** Resolve all matching draw groups in their existing order. */
154
+ buildDrawGroups(context: PropertyContext, build?: boolean): Record<string, LayerDrawGroup | null> | null | undefined;
155
+ }