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,57 +1,57 @@
1
- import { meshBindGroup } from '../globals/meshBindGroup.js';
2
- import { drawEntries } from '../globals/drawEntries.js';
3
- import { drawMeshEntry } from '../globals/drawMeshEntry.js';
4
- import { drawFrameEntry } from '../globals/drawFrameEntry.js';
5
- import { drawTerrainEntry } from '../globals/drawTerrainEntry.js';
6
- import { drawTextureEntries } from '../globals/drawTextureEntries.js';
7
- import { drawSamplerEntries } from '../globals/drawSamplerEntries.js';
8
-
9
- /**
10
- * Create the mesh bind group for frame uniforms, terrain and material textures.
11
- *
12
- * @param {Object} renderer Renderer providing the device and uniform buffer.
13
- * @param {Object} mesh Mesh whose bind group is updated.
14
- * @param {Array<Object>} textures Texture and sampler pairs in program binding order.
15
- */
16
- export function bindMeshTextures(renderer, mesh, textures) {
17
- const { program } = mesh;
18
- const entries = drawEntries;
19
- entries.length = 0;
20
- drawMeshEntry.resource.buffer = renderer.uniformBuffer;
21
- drawFrameEntry.resource.buffer = renderer.uniformBuffer;
22
- entries.push(drawMeshEntry, drawFrameEntry);
23
- if (program.terrain) {
24
- drawTerrainEntry.resource = program.terrain.texture.createView();
25
- entries.push(drawTerrainEntry);
26
- }
27
- mesh.boundBuffer = renderer.uniformBuffer;
28
- const boundTextures = mesh.boundTextures ||= /* alloc */ [];
29
- boundTextures.length = textures.length;
30
- let i, binding, texture;
31
- for (i = 0; i < textures.length; i++) {
32
- binding = program.bindings[i], texture = textures[i];
33
- drawTextureEntries[i].binding = binding.texture;
34
- drawTextureEntries[i].resource = texture.texture.createView();
35
- drawSamplerEntries[i].binding = binding.sampler;
36
- drawSamplerEntries[i].resource = texture.sampler;
37
- entries.push(drawTextureEntries[i], drawSamplerEntries[i]);
38
- boundTextures[i] ||= /* alloc */ [];
39
- boundTextures[i][0] = texture.texture;
40
- boundTextures[i][1] = texture.sampler;
41
- }
42
- mesh.bindGroup = renderer.device.createBindGroup((
43
- meshBindGroup.layout = program.bindGroupLayout,
44
- meshBindGroup.entries = entries,
45
- meshBindGroup
46
- ));
47
- meshBindGroup.layout = null;
48
- meshBindGroup.entries = null;
49
- drawMeshEntry.resource.buffer = null;
50
- drawFrameEntry.resource.buffer = null;
51
- drawTerrainEntry.resource = null;
52
- for (i = 0; i < textures.length; i++) {
53
- drawTextureEntries[i].resource = null;
54
- drawSamplerEntries[i].resource = null;
55
- }
56
- entries.length = 0;
57
- }
1
+ import { meshBindGroup } from '../globals/meshBindGroup.js';
2
+ import { drawEntries } from '../globals/drawEntries.js';
3
+ import { drawMeshEntry } from '../globals/drawMeshEntry.js';
4
+ import { drawFrameEntry } from '../globals/drawFrameEntry.js';
5
+ import { drawTerrainEntry } from '../globals/drawTerrainEntry.js';
6
+ import { drawTextureEntries } from '../globals/drawTextureEntries.js';
7
+ import { drawSamplerEntries } from '../globals/drawSamplerEntries.js';
8
+
9
+ /**
10
+ * Create the mesh bind group for frame uniforms, terrain and material textures.
11
+ *
12
+ * @param {Object} renderer Renderer providing the device and uniform buffer.
13
+ * @param {Object} mesh Mesh whose bind group is updated.
14
+ * @param {Array<Object>} textures Texture and sampler pairs in program binding order.
15
+ */
16
+ export function bindMeshTextures(renderer, mesh, textures) {
17
+ const { program } = mesh;
18
+ const entries = drawEntries;
19
+ entries.length = 0;
20
+ drawMeshEntry.resource.buffer = renderer.uniformBuffer;
21
+ drawFrameEntry.resource.buffer = renderer.uniformBuffer;
22
+ entries.push(drawMeshEntry, drawFrameEntry);
23
+ if (program.terrain) {
24
+ drawTerrainEntry.resource = program.terrain.texture.createView();
25
+ entries.push(drawTerrainEntry);
26
+ }
27
+ mesh.boundBuffer = renderer.uniformBuffer;
28
+ const boundTextures = mesh.boundTextures ||= /* alloc */ [];
29
+ boundTextures.length = textures.length;
30
+ let i, binding, texture;
31
+ for (i = 0; i < textures.length; i++) {
32
+ binding = program.bindings[i], texture = textures[i];
33
+ drawTextureEntries[i].binding = binding.texture;
34
+ drawTextureEntries[i].resource = texture.texture.createView();
35
+ drawSamplerEntries[i].binding = binding.sampler;
36
+ drawSamplerEntries[i].resource = texture.sampler;
37
+ entries.push(drawTextureEntries[i], drawSamplerEntries[i]);
38
+ boundTextures[i] ||= /* alloc */ [];
39
+ boundTextures[i][0] = texture.texture;
40
+ boundTextures[i][1] = texture.sampler;
41
+ }
42
+ mesh.bindGroup = renderer.device.createBindGroup((
43
+ meshBindGroup.layout = program.bindGroupLayout,
44
+ meshBindGroup.entries = entries,
45
+ meshBindGroup
46
+ ));
47
+ meshBindGroup.layout = null;
48
+ meshBindGroup.entries = null;
49
+ drawMeshEntry.resource.buffer = null;
50
+ drawFrameEntry.resource.buffer = null;
51
+ drawTerrainEntry.resource = null;
52
+ for (i = 0; i < textures.length; i++) {
53
+ drawTextureEntries[i].resource = null;
54
+ drawSamplerEntries[i].resource = null;
55
+ }
56
+ entries.length = 0;
57
+ }
@@ -1,23 +1,23 @@
1
- import { rasterTilesByLayer } from '../weakmaps/rasterTilesByLayer.js';
2
-
3
- /**
4
- * Collect completed, unaborted raster tiles with images for the roof atlas.
5
- *
6
- * @param {Array<L.Layer>} rasters Raster layers to inspect.
7
- * @param {Array<Object>} tiles Destination for tile and layer entries.
8
- *
9
- * @returns {number} Highest collected tile zoom, or negative infinity if none.
10
- */
11
- export function collectRoofTiles(rasters, tiles) {
12
- let zoom = -Infinity, layer, tile;
13
- for (layer of rasters) {
14
- for (tile of rasterTilesByLayer.get(layer).values()) {
15
- if (tile.done && !tile.request.signal.aborted && tile.image) {
16
- tile._roofEntry ||= /* alloc */ { tile, layer };
17
- tiles.push(tile._roofEntry);
18
- zoom = Math.max(zoom, tile.coords.z);
19
- }
20
- }
21
- }
22
- return zoom;
23
- }
1
+ import { rasterTilesByLayer } from '../weakmaps/rasterTilesByLayer.js';
2
+
3
+ /**
4
+ * Collect completed, unaborted raster tiles with images for the roof atlas.
5
+ *
6
+ * @param {Array<L.Layer>} rasters Raster layers to inspect.
7
+ * @param {Array<Object>} tiles Destination for tile and layer entries.
8
+ *
9
+ * @returns {number} Highest collected tile zoom, or negative infinity if none.
10
+ */
11
+ export function collectRoofTiles(rasters, tiles) {
12
+ let zoom = -Infinity, layer, tile;
13
+ for (layer of rasters) {
14
+ for (tile of rasterTilesByLayer.get(layer).values()) {
15
+ if (tile.done && !tile.request.signal.aborted && tile.image) {
16
+ tile._roofEntry ||= /* alloc */ { tile, layer };
17
+ tiles.push(tile._roofEntry);
18
+ zoom = Math.max(zoom, tile.coords.z);
19
+ }
20
+ }
21
+ }
22
+ return zoom;
23
+ }
@@ -1,29 +1,29 @@
1
- import { geometryImageOptions } from '../globals/geometryImageOptions.js';
2
-
3
- /**
4
- * Load a glTF image from a buffer view or URI as an unpremultiplied image bitmap.
5
- *
6
- * @param {Object} description Decoded glTF document with loaded buffers.
7
- * @param {string} directory Base URL for external image URIs.
8
- * @param {Object} image glTF image specification.
9
- *
10
- * @returns {Promise<ImageBitmap>} Decoded image.
11
- *
12
- * @throws {Error} If an external image response is not successful.
13
- */
14
- export async function loadImage(description, directory, image) {
15
- let blob;
16
- if (image.bufferView !== undefined) {
17
- const view = description.bufferViews[image.bufferView];
18
- const buffer = description.buffers[view.buffer].binary;
19
- blob = /* alloc */ new Blob(
20
- /* alloc */ [buffer.slice(view.byteOffset || 0, (view.byteOffset || 0) + view.byteLength)],
21
- /* alloc */ { type: image.mimeType });
22
- } else {
23
- const response = await fetch(/* alloc */ new URL(image.uri, directory).href);
24
- if (!response.ok) throw /* alloc */ new Error(`Unable to load model texture: HTTP ${response.status}`);
25
- blob = await response.blob();
26
- }
27
- // Preserve straight alpha and raw samples; GPU sRGB formats do color decoding.
28
- return createImageBitmap(blob, geometryImageOptions);
29
- }
1
+ import { geometryImageOptions } from '../globals/geometryImageOptions.js';
2
+
3
+ /**
4
+ * Load a glTF image from a buffer view or URI as an unpremultiplied image bitmap.
5
+ *
6
+ * @param {Object} description Decoded glTF document with loaded buffers.
7
+ * @param {string} directory Base URL for external image URIs.
8
+ * @param {Object} image glTF image specification.
9
+ *
10
+ * @returns {Promise<ImageBitmap>} Decoded image.
11
+ *
12
+ * @throws {Error} If an external image response is not successful.
13
+ */
14
+ export async function loadImage(description, directory, image) {
15
+ let blob;
16
+ if (image.bufferView !== undefined) {
17
+ const view = description.bufferViews[image.bufferView];
18
+ const buffer = description.buffers[view.buffer].binary;
19
+ blob = /* alloc */ new Blob(
20
+ /* alloc */ [buffer.slice(view.byteOffset || 0, (view.byteOffset || 0) + view.byteLength)],
21
+ /* alloc */ { type: image.mimeType });
22
+ } else {
23
+ const response = await fetch(/* alloc */ new URL(image.uri, directory).href);
24
+ if (!response.ok) throw /* alloc */ new Error(`Unable to load model texture: HTTP ${response.status}`);
25
+ blob = await response.blob();
26
+ }
27
+ // Preserve straight alpha and raw samples; GPU sRGB formats do color decoding.
28
+ return createImageBitmap(blob, geometryImageOptions);
29
+ }
@@ -1,47 +1,47 @@
1
- import { rendererByLayer } from '../weakmaps/rendererByLayer.js';
2
- import { textureSampler } from './modelTextureSampler.js';
3
-
4
- /**
5
- * Get or create a model texture, using separate cache entries for color and data formats.
6
- *
7
- * @param {Object} context Model context containing images, texture descriptions and cache.
8
- * @param {Object} reference glTF texture reference, if present.
9
- * @param {boolean} [color] Whether to use an sRGB color format.
10
- *
11
- * @returns {Object|null} Cached texture state, or null without a reference.
12
- *
13
- * @throws {Error} If the texture uses transformed UVs or a set other than TEXCOORD_0.
14
- */
15
- export function textureFor(context, reference, color = false) {
16
- const { backend: layer, description, images, textures } = context;
17
- if (!reference) return null;
18
- if ((reference.texCoord || 0) !== 0 || reference.extensions) {
19
- throw /* alloc */ new Error('Model textures currently require untransformed TEXCOORD_0 UVs');
20
- }
21
- const device = rendererByLayer.get(layer).device;
22
- // A glTF image may serve both color and data maps: those cannot share a GPU format.
23
- const key = `${reference.index}:${color}`;
24
- if (!textures.has(key)) {
25
- const texture = description.textures[reference.index];
26
- const sampler = description.samplers?.[texture.sampler];
27
- const image = images[texture.source];
28
- const format = color ? 'rgba8unorm-srgb' : 'rgba8unorm';
29
- const samplerOptions = textureSampler(sampler);
30
- textures.set(key, /* alloc */ {
31
- device,
32
- texture: device.createTexture(/* alloc */ {
33
- size: /* alloc */ [image.width, image.height],
34
- format,
35
- usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT,
36
- }),
37
- sampler: device.createSampler(samplerOptions),
38
- samplerOptions,
39
- format,
40
- srgb: color,
41
- image,
42
- flipY: false,
43
- uploaded: null,
44
- });
45
- }
46
- return textures.get(key);
47
- }
1
+ import { rendererByLayer } from '../weakmaps/rendererByLayer.js';
2
+ import { textureSampler } from './modelTextureSampler.js';
3
+
4
+ /**
5
+ * Get or create a model texture, using separate cache entries for color and data formats.
6
+ *
7
+ * @param {Object} context Model context containing images, texture descriptions and cache.
8
+ * @param {Object} reference glTF texture reference, if present.
9
+ * @param {boolean} [color] Whether to use an sRGB color format.
10
+ *
11
+ * @returns {Object|null} Cached texture state, or null without a reference.
12
+ *
13
+ * @throws {Error} If the texture uses transformed UVs or a set other than TEXCOORD_0.
14
+ */
15
+ export function textureFor(context, reference, color = false) {
16
+ const { backend: layer, description, images, textures } = context;
17
+ if (!reference) return null;
18
+ if ((reference.texCoord || 0) !== 0 || reference.extensions) {
19
+ throw /* alloc */ new Error('Model textures currently require untransformed TEXCOORD_0 UVs');
20
+ }
21
+ const device = rendererByLayer.get(layer).device;
22
+ // A glTF image may serve both color and data maps: those cannot share a GPU format.
23
+ const key = `${reference.index}:${color}`;
24
+ if (!textures.has(key)) {
25
+ const texture = description.textures[reference.index];
26
+ const sampler = description.samplers?.[texture.sampler];
27
+ const image = images[texture.source];
28
+ const format = color ? 'rgba8unorm-srgb' : 'rgba8unorm';
29
+ const samplerOptions = textureSampler(sampler);
30
+ textures.set(key, /* alloc */ {
31
+ device,
32
+ texture: device.createTexture(/* alloc */ {
33
+ size: /* alloc */ [image.width, image.height],
34
+ format,
35
+ usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT,
36
+ }),
37
+ sampler: device.createSampler(samplerOptions),
38
+ samplerOptions,
39
+ format,
40
+ srgb: color,
41
+ image,
42
+ flipY: false,
43
+ uploaded: null,
44
+ });
45
+ }
46
+ return textures.get(key);
47
+ }
@@ -1,31 +1,31 @@
1
- import { uploadMeshTexture } from './uploadMeshTexture.js';
2
- import { bindMeshTextures } from './bindMeshTextures.js';
3
-
4
- /**
5
- * Upload a mesh's program textures and rebuild its bind group when bindings change.
6
- *
7
- * @param {Object} renderer Renderer providing the GPU device and uniform buffer.
8
- * @param {Object} mesh Mesh whose textures and bindings are prepared.
9
- *
10
- * @throws {Error} If a required program texture is missing.
11
- */
12
- export function prepareMeshTextures(renderer, mesh) {
13
- const { program } = mesh;
14
- const { device } = renderer;
15
- const textures = mesh._textures ||= /* alloc */ [];
16
- textures.length = 0;
17
- let binding, texture, i;
18
- for (binding of program.bindings) {
19
- texture = program.uniforms[binding.name]?.value;
20
- if (!texture) throw /* alloc */ new Error(`Missing Layer3D texture: ${binding.name}`);
21
- uploadMeshTexture(device, texture);
22
- textures.push(texture);
23
- }
24
- let bindingsChanged = !mesh.bindGroup || mesh.boundBuffer !== renderer.uniformBuffer ||
25
- textures.length !== mesh.boundTextures.length;
26
- for (i = 0; !bindingsChanged && i < textures.length; i++) {
27
- if (textures[i].texture !== mesh.boundTextures[i][0] ||
28
- textures[i].sampler !== mesh.boundTextures[i][1]) bindingsChanged = true;
29
- }
30
- if (bindingsChanged) bindMeshTextures(renderer, mesh, textures);
31
- }
1
+ import { uploadMeshTexture } from './uploadMeshTexture.js';
2
+ import { bindMeshTextures } from './bindMeshTextures.js';
3
+
4
+ /**
5
+ * Upload a mesh's program textures and rebuild its bind group when bindings change.
6
+ *
7
+ * @param {Object} renderer Renderer providing the GPU device and uniform buffer.
8
+ * @param {Object} mesh Mesh whose textures and bindings are prepared.
9
+ *
10
+ * @throws {Error} If a required program texture is missing.
11
+ */
12
+ export function prepareMeshTextures(renderer, mesh) {
13
+ const { program } = mesh;
14
+ const { device } = renderer;
15
+ const textures = mesh._textures ||= /* alloc */ [];
16
+ textures.length = 0;
17
+ let binding, texture, i;
18
+ for (binding of program.bindings) {
19
+ texture = program.uniforms[binding.name]?.value;
20
+ if (!texture) throw /* alloc */ new Error(`Missing Layer3D texture: ${binding.name}`);
21
+ uploadMeshTexture(device, texture);
22
+ textures.push(texture);
23
+ }
24
+ let bindingsChanged = !mesh.bindGroup || mesh.boundBuffer !== renderer.uniformBuffer ||
25
+ textures.length !== mesh.boundTextures.length;
26
+ for (i = 0; !bindingsChanged && i < textures.length; i++) {
27
+ if (textures[i].texture !== mesh.boundTextures[i][0] ||
28
+ textures[i].sampler !== mesh.boundTextures[i][1]) bindingsChanged = true;
29
+ }
30
+ if (bindingsChanged) bindMeshTextures(renderer, mesh, textures);
31
+ }
@@ -1,14 +1,14 @@
1
- import { imageStates } from '../weakmaps/imageStates.js';
2
-
3
- /**
4
- * Remove a native layer state from an image's tracked associations.
5
- *
6
- * @param {HTMLImageElement} image Image to update.
7
- * @param {Object} state Native layer state to remove.
8
- */
9
- export function removeImageState(image, state) {
10
- const states = imageStates.get(image);
11
- if (!states) return;
12
- states.delete(state);
13
- if (!states.size) imageStates.delete(image);
1
+ import { imageStates } from '../weakmaps/imageStates.js';
2
+
3
+ /**
4
+ * Remove a native layer state from an image's tracked associations.
5
+ *
6
+ * @param {HTMLImageElement} image Image to update.
7
+ * @param {Object} state Native layer state to remove.
8
+ */
9
+ export function removeImageState(image, state) {
10
+ const states = imageStates.get(image);
11
+ if (!states) return;
12
+ states.delete(state);
13
+ if (!states.size) imageStates.delete(image);
14
14
  }
@@ -1,32 +1,32 @@
1
- import { rendererByLayer } from '../weakmaps/rendererByLayer.js';
2
- import { roofTexture } from '../globals/roofTexture.js';
3
- import { roofSampler } from '../globals/roofSampler.js';
4
- import { destroyTexture } from './destroyTexture.js';
5
-
6
- /**
7
- * Create or resize the GPU texture used for the roof atlas.
8
- *
9
- * @param {L.Layer} layer Rendering layer.
10
- * @param {Object} roof Roof atlas state.
11
- * @param {number} width Texture width in pixels.
12
- * @param {number} height Texture height in pixels.
13
- */
14
- export function resizeRoofTexture(layer, roof, width, height) {
15
- const renderer = rendererByLayer.get(layer);
16
- const descriptor = roofTexture;
17
- descriptor.size[0] = width; descriptor.size[1] = height;
18
- descriptor.usage = GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT;
19
- if (roof.texture && (roof.texture.width !== width || roof.texture.height !== height)) {
20
- destroyTexture(layer, roof.texture.texture);
21
- roof.texture.texture = renderer.device.createTexture(descriptor);
22
- roof.texture.width = width; roof.texture.height = height;
23
- }
24
- roof.texture ||= /* alloc */ {
25
- device: renderer.device,
26
- texture: renderer.device.createTexture(descriptor),
27
- sampler: renderer.device.createSampler(roofSampler),
28
- samplerOptions: /* alloc */ { addressModeU: 'clamp-to-edge', addressModeV: 'clamp-to-edge' },
29
- image: null, width, height,
30
- format: 'rgba8unorm', srgb: false, flipY: false, uploaded: null,
31
- };
32
- }
1
+ import { rendererByLayer } from '../weakmaps/rendererByLayer.js';
2
+ import { roofTexture } from '../globals/roofTexture.js';
3
+ import { roofSampler } from '../globals/roofSampler.js';
4
+ import { destroyTexture } from './destroyTexture.js';
5
+
6
+ /**
7
+ * Create or resize the GPU texture used for the roof atlas.
8
+ *
9
+ * @param {L.Layer} layer Rendering layer.
10
+ * @param {Object} roof Roof atlas state.
11
+ * @param {number} width Texture width in pixels.
12
+ * @param {number} height Texture height in pixels.
13
+ */
14
+ export function resizeRoofTexture(layer, roof, width, height) {
15
+ const renderer = rendererByLayer.get(layer);
16
+ const descriptor = roofTexture;
17
+ descriptor.size[0] = width; descriptor.size[1] = height;
18
+ descriptor.usage = GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT;
19
+ if (roof.texture && (roof.texture.width !== width || roof.texture.height !== height)) {
20
+ destroyTexture(layer, roof.texture.texture);
21
+ roof.texture.texture = renderer.device.createTexture(descriptor);
22
+ roof.texture.width = width; roof.texture.height = height;
23
+ }
24
+ roof.texture ||= /* alloc */ {
25
+ device: renderer.device,
26
+ texture: renderer.device.createTexture(descriptor),
27
+ sampler: renderer.device.createSampler(roofSampler),
28
+ samplerOptions: /* alloc */ { addressModeU: 'clamp-to-edge', addressModeV: 'clamp-to-edge' },
29
+ image: null, width, height,
30
+ format: 'rgba8unorm', srgb: false, flipY: false, uploaded: null,
31
+ };
32
+ }
@@ -1,22 +1,22 @@
1
- /**
2
- * Recreate material textures and samplers that belong to a different GPU device.
3
- *
4
- * @param {Object} material Material containing model texture states.
5
- * @param {GPUDevice} device Device to own restored resources.
6
- */
7
- export function restoreMaterialTextures(material, device) {
8
- let name, texture;
9
- for (name in material) {
10
- if (name !== 'baseTexture' && name !== 'metalTexture' && name !== 'emissiveTexture' && name !== 'occlusionTexture') continue;
11
- texture = material[name];
12
- if (!texture || texture.device === device) continue;
13
- texture.device = device;
14
- texture.texture = device.createTexture(/* alloc */ {
15
- size: /* alloc */ [texture.image.width, texture.image.height],
16
- format: texture.format,
17
- usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT,
18
- });
19
- texture.sampler = device.createSampler(texture.samplerOptions);
20
- texture.uploaded = null;
21
- }
22
- }
1
+ /**
2
+ * Recreate material textures and samplers that belong to a different GPU device.
3
+ *
4
+ * @param {Object} material Material containing model texture states.
5
+ * @param {GPUDevice} device Device to own restored resources.
6
+ */
7
+ export function restoreMaterialTextures(material, device) {
8
+ let name, texture;
9
+ for (name in material) {
10
+ if (name !== 'baseTexture' && name !== 'metalTexture' && name !== 'emissiveTexture' && name !== 'occlusionTexture') continue;
11
+ texture = material[name];
12
+ if (!texture || texture.device === device) continue;
13
+ texture.device = device;
14
+ texture.texture = device.createTexture(/* alloc */ {
15
+ size: /* alloc */ [texture.image.width, texture.image.height],
16
+ format: texture.format,
17
+ usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT,
18
+ });
19
+ texture.sampler = device.createSampler(texture.samplerOptions);
20
+ texture.uploaded = null;
21
+ }
22
+ }
@@ -1,29 +1,29 @@
1
- import { loadingTilesByLayer } from '../weakmaps/loadingTilesByLayer.js';
2
- import { rasterVersionByLayer } from '../weakmaps/rasterVersionByLayer.js';
3
- import { roofRasterByLayer } from '../weakmaps/roofRasterByLayer.js';
4
- import { L } from '../globals/L.js';
5
- import { roofSignatures } from '../globals/roofSignatures.js';
6
- import { rebuildRoofAtlas } from './rebuildRoofAtlas.js';
7
-
8
- /**
9
- * Rebuild a changed roof atlas, throttling updates while raster tiles are loading.
10
- *
11
- * @param {L.Layer} layer Rendering layer owning the atlas.
12
- * @param {Array<L.Layer>} rasters Raster layers included in the atlas.
13
- * @param {number} now Current frame time in milliseconds.
14
- */
15
- export function updateRoofAtlas(layer, rasters, now) {
16
- const signatures = roofSignatures;
17
- signatures.length = 0;
18
- let loading = false, rasterLayer;
19
- for (rasterLayer of rasters) {
20
- signatures.push(`${L.Util.stamp(rasterLayer)}:${rasterVersionByLayer.get(rasterLayer) || 0}:${rasterLayer.options.opacity}:${rasterLayer.options.zIndex}`);
21
- loading ||= Boolean(loadingTilesByLayer.get(rasterLayer));
22
- }
23
- const signature = signatures.join('|');
24
- signatures.length = 0;
25
- if (!roofRasterByLayer.get(layer) || roofRasterByLayer.get(layer).signature !== signature &&
26
- (!loading || now - roofRasterByLayer.get(layer).updatedAt >= 50)) {
27
- rebuildRoofAtlas(layer, rasters, signature, now);
28
- }
29
- }
1
+ import { loadingTilesByLayer } from '../weakmaps/loadingTilesByLayer.js';
2
+ import { rasterVersionByLayer } from '../weakmaps/rasterVersionByLayer.js';
3
+ import { roofRasterByLayer } from '../weakmaps/roofRasterByLayer.js';
4
+ import { L } from '../globals/L.js';
5
+ import { roofSignatures } from '../globals/roofSignatures.js';
6
+ import { rebuildRoofAtlas } from './rebuildRoofAtlas.js';
7
+
8
+ /**
9
+ * Rebuild a changed roof atlas, throttling updates while raster tiles are loading.
10
+ *
11
+ * @param {L.Layer} layer Rendering layer owning the atlas.
12
+ * @param {Array<L.Layer>} rasters Raster layers included in the atlas.
13
+ * @param {number} now Current frame time in milliseconds.
14
+ */
15
+ export function updateRoofAtlas(layer, rasters, now) {
16
+ const signatures = roofSignatures;
17
+ signatures.length = 0;
18
+ let loading = false, rasterLayer;
19
+ for (rasterLayer of rasters) {
20
+ signatures.push(`${L.Util.stamp(rasterLayer)}:${rasterVersionByLayer.get(rasterLayer) || 0}:${rasterLayer.options.opacity}:${rasterLayer.options.zIndex}`);
21
+ loading ||= Boolean(loadingTilesByLayer.get(rasterLayer));
22
+ }
23
+ const signature = signatures.join('|');
24
+ signatures.length = 0;
25
+ if (!roofRasterByLayer.get(layer) || roofRasterByLayer.get(layer).signature !== signature &&
26
+ (!loading || now - roofRasterByLayer.get(layer).updatedAt >= 50)) {
27
+ rebuildRoofAtlas(layer, rasters, signature, now);
28
+ }
29
+ }
@@ -1,32 +1,32 @@
1
- import { meshImage } from '../globals/meshImage.js';
2
- import { meshTarget } from '../globals/meshTarget.js';
3
- import { meshCopySize } from '../globals/meshCopySize.js';
4
-
5
- /**
6
- * Upload a mesh texture's image if it has changed since the previous upload.
7
- *
8
- * @param {GPUDevice} device Device owning the texture.
9
- * @param {Object} texture Texture state containing its image and flip setting.
10
- */
11
- export function uploadMeshTexture(device, texture) {
12
- if (texture.uploaded === texture.image) return;
13
- device.queue.copyExternalImageToTexture(
14
- (
15
- meshImage.source = texture.image,
16
- meshImage.flipY = Boolean(texture.flipY),
17
- meshImage
18
- ),
19
- (
20
- meshTarget.texture = texture.texture,
21
- meshTarget
22
- ),
23
- (
24
- meshCopySize[0] = texture.image.width,
25
- meshCopySize[1] = texture.image.height,
26
- meshCopySize
27
- )
28
- );
29
- meshImage.source = null;
30
- meshTarget.texture = null;
31
- texture.uploaded = texture.image;
32
- }
1
+ import { meshImage } from '../globals/meshImage.js';
2
+ import { meshTarget } from '../globals/meshTarget.js';
3
+ import { meshCopySize } from '../globals/meshCopySize.js';
4
+
5
+ /**
6
+ * Upload a mesh texture's image if it has changed since the previous upload.
7
+ *
8
+ * @param {GPUDevice} device Device owning the texture.
9
+ * @param {Object} texture Texture state containing its image and flip setting.
10
+ */
11
+ export function uploadMeshTexture(device, texture) {
12
+ if (texture.uploaded === texture.image) return;
13
+ device.queue.copyExternalImageToTexture(
14
+ (
15
+ meshImage.source = texture.image,
16
+ meshImage.flipY = Boolean(texture.flipY),
17
+ meshImage
18
+ ),
19
+ (
20
+ meshTarget.texture = texture.texture,
21
+ meshTarget
22
+ ),
23
+ (
24
+ meshCopySize[0] = texture.image.width,
25
+ meshCopySize[1] = texture.image.height,
26
+ meshCopySize
27
+ )
28
+ );
29
+ meshImage.source = null;
30
+ meshTarget.texture = null;
31
+ texture.uploaded = texture.image;
32
+ }