leaflet-city-mapper 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (515) hide show
  1. package/README.md +1 -1
  2. package/dist/leaflet-city-mapper-src.js.map +1 -1
  3. package/dist/leaflet-city-mapper-worker-src.js.map +1 -1
  4. package/dist/leaflet-city-mapper-worker.js.map +1 -1
  5. package/dist/leaflet-city-mapper.js.map +1 -1
  6. package/libs/leaflet-lens.js +151 -151
  7. package/libs/leaflet.js +3 -3
  8. package/libs/openlayers-bindings.js +1129 -1129
  9. package/libs/openlayers-bindings.min.js.map +1 -1
  10. package/package.json +2 -4
  11. package/src/animations/cancelCameraAnimation.js +19 -19
  12. package/src/animations/mapStopPitchBearingAnimation.js +10 -10
  13. package/src/animations/scheduleCameraAnimation.js +15 -15
  14. package/src/animations/scheduleMarkerPan.js +14 -14
  15. package/src/animations/updateZoomCamera.js +25 -25
  16. package/src/archives/findDirectoryEntry.js +17 -17
  17. package/src/archives/findTile.js +45 -45
  18. package/src/archives/getDirectoryEntries.js +30 -30
  19. package/src/archives/getTileData.js +26 -26
  20. package/src/archives/readArchiveRange.js +48 -48
  21. package/src/astronomy/solarTime.js +21 -21
  22. package/src/camera/cameraMapReady.js +9 -9
  23. package/src/camera/cleanupCameraMap.js +13 -13
  24. package/src/camera/constrainCameraToBounds.js +3 -3
  25. package/src/camera/createSceneCamera.js +25 -25
  26. package/src/camera/getBearing.js +10 -10
  27. package/src/camera/getPitch.js +10 -10
  28. package/src/camera/mapGetBoundsCenterZoom.js +14 -14
  29. package/src/camera/mapLimitOffset.js +17 -17
  30. package/src/camera/mapPanBy.js +14 -14
  31. package/src/camera/setBearing.js +13 -13
  32. package/src/camera/setPitch.js +13 -13
  33. package/src/cog/decodeCogTile.js +37 -37
  34. package/src/cog/finiteCogValues.js +12 -12
  35. package/src/cog/getCogAssetEntry.js +26 -26
  36. package/src/cog/getCogBase.js +22 -22
  37. package/src/cog/getCogHeader.js +10 -10
  38. package/src/cog/getCogProfile.js +25 -25
  39. package/src/cog/getCogTile.js +25 -25
  40. package/src/cog/getColorTile.js +38 -38
  41. package/src/cog/getElevationTile.js +29 -29
  42. package/src/cog/hasCogProjection.js +16 -16
  43. package/src/cog/initCog.js +13 -13
  44. package/src/cog/invalidCogFullResponse.js +10 -10
  45. package/src/cog/openCog.js +40 -40
  46. package/src/cog/openCogAsset.js +22 -22
  47. package/src/cog/readCog.js +39 -39
  48. package/src/cog/readCogBlock.js +19 -19
  49. package/src/cog/readCogBody.js +30 -30
  50. package/src/cog/readCogDirectories.js +32 -32
  51. package/src/cog/readCogDirectory.js +34 -34
  52. package/src/cog/readCogLevel.js +36 -36
  53. package/src/cog/readCogTag.js +28 -28
  54. package/src/cog/validCogDimensions.js +15 -15
  55. package/src/cog/validCogEncoding.js +18 -18
  56. package/src/cog/validCogGeoArrays.js +17 -17
  57. package/src/cog/validCogGrid.js +22 -22
  58. package/src/cog/validCogTileCoordinates.js +13 -13
  59. package/src/cog/validateCogContainer.js +17 -17
  60. package/src/cog/validateCogContentRange.js +18 -18
  61. package/src/cog/validateCogOffsets.js +19 -19
  62. package/src/cog/validateCogRange.js +16 -16
  63. package/src/cog/validateCogResponse.js +26 -26
  64. package/src/collision/collectIntersections.js +41 -41
  65. package/src/collision/hiddenLightHit.js +19 -19
  66. package/src/collision/indexTriangle.js +18 -18
  67. package/src/collision/insideMesh.js +47 -47
  68. package/src/collision/insideWalker.js +52 -52
  69. package/src/collision/intersectMeshes.js +40 -40
  70. package/src/collision/localRay.js +31 -31
  71. package/src/collision/mergeHits.js +19 -19
  72. package/src/collision/rayBounds.js +28 -28
  73. package/src/collision/readTriangle.js +32 -32
  74. package/src/collision/trafficCollision.js +23 -23
  75. package/src/collision/transformTriangle.js +18 -18
  76. package/src/collision/triangleDistance.js +34 -34
  77. package/src/collision/vertexCount.js +11 -11
  78. package/src/collision/worldHit.js +30 -30
  79. package/src/controls/acceptPitchDrag.js +10 -10
  80. package/src/controls/acceptRotateDrag.js +9 -9
  81. package/src/controls/addCameraHandler.js +18 -18
  82. package/src/controls/adjustCameraDrag.js +13 -13
  83. package/src/controls/cameraDragContextMenu.js +12 -12
  84. package/src/controls/cameraDragEnd.js +10 -10
  85. package/src/controls/cameraDragMove.js +31 -31
  86. package/src/controls/changeCameraTouch.js +17 -17
  87. package/src/controls/compassOrientation.js +12 -12
  88. package/src/controls/compassRemoveHooks.js +2 -2
  89. package/src/controls/containerResizeRemoveHooks.js +2 -2
  90. package/src/controls/endCameraTouch.js +18 -18
  91. package/src/controls/failCompassPermission.js +10 -10
  92. package/src/controls/finishCameraDrag.js +14 -14
  93. package/src/controls/finishCompassPermission.js +24 -24
  94. package/src/controls/isEditableTarget.js +9 -9
  95. package/src/controls/loadCameraControls.js +18 -18
  96. package/src/controls/moveCameraTouch.js +34 -34
  97. package/src/controls/refreshRotateFocus.js +5 -5
  98. package/src/controls/removeCameraDrag.js +28 -28
  99. package/src/controls/resizeMap.js +7 -7
  100. package/src/controls/rotateButtonClick.js +16 -16
  101. package/src/controls/rotateButtonKeydown.js +20 -20
  102. package/src/controls/rotateControl.js +12 -12
  103. package/src/controls/shiftRotateRemoveHooks.js +2 -2
  104. package/src/controls/shiftRotateWheel.js +15 -15
  105. package/src/core/cameraMarkerOnDrag.js +16 -16
  106. package/src/core/constructLayer.js +16 -16
  107. package/src/core/extendLeafletClass.js +12 -12
  108. package/src/core/extendTerrainPixelBounds.js +41 -41
  109. package/src/core/layerAddInitHook.js +12 -12
  110. package/src/core/layerMergeOptions.js +14 -14
  111. package/src/core/markerInitInteraction.js +10 -10
  112. package/src/core/markerSetIcon.js +14 -14
  113. package/src/core/markerSetRotation.js +19 -19
  114. package/src/core/projectNativePath.js +30 -30
  115. package/src/core/redrawPath.js +11 -11
  116. package/src/core/removeLayer.js +26 -26
  117. package/src/core/setRotation.js +12 -12
  118. package/src/core/whenReady.js +14 -14
  119. package/src/geometry/addBridges.js +36 -36
  120. package/src/geometry/addGeneratedTriangle.js +10 -10
  121. package/src/geometry/appendAreaTriangle.js +32 -32
  122. package/src/geometry/appendNativeTriangle.js +17 -17
  123. package/src/geometry/appendRouteDash.js +33 -33
  124. package/src/geometry/appendRouteSegment.js +28 -28
  125. package/src/geometry/assembleAreaGeometry.js +48 -48
  126. package/src/geometry/bridgeEdge.js +18 -18
  127. package/src/geometry/bridgeFaces.js +22 -22
  128. package/src/geometry/bridgePaths.js +19 -19
  129. package/src/geometry/bridgePolygon.js +37 -37
  130. package/src/geometry/bridgeSides.js +18 -18
  131. package/src/geometry/buildProjectedPoint.js +32 -32
  132. package/src/geometry/buildProjectedPolygon.js +34 -34
  133. package/src/geometry/circleAt.js +20 -20
  134. package/src/geometry/circleGeometry.js +41 -41
  135. package/src/geometry/createModelGeometry.js +44 -44
  136. package/src/geometry/crossVector.js +15 -15
  137. package/src/geometry/dashValues.js +23 -23
  138. package/src/geometry/dashedSegment.js +33 -33
  139. package/src/geometry/diskAt.js +18 -18
  140. package/src/geometry/emitter.js +18 -18
  141. package/src/geometry/fillNativePolygon.js +28 -28
  142. package/src/geometry/generateTreeGeometry.js +18 -18
  143. package/src/geometry/indexBridge.js +36 -36
  144. package/src/geometry/instanceAreaGeometry.js +37 -37
  145. package/src/geometry/line.js +28 -28
  146. package/src/geometry/lineJoin.js +35 -35
  147. package/src/geometry/markerImageBounds.js +20 -20
  148. package/src/geometry/meshShadowBounds.js +33 -33
  149. package/src/geometry/offsetBelowGround.js +10 -10
  150. package/src/geometry/quad.js +23 -23
  151. package/src/geometry/restoreGeometry.js +29 -29
  152. package/src/geometry/roofCoverage.js +33 -33
  153. package/src/geometry/roofFootprint.js +40 -40
  154. package/src/geometry/samePoint.js +11 -11
  155. package/src/geometry/segment.js +32 -32
  156. package/src/geometry/subtractRoofTile.js +28 -28
  157. package/src/geometry/terrainBuffers.js +36 -36
  158. package/src/geometry/terrainTileGeometry.js +28 -28
  159. package/src/geometry/validateTree.js +19 -19
  160. package/src/globals/L.js +6 -6
  161. package/src/globals/cameraFov.js +8 -8
  162. package/src/globals/cogTags.js +6 -6
  163. package/src/globals/colorTexture.js +11 -11
  164. package/src/globals/cosObliquity.js +8 -8
  165. package/src/globals/degrees.js +6 -6
  166. package/src/globals/earthCirc.js +6 -6
  167. package/src/globals/geometryWorkerUrl.js +8 -8
  168. package/src/globals/halfRadians.js +6 -6
  169. package/src/globals/lampDirections.js +13 -13
  170. package/src/globals/layerControlAddItem.js +8 -8
  171. package/src/globals/leafletLayer.js +8 -8
  172. package/src/globals/lightScale.js +6 -6
  173. package/src/globals/mvtTextDecoder.js +6 -6
  174. package/src/globals/nativeScalableStyleKeys.js +6 -6
  175. package/src/globals/sinObliquity.js +8 -8
  176. package/src/globals/tau.js +6 -6
  177. package/src/globals/vectorStyleNamedColors.js +13 -13
  178. package/src/globals/vectorTileEvents.js +6 -6
  179. package/src/globals/workerCogSource.js +6 -6
  180. package/src/gpu/initializeRendererResources.js +39 -39
  181. package/src/gpu/initializeSharedRenderer.js +59 -59
  182. package/src/gpu/mountRenderer.js +25 -25
  183. package/src/layer-controls/layerControlInputId.js +18 -18
  184. package/src/layer-controls/layerCountTitle.js +16 -16
  185. package/src/layer-controls/placeEntryElement.js +29 -29
  186. package/src/layer-controls/renderLayerCount.js +28 -28
  187. package/src/lighting/visitLightCells.js +26 -26
  188. package/src/lighting/writeLightCell.js +14 -14
  189. package/src/materials/createProgramLayout.js +44 -44
  190. package/src/materials/createProgramUniforms.js +25 -25
  191. package/src/materials/modelMaterialFor.js +29 -29
  192. package/src/materials/prepareMeshCutout.js +21 -21
  193. package/src/materials/terrainRasterProgram.js +65 -65
  194. package/src/materials/validateRoofMaterial.js +17 -17
  195. package/src/models/applyModelTransform.js +18 -18
  196. package/src/models/buildModelNodes.js +24 -24
  197. package/src/models/createModelContext.js +24 -24
  198. package/src/models/loadBuffer.js +16 -16
  199. package/src/models/loadModelResources.js +22 -22
  200. package/src/models/normalizeAccessor.js +21 -21
  201. package/src/models/prepareModel.js +29 -29
  202. package/src/models/prepareModelGeometry.js +35 -35
  203. package/src/models/prepareModelPrimitive.js +25 -25
  204. package/src/models/readAccessorValue.js +16 -16
  205. package/src/models/readModelAttributes.js +32 -32
  206. package/src/models/readModelIndices.js +28 -28
  207. package/src/models/readSparseAccessor.js +31 -31
  208. package/src/models/releaseModelResources.js +15 -15
  209. package/src/mvt/addMvtCrossings.js +23 -23
  210. package/src/mvt/appendMvtBandTriangles.js +42 -42
  211. package/src/mvt/appendMvtCoordinates.js +20 -20
  212. package/src/mvt/appendMvtPolygonTriangles.js +29 -29
  213. package/src/mvt/beginMvtPath.js +19 -19
  214. package/src/mvt/closeMvtPath.js +16 -16
  215. package/src/mvt/collectMvtEdges.js +29 -29
  216. package/src/mvt/createMvtReader.js +14 -14
  217. package/src/mvt/decodeVectorTile.js +39 -39
  218. package/src/mvt/expectMvtWire.js +11 -11
  219. package/src/mvt/finishMvtPath.js +14 -14
  220. package/src/mvt/finiteMvtCoordinate.js +14 -14
  221. package/src/mvt/groupMvtPolygons.js +35 -35
  222. package/src/mvt/isMvtFallbackError.js +13 -13
  223. package/src/mvt/mergeMvtActiveEdges.js +18 -18
  224. package/src/mvt/mvtEdgeX.js +12 -12
  225. package/src/mvt/mvtPathsVertices.js +15 -15
  226. package/src/mvt/mvtPolygonPaths.js +19 -19
  227. package/src/mvt/numericMvtValue.js +11 -11
  228. package/src/mvt/readMvtFeature.js +46 -46
  229. package/src/mvt/readMvtField.js +17 -17
  230. package/src/mvt/readMvtGeometry.js +42 -42
  231. package/src/mvt/readMvtInteger.js +22 -22
  232. package/src/mvt/readMvtKnownValue.js +30 -30
  233. package/src/mvt/readMvtLayer.js +40 -40
  234. package/src/mvt/readMvtMessage.js +18 -18
  235. package/src/mvt/readMvtNumber.js +18 -18
  236. package/src/mvt/readMvtNumbers.js +18 -18
  237. package/src/mvt/readMvtString.js +14 -14
  238. package/src/mvt/readMvtValue.js +29 -29
  239. package/src/mvt/skipMvtField.js +22 -22
  240. package/src/mvt/sortMvtActiveEdges.js +20 -20
  241. package/src/mvt/sortedMvtLevels.js +29 -29
  242. package/src/mvt/takeMvtBytes.js +18 -18
  243. package/src/mvt/tessellateVectorRings.js +26 -26
  244. package/src/mvt/triangulateVectorRings.js +23 -23
  245. package/src/native/beforeNativeRender.js +21 -21
  246. package/src/native/bypassNativeEvent.js +21 -21
  247. package/src/native/canScaleNativeStyle.js +26 -26
  248. package/src/native/compareNativeHits.js +10 -10
  249. package/src/native/createNativeMesh.js +46 -46
  250. package/src/native/forwardNativeError.js +8 -8
  251. package/src/native/getGridTerrainTile.js +47 -47
  252. package/src/native/gridTerrainElevation.js +34 -34
  253. package/src/native/isCurrentNativeLayer.js +11 -11
  254. package/src/native/loadGridTerrain.js +36 -36
  255. package/src/native/nativeEventSource.js +27 -27
  256. package/src/native/nativeProgram.js +28 -28
  257. package/src/native/nativeTerrainElevation.js +27 -27
  258. package/src/native/nativeVectorGeometry.js +30 -30
  259. package/src/native/orderNativeGridLayer.js +20 -20
  260. package/src/native/prepareGridTerrainRequests.js +23 -23
  261. package/src/native/pruneNativeResources.js +25 -25
  262. package/src/native/readyNativeGPU.js +13 -13
  263. package/src/native/rejectNativeReady.js +2 -2
  264. package/src/native/removeNativeEvents.js +20 -20
  265. package/src/native/resolveNativeReady.js +2 -2
  266. package/src/native/restoreNativeEvents.js +8 -8
  267. package/src/native/retainGridTerrain.js +15 -15
  268. package/src/native/styleNativeMesh.js +20 -20
  269. package/src/native/syncGridTile.js +28 -28
  270. package/src/native/syncImageOverlay.js +13 -13
  271. package/src/native/syncNativeStrokeAnchors.js +18 -18
  272. package/src/native/syncNativeStrokeZoom.js +34 -34
  273. package/src/native/syncTerrainGridTile.js +38 -38
  274. package/src/native/terrainGridMesh.js +47 -47
  275. package/src/native/updateNativeHover.js +15 -15
  276. package/src/native/updateNativeStrokeRadius.js +14 -14
  277. package/src/picking/hitColliderCell.js +29 -29
  278. package/src/picking/validateCameraInverse.js +15 -15
  279. package/src/projections/displayContainerPoint.js +32 -32
  280. package/src/projections/projectBridgePoint.js +17 -17
  281. package/src/projections/toPoint.js +13 -13
  282. package/src/projections/transformZoomAnimationPoint.js +8 -8
  283. package/src/projections/verticalGroundY.js +14 -14
  284. package/src/raster/rasterTileRange.js +32 -32
  285. package/src/raster/retainRasterTiles.js +21 -21
  286. package/src/rendering/collectVisibleMesh.js +48 -48
  287. package/src/rendering/compareMeshDepth.js +14 -14
  288. package/src/rendering/drawPipeline.js +44 -44
  289. package/src/rendering/nativeStrokeExpansion.js +11 -11
  290. package/src/rendering/prepareFrameBuffer.js +24 -24
  291. package/src/rendering/prepareMeshUniforms.js +36 -36
  292. package/src/rendering/revealRoofMesh.js +43 -43
  293. package/src/scene/addSceneLayer.js +24 -24
  294. package/src/scene/callLayer.js +34 -34
  295. package/src/scene/createLayer.js +13 -13
  296. package/src/scene/getLocation.js +12 -12
  297. package/src/scene/isNativeLayer.js +19 -19
  298. package/src/scene/removeSceneLayer.js +22 -22
  299. package/src/scene/reportLayerError.js +9 -9
  300. package/src/shaders/materialBaseShader.js +26 -26
  301. package/src/shaders/materialSurfaceShader.js +60 -60
  302. package/src/shaders/materialVertexShader.js +89 -89
  303. package/src/shaders/nativeStrokeShader.js +13 -13
  304. package/src/shaders/roofVertexShader.js +16 -16
  305. package/src/shadows/shadowMeshMatches.js +19 -19
  306. package/src/sources/buildAreaFeatures.js +23 -23
  307. package/src/sources/extrusionStyle.js +21 -21
  308. package/src/sources/featureAnchor.js +21 -21
  309. package/src/sources/groundOffset.js +9 -9
  310. package/src/sources/initVectorTiles.js +21 -21
  311. package/src/sources/isVectorTileSource.js +11 -11
  312. package/src/sources/matchesAreaTile.js +17 -17
  313. package/src/sources/pendingSourceAreas.js +28 -28
  314. package/src/sources/prepareAreaGeometryJob.js +34 -34
  315. package/src/sources/projectAreaPolygons.js +25 -25
  316. package/src/sources/readyVectorTiles.js +17 -17
  317. package/src/sunlight/addTimeControlToMap.js +18 -18
  318. package/src/sunlight/addTimeLayer.js +12 -12
  319. package/src/sunlight/initializeTimeControl.js +18 -18
  320. package/src/sunlight/onAddSun.js +37 -37
  321. package/src/sunlight/onAddTimeControl.js +12 -12
  322. package/src/sunlight/onRemoveSun.js +10 -10
  323. package/src/sunlight/removeSun.js +25 -25
  324. package/src/sunlight/removeTimeControl.js +14 -14
  325. package/src/sunlight/removeTimeLayer.js +11 -11
  326. package/src/sunlight/requestSunlightRender.js +12 -12
  327. package/src/sunlight/styleTimeControl.js +13 -13
  328. package/src/sunlight/tickSun.js +10 -10
  329. package/src/sunlight/updateCelestialDisc.js +23 -23
  330. package/src/sunlight/updateSun.js +44 -44
  331. package/src/sunlight/useLiveTime.js +11 -11
  332. package/src/sunlight/useSelectedTime.js +26 -26
  333. package/src/terrain/applyTerrain.js +30 -30
  334. package/src/terrain/copyTerrainTile.js +20 -20
  335. package/src/terrain/loadReadyTerrain.js +6 -6
  336. package/src/terrain/mapElevationOf.js +19 -19
  337. package/src/terrain/readBridges.js +13 -13
  338. package/src/terrain/readyTerrainOf.js +14 -14
  339. package/src/terrain/sampleTerrainTile.js +16 -16
  340. package/src/terrain/terrainTileQueue.js +34 -34
  341. package/src/textures/addImageState.js +13 -13
  342. package/src/textures/bindMeshTextures.js +57 -57
  343. package/src/textures/collectRoofTiles.js +23 -23
  344. package/src/textures/loadModelImage.js +29 -29
  345. package/src/textures/modelTextureFor.js +47 -47
  346. package/src/textures/prepareMeshTextures.js +31 -31
  347. package/src/textures/removeImageState.js +13 -13
  348. package/src/textures/resizeRoofTexture.js +32 -32
  349. package/src/textures/restoreMaterialTextures.js +22 -22
  350. package/src/textures/updateRoofAtlas.js +29 -29
  351. package/src/textures/uploadMeshTexture.js +32 -32
  352. package/src/textures/uploadNativeImage.js +26 -26
  353. package/src/textures/uploadRoofTile.js +29 -29
  354. package/src/traffic/createTrafficMesh.js +17 -17
  355. package/src/traffic/disposeTrafficObject.js +19 -19
  356. package/src/traffic/failTraffic.js +12 -12
  357. package/src/traffic/failedTrafficLoad.js +10 -10
  358. package/src/traffic/fetchTrafficLanes.js +21 -21
  359. package/src/traffic/loadedTrafficLanes.js +21 -21
  360. package/src/traffic/locateTraffic.js +20 -20
  361. package/src/traffic/moveTraffic.js +21 -21
  362. package/src/traffic/readyTraffic.js +10 -10
  363. package/src/traffic/refreshTrafficTrips.js +42 -42
  364. package/src/traffic/routeColor.js +13 -13
  365. package/src/traffic/startTraffic.js +12 -12
  366. package/src/traffic/trafficNow.js +15 -15
  367. package/src/traffic/trafficStatusText.js +13 -13
  368. package/src/traffic/trafficStorage.js +13 -13
  369. package/src/traffic/updateTraffic.js +13 -13
  370. package/src/traffic/updateTrafficLights.js +23 -23
  371. package/src/traffic/updateTrafficPose.js +15 -15
  372. package/src/traffic/updateTrafficTerrain.js +15 -15
  373. package/src/traffic/uploadTrafficLanes.js +27 -27
  374. package/src/transforms/composeLocalTransform.js +23 -23
  375. package/src/transforms/transformNativePoint.js +19 -19
  376. package/src/transforms/worldMatrixChanged.js +26 -26
  377. package/src/triangulation/clipEars.js +32 -32
  378. package/src/triangulation/connectHole.js +30 -30
  379. package/src/triangulation/cross.js +12 -12
  380. package/src/triangulation/equal.js +11 -11
  381. package/src/triangulation/intersects.js +21 -21
  382. package/src/triangulation/mergeHoles.js +19 -19
  383. package/src/triangulation/on.js +13 -13
  384. package/src/triangulation/polygonRings.js +22 -22
  385. package/src/triangulation/validateArea.js +19 -19
  386. package/src/utils/compareDistance.js +11 -11
  387. package/src/utils/yieldTask.js +12 -12
  388. package/src/vector-style/appendQuotedStyleCharacter.js +30 -30
  389. package/src/vector-style/arrayContainsRange.js +18 -18
  390. package/src/vector-style/evaluateBoolean.js +31 -31
  391. package/src/vector-style/evaluateCoalesceOrCase.js +34 -34
  392. package/src/vector-style/evaluateComparison.js +29 -29
  393. package/src/vector-style/evaluateIExpression.js +21 -21
  394. package/src/vector-style/evaluateInput.js +16 -16
  395. package/src/vector-style/evaluateInterpolate.js +36 -36
  396. package/src/vector-style/evaluateMatch.js +21 -21
  397. package/src/vector-style/evaluateMath.js +26 -26
  398. package/src/vector-style/evaluateMembership.js +29 -29
  399. package/src/vector-style/evaluateNegation.js +26 -26
  400. package/src/vector-style/evaluatePrimitive.js +21 -21
  401. package/src/vector-style/evaluateStep.js +20 -20
  402. package/src/vector-style/evaluateStyle.js +43 -43
  403. package/src/vector-style/evaluateToExpression.js +27 -27
  404. package/src/vector-style/fillVectorPaint.js +26 -26
  405. package/src/vector-style/lineVectorPaint.js +31 -31
  406. package/src/vector-style/parseFunctionalColor.js +23 -23
  407. package/src/vector-style/parseHexColor.js +20 -20
  408. package/src/vector-style/parseVectorStyle.js +20 -20
  409. package/src/vector-style/readPaintValue.js +17 -17
  410. package/src/vector-style/removeTrailingCommas.js +19 -19
  411. package/src/vector-style/scaleDashArray.js +25 -25
  412. package/src/vector-style/skipStyleComment.js +20 -20
  413. package/src/vector-style/stripStyleComments.js +28 -28
  414. package/src/vector-style/styleColor.js +18 -18
  415. package/src/vector-style/validateVectorLayers.js +18 -18
  416. package/src/vector-style/vectorPaint.js +17 -17
  417. package/src/vector-style/visibleStyle.js +16 -16
  418. package/src/vector-tiles/appendVectorBatch.js +34 -34
  419. package/src/vector-tiles/attachVectorTileBatch.js +25 -25
  420. package/src/vector-tiles/attachVectorTileBatches.js +26 -26
  421. package/src/vector-tiles/compareVectorLabelPriority.js +11 -11
  422. package/src/vector-tiles/compareVectorTileDistance.js +11 -11
  423. package/src/vector-tiles/createVectorLabel.js +37 -37
  424. package/src/vector-tiles/forwardVectorTileError.js +10 -10
  425. package/src/vector-tiles/loadVectorSprite.js +14 -14
  426. package/src/vector-tiles/loadVectorTile.js +45 -45
  427. package/src/vector-tiles/onVectorTileAdd.js +44 -44
  428. package/src/vector-tiles/onVectorTileMessage.js +15 -15
  429. package/src/vector-tiles/onVectorTileRemove.js +25 -25
  430. package/src/vector-tiles/onVectorTileWorkerError.js +16 -16
  431. package/src/vector-tiles/paintVectorTileBatch.js +18 -18
  432. package/src/vector-tiles/prepareVectorLabel.js +34 -34
  433. package/src/vector-tiles/prepareVectorStyleLayer.js +38 -38
  434. package/src/vector-tiles/prepareVectorTile.js +29 -29
  435. package/src/vector-tiles/projectVectorPaths.js +25 -25
  436. package/src/vector-tiles/projectVectorPoint.js +15 -15
  437. package/src/vector-tiles/projectVectorTriangles.js +28 -28
  438. package/src/vector-tiles/pruneVectorTiles.js +14 -14
  439. package/src/vector-tiles/pumpVectorTiles.js +21 -21
  440. package/src/vector-tiles/readTileJSON.js +27 -27
  441. package/src/vector-tiles/readVectorStyle.js +28 -28
  442. package/src/vector-tiles/refreshVectorTiles.js +8 -8
  443. package/src/vector-tiles/reserveVectorLabelCells.js +14 -14
  444. package/src/vector-tiles/retireVectorTileGroup.js +20 -20
  445. package/src/vector-tiles/revokeVectorWorkerUrl.js +14 -14
  446. package/src/vector-tiles/rotateVectorLabel.js +19 -19
  447. package/src/vector-tiles/rotateVectorLabels.js +9 -9
  448. package/src/vector-tiles/simplifyVectorPath.js +29 -29
  449. package/src/vector-tiles/updateVectorLabelMarker.js +36 -36
  450. package/src/vector-tiles/updateVectorLabelStyle.js +14 -14
  451. package/src/vector-tiles/updateVectorTileLabels.js +33 -33
  452. package/src/vector-tiles/updateVectorTilePaint.js +25 -25
  453. package/src/vector-tiles/updateVectorTiles.js +32 -32
  454. package/src/vector-tiles/validateVectorTileZooms.js +15 -15
  455. package/src/vector-tiles/vectorFeaturePaint.js +25 -25
  456. package/src/vector-tiles/vectorFeaturePaths.js +26 -26
  457. package/src/vector-tiles/vectorFeatureZoom.js +18 -18
  458. package/src/vector-tiles/vectorLabelAnchors.js +31 -31
  459. package/src/vector-tiles/vectorLabelCandidates.js +18 -18
  460. package/src/vector-tiles/vectorLabelCells.js +32 -32
  461. package/src/vector-tiles/vectorLabelIcon.js +38 -38
  462. package/src/vector-tiles/vectorLabelProperty.js +12 -12
  463. package/src/vector-tiles/vectorLabelText.js +19 -19
  464. package/src/vector-tiles/vectorSpriteIcon.js +19 -19
  465. package/src/vector-tiles/vectorStraightRun.js +23 -23
  466. package/src/vector-tiles/vectorStyleDependencies.js +22 -22
  467. package/src/vector-tiles/vectorStyleValue.js +16 -16
  468. package/src/vector-tiles/vectorStyleZoom.js +12 -12
  469. package/src/vector-tiles/vectorTileAwaited.js +17 -17
  470. package/src/vector-tiles/vectorTileOverlaps.js +12 -12
  471. package/src/vector-tiles/vectorTilePaint.js +18 -18
  472. package/src/vector-tiles/vectorTileSettings.js +27 -27
  473. package/src/vector-tiles/vectorTilesIdle.js +11 -11
  474. package/src/vector-tiles/vectorTolerance.js +11 -11
  475. package/src/vector-tiles/wrapVectorLabel.js +17 -17
  476. package/src/vehicles/boatModel.js +35 -35
  477. package/src/vehicles/busModel.js +13 -13
  478. package/src/vehicles/carModel.js +39 -39
  479. package/src/walk/initializeWalkControl.js +12 -12
  480. package/src/walk/isWalkBlocked.js +15 -15
  481. package/src/walk/landWalker.js +41 -41
  482. package/src/walk/moveWalker.js +37 -37
  483. package/src/walk/onAddWalkControl.js +40 -40
  484. package/src/walk/onRemoveWalkControl.js +17 -17
  485. package/src/walk/onWalkBlur.js +3 -3
  486. package/src/walk/onWalkTerrain.js +3 -3
  487. package/src/walk/resolveWalkerPosition.js +33 -33
  488. package/src/walk/stepWalkerHeight.js +18 -18
  489. package/src/walk/toggleWalking.js +4 -4
  490. package/src/walk/updateWalkerFrame.js +29 -29
  491. package/src/walk/updateWalkerView.js +31 -31
  492. package/src/weakmaps/cameraHandlersByMap.js +6 -6
  493. package/src/weakmaps/geometryWorkersByMap.js +6 -6
  494. package/src/weakmaps/nativeProgramsByRenderer.js +6 -6
  495. package/src/weakmaps/pathProjectionByMap.js +6 -6
  496. package/src/weakmaps/streamTerrainByLayer.js +6 -6
  497. package/src/weakmaps/streamTerrainByMap.js +6 -6
  498. package/src/weakmaps/sunByMap.js +6 -6
  499. package/src/weakmaps/vectorTileOptionsByLayer.js +6 -6
  500. package/src/weakmaps/vectorWorkerByLayer.js +6 -6
  501. package/src/weakmaps/walkByMap.js +6 -6
  502. package/src/weakmaps/workerMapByLayer.js +6 -6
  503. package/src/workers/acquireGeometryWorker.js +39 -39
  504. package/src/workers/buildAreaInWorker.js +24 -24
  505. package/src/workers/closeGeometryWorkers.js +16 -16
  506. package/src/workers/cogWorker.js +27 -27
  507. package/src/workers/createGeometryWorker.js +30 -30
  508. package/src/workers/geometryWorker.js +34 -34
  509. package/src/workers/getCogInWorker.js +18 -18
  510. package/src/workers/modelWorker.js +17 -17
  511. package/src/workers/openCogInWorker.js +22 -22
  512. package/src/workers/runSourceWorker.js +44 -44
  513. package/src/workers/settleGeometryWorker.js +16 -16
  514. package/src/workers/startGeometryWorker.js +23 -23
  515. package/src/workers/vectorTileWorker.js +15 -15
@@ -1,28 +1,28 @@
1
- import { countStatusByLayer } from '../weakmaps/countStatusByLayer.js';
2
- import { modelUrlByLayer } from '../weakmaps/modelUrlByLayer.js';
3
- import { modelByLayer } from '../weakmaps/modelByLayer.js';
4
- import { headerByLayer } from '../weakmaps/headerByLayer.js';
5
- import { geojsonByLayer } from '../weakmaps/geojsonByLayer.js';
6
- import { layerCountTitle } from './layerCountTitle.js';
7
-
8
- /**
9
- * Update a layer count's text, title and error accessibility state.
10
- *
11
- * @param {L.Layer} layer Layer whose count is displayed.
12
- * @param {number} count Number of loaded elements.
13
- * @param {number} pending Number of blocks still loading.
14
- * @param {Error|string} [error] Loading error, if any.
15
- */
16
- export function renderLayerCount(layer, count, pending, error) {
17
- const status = countStatusByLayer.get(layer);
18
- const modelUrl = modelUrlByLayer.get(layer), model = modelByLayer.get(layer);
19
- if (modelUrl) count = model ? 1 : 0;
20
- const loading = pending || (modelUrl ? !model : !headerByLayer.get(layer) && !geojsonByLayer.get(layer));
21
- const formatted = count.toLocaleString('en-US');
22
- const text = error ? 'Error' : `${formatted}${loading ? '…' : ''}`;
23
- const title = layerCountTitle(layer, formatted, pending, error);
24
- if (status.textContent !== text) status.textContent = text;
25
- if (status.title !== title) status.title = title;
26
- if (error && status.getAttribute('role') !== 'alert') status.setAttribute('role', 'alert');
27
- else if (!error && status.hasAttribute('role')) status.removeAttribute('role');
28
- }
1
+ import { countStatusByLayer } from '../weakmaps/countStatusByLayer.js';
2
+ import { modelUrlByLayer } from '../weakmaps/modelUrlByLayer.js';
3
+ import { modelByLayer } from '../weakmaps/modelByLayer.js';
4
+ import { headerByLayer } from '../weakmaps/headerByLayer.js';
5
+ import { geojsonByLayer } from '../weakmaps/geojsonByLayer.js';
6
+ import { layerCountTitle } from './layerCountTitle.js';
7
+
8
+ /**
9
+ * Update a layer count's text, title and error accessibility state.
10
+ *
11
+ * @param {L.Layer} layer Layer whose count is displayed.
12
+ * @param {number} count Number of loaded elements.
13
+ * @param {number} pending Number of blocks still loading.
14
+ * @param {Error|string} [error] Loading error, if any.
15
+ */
16
+ export function renderLayerCount(layer, count, pending, error) {
17
+ const status = countStatusByLayer.get(layer);
18
+ const modelUrl = modelUrlByLayer.get(layer), model = modelByLayer.get(layer);
19
+ if (modelUrl) count = model ? 1 : 0;
20
+ const loading = pending || (modelUrl ? !model : !headerByLayer.get(layer) && !geojsonByLayer.get(layer));
21
+ const formatted = count.toLocaleString('en-US');
22
+ const text = error ? 'Error' : `${formatted}${loading ? '…' : ''}`;
23
+ const title = layerCountTitle(layer, formatted, pending, error);
24
+ if (status.textContent !== text) status.textContent = text;
25
+ if (status.title !== title) status.title = title;
26
+ if (error && status.getAttribute('role') !== 'alert') status.setAttribute('role', 'alert');
27
+ else if (!error && status.hasAttribute('role')) status.removeAttribute('role');
28
+ }
@@ -1,26 +1,26 @@
1
- import { writeLightCell } from './writeLightCell.js';
2
-
3
- /**
4
- * Count or write a light into each spatial grid cell covered by its radius.
5
- *
6
- * @param {Float32Array} values Packed light records.
7
- * @param {number} i Starting index of the light record.
8
- * @param {number} minX Grid origin on the x axis.
9
- * @param {number} minZ Grid origin on the z axis.
10
- * @param {number} cellSize Grid cell width.
11
- * @param {number} columns Number of grid columns.
12
- * @param {Uint32Array} offsets Per-cell counts or write offsets.
13
- * @param {Float32Array} [data] Output grid data; omitted during counting.
14
- */
15
- export function visitLightCells(values, i, minX, minZ, cellSize, columns, offsets, data) {
16
- const radius = values[i + 3], x = values[i] - minX, z = values[i + 2] - minZ;
17
- let y, c, key;
18
- for (y = Math.floor((z - radius) / cellSize); y <= Math.floor((z + radius) / cellSize); y++) {
19
- for (c = Math.floor((x - radius) / cellSize); c <= Math.floor((x + radius) / cellSize); c++) {
20
- key = y * columns + c;
21
- if (data) {
22
- writeLightCell(values, i, key, offsets, data);
23
- } else offsets[key]++;
24
- }
25
- }
26
- }
1
+ import { writeLightCell } from './writeLightCell.js';
2
+
3
+ /**
4
+ * Count or write a light into each spatial grid cell covered by its radius.
5
+ *
6
+ * @param {Float32Array} values Packed light records.
7
+ * @param {number} i Starting index of the light record.
8
+ * @param {number} minX Grid origin on the x axis.
9
+ * @param {number} minZ Grid origin on the z axis.
10
+ * @param {number} cellSize Grid cell width.
11
+ * @param {number} columns Number of grid columns.
12
+ * @param {Uint32Array} offsets Per-cell counts or write offsets.
13
+ * @param {Float32Array} [data] Output grid data; omitted during counting.
14
+ */
15
+ export function visitLightCells(values, i, minX, minZ, cellSize, columns, offsets, data) {
16
+ const radius = values[i + 3], x = values[i] - minX, z = values[i + 2] - minZ;
17
+ let y, c, key;
18
+ for (y = Math.floor((z - radius) / cellSize); y <= Math.floor((z + radius) / cellSize); y++) {
19
+ for (c = Math.floor((x - radius) / cellSize); c <= Math.floor((x + radius) / cellSize); c++) {
20
+ key = y * columns + c;
21
+ if (data) {
22
+ writeLightCell(values, i, key, offsets, data);
23
+ } else offsets[key]++;
24
+ }
25
+ }
26
+ }
@@ -1,14 +1,14 @@
1
- /**
2
- * Copy a packed light record into a cell and advance that cell's write offset.
3
- *
4
- * @param {Float32Array} values Packed light records.
5
- * @param {number} i Starting index of the light record.
6
- * @param {number} key Grid cell index.
7
- * @param {Uint32Array} offsets Per-cell write offsets in vec4 units.
8
- * @param {Float32Array} data Output grid data.
9
- */
10
- export function writeLightCell(values, i, key, offsets, data) {
11
- let j, o;
12
- for (j = 0, o = offsets[key] * 4; j < 8; j++) data[o + j] = values[i + j];
13
- offsets[key] += 2;
14
- }
1
+ /**
2
+ * Copy a packed light record into a cell and advance that cell's write offset.
3
+ *
4
+ * @param {Float32Array} values Packed light records.
5
+ * @param {number} i Starting index of the light record.
6
+ * @param {number} key Grid cell index.
7
+ * @param {Uint32Array} offsets Per-cell write offsets in vec4 units.
8
+ * @param {Float32Array} data Output grid data.
9
+ */
10
+ export function writeLightCell(values, i, key, offsets, data) {
11
+ let j, o;
12
+ for (j = 0, o = offsets[key] * 4; j < 8; j++) data[o + j] = values[i + j];
13
+ offsets[key] += 2;
14
+ }
@@ -1,44 +1,44 @@
1
- import { programLayout } from '../globals/programLayout.js';
2
- import { programEntries } from '../globals/programEntries.js';
3
- import { meshLayoutEntry } from '../globals/meshLayoutEntry.js';
4
- import { frameLayoutEntry } from '../globals/frameLayoutEntry.js';
5
- import { terrainLayoutEntry } from '../globals/terrainLayoutEntry.js';
6
- import { textureLayoutEntries } from '../globals/textureLayoutEntries.js';
7
- import { samplerLayoutEntries } from '../globals/samplerLayoutEntries.js';
8
-
9
- /**
10
- * Create a bind group layout for mesh, frame, terrain and shader texture bindings.
11
- *
12
- * @param {GPUDevice} device Device creating the layout.
13
- * @param {Object} shaders Shader bindings and terrain requirements.
14
- *
15
- * @returns {GPUBindGroupLayout} The created layout.
16
- */
17
- export function createProgramLayout(device, shaders) {
18
- const bindGroupEntries = programEntries;
19
- bindGroupEntries.length = 0;
20
- meshLayoutEntry.visibility = GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT;
21
- frameLayoutEntry.visibility = GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT;
22
- bindGroupEntries.push(meshLayoutEntry, frameLayoutEntry);
23
- if (shaders.hasTerrain) {
24
- terrainLayoutEntry.visibility = GPUShaderStage.VERTEX;
25
- bindGroupEntries.push(terrainLayoutEntry);
26
- }
27
- let texture, entry, index = 0;
28
- for (texture of shaders.bindings) {
29
- entry = textureLayoutEntries[index];
30
- entry.binding = texture.texture;
31
- entry.visibility = GPUShaderStage.FRAGMENT;
32
- bindGroupEntries.push(entry);
33
- entry = samplerLayoutEntries[index++];
34
- entry.binding = texture.sampler;
35
- entry.visibility = GPUShaderStage.FRAGMENT;
36
- bindGroupEntries.push(entry);
37
- }
38
- const layout = device.createBindGroupLayout((
39
- programLayout.entries = bindGroupEntries,
40
- programLayout
41
- ));
42
- programLayout.entries = null;
43
- return layout;
44
- }
1
+ import { programLayout } from '../globals/programLayout.js';
2
+ import { programEntries } from '../globals/programEntries.js';
3
+ import { meshLayoutEntry } from '../globals/meshLayoutEntry.js';
4
+ import { frameLayoutEntry } from '../globals/frameLayoutEntry.js';
5
+ import { terrainLayoutEntry } from '../globals/terrainLayoutEntry.js';
6
+ import { textureLayoutEntries } from '../globals/textureLayoutEntries.js';
7
+ import { samplerLayoutEntries } from '../globals/samplerLayoutEntries.js';
8
+
9
+ /**
10
+ * Create a bind group layout for mesh, frame, terrain and shader texture bindings.
11
+ *
12
+ * @param {GPUDevice} device Device creating the layout.
13
+ * @param {Object} shaders Shader bindings and terrain requirements.
14
+ *
15
+ * @returns {GPUBindGroupLayout} The created layout.
16
+ */
17
+ export function createProgramLayout(device, shaders) {
18
+ const bindGroupEntries = programEntries;
19
+ bindGroupEntries.length = 0;
20
+ meshLayoutEntry.visibility = GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT;
21
+ frameLayoutEntry.visibility = GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT;
22
+ bindGroupEntries.push(meshLayoutEntry, frameLayoutEntry);
23
+ if (shaders.hasTerrain) {
24
+ terrainLayoutEntry.visibility = GPUShaderStage.VERTEX;
25
+ bindGroupEntries.push(terrainLayoutEntry);
26
+ }
27
+ let texture, entry, index = 0;
28
+ for (texture of shaders.bindings) {
29
+ entry = textureLayoutEntries[index];
30
+ entry.binding = texture.texture;
31
+ entry.visibility = GPUShaderStage.FRAGMENT;
32
+ bindGroupEntries.push(entry);
33
+ entry = samplerLayoutEntries[index++];
34
+ entry.binding = texture.sampler;
35
+ entry.visibility = GPUShaderStage.FRAGMENT;
36
+ bindGroupEntries.push(entry);
37
+ }
38
+ const layout = device.createBindGroupLayout((
39
+ programLayout.entries = bindGroupEntries,
40
+ programLayout
41
+ ));
42
+ programLayout.entries = null;
43
+ return layout;
44
+ }
@@ -1,25 +1,25 @@
1
- /**
2
- * Create material uniform values and add bindings for configured textures.
3
- *
4
- * @param {Object} material Material properties.
5
- *
6
- * @returns {Object} Uniform values keyed by shader property.
7
- */
8
- export function createProgramUniforms(material) {
9
- const uniforms = /* alloc */ {
10
- baseColor: /* alloc */ { value: material.color || /* alloc */ [1, 1, 1] },
11
- metallic: /* alloc */ { value: material.metallic ?? 0 },
12
- roughness: /* alloc */ { value: material.roughness ?? 0.85 },
13
- opacity: /* alloc */ { value: material.opacity ?? 1 },
14
- alphaCutoff: /* alloc */ { value: material.alphaCutoff ?? 0.5 },
15
- occlusionStrength: /* alloc */ { value: material.occlusionStrength ?? 1 },
16
- emissive: /* alloc */ { value: material.emissive || /* alloc */ [0, 0, 0] },
17
- };
18
- if (material.baseTexture) uniforms.baseTexture = /* alloc */ { value: material.baseTexture };
19
- if (material.metalTexture) uniforms.metalTexture = /* alloc */ { value: material.metalTexture };
20
- if (material.emissiveTexture) uniforms.emissiveTexture = /* alloc */ { value: material.emissiveTexture };
21
- if (material.occlusionTexture) uniforms.occlusionTexture = /* alloc */ { value: material.occlusionTexture };
22
- if (material.roofTexture || material.wallTexture) uniforms.roofTexture = /* alloc */ { value: null };
23
- if (material.nativeStroke) uniforms.strokeScale = /* alloc */ { value: 1 };
24
- return uniforms;
25
- }
1
+ /**
2
+ * Create material uniform values and add bindings for configured textures.
3
+ *
4
+ * @param {Object} material Material properties.
5
+ *
6
+ * @returns {Object} Uniform values keyed by shader property.
7
+ */
8
+ export function createProgramUniforms(material) {
9
+ const uniforms = /* alloc */ {
10
+ baseColor: /* alloc */ { value: material.color || /* alloc */ [1, 1, 1] },
11
+ metallic: /* alloc */ { value: material.metallic ?? 0 },
12
+ roughness: /* alloc */ { value: material.roughness ?? 0.85 },
13
+ opacity: /* alloc */ { value: material.opacity ?? 1 },
14
+ alphaCutoff: /* alloc */ { value: material.alphaCutoff ?? 0.5 },
15
+ occlusionStrength: /* alloc */ { value: material.occlusionStrength ?? 1 },
16
+ emissive: /* alloc */ { value: material.emissive || /* alloc */ [0, 0, 0] },
17
+ };
18
+ if (material.baseTexture) uniforms.baseTexture = /* alloc */ { value: material.baseTexture };
19
+ if (material.metalTexture) uniforms.metalTexture = /* alloc */ { value: material.metalTexture };
20
+ if (material.emissiveTexture) uniforms.emissiveTexture = /* alloc */ { value: material.emissiveTexture };
21
+ if (material.occlusionTexture) uniforms.occlusionTexture = /* alloc */ { value: material.occlusionTexture };
22
+ if (material.roofTexture || material.wallTexture) uniforms.roofTexture = /* alloc */ { value: null };
23
+ if (material.nativeStroke) uniforms.strokeScale = /* alloc */ { value: 1 };
24
+ return uniforms;
25
+ }
@@ -1,29 +1,29 @@
1
- import { textureFor } from '../textures/modelTextureFor.js';
2
-
3
- /**
4
- * Translate a glTF material into renderer material properties and texture bindings.
5
- *
6
- * @param {Object} context Model loading context and backend layer.
7
- * @param {Object} material glTF material definition.
8
- *
9
- * @returns {Object} Renderer material properties.
10
- */
11
- export function materialFor(context, material) {
12
- const { backend: layer } = context;
13
- const pbr = material.pbrMetallicRoughness;
14
- return /* alloc */ {
15
- color: pbr?.baseColorFactor ? pbr.baseColorFactor.slice(0, 3) : /* alloc */ [1, 1, 1],
16
- opacity: pbr?.baseColorFactor?.[3] ?? 1,
17
- metallic: pbr?.metallicFactor ?? 1,
18
- roughness: pbr?.roughnessFactor ?? 1,
19
- baseTexture: textureFor(context, pbr?.baseColorTexture, true),
20
- metalTexture: textureFor(context, pbr?.metallicRoughnessTexture),
21
- emissiveTexture: textureFor(context, material.emissiveTexture, true),
22
- occlusionTexture: textureFor(context, material.occlusionTexture),
23
- emissive: material.emissiveFactor || /* alloc */ [0, 0, 0],
24
- occlusionStrength: material.occlusionTexture?.strength ?? 1,
25
- alphaMode: layer.options.alphaMode || material.alphaMode || 'OPAQUE',
26
- alphaCutoff: material.alphaCutoff ?? 0.5,
27
- doubleSided: material.doubleSided,
28
- };
29
- }
1
+ import { textureFor } from '../textures/modelTextureFor.js';
2
+
3
+ /**
4
+ * Translate a glTF material into renderer material properties and texture bindings.
5
+ *
6
+ * @param {Object} context Model loading context and backend layer.
7
+ * @param {Object} material glTF material definition.
8
+ *
9
+ * @returns {Object} Renderer material properties.
10
+ */
11
+ export function materialFor(context, material) {
12
+ const { backend: layer } = context;
13
+ const pbr = material.pbrMetallicRoughness;
14
+ return /* alloc */ {
15
+ color: pbr?.baseColorFactor ? pbr.baseColorFactor.slice(0, 3) : /* alloc */ [1, 1, 1],
16
+ opacity: pbr?.baseColorFactor?.[3] ?? 1,
17
+ metallic: pbr?.metallicFactor ?? 1,
18
+ roughness: pbr?.roughnessFactor ?? 1,
19
+ baseTexture: textureFor(context, pbr?.baseColorTexture, true),
20
+ metalTexture: textureFor(context, pbr?.metallicRoughnessTexture),
21
+ emissiveTexture: textureFor(context, material.emissiveTexture, true),
22
+ occlusionTexture: textureFor(context, material.occlusionTexture),
23
+ emissive: material.emissiveFactor || /* alloc */ [0, 0, 0],
24
+ occlusionStrength: material.occlusionTexture?.strength ?? 1,
25
+ alphaMode: layer.options.alphaMode || material.alphaMode || 'OPAQUE',
26
+ alphaCutoff: material.alphaCutoff ?? 0.5,
27
+ doubleSided: material.doubleSided,
28
+ };
29
+ }
@@ -1,21 +1,21 @@
1
- /**
2
- * Validate and write native or raster cutout settings into the mesh uniform buffer.
3
- *
4
- * @param {Object} renderer Renderer containing uniform data and pixel ratio.
5
- * @param {Object} mesh Mesh with optional native or raster source.
6
- * @param {number} base Starting index in the uniform array.
7
- *
8
- * @throws {Error} If cutout coordinates or radius are invalid.
9
- */
10
- export function prepareMeshCutout(renderer, mesh, base) {
11
- const data = renderer.uniformData;
12
- const cutout = (mesh._nativeSource || mesh._rasterSource)?.options.cutout;
13
- if (cutout && (!Number.isFinite(cutout.x) || !Number.isFinite(cutout.y) ||
14
- !Number.isFinite(cutout.radius) || cutout.radius < 0)) {
15
- throw /* alloc */ new Error('cutout requires finite x, y and a non-negative radius in CSS pixels');
16
- }
17
- data[base + 36] = (cutout?.x ?? 0) * renderer.dpr;
18
- data[base + 37] = (cutout?.y ?? 0) * renderer.dpr;
19
- data[base + 38] = (cutout?.radius ?? 0) * renderer.dpr;
20
- data[base + 39] = cutout?.outside ? 1 : 0;
21
- }
1
+ /**
2
+ * Validate and write native or raster cutout settings into the mesh uniform buffer.
3
+ *
4
+ * @param {Object} renderer Renderer containing uniform data and pixel ratio.
5
+ * @param {Object} mesh Mesh with optional native or raster source.
6
+ * @param {number} base Starting index in the uniform array.
7
+ *
8
+ * @throws {Error} If cutout coordinates or radius are invalid.
9
+ */
10
+ export function prepareMeshCutout(renderer, mesh, base) {
11
+ const data = renderer.uniformData;
12
+ const cutout = (mesh._nativeSource || mesh._rasterSource)?.options.cutout;
13
+ if (cutout && (!Number.isFinite(cutout.x) || !Number.isFinite(cutout.y) ||
14
+ !Number.isFinite(cutout.radius) || cutout.radius < 0)) {
15
+ throw /* alloc */ new Error('cutout requires finite x, y and a non-negative radius in CSS pixels');
16
+ }
17
+ data[base + 36] = (cutout?.x ?? 0) * renderer.dpr;
18
+ data[base + 37] = (cutout?.y ?? 0) * renderer.dpr;
19
+ data[base + 38] = (cutout?.radius ?? 0) * renderer.dpr;
20
+ data[base + 39] = cutout?.outside ? 1 : 0;
21
+ }
@@ -1,65 +1,65 @@
1
- import { demByLayer } from '../weakmaps/demByLayer.js';
2
- import { rasterProgramByLayer } from '../weakmaps/rasterProgramByLayer.js';
3
- import { rendererByLayer } from '../weakmaps/rendererByLayer.js';
4
- import { terrainBoundsByLayer } from '../weakmaps/terrainBoundsByLayer.js';
5
- import { terrainGridsByLayer } from '../weakmaps/terrainGridsByLayer.js';
6
- import { terrainOriginElevationByLayer } from '../weakmaps/terrainOriginElevationByLayer.js';
7
- import { terrainTilesByLayer } from '../weakmaps/terrainTilesByLayer.js';
8
- import { demTexture } from '../globals/demTexture.js';
9
- import { demTarget } from '../globals/demTarget.js';
10
- import { demLayout } from '../globals/demLayout.js';
11
- import { demSize } from '../globals/demSize.js';
12
- import { createProgram } from './createProgram.js';
13
- import { destroyTexture } from '../textures/destroyTexture.js';
14
- import { terrainAtlas } from '../terrain/terrainAtlas.js';
15
-
16
- /**
17
- * Reuse the current terrain raster program or create it with an uploaded elevation atlas.
18
- *
19
- * @param {L.Layer} layer Layer providing terrain and renderer state.
20
- * @param {Object} texture Raster texture used by the program.
21
- *
22
- * @returns {Object} Terrain raster program.
23
- */
24
- export function rasterProgram(layer, texture) {
25
- const device = rendererByLayer.get(layer).device
26
- if (rasterProgramByLayer.get(layer)?.device === device) return rasterProgramByLayer.get(layer);
27
- // DEM atlas over the archive's tile grid; invalid or missing samples become -1e9 (the shader's no-data).
28
- // ponytail: one texture, capped by maxTextureDimension2D (32x32 DEM tiles at 8192 px); split it for larger archives.
29
- const bounds = terrainBoundsByLayer.get(layer), columns = bounds.max.x - bounds.min.x + 1, rows = bounds.max.y - bounds.min.y + 1;
30
- const { elevations, low, high } = terrainAtlas(terrainTilesByLayer.get(layer), bounds);
31
- if (demByLayer.get(layer)) destroyTexture(layer, demByLayer.get(layer).texture);
32
- demByLayer.set(layer, /* alloc */ {
33
- texture: device.createTexture((
34
- demTexture.size[0] = columns * 256,
35
- demTexture.size[1] = rows * 256,
36
- demTexture.usage = GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST,
37
- demTexture
38
- )),
39
- low: Number.isFinite(low) ? low : terrainOriginElevationByLayer.get(layer),
40
- high: Number.isFinite(high) ? high : terrainOriginElevationByLayer.get(layer),
41
- });
42
- device.queue.writeTexture((
43
- demTarget.texture = demByLayer.get(layer).texture,
44
- demTarget
45
- ), elevations,
46
- (
47
- demLayout.bytesPerRow = columns * 1024,
48
- demLayout
49
- ), (
50
- demSize[0] = columns * 256,
51
- demSize[1] = rows * 256,
52
- demSize
53
- ));
54
- demTarget.texture = null;
55
- terrainGridsByLayer.set(layer, /* alloc */ new Map());
56
- rasterProgramByLayer.set(layer, createProgram(layer, /* alloc */ {
57
- baseTexture: texture,
58
- unlit: true,
59
- terrain: demByLayer.get(layer),
60
- alphaMode: 'BLEND',
61
- depthWrite: true,
62
- doubleSided: layer.options.doubleSided,
63
- }));
64
- return rasterProgramByLayer.get(layer);
65
- }
1
+ import { demByLayer } from '../weakmaps/demByLayer.js';
2
+ import { rasterProgramByLayer } from '../weakmaps/rasterProgramByLayer.js';
3
+ import { rendererByLayer } from '../weakmaps/rendererByLayer.js';
4
+ import { terrainBoundsByLayer } from '../weakmaps/terrainBoundsByLayer.js';
5
+ import { terrainGridsByLayer } from '../weakmaps/terrainGridsByLayer.js';
6
+ import { terrainOriginElevationByLayer } from '../weakmaps/terrainOriginElevationByLayer.js';
7
+ import { terrainTilesByLayer } from '../weakmaps/terrainTilesByLayer.js';
8
+ import { demTexture } from '../globals/demTexture.js';
9
+ import { demTarget } from '../globals/demTarget.js';
10
+ import { demLayout } from '../globals/demLayout.js';
11
+ import { demSize } from '../globals/demSize.js';
12
+ import { createProgram } from './createProgram.js';
13
+ import { destroyTexture } from '../textures/destroyTexture.js';
14
+ import { terrainAtlas } from '../terrain/terrainAtlas.js';
15
+
16
+ /**
17
+ * Reuse the current terrain raster program or create it with an uploaded elevation atlas.
18
+ *
19
+ * @param {L.Layer} layer Layer providing terrain and renderer state.
20
+ * @param {Object} texture Raster texture used by the program.
21
+ *
22
+ * @returns {Object} Terrain raster program.
23
+ */
24
+ export function rasterProgram(layer, texture) {
25
+ const device = rendererByLayer.get(layer).device
26
+ if (rasterProgramByLayer.get(layer)?.device === device) return rasterProgramByLayer.get(layer);
27
+ // DEM atlas over the archive's tile grid; invalid or missing samples become -1e9 (the shader's no-data).
28
+ // ponytail: one texture, capped by maxTextureDimension2D (32x32 DEM tiles at 8192 px); split it for larger archives.
29
+ const bounds = terrainBoundsByLayer.get(layer), columns = bounds.max.x - bounds.min.x + 1, rows = bounds.max.y - bounds.min.y + 1;
30
+ const { elevations, low, high } = terrainAtlas(terrainTilesByLayer.get(layer), bounds);
31
+ if (demByLayer.get(layer)) destroyTexture(layer, demByLayer.get(layer).texture);
32
+ demByLayer.set(layer, /* alloc */ {
33
+ texture: device.createTexture((
34
+ demTexture.size[0] = columns * 256,
35
+ demTexture.size[1] = rows * 256,
36
+ demTexture.usage = GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST,
37
+ demTexture
38
+ )),
39
+ low: Number.isFinite(low) ? low : terrainOriginElevationByLayer.get(layer),
40
+ high: Number.isFinite(high) ? high : terrainOriginElevationByLayer.get(layer),
41
+ });
42
+ device.queue.writeTexture((
43
+ demTarget.texture = demByLayer.get(layer).texture,
44
+ demTarget
45
+ ), elevations,
46
+ (
47
+ demLayout.bytesPerRow = columns * 1024,
48
+ demLayout
49
+ ), (
50
+ demSize[0] = columns * 256,
51
+ demSize[1] = rows * 256,
52
+ demSize
53
+ ));
54
+ demTarget.texture = null;
55
+ terrainGridsByLayer.set(layer, /* alloc */ new Map());
56
+ rasterProgramByLayer.set(layer, createProgram(layer, /* alloc */ {
57
+ baseTexture: texture,
58
+ unlit: true,
59
+ terrain: demByLayer.get(layer),
60
+ alphaMode: 'BLEND',
61
+ depthWrite: true,
62
+ doubleSided: layer.options.doubleSided,
63
+ }));
64
+ return rasterProgramByLayer.get(layer);
65
+ }
@@ -1,17 +1,17 @@
1
- /**
2
- * Validate the optional roof and wall texture material settings.
3
- *
4
- * @param {Object} material Material containing texture settings.
5
- *
6
- * @throws {Error} If a texture setting is not a boolean or a finite number from 0 to 1.
7
- */
8
- export function validateRoofMaterial(material) {
9
- let name, value;
10
- for (name of /* alloc */ ['roofTexture', 'wallTexture']) {
11
- value = material[name];
12
- if (value !== undefined && typeof value !== 'boolean' &&
13
- (!Number.isFinite(value) || value < 0 || value > 1)) {
14
- throw /* alloc */ new Error(`${name} must be a boolean or a finite number between 0 and 1`);
15
- }
16
- }
17
- }
1
+ /**
2
+ * Validate the optional roof and wall texture material settings.
3
+ *
4
+ * @param {Object} material Material containing texture settings.
5
+ *
6
+ * @throws {Error} If a texture setting is not a boolean or a finite number from 0 to 1.
7
+ */
8
+ export function validateRoofMaterial(material) {
9
+ let name, value;
10
+ for (name of /* alloc */ ['roofTexture', 'wallTexture']) {
11
+ value = material[name];
12
+ if (value !== undefined && typeof value !== 'boolean' &&
13
+ (!Number.isFinite(value) || value < 0 || value > 1)) {
14
+ throw /* alloc */ new Error(`${name} must be a boolean or a finite number between 0 and 1`);
15
+ }
16
+ }
17
+ }
@@ -1,18 +1,18 @@
1
- import { modelByLayer } from '../weakmaps/modelByLayer.js';
2
-
3
- /**
4
- * Apply the layer's optional rotation and scale to its model.
5
- *
6
- * @param {L.Layer} layer Layer containing the transform options.
7
- */
8
- export function applyModelTransform(layer) {
9
- const model = modelByLayer.get(layer);
10
- if (layer.options.rotation) {
11
- const [x, y = x, z = x] = layer.options.rotation;
12
- model.rotation[0] = x; model.rotation[1] = y; model.rotation[2] = z;
13
- }
14
- if (layer.options.scale) {
15
- const [x, y = x, z = x] = layer.options.scale;
16
- model.scale[0] = x; model.scale[1] = y; model.scale[2] = z;
17
- }
18
- }
1
+ import { modelByLayer } from '../weakmaps/modelByLayer.js';
2
+
3
+ /**
4
+ * Apply the layer's optional rotation and scale to its model.
5
+ *
6
+ * @param {L.Layer} layer Layer containing the transform options.
7
+ */
8
+ export function applyModelTransform(layer) {
9
+ const model = modelByLayer.get(layer);
10
+ if (layer.options.rotation) {
11
+ const [x, y = x, z = x] = layer.options.rotation;
12
+ model.rotation[0] = x; model.rotation[1] = y; model.rotation[2] = z;
13
+ }
14
+ if (layer.options.scale) {
15
+ const [x, y = x, z = x] = layer.options.scale;
16
+ model.scale[0] = x; model.scale[1] = y; model.scale[2] = z;
17
+ }
18
+ }
@@ -1,24 +1,24 @@
1
- import { modelNode } from './modelNode.js';
2
- import { releaseModelResources } from './releaseModelResources.js';
3
-
4
- /**
5
- * Build scene roots, releasing allocated resources if node construction fails.
6
- *
7
- * @param {Object} context Model construction context.
8
- * @param {Object} scene glTF scene containing root node indices.
9
- *
10
- * @returns {Array<Object>} Built root nodes.
11
- *
12
- * @throws {Error} If building a node fails.
13
- */
14
- export function buildModelNodes(context, scene) {
15
- const nodes = /* alloc */ [];
16
- let index;
17
- try {
18
- for (index of scene.nodes) nodes.push(modelNode(context, index));
19
- } catch (error) {
20
- releaseModelResources(context);
21
- throw error;
22
- }
23
- return nodes;
24
- }
1
+ import { modelNode } from './modelNode.js';
2
+ import { releaseModelResources } from './releaseModelResources.js';
3
+
4
+ /**
5
+ * Build scene roots, releasing allocated resources if node construction fails.
6
+ *
7
+ * @param {Object} context Model construction context.
8
+ * @param {Object} scene glTF scene containing root node indices.
9
+ *
10
+ * @returns {Array<Object>} Built root nodes.
11
+ *
12
+ * @throws {Error} If building a node fails.
13
+ */
14
+ export function buildModelNodes(context, scene) {
15
+ const nodes = /* alloc */ [];
16
+ let index;
17
+ try {
18
+ for (index of scene.nodes) nodes.push(modelNode(context, index));
19
+ } catch (error) {
20
+ releaseModelResources(context);
21
+ throw error;
22
+ }
23
+ return nodes;
24
+ }