@cesium/engine 26.1.0 → 26.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (325) hide show
  1. package/Build/ThirdParty/Workers/zip-web-worker.js +764 -520
  2. package/Build/Workers/{chunk-HS6AD4P2.js → chunk-2DKJSPYF.js} +14 -14
  3. package/Build/Workers/{chunk-QVLAFFJY.js → chunk-2PWVICP6.js} +1 -1
  4. package/Build/Workers/{chunk-ILME5BXA.js → chunk-2YY724ZX.js} +8 -8
  5. package/Build/Workers/{chunk-ENNFMWDW.js → chunk-4DMAXPKB.js} +12 -12
  6. package/Build/Workers/{chunk-CDJDJ5LK.js → chunk-4LRFYRBX.js} +2 -2
  7. package/Build/Workers/{chunk-76FDC45O.js → chunk-5JCZHJUU.js} +13 -13
  8. package/Build/Workers/{chunk-5LSOO2KD.js → chunk-5KG7KDDW.js} +7 -7
  9. package/Build/Workers/{chunk-A6X24AZI.js → chunk-6BSNYZZG.js} +5 -5
  10. package/Build/Workers/{chunk-IGAZBTFZ.js → chunk-6R6SGKYN.js} +6 -6
  11. package/Build/Workers/{chunk-SS5ABQGY.js → chunk-6V2KDEHL.js} +4 -4
  12. package/Build/Workers/{chunk-ZMBHFYOX.js → chunk-75BC2IHI.js} +7 -7
  13. package/Build/Workers/{chunk-LGNDTZVX.js → chunk-7SESBH2I.js} +4 -4
  14. package/Build/Workers/{chunk-CLCTQVVL.js → chunk-7WXBTNRV.js} +8 -8
  15. package/Build/Workers/{chunk-WBSY7HDY.js → chunk-A7SMPV6B.js} +12 -12
  16. package/Build/Workers/{chunk-CEEZE3YZ.js → chunk-ATSXKJ3L.js} +7 -7
  17. package/Build/Workers/{chunk-AHWAZRBV.js → chunk-B4AVL7VI.js} +1 -1
  18. package/Build/Workers/{chunk-6HK6IXK2.js → chunk-B7Q2WF6Q.js} +4 -4
  19. package/Build/Workers/{chunk-YKU2Q3A2.js → chunk-BNDSDQ7D.js} +9 -12
  20. package/Build/Workers/{chunk-R4FPNAZ2.js → chunk-CKK6CUXK.js} +9 -9
  21. package/Build/Workers/{chunk-FCP2QY4G.js → chunk-COKOYTRS.js} +5 -5
  22. package/Build/Workers/{chunk-7D2HZKH7.js → chunk-CQ4TZXAT.js} +7 -7
  23. package/Build/Workers/{chunk-TVZD72WJ.js → chunk-DKSANM4A.js} +12 -12
  24. package/Build/Workers/{chunk-FDK4K5IA.js → chunk-DZK34ZVD.js} +1 -1
  25. package/Build/Workers/{chunk-N7CCOFLX.js → chunk-E7G32DWL.js} +1 -1
  26. package/Build/Workers/{chunk-XDWCTQCZ.js → chunk-EDETO6NY.js} +2 -2
  27. package/Build/Workers/{chunk-2EFYUSUY.js → chunk-F34TJJLA.js} +16 -16
  28. package/Build/Workers/{chunk-GXWQZBAI.js → chunk-GLHDTTTO.js} +2 -2
  29. package/Build/Workers/{chunk-T5QBPLE3.js → chunk-GS7RY2DH.js} +11 -11
  30. package/Build/Workers/{chunk-C7JQVRLM.js → chunk-HDD3RFLT.js} +25 -3
  31. package/Build/Workers/{chunk-E7NZJOK7.js → chunk-HDPNFEPP.js} +121 -93
  32. package/Build/Workers/{chunk-VAL7DYNR.js → chunk-JBJ6BRIM.js} +4 -4
  33. package/Build/Workers/{chunk-XQ3SKCMM.js → chunk-JKTWW7IO.js} +5 -5
  34. package/Build/Workers/{chunk-UVO6COT2.js → chunk-JL4NWWQY.js} +5 -5
  35. package/Build/Workers/{chunk-DBD5WWG2.js → chunk-JMUUAW4X.js} +10 -10
  36. package/Build/Workers/{chunk-UEY73NRN.js → chunk-KBGAHN5R.js} +1 -1
  37. package/Build/Workers/{chunk-LD64RPYV.js → chunk-KEWK6VZL.js} +12 -12
  38. package/Build/Workers/{chunk-JW6OZT4R.js → chunk-L73K5UPP.js} +10 -10
  39. package/Build/Workers/{chunk-DIGUUD6G.js → chunk-LL2SGJYH.js} +6 -6
  40. package/Build/Workers/{chunk-XLXSDIP5.js → chunk-LYJUL4XQ.js} +6 -6
  41. package/Build/Workers/{chunk-SM2CDCYF.js → chunk-M6W46OAP.js} +7 -7
  42. package/Build/Workers/{chunk-EHTS2YPT.js → chunk-MDDKCLMF.js} +17 -17
  43. package/Build/Workers/{chunk-FGQFQHN5.js → chunk-MUW4DJV7.js} +18 -18
  44. package/Build/Workers/{chunk-HHV3MCGV.js → chunk-N5YK44FS.js} +5 -5
  45. package/Build/Workers/{chunk-RG4F5R57.js → chunk-NZQUP52G.js} +9 -9
  46. package/Build/Workers/{chunk-B4CQSLZJ.js → chunk-PKZA44LH.js} +6 -6
  47. package/Build/Workers/{chunk-OBEU25PI.js → chunk-Q2JS5LCB.js} +17 -17
  48. package/Build/Workers/{chunk-KGXSYGBG.js → chunk-QTAEVUED.js} +13 -13
  49. package/Build/Workers/{chunk-NIWITKQK.js → chunk-SEJIXZZ4.js} +11 -11
  50. package/Build/Workers/{chunk-SGRGNDOD.js → chunk-SL2HCFYW.js} +10 -10
  51. package/Build/Workers/{chunk-SF6K72D7.js → chunk-SLHK3KAR.js} +5 -5
  52. package/Build/Workers/{chunk-JKXV6PG5.js → chunk-UZY5XRL2.js} +1 -1
  53. package/Build/Workers/{chunk-LNSQVXFH.js → chunk-VRECSMG3.js} +2 -2
  54. package/Build/Workers/{chunk-A3O6EDBK.js → chunk-X27HKF5E.js} +2 -2
  55. package/Build/Workers/{chunk-7KVKHY7O.js → chunk-XBY3354M.js} +6 -6
  56. package/Build/Workers/{chunk-GSWMAFTE.js → chunk-XRZCS3HE.js} +23 -16
  57. package/Build/Workers/{chunk-6YR6JBMY.js → chunk-XSIUYAT6.js} +2 -2
  58. package/Build/Workers/{chunk-ZSGUV73H.js → chunk-Z2DW5NM2.js} +6 -6
  59. package/Build/Workers/combineGeometry.js +24 -24
  60. package/Build/Workers/createBoxGeometry.js +18 -18
  61. package/Build/Workers/createBoxOutlineGeometry.js +16 -16
  62. package/Build/Workers/createCircleGeometry.js +26 -26
  63. package/Build/Workers/createCircleOutlineGeometry.js +19 -19
  64. package/Build/Workers/createCoplanarPolygonGeometry.js +35 -35
  65. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +31 -31
  66. package/Build/Workers/createCorridorGeometry.js +31 -33
  67. package/Build/Workers/createCorridorOutlineGeometry.js +29 -31
  68. package/Build/Workers/createCylinderGeometry.js +20 -20
  69. package/Build/Workers/createCylinderOutlineGeometry.js +18 -18
  70. package/Build/Workers/createEllipseGeometry.js +26 -26
  71. package/Build/Workers/createEllipseOutlineGeometry.js +19 -19
  72. package/Build/Workers/createEllipsoidGeometry.js +19 -19
  73. package/Build/Workers/createEllipsoidOutlineGeometry.js +18 -18
  74. package/Build/Workers/createFrustumGeometry.js +18 -18
  75. package/Build/Workers/createFrustumOutlineGeometry.js +18 -18
  76. package/Build/Workers/createGeometry.js +24 -24
  77. package/Build/Workers/createGroundPolylineGeometry.js +24 -24
  78. package/Build/Workers/createPlaneGeometry.js +16 -16
  79. package/Build/Workers/createPlaneOutlineGeometry.js +15 -15
  80. package/Build/Workers/createPolygonGeometry.js +34 -34
  81. package/Build/Workers/createPolygonOutlineGeometry.js +31 -31
  82. package/Build/Workers/createPolylineGeometry.js +26 -26
  83. package/Build/Workers/createPolylineVolumeGeometry.js +31 -31
  84. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +27 -27
  85. package/Build/Workers/createRectangleGeometry.js +27 -27
  86. package/Build/Workers/createRectangleOutlineGeometry.js +21 -21
  87. package/Build/Workers/createSimplePolylineGeometry.js +24 -24
  88. package/Build/Workers/createSphereGeometry.js +19 -19
  89. package/Build/Workers/createSphereOutlineGeometry.js +18 -18
  90. package/Build/Workers/createTaskProcessorWorker.js +3 -3
  91. package/Build/Workers/createVectorTileClampedPolylines.js +14 -14
  92. package/Build/Workers/createVectorTileGeometries.js +24 -24
  93. package/Build/Workers/createVectorTilePoints.js +13 -13
  94. package/Build/Workers/createVectorTilePolygons.js +22 -22
  95. package/Build/Workers/createVectorTilePolylines.js +14 -14
  96. package/Build/Workers/createVerticesFromCesium3DTilesTerrain.js +25 -25
  97. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +22 -22
  98. package/Build/Workers/createVerticesFromHeightmap.js +22 -22
  99. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +20 -20
  100. package/Build/Workers/createWallGeometry.js +24 -24
  101. package/Build/Workers/createWallOutlineGeometry.js +24 -24
  102. package/Build/Workers/decodeDraco.js +10 -10
  103. package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +5 -5
  104. package/Build/Workers/decodeI3S.js +10 -10
  105. package/Build/Workers/gaussianSplatSorter.js +4 -4
  106. package/Build/Workers/gaussianSplatTextureGenerator.js +4 -4
  107. package/Build/Workers/incrementallyBuildTerrainPicker.js +10 -10
  108. package/Build/Workers/transcodeKTX2.js +6 -6
  109. package/Build/Workers/transferTypedArrayTest.js +1 -1
  110. package/Build/Workers/upsampleQuantizedTerrainMesh.js +22 -22
  111. package/Build/Workers/upsampleVerticesFromCesium3DTilesTerrain.js +25 -25
  112. package/Source/Core/ArcGISTiledElevationTerrainProvider.js +1 -5
  113. package/Source/Core/BoundingSphere.js +0 -3
  114. package/Source/Core/Cesium3DTilesTerrainGeometryProcessor.js +3 -4
  115. package/Source/Core/CoplanarPolygonGeometry.js +2 -2
  116. package/Source/Core/CorridorGeometry.js +2 -4
  117. package/Source/Core/CorridorOutlineGeometry.js +1 -3
  118. package/Source/Core/EarthOrientationParameters.js +2 -2
  119. package/Source/Core/EllipseGeometryLibrary.js +2 -2
  120. package/Source/Core/EllipsoidGeodesic.js +3 -3
  121. package/Source/Core/EllipsoidRhumbLine.js +1 -1
  122. package/Source/Core/GroundPolylineGeometry.js +2 -2
  123. package/Source/Core/Heap.js +1 -1
  124. package/Source/Core/HermitePolynomialApproximation.js +215 -179
  125. package/Source/Core/InterpolationAlgorithm.js +1 -0
  126. package/Source/Core/Ion.js +1 -1
  127. package/Source/Core/IonResource.js +5 -0
  128. package/Source/Core/IonSnapGeometryType.js +59 -0
  129. package/Source/Core/IonSnapHeat.js +33 -0
  130. package/Source/Core/IonSnapMode.js +45 -0
  131. package/Source/Core/IonSnapParentGeometryType.js +52 -0
  132. package/Source/Core/IonSnapService.js +369 -0
  133. package/Source/Core/JulianDate.js +1 -1
  134. package/Source/Core/LagrangePolynomialApproximation.js +55 -52
  135. package/Source/Core/LinearApproximation.js +69 -66
  136. package/Source/Core/Math.js +59 -0
  137. package/Source/Core/Matrix2.js +2 -2
  138. package/Source/Core/Matrix3.js +2 -2
  139. package/Source/Core/OrthographicFrustum.js +1 -1
  140. package/Source/Core/PerspectiveFrustum.js +1 -1
  141. package/Source/Core/PolygonGeometry.js +2 -2
  142. package/Source/Core/PolygonGeometryLibrary.js +1 -1
  143. package/Source/Core/PolygonOutlineGeometry.js +1 -1
  144. package/Source/Core/PolylineGeometry.js +1 -1
  145. package/Source/Core/PolylineVolumeGeometryLibrary.js +1 -1
  146. package/Source/Core/Rectangle.js +7 -1
  147. package/Source/Core/RectangleOutlineGeometry.js +1 -1
  148. package/Source/Core/SimplePolylineGeometry.js +1 -1
  149. package/Source/Core/SnapService.js +63 -0
  150. package/Source/Core/TerrainEncoding.js +2 -2
  151. package/Source/Core/TerrainPicker.js +179 -168
  152. package/Source/Core/TimeIntervalCollection.js +1 -3
  153. package/Source/Core/Tipsify.js +1 -1
  154. package/Source/Core/Transforms.js +5 -1
  155. package/Source/Core/VectorPipeline.js +1211 -0
  156. package/Source/Core/VectorProvider.js +669 -0
  157. package/Source/Core/WallOutlineGeometry.js +1 -1
  158. package/Source/Core/getTimestamp.js +4 -2
  159. package/Source/DataSources/CompositeEntityCollection.js +0 -1
  160. package/Source/DataSources/CzmlDataSource.js +2 -0
  161. package/Source/DataSources/DataSourceDisplay.js +1 -1
  162. package/Source/DataSources/GeoJsonDataSource.js +0 -1
  163. package/Source/DataSources/GeometryVisualizer.js +1 -1
  164. package/Source/DataSources/KmlDataSource.js +1 -2
  165. package/Source/DataSources/PolylineVisualizer.js +1 -1
  166. package/Source/DataSources/StaticOutlineGeometryBatch.js +1 -1
  167. package/Source/Renderer/AutomaticUniforms.js +67 -2
  168. package/Source/Renderer/Context.js +9 -3
  169. package/Source/Renderer/DrawCommand.js +22 -0
  170. package/Source/Renderer/Framebuffer.js +4 -0
  171. package/Source/Renderer/Pass.js +11 -10
  172. package/Source/Renderer/ShaderBuilder.js +1 -1
  173. package/Source/Renderer/Texture.js +11 -0
  174. package/Source/Renderer/UniformState.js +54 -1
  175. package/Source/Renderer/VertexArray.js +0 -1
  176. package/Source/Scene/ArcGisMapServerImageryProvider.js +0 -5
  177. package/Source/Scene/ArcGisMapService.js +1 -1
  178. package/Source/Scene/Billboard.js +2 -1
  179. package/Source/Scene/BillboardCollection.js +7 -3
  180. package/Source/Scene/BufferPointCollection.js +4 -7
  181. package/Source/Scene/BufferPolygonCollection.js +56 -27
  182. package/Source/Scene/BufferPolylineCollection.js +61 -8
  183. package/Source/Scene/BufferPolylineMaterial.js +6 -5
  184. package/Source/Scene/BufferPrimitiveCollection.js +226 -34
  185. package/Source/Scene/Camera.js +71 -5
  186. package/Source/Scene/Cesium3DTile.js +12 -0
  187. package/Source/Scene/Cesium3DTileset.js +62 -9
  188. package/Source/Scene/Cesium3DTilesetBaseTraversal.js +15 -3
  189. package/Source/Scene/Cesium3DTilesetCache.js +15 -0
  190. package/Source/Scene/ClippingPlaneCollection.js +2 -2
  191. package/Source/Scene/ClippingPolygon.js +154 -100
  192. package/Source/Scene/ClippingPolygonCollection.js +352 -694
  193. package/Source/Scene/Controllers/Controller.js +63 -0
  194. package/Source/Scene/Controllers/ControllerHost.js +78 -0
  195. package/Source/Scene/Controllers/HybridScreenSpacePanCameraController.js +106 -0
  196. package/Source/Scene/Controllers/MouseButton.js +32 -0
  197. package/Source/Scene/Controllers/ScreenSpaceElevatorCameraController.js +295 -0
  198. package/Source/Scene/Controllers/ScreenSpaceInputBindings.js +154 -0
  199. package/Source/Scene/Controllers/ScreenSpaceMapCameraController.js +310 -0
  200. package/Source/Scene/Controllers/ScreenSpaceTiltOrbitCameraController.js +642 -0
  201. package/Source/Scene/Controllers/ScreenSpaceZoomCameraController.js +431 -0
  202. package/Source/Scene/Controllers/defaultPickWorldPosition.js +84 -0
  203. package/Source/Scene/CreditDisplay.js +62 -0
  204. package/Source/Scene/DerivedCommand.js +94 -0
  205. package/Source/Scene/EdgeFramebuffer.js +1 -5
  206. package/Source/Scene/FrameState.js +17 -0
  207. package/Source/Scene/GeoJsonPrimitive.js +114 -24
  208. package/Source/Scene/Globe.js +20 -0
  209. package/Source/Scene/GlobeDepth.js +27 -1
  210. package/Source/Scene/GlobeSurfaceShaderSet.js +42 -53
  211. package/Source/Scene/GlobeSurfaceTile.js +61 -10
  212. package/Source/Scene/GlobeSurfaceTileProvider.js +351 -26
  213. package/Source/Scene/GltfLoader.js +88 -9
  214. package/Source/Scene/GltfSpzLoader.js +1 -1
  215. package/Source/Scene/GltfVertexBufferLoader.js +6 -3
  216. package/Source/Scene/HeightReference.js +1 -1
  217. package/Source/Scene/I3SDataProvider.js +1 -1
  218. package/Source/Scene/I3SLayer.js +1 -1
  219. package/Source/Scene/I3SNode.js +2 -2
  220. package/Source/Scene/ImageryLayerCollection.js +188 -4
  221. package/Source/Scene/IonImageryProvider.js +1 -5
  222. package/Source/Scene/Label.js +4 -4
  223. package/Source/Scene/LabelCollection.js +1 -1
  224. package/Source/Scene/MVTDataProvider.js +11 -0
  225. package/Source/Scene/Model/B3dmLoader.js +1 -2
  226. package/Source/Scene/Model/EdgeVisibilityPipelineStage.js +10 -8
  227. package/Source/Scene/Model/I3dmLoader.js +1 -1
  228. package/Source/Scene/Model/InstancingPipelineStage.js +4 -7
  229. package/Source/Scene/Model/MaterialPipelineStage.js +124 -1
  230. package/Source/Scene/Model/Model.js +250 -26
  231. package/Source/Scene/Model/Model3DTileContent.js +5 -0
  232. package/Source/Scene/Model/ModelClippingPlanesPipelineStage.js +28 -1
  233. package/Source/Scene/Model/ModelClippingPolygonsPipelineStage.js +54 -19
  234. package/Source/Scene/Model/ModelDrawCommand.js +160 -16
  235. package/Source/Scene/Model/ModelDrawCommands.js +4 -0
  236. package/Source/Scene/Model/ModelRenderResources.js +2 -3
  237. package/Source/Scene/Model/ModelSceneGraph.js +31 -1
  238. package/Source/Scene/Model/ModelVectorLookupPipelineStage.js +205 -0
  239. package/Source/Scene/Model/PickingPipelineStage.js +33 -0
  240. package/Source/Scene/Model/PrimitiveRenderResources.js +24 -0
  241. package/Source/Scene/ModelComponents.js +71 -0
  242. package/Source/Scene/Picking.js +16 -5
  243. package/Source/Scene/PlanarFillIdFramebuffer.js +172 -0
  244. package/Source/Scene/PntsParser.js +0 -1
  245. package/Source/Scene/PolylineCollection.js +1 -1
  246. package/Source/Scene/PostProcessStage.js +26 -5
  247. package/Source/Scene/ResourceCache.js +7 -4
  248. package/Source/Scene/ResourceCacheKey.js +16 -13
  249. package/Source/Scene/Scene.js +258 -6
  250. package/Source/Scene/ScreenSpaceCameraController.js +1 -2
  251. package/Source/Scene/ShadowMap.js +9 -3
  252. package/Source/Scene/ShadowMapShader.js +50 -2
  253. package/Source/Scene/SnapFramebuffer.js +121 -0
  254. package/Source/Scene/Snapping.js +241 -0
  255. package/Source/Scene/TerrainFillMesh.js +3 -2
  256. package/Source/Scene/UrlTemplate3DTilesDataProvider.js +13 -2
  257. package/Source/Scene/Vector3DTileContent.js +2 -3
  258. package/Source/Scene/VectorGltf3DTileContent.js +31 -3
  259. package/Source/Scene/View.js +10 -8
  260. package/Source/Scene/VoxelTraversal.js +1 -1
  261. package/Source/Scene/WebMapServiceImageryProvider.js +5 -1
  262. package/Source/Scene/WebMapTileServiceImageryProvider.js +6 -1
  263. package/Source/Scene/createElevationBandMaterial.js +1 -1
  264. package/Source/Scene/renderBufferPointCollection.js +1 -2
  265. package/Source/Scene/renderBufferPolygonCollection.js +1 -2
  266. package/Source/Scene/renderBufferPolylineCollection.js +6 -3
  267. package/Source/Shaders/BufferPolylineMaterialVS.glsl +14 -2
  268. package/Source/Shaders/BufferPolylineMaterialVS.js +14 -2
  269. package/Source/Shaders/Builtin/Constants/passCesium3DTile.glsl +1 -1
  270. package/Source/Shaders/Builtin/Constants/passCesium3DTile.js +1 -1
  271. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassification.glsl +1 -1
  272. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassification.js +1 -1
  273. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassificationIgnoreShow.glsl +1 -1
  274. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassificationIgnoreShow.js +1 -1
  275. package/Source/Shaders/Builtin/Constants/passCesium3DTilePlanarFillId.glsl +9 -0
  276. package/Source/Shaders/Builtin/Constants/passCesium3DTilePlanarFillId.js +11 -0
  277. package/Source/Shaders/Builtin/Constants/passClassification.glsl +1 -1
  278. package/Source/Shaders/Builtin/Constants/passClassification.js +1 -1
  279. package/Source/Shaders/Builtin/Constants/passGaussianSplats.glsl +1 -1
  280. package/Source/Shaders/Builtin/Constants/passGaussianSplats.js +1 -1
  281. package/Source/Shaders/Builtin/Constants/passOpaque.glsl +1 -1
  282. package/Source/Shaders/Builtin/Constants/passOpaque.js +1 -1
  283. package/Source/Shaders/Builtin/Constants/passTranslucent.glsl +1 -1
  284. package/Source/Shaders/Builtin/Constants/passTranslucent.js +1 -1
  285. package/Source/Shaders/Builtin/Constants/passVoxels.glsl +1 -1
  286. package/Source/Shaders/Builtin/Constants/passVoxels.js +1 -1
  287. package/Source/Shaders/Builtin/CzmBuiltins.js +4 -4
  288. package/Source/Shaders/Builtin/Functions/eyeToCartographicDelta.glsl +74 -0
  289. package/Source/Shaders/Builtin/Functions/eyeToCartographicDelta.js +76 -0
  290. package/Source/Shaders/GlobeFS.glsl +20 -14
  291. package/Source/Shaders/GlobeFS.js +20 -14
  292. package/Source/Shaders/GlobeVS.glsl +0 -32
  293. package/Source/Shaders/GlobeVS.js +0 -32
  294. package/Source/Shaders/Materials/PolylineGlowMaterial.glsl +1 -1
  295. package/Source/Shaders/Materials/PolylineGlowMaterial.js +1 -1
  296. package/Source/Shaders/Model/MaterialStageFS.glsl +8 -2
  297. package/Source/Shaders/Model/MaterialStageFS.js +8 -2
  298. package/Source/Shaders/Model/ModelClippingPolygonsStageFS.glsl +15 -3
  299. package/Source/Shaders/Model/ModelClippingPolygonsStageFS.js +15 -3
  300. package/Source/Shaders/Model/ModelClippingPolygonsStageVS.glsl +20 -24
  301. package/Source/Shaders/Model/ModelClippingPolygonsStageVS.js +20 -24
  302. package/Source/Shaders/Model/ModelFS.glsl +109 -0
  303. package/Source/Shaders/Model/ModelFS.js +109 -0
  304. package/Source/Shaders/Model/ModelVS.glsl +7 -2
  305. package/Source/Shaders/Model/ModelVS.js +7 -2
  306. package/Source/Shaders/Model/ModelVectorLookupStageFS.glsl +6 -0
  307. package/Source/Shaders/Model/ModelVectorLookupStageFS.js +8 -0
  308. package/Source/Shaders/Model/ModelVectorLookupStageVS.glsl +15 -0
  309. package/Source/Shaders/Model/ModelVectorLookupStageVS.js +17 -0
  310. package/Source/Shaders/Model/VerticalExaggerationStageVS.glsl +9 -10
  311. package/Source/Shaders/Model/VerticalExaggerationStageVS.js +9 -11
  312. package/Source/Shaders/VectorCommon.glsl +305 -0
  313. package/Source/Shaders/VectorCommon.js +307 -0
  314. package/Source/ThirdParty/Workers/zip-web-worker.js +1 -1
  315. package/Source/ThirdParty/zip-module.wasm +0 -0
  316. package/Source/Widget/CesiumWidget.js +30 -0
  317. package/index.d.ts +1326 -65
  318. package/index.js +179 -155
  319. package/package.json +6 -6
  320. package/Source/Shaders/Builtin/Functions/clipPolygons.glsl +0 -37
  321. package/Source/Shaders/Builtin/Functions/clipPolygons.js +0 -39
  322. package/Source/Shaders/Builtin/Functions/unpackClippingExtents.glsl +0 -14
  323. package/Source/Shaders/Builtin/Functions/unpackClippingExtents.js +0 -15
  324. package/Source/Shaders/PolygonSignedDistanceFS.glsl +0 -131
  325. package/Source/Shaders/PolygonSignedDistanceFS.js +0 -132
@@ -40,6 +40,7 @@ import ClippingPlaneCollection from "./ClippingPlaneCollection.js";
40
40
  import ClippingPolygonCollection from "./ClippingPolygonCollection.js";
41
41
  import DepthFunction from "./DepthFunction.js";
42
42
  import GlobeSurfaceTile from "./GlobeSurfaceTile.js";
43
+ import HeightReference from "./HeightReference.js";
43
44
  import ImageryLayer from "./ImageryLayer.js";
44
45
  import ImageryState from "./ImageryState.js";
45
46
  import PerInstanceColorAppearance from "./PerInstanceColorAppearance.js";
@@ -63,6 +64,7 @@ import TileSelectionResult from "./TileSelectionResult.js";
63
64
  /** @import TerrainMesh from "../Core/TerrainMesh.js"; */
64
65
  /** @import TerrainProvider from "../Core/TerrainProvider.js"; */
65
66
  /** @import TilingScheme from "../Core/TilingScheme.js"; */
67
+ /** @import VectorProvider, { VectorTileData } from "../Core/VectorProvider.js"; */
66
68
  /** @import { GlobeSurfaceShaderSetOptions } from "./GlobeSurfaceShaderSet.js"; */
67
69
 
68
70
  /**
@@ -77,6 +79,7 @@ class GlobeSurfaceTileProvider {
77
79
  * @param {TerrainProvider} options.terrainProvider The terrain provider that describes the surface geometry.
78
80
  * @param {ImageryLayerCollection} options.imageryLayers The collection of imagery layers describing the shading of the surface.
79
81
  * @param {GlobeSurfaceShaderSet} options.surfaceShaderSet The set of shaders used to render the surface.
82
+ * @param {VectorProvider} options.vectorProvider
80
83
  */
81
84
  constructor(options) {
82
85
  //>>includeStart('debug', pragmas.debug);
@@ -89,6 +92,8 @@ class GlobeSurfaceTileProvider {
89
92
  throw new DeveloperError("options.imageryLayers is required.");
90
93
  } else if (!defined(options.surfaceShaderSet)) {
91
94
  throw new DeveloperError("options.surfaceShaderSet is required.");
95
+ } else if (!defined(options.vectorProvider)) {
96
+ throw new DeveloperError("options.vectorProvider is required.");
92
97
  }
93
98
  //>>includeEnd('debug');
94
99
 
@@ -131,6 +136,7 @@ class GlobeSurfaceTileProvider {
131
136
 
132
137
  this._quadtree = undefined;
133
138
  this._terrainProvider = options.terrainProvider;
139
+ this._vectorProvider = options.vectorProvider;
134
140
  this._imageryLayers = options.imageryLayers;
135
141
  this._surfaceShaderSet = options.surfaceShaderSet;
136
142
 
@@ -204,6 +210,12 @@ class GlobeSurfaceTileProvider {
204
210
  */
205
211
  this._clippingPolygons = undefined;
206
212
 
213
+ this._clippingPolygonsDirty = false;
214
+
215
+ this._removeClippingPolygonAdded = undefined;
216
+
217
+ this._removeClippingPolygonRemoved = undefined;
218
+
207
219
  /**
208
220
  * A property specifying a {@link Rectangle} used to selectively limit terrain and imagery rendering.
209
221
  * @type {Rectangle}
@@ -311,6 +323,11 @@ class GlobeSurfaceTileProvider {
311
323
  }
312
324
  }
313
325
 
326
+ /** @type {VectorProvider} */
327
+ get vectorProvider() {
328
+ return this._vectorProvider;
329
+ }
330
+
314
331
  /**
315
332
  * The {@link ClippingPlaneCollection} used to selectively disable rendering.
316
333
  *
@@ -338,7 +355,33 @@ class GlobeSurfaceTileProvider {
338
355
  }
339
356
 
340
357
  set clippingPolygons(value) {
358
+ if (value === this._clippingPolygons) {
359
+ return;
360
+ }
361
+
341
362
  ClippingPolygonCollection.setOwner(value, this, "_clippingPolygons");
363
+
364
+ // First, remove the previous listeners if they exist
365
+ this._removeClippingPolygonAdded =
366
+ this._removeClippingPolygonAdded && this._removeClippingPolygonAdded();
367
+ this._removeClippingPolygonRemoved =
368
+ this._removeClippingPolygonRemoved &&
369
+ this._removeClippingPolygonRemoved();
370
+
371
+ this._clippingPolygonsDirty = true;
372
+
373
+ if (!defined(value)) {
374
+ return;
375
+ }
376
+
377
+ const markDirty = () => {
378
+ this._clippingPolygonsDirty = true;
379
+ };
380
+
381
+ this._removeClippingPolygonAdded =
382
+ value.polygonAdded.addEventListener(markDirty);
383
+ this._removeClippingPolygonRemoved =
384
+ value.polygonRemoved.addEventListener(markDirty);
342
385
  }
343
386
 
344
387
  /**
@@ -371,6 +414,38 @@ class GlobeSurfaceTileProvider {
371
414
  );
372
415
  }
373
416
 
417
+ // Record regions dirtied by changed collections, re-bake overlapping
418
+ // tiles, and build vector data for new surface tiles.
419
+ const vectorProvider = this._vectorProvider;
420
+ vectorProvider.minimumTileScreenPixels = minimumTileScreenPixels(this);
421
+ vectorProvider.update(frameState.frameNumber);
422
+ this._quadtree.forEachRenderedTile(
423
+ /** @param {QuadtreeTile} tile */
424
+ (tile) => {
425
+ const surfaceTile = /** @type {GlobeSurfaceTile} */ (tile.data);
426
+
427
+ if (defined(surfaceTile.vectorData)) {
428
+ surfaceTile.vectorData = vectorProvider.updateTileData(
429
+ tile.x,
430
+ tile.y,
431
+ tile.level,
432
+ frameState.context,
433
+ surfaceTile.vectorData,
434
+ HeightReference.CLAMP_TO_TERRAIN,
435
+ );
436
+ } else {
437
+ surfaceTile.vectorData = vectorProvider.requestTileData(
438
+ tile.x,
439
+ tile.y,
440
+ tile.level,
441
+ frameState.context,
442
+ HeightReference.CLAMP_TO_TERRAIN,
443
+ );
444
+ }
445
+ },
446
+ );
447
+ vectorProvider.makeClean();
448
+
374
449
  // Add credits for terrain and imagery providers.
375
450
  updateCredits(this, frameState);
376
451
 
@@ -408,8 +483,6 @@ class GlobeSurfaceTileProvider {
408
483
  if (defined(clippingPolygons) && clippingPolygons.enabled) {
409
484
  // @ts-expect-error Missing types.
410
485
  clippingPolygons.update(frameState);
411
- // @ts-expect-error Missing types.
412
- clippingPolygons.queueCommands(frameState);
413
486
  }
414
487
 
415
488
  this._usedDrawCommands = 0;
@@ -516,6 +589,10 @@ class GlobeSurfaceTileProvider {
516
589
  );
517
590
  }
518
591
 
592
+ if (this._clippingPolygonsDirty) {
593
+ releaseClippingPolygonData(this);
594
+ }
595
+
519
596
  // Add the tile render commands to the command list, sorted by texture count.
520
597
  const tilesToRenderByTextureCount = this._tilesToRenderByTextureCount;
521
598
  for (
@@ -536,6 +613,7 @@ class GlobeSurfaceTileProvider {
536
613
  ) {
537
614
  const tile = tilesToRender[tileIndex];
538
615
  const surfaceTile = /** @type {GlobeSurfaceTile} */ (tile.data);
616
+ updateTileClippingPolygonData(this, tile, surfaceTile, frameState);
539
617
  const tileBoundingRegion = surfaceTile.tileBoundingRegion;
540
618
  addDrawCommandsForTile(this, tile, frameState);
541
619
  frameState.minimumTerrainHeight = Math.min(
@@ -555,7 +633,16 @@ class GlobeSurfaceTileProvider {
555
633
  // Add the tile pick commands from the tiles drawn last frame.
556
634
  const drawCommands = this._drawCommands;
557
635
  for (let i = 0, length = this._usedDrawCommands; i < length; ++i) {
558
- pushCommand(drawCommands[i], frameState);
636
+ const command = drawCommands[i];
637
+ // Pooled commands move between tiles, so a cached pick command may still
638
+ // hold the vertex array of a tile that has since been released.
639
+ command.dirty = true;
640
+ command.derivedCommands.picking = undefined;
641
+ const logDepthCommand = command.derivedCommands.logDepth?.command;
642
+ if (defined(logDepthCommand)) {
643
+ logDepthCommand.derivedCommands.picking = undefined;
644
+ }
645
+ pushCommand(command, frameState);
559
646
  }
560
647
  }
561
648
 
@@ -609,6 +696,7 @@ class GlobeSurfaceTileProvider {
609
696
  tile,
610
697
  frameState,
611
698
  this.terrainProvider,
699
+ this.vectorProvider,
612
700
  this._imageryLayers,
613
701
  this.quadtree,
614
702
  this._vertexArraysToDestroy,
@@ -635,6 +723,7 @@ class GlobeSurfaceTileProvider {
635
723
  tile,
636
724
  frameState,
637
725
  this.terrainProvider,
726
+ this.vectorProvider,
638
727
  this._imageryLayers,
639
728
  this.quadtree,
640
729
  this._vertexArraysToDestroy,
@@ -1120,8 +1209,7 @@ class GlobeSurfaceTileProvider {
1120
1209
  this._tileProvider = this._tileProvider && this._tileProvider.destroy();
1121
1210
  this._clippingPlanes =
1122
1211
  this._clippingPlanes && this._clippingPlanes.destroy();
1123
- this._clippingPolygons =
1124
- this._clippingPolygons && this._clippingPolygons.destroy();
1212
+ this._clippingPolygons = undefined;
1125
1213
  this._removeLayerAddedListener =
1126
1214
  this._removeLayerAddedListener && this._removeLayerAddedListener();
1127
1215
  this._removeLayerRemovedListener =
@@ -1130,6 +1218,11 @@ class GlobeSurfaceTileProvider {
1130
1218
  this._removeLayerMovedListener && this._removeLayerMovedListener();
1131
1219
  this._removeLayerShownListener =
1132
1220
  this._removeLayerShownListener && this._removeLayerShownListener();
1221
+ this._removeClippingPolygonAdded =
1222
+ this._removeClippingPolygonAdded && this._removeClippingPolygonAdded();
1223
+ this._removeClippingPolygonRemoved =
1224
+ this._removeClippingPolygonRemoved &&
1225
+ this._removeClippingPolygonRemoved();
1133
1226
 
1134
1227
  return destroyObject(this);
1135
1228
  }
@@ -1284,6 +1377,40 @@ class GlobeSurfaceTileProvider {
1284
1377
  }
1285
1378
  }
1286
1379
 
1380
+ const scratchLevelZeroRectangle = new Rectangle();
1381
+
1382
+ /**
1383
+ * Estimates the smallest screen size, in pixels, a rendered tile can have. Screen-space error is
1384
+ * the tile's geometric error projected to the screen, so the tile projects to that error scaled by
1385
+ * their ratio in meters, and refinement holds the error above half the maximum.
1386
+ *
1387
+ * @param {GlobeSurfaceTileProvider} tileProvider
1388
+ * @returns {number}
1389
+ * @private
1390
+ */
1391
+ function minimumTileScreenPixels(tileProvider) {
1392
+ const geometricError = tileProvider.getLevelMaximumGeometricError(0);
1393
+ if (geometricError <= 0.0) {
1394
+ // No terrain provider yet.
1395
+ return tileProvider._vectorProvider.minimumTileScreenPixels;
1396
+ }
1397
+
1398
+ const tilingScheme = tileProvider.tilingScheme;
1399
+ const rectangle = tilingScheme.tileXYToRectangle(
1400
+ 0,
1401
+ 0,
1402
+ 0,
1403
+ scratchLevelZeroRectangle,
1404
+ );
1405
+ const tileWidth = rectangle.width * tilingScheme.ellipsoid.maximumRadius;
1406
+
1407
+ return (
1408
+ ((tileWidth / geometricError) *
1409
+ tileProvider._quadtree.maximumScreenSpaceError) /
1410
+ 2.0
1411
+ );
1412
+ }
1413
+
1287
1414
  function sortTileImageryByLayerIndex(a, b) {
1288
1415
  let aImagery = a.loadingImagery;
1289
1416
  if (!defined(aImagery)) {
@@ -1298,6 +1425,81 @@ function sortTileImageryByLayerIndex(a, b) {
1298
1425
  return aImagery.imageryLayer._layerIndex - bImagery.imageryLayer._layerIndex;
1299
1426
  }
1300
1427
 
1428
+ /**
1429
+ * Releases cached clipping polygon data on all loaded tiles so it is rebuilt
1430
+ * against the current collection, and clears the dirty flag.
1431
+ * @param {GlobeSurfaceTileProvider} tileProvider
1432
+ * @ignore
1433
+ */
1434
+ function releaseClippingPolygonData(tileProvider) {
1435
+ tileProvider._quadtree.forEachLoadedTile(
1436
+ /** @param {QuadtreeTile} tile */
1437
+ function (tile) {
1438
+ const surfaceTile = /** @type {GlobeSurfaceTile} */ (tile.data);
1439
+ if (!defined(surfaceTile?.clippingPolygonData)) {
1440
+ return;
1441
+ }
1442
+
1443
+ ClippingPolygonCollection.releaseRectangleData(
1444
+ surfaceTile.clippingPolygonData,
1445
+ );
1446
+ surfaceTile.clippingPolygonData = undefined;
1447
+ },
1448
+ );
1449
+ tileProvider._clippingPolygonsDirty = false;
1450
+ }
1451
+
1452
+ /**
1453
+ * Builds clipping polygon data for a tile about to be rendered, unless it is
1454
+ * unclipped or its data was already built this frame.
1455
+ * @param {GlobeSurfaceTileProvider} tileProvider
1456
+ * @param {QuadtreeTile} tile
1457
+ * @param {GlobeSurfaceTile} surfaceTile
1458
+ * @param {FrameState} frameState
1459
+ * @ignore
1460
+ */
1461
+ function updateTileClippingPolygonData(
1462
+ tileProvider,
1463
+ tile,
1464
+ surfaceTile,
1465
+ frameState,
1466
+ ) {
1467
+ const clippingPolygons = tileProvider._clippingPolygons;
1468
+ if (
1469
+ !defined(clippingPolygons) ||
1470
+ !clippingPolygons.enabled ||
1471
+ !tile.isClipped ||
1472
+ defined(surfaceTile.clippingPolygonData)
1473
+ ) {
1474
+ return;
1475
+ }
1476
+
1477
+ surfaceTile.clippingPolygonData = clippingPolygons.requestRectangleData(
1478
+ tile.rectangle,
1479
+ frameState.context,
1480
+ );
1481
+ }
1482
+
1483
+ /**
1484
+ * Determines whether a tile is wholly clipped away by inverse clipping. In
1485
+ * inverse mode a clipped tile with no polygon geometry lies entirely outside
1486
+ * every polygon, so all of it is clipped and it should not be drawn.
1487
+ * @param {GlobeSurfaceTileProvider} tileProvider
1488
+ * @param {GlobeSurfaceTile} surfaceTile
1489
+ * @returns {boolean}
1490
+ * @ignore
1491
+ */
1492
+ function isTileClippedAwayByInversePolygons(tileProvider, surfaceTile) {
1493
+ const clippingPolygons = tileProvider._clippingPolygons;
1494
+ return (
1495
+ defined(clippingPolygons) &&
1496
+ clippingPolygons.enabled &&
1497
+ clippingPolygons.length > 0 &&
1498
+ clippingPolygons.inverse &&
1499
+ (surfaceTile.clippingPolygonData?.polygonRings.length ?? 0) === 0
1500
+ );
1501
+ }
1502
+
1301
1503
  /**
1302
1504
  * @param {GlobeSurfaceTileProvider} surface
1303
1505
  * @param {FrameState} frameState
@@ -1869,22 +2071,6 @@ function createTileUniformMap(frameState, globeSurfaceTileProvider) {
1869
2071
  style.alpha = this.properties.clippingPlanesEdgeWidth;
1870
2072
  return style;
1871
2073
  },
1872
- u_clippingDistance: function () {
1873
- const texture =
1874
- globeSurfaceTileProvider._clippingPolygons.clippingTexture;
1875
- if (defined(texture)) {
1876
- return texture;
1877
- }
1878
- return frameState.context.defaultTexture;
1879
- },
1880
- u_clippingExtents: function () {
1881
- // @ts-expect-error Missing types.
1882
- const texture = globeSurfaceTileProvider._clippingPolygons.extentsTexture;
1883
- if (defined(texture)) {
1884
- return texture;
1885
- }
1886
- return frameState.context.defaultTexture;
1887
- },
1888
2074
  u_minimumBrightness: function () {
1889
2075
  return frameState.fog.minimumBrightness;
1890
2076
  },
@@ -1915,6 +2101,78 @@ function createTileUniformMap(frameState, globeSurfaceTileProvider) {
1915
2101
  u_vertexShadowDarkness: function () {
1916
2102
  return this.properties.vertexShadowDarkness;
1917
2103
  },
2104
+ u_vectorSegmentTexture: function () {
2105
+ return (
2106
+ this.properties.vectorSegmentTexture ??
2107
+ frameState.context.defaultTexture
2108
+ );
2109
+ },
2110
+ u_vectorWidthTexture: function () {
2111
+ return (
2112
+ this.properties.vectorWidthTexture ?? frameState.context.defaultTexture
2113
+ );
2114
+ },
2115
+ u_vectorColorTexture: function () {
2116
+ return (
2117
+ this.properties.vectorColorTexture ?? frameState.context.defaultTexture
2118
+ );
2119
+ },
2120
+ u_vectorPickColorTexture: function () {
2121
+ return (
2122
+ this.properties.vectorPickColorTexture ??
2123
+ frameState.context.defaultTexture
2124
+ );
2125
+ },
2126
+ u_vectorSegmentPrimitiveIndicesTexture: function () {
2127
+ return (
2128
+ this.properties.vectorSegmentPrimitiveIndicesTexture ??
2129
+ frameState.context.defaultTexture
2130
+ );
2131
+ },
2132
+ u_vectorGridCellIndicesTexture: function () {
2133
+ return (
2134
+ this.properties.vectorGridCellIndicesTexture ??
2135
+ frameState.context.defaultTexture
2136
+ );
2137
+ },
2138
+ u_vectorPolygonEdgeTexture: function () {
2139
+ return (
2140
+ this.properties.vectorPolygonEdgeTexture ??
2141
+ frameState.context.defaultTexture
2142
+ );
2143
+ },
2144
+ u_vectorPolygonEdgePrimitiveIndicesTexture: function () {
2145
+ return (
2146
+ this.properties.vectorPolygonEdgePrimitiveIndicesTexture ??
2147
+ frameState.context.defaultTexture
2148
+ );
2149
+ },
2150
+ u_vectorPolygonGridCellIndicesTexture: function () {
2151
+ return (
2152
+ this.properties.vectorPolygonGridCellIndicesTexture ??
2153
+ frameState.context.defaultTexture
2154
+ );
2155
+ },
2156
+ u_vectorMetersPerUv: function () {
2157
+ return this.properties.vectorMetersPerUv;
2158
+ },
2159
+ u_clippingEdgeTexture: function () {
2160
+ return (
2161
+ this.properties.clippingEdgeTexture ?? frameState.context.defaultTexture
2162
+ );
2163
+ },
2164
+ u_clippingEdgePrimitiveIndicesTexture: function () {
2165
+ return (
2166
+ this.properties.clippingEdgePrimitiveIndicesTexture ??
2167
+ frameState.context.defaultTexture
2168
+ );
2169
+ },
2170
+ u_clippingGridCellIndicesTexture: function () {
2171
+ return (
2172
+ this.properties.clippingGridCellIndicesTexture ??
2173
+ frameState.context.defaultTexture
2174
+ );
2175
+ },
1918
2176
 
1919
2177
  // make a separate object so that changes to the properties are seen on
1920
2178
  // derived commands that combine another uniform map with this one.
@@ -1977,6 +2235,21 @@ function createTileUniformMap(frameState, globeSurfaceTileProvider) {
1977
2235
  undergroundColorAlphaByDistance: new Cartesian4(),
1978
2236
  lambertDiffuseMultiplier: 0.0,
1979
2237
  vertexShadowDarkness: 0.0,
2238
+
2239
+ vectorSegmentTexture: undefined,
2240
+ vectorWidthTexture: undefined,
2241
+ vectorColorTexture: undefined,
2242
+ vectorPickColorTexture: undefined,
2243
+ vectorSegmentPrimitiveIndicesTexture: undefined,
2244
+ vectorGridCellIndicesTexture: undefined,
2245
+ vectorPolygonEdgeTexture: undefined,
2246
+ vectorPolygonEdgePrimitiveIndicesTexture: undefined,
2247
+ vectorPolygonGridCellIndicesTexture: undefined,
2248
+ vectorMetersPerUv: new Cartesian2(),
2249
+
2250
+ clippingEdgeTexture: undefined,
2251
+ clippingEdgePrimitiveIndicesTexture: undefined,
2252
+ clippingGridCellIndicesTexture: undefined,
1980
2253
  },
1981
2254
  };
1982
2255
 
@@ -2216,6 +2489,7 @@ const surfaceShaderSetOptionsScratch = {
2216
2489
  colorToAlpha: undefined,
2217
2490
  hasGeodeticSurfaceNormals: undefined,
2218
2491
  hasExaggeration: undefined,
2492
+ vectorAntialias: undefined,
2219
2493
  };
2220
2494
 
2221
2495
  const defaultUndergroundColor = Color.TRANSPARENT;
@@ -2230,6 +2504,10 @@ const defaultUndergroundColorAlphaByDistance = new NearFarScalar();
2230
2504
  function addDrawCommandsForTile(tileProvider, tile, frameState) {
2231
2505
  const surfaceTile = /** @type {GlobeSurfaceTile} */ (tile.data);
2232
2506
 
2507
+ if (isTileClippedAwayByInversePolygons(tileProvider, surfaceTile)) {
2508
+ return;
2509
+ }
2510
+
2233
2511
  if (!defined(surfaceTile.vertexArray)) {
2234
2512
  if (surfaceTile.fill === undefined) {
2235
2513
  // No fill was created for this tile, probably because this tile is not connected to
@@ -2349,8 +2627,9 @@ function addDrawCommandsForTile(tileProvider, tile, frameState) {
2349
2627
  defined(tileProvider.clippingPolygons) &&
2350
2628
  tileProvider.clippingPolygons.enabled
2351
2629
  ) {
2352
- --maxTextures;
2353
- --maxTextures;
2630
+ // Vector polygon clipping samples three textures: edges, per-edge
2631
+ // primitive indices, and the grid cell index header.
2632
+ maxTextures -= 3;
2354
2633
  }
2355
2634
 
2356
2635
  maxTextures -= globeTranslucencyState.numberOfTextureUniforms;
@@ -2469,6 +2748,8 @@ function addDrawCommandsForTile(tileProvider, tile, frameState) {
2469
2748
  surfaceShaderSetOptions.clippedByBoundaries = surfaceTile.clippedByBoundaries;
2470
2749
  surfaceShaderSetOptions.hasGeodeticSurfaceNormals = hasGeodeticSurfaceNormals;
2471
2750
  surfaceShaderSetOptions.hasExaggeration = hasExaggeration;
2751
+ surfaceShaderSetOptions.vectorAntialias =
2752
+ tileProvider.vectorProvider.antialias;
2472
2753
 
2473
2754
  const tileImageryCollection = surfaceTile.imagery;
2474
2755
  let imageryIndex = 0;
@@ -2916,10 +3197,50 @@ function addDrawCommandsForTile(tileProvider, tile, frameState) {
2916
3197
  uniformMapProperties.clippingPlanesEdgeWidth = clippingPlanes.edgeWidth;
2917
3198
  }
2918
3199
 
3200
+ // update vector collections clamped to terrain
3201
+ const vectorData = surfaceTile.vectorData;
3202
+ if (defined(vectorData)) {
3203
+ uniformMapProperties.vectorSegmentTexture =
3204
+ vectorData.polylineSegmentTexture;
3205
+ uniformMapProperties.vectorWidthTexture = vectorData.widthTexture;
3206
+ uniformMapProperties.vectorColorTexture = vectorData.colorTexture;
3207
+ uniformMapProperties.vectorPickColorTexture = vectorData.pickColorTexture;
3208
+ uniformMapProperties.vectorSegmentPrimitiveIndicesTexture =
3209
+ vectorData.polylineSegmentPrimitiveIndicesTexture;
3210
+ uniformMapProperties.vectorGridCellIndicesTexture =
3211
+ vectorData.polylineGridCellIndicesTexture;
3212
+ uniformMapProperties.vectorPolygonEdgeTexture =
3213
+ vectorData.polygonEdgeTexture;
3214
+ uniformMapProperties.vectorPolygonEdgePrimitiveIndicesTexture =
3215
+ vectorData.polygonEdgePrimitiveIndicesTexture;
3216
+ uniformMapProperties.vectorPolygonGridCellIndicesTexture =
3217
+ vectorData.polygonGridCellIndicesTexture;
3218
+ Cartesian2.clone(
3219
+ vectorData.metersPerUv,
3220
+ uniformMapProperties.vectorMetersPerUv,
3221
+ );
3222
+ }
3223
+
3224
+ const clippingPolygonData = surfaceTile.clippingPolygonData;
3225
+ if (defined(clippingPolygonData)) {
3226
+ uniformMapProperties.clippingEdgeTexture =
3227
+ clippingPolygonData.polygonEdgeTexture;
3228
+ uniformMapProperties.clippingEdgePrimitiveIndicesTexture =
3229
+ clippingPolygonData.polygonEdgePrimitiveIndicesTexture;
3230
+ uniformMapProperties.clippingGridCellIndicesTexture =
3231
+ clippingPolygonData.polygonGridCellIndicesTexture;
3232
+ }
3233
+
2919
3234
  // update clipping polygons
2920
3235
  const clippingPolygons = tileProvider._clippingPolygons;
3236
+ const hasClippingPolygonGeometry =
3237
+ (clippingPolygonData?.polygonRings.length ?? 0) > 0;
2921
3238
  const clippingPolygonsEnabled =
2922
- defined(clippingPolygons) && clippingPolygons.enabled && tile.isClipped;
3239
+ defined(clippingPolygons) &&
3240
+ clippingPolygons.enabled &&
3241
+ clippingPolygons.length > 0 &&
3242
+ tile.isClipped &&
3243
+ hasClippingPolygonGeometry;
2923
3244
 
2924
3245
  surfaceShaderSetOptions.numberOfDayTextures = numberOfDayTextures;
2925
3246
  surfaceShaderSetOptions.applyBrightness = applyBrightness;
@@ -2950,6 +3271,10 @@ function addDrawCommandsForTile(tileProvider, tile, frameState) {
2950
3271
  command.shaderProgram = tileProvider._surfaceShaderSet.getShaderProgram(
2951
3272
  surfaceShaderSetOptions,
2952
3273
  );
3274
+ // Draped vectors are picked through the surface; zero elsewhere keeps the globe unpickable.
3275
+ command.pickId = surfaceTile.vectorData?.show
3276
+ ? "vectorPickColorOver(vec4(0.0))"
3277
+ : undefined;
2953
3278
  command.castShadows = castShadows;
2954
3279
  command.receiveShadows = receiveShadows;
2955
3280
  command.renderState = renderState;
@@ -2969,7 +3294,7 @@ function addDrawCommandsForTile(tileProvider, tile, frameState) {
2969
3294
  }
2970
3295
  }
2971
3296
 
2972
- let boundingVolume = command.boundingVolume;
3297
+ const boundingVolume = command.boundingVolume;
2973
3298
  const orientedBoundingBox = command.orientedBoundingBox;
2974
3299
 
2975
3300
  if (frameState.mode !== SceneMode.SCENE3D) {
@@ -2988,7 +3313,7 @@ function addDrawCommandsForTile(tileProvider, tile, frameState) {
2988
3313
  );
2989
3314
 
2990
3315
  if (frameState.mode === SceneMode.MORPHING) {
2991
- boundingVolume = BoundingSphere.union(
3316
+ BoundingSphere.union(
2992
3317
  // @ts-expect-error Missing types.
2993
3318
  tileBoundingRegion.boundingSphere,
2994
3319
  boundingVolume,