@cesium/engine 26.2.0 → 26.3.1-wasm.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 (393) hide show
  1. package/Build/ThirdParty/Workers/zip-web-worker.js +707 -600
  2. package/Build/Workers/chunk-2P3WKV6V.js +290 -0
  3. package/Build/Workers/{chunk-M6QKXVAU.js → chunk-2U5272QU.js} +17 -17
  4. package/Build/Workers/{chunk-NEFDMMLY.js → chunk-4KCOC6OZ.js} +8 -10
  5. package/Build/Workers/{chunk-SJYSIOEM.js → chunk-5FULJNWY.js} +11 -13
  6. package/Build/Workers/{chunk-NCL22ZUX.js → chunk-65ZF23AQ.js} +1 -1
  7. package/Build/Workers/{chunk-KP5QD7WU.js → chunk-6D5534B7.js} +10 -12
  8. package/Build/Workers/{chunk-FX3VEAIU.js → chunk-6GFMBHBD.js} +19 -19
  9. package/Build/Workers/{chunk-A62YI6S6.js → chunk-6VRGQF3D.js} +4 -4
  10. package/Build/Workers/{chunk-DSGLDRTI.js → chunk-6XUIECFB.js} +4 -6
  11. package/Build/Workers/{chunk-HDL4HOXZ.js → chunk-7KWUH6RK.js} +14 -14
  12. package/Build/Workers/{chunk-UAZUP4I5.js → chunk-7ZBJRQQT.js} +7 -7
  13. package/Build/Workers/{chunk-CRCGE4J4.js → chunk-AEHANE5A.js} +991 -5612
  14. package/Build/Workers/chunk-AUU74SIZ.js +2420 -0
  15. package/Build/Workers/{chunk-ARZICEEP.js → chunk-B6V5NMIE.js} +13 -11
  16. package/Build/Workers/{chunk-76FDC45O.js → chunk-BRQ52ASU.js} +15 -17
  17. package/Build/Workers/{chunk-SA2A2AN5.js → chunk-FVLSQBPH.js} +7 -14
  18. package/Build/Workers/{chunk-CUTRKXUQ.js → chunk-IFKM2GZR.js} +12 -12
  19. package/Build/Workers/{chunk-NSKZ6SBK.js → chunk-KF6OEWVT.js} +17 -17
  20. package/Build/Workers/{chunk-O3DKEX7Q.js → chunk-KOAXSU77.js} +5 -7
  21. package/Build/Workers/{chunk-2Z4ZLVOD.js → chunk-KRVYCMGN.js} +6 -6
  22. package/Build/Workers/{chunk-SXSP3JHS.js → chunk-LTZRLNQP.js} +1 -1
  23. package/Build/Workers/{chunk-6FZDPMTO.js → chunk-M7WEAGWT.js} +8 -8
  24. package/Build/Workers/{chunk-NXGQBQWE.js → chunk-MJTLGN63.js} +14 -14
  25. package/Build/Workers/{chunk-XCBZVTIV.js → chunk-MUNZ77KV.js} +1 -1
  26. package/Build/Workers/{chunk-NLLCQBX3.js → chunk-NC5BUJEF.js} +2 -2
  27. package/Build/Workers/chunk-NYKURYFR.js +2131 -0
  28. package/Build/Workers/{chunk-5LSOO2KD.js → chunk-NZAQG57U.js} +7 -7
  29. package/Build/Workers/{chunk-DZUFEE4L.js → chunk-O5GUOP2G.js} +5 -7
  30. package/Build/Workers/{chunk-D6AY775A.js → chunk-OQUOLQTN.js} +8 -10
  31. package/Build/Workers/{chunk-CDJDJ5LK.js → chunk-OUG5JB2K.js} +16 -14
  32. package/Build/Workers/{chunk-ACTVJHSP.js → chunk-P4SDLSGF.js} +13 -6
  33. package/Build/Workers/{chunk-MAAHFYPC.js → chunk-P6PC2OIM.js} +7 -7
  34. package/Build/Workers/{chunk-6YR6JBMY.js → chunk-PPRK3XQU.js} +31 -35
  35. package/Build/Workers/{chunk-IMBVP57H.js → chunk-QGTYLWOT.js} +2 -2
  36. package/Build/Workers/{chunk-FCP2QY4G.js → chunk-QHTLIQUH.js} +5 -7
  37. package/Build/Workers/{chunk-EZGQPOIG.js → chunk-ROHWZQZ5.js} +5 -5
  38. package/Build/Workers/{chunk-B3QHNA4A.js → chunk-SNUWISJO.js} +6 -8
  39. package/Build/Workers/{chunk-XDWCTQCZ.js → chunk-T67YY3KP.js} +4 -2
  40. package/Build/Workers/{chunk-IJZJMIUY.js → chunk-TF5473GK.js} +13 -13
  41. package/Build/Workers/{chunk-OZGPS7FB.js → chunk-THHFTMAL.js} +4 -6
  42. package/Build/Workers/{chunk-PRWUMCXF.js → chunk-UFCZ62WM.js} +15 -13
  43. package/Build/Workers/{chunk-27FWRTJI.js → chunk-UV2YC2Q5.js} +11 -11
  44. package/Build/Workers/{chunk-N7CCOFLX.js → chunk-V4ICCWYA.js} +1 -1
  45. package/Build/Workers/{chunk-GHXVQVUM.js → chunk-VC6XXI2Z.js} +9 -9
  46. package/Build/Workers/{chunk-I74ZH5LK.js → chunk-VXJ6P4UI.js} +10 -10
  47. package/Build/Workers/{chunk-KGXSYGBG.js → chunk-W2BKP7G7.js} +15 -17
  48. package/Build/Workers/{chunk-LDRQSYBN.js → chunk-WMVGNBSH.js} +2 -2
  49. package/Build/Workers/{chunk-SMTGMFBL.js → chunk-XFZMQZSZ.js} +4 -4
  50. package/Build/Workers/{chunk-7MM3N2VE.js → chunk-XJ532R6R.js} +20 -20
  51. package/Build/Workers/{chunk-NJVBJG63.js → chunk-YJNU4SM4.js} +5 -5
  52. package/Build/Workers/{chunk-DIGUUD6G.js → chunk-YJRDTEHQ.js} +8 -8
  53. package/Build/Workers/chunk-YUICDZKO.js +2660 -0
  54. package/Build/Workers/{chunk-O3XFXGPZ.js → chunk-Z3DEVGJV.js} +7 -7
  55. package/Build/Workers/{chunk-3PSS3T43.js → chunk-ZECGI7UZ.js} +4 -4
  56. package/Build/Workers/{chunk-QFSSCLLZ.js → chunk-ZFLPVPUJ.js} +6 -8
  57. package/Build/Workers/{chunk-2RGJPWQX.js → chunk-ZIM5H2DB.js} +11 -11
  58. package/Build/Workers/{chunk-GVA7XQI2.js → chunk-ZSQMGGSB.js} +14 -16
  59. package/Build/Workers/{chunk-FU4BGABC.js → chunk-ZWYRGMBK.js} +16 -18
  60. package/Build/Workers/{chunk-JKXV6PG5.js → chunk-ZY733NZA.js} +1 -1
  61. package/Build/Workers/combineGeometry.js +24 -24
  62. package/Build/Workers/createBoxGeometry.js +18 -18
  63. package/Build/Workers/createBoxOutlineGeometry.js +20 -19
  64. package/Build/Workers/createCircleGeometry.js +28 -27
  65. package/Build/Workers/createCircleOutlineGeometry.js +21 -20
  66. package/Build/Workers/createCoplanarPolygonGeometry.js +34 -34
  67. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +33 -32
  68. package/Build/Workers/createCorridorGeometry.js +31 -31
  69. package/Build/Workers/createCorridorOutlineGeometry.js +30 -30
  70. package/Build/Workers/createCylinderGeometry.js +20 -20
  71. package/Build/Workers/createCylinderOutlineGeometry.js +22 -21
  72. package/Build/Workers/createEllipseGeometry.js +26 -26
  73. package/Build/Workers/createEllipseOutlineGeometry.js +19 -19
  74. package/Build/Workers/createEllipsoidGeometry.js +19 -19
  75. package/Build/Workers/createEllipsoidOutlineGeometry.js +18 -18
  76. package/Build/Workers/createFrustumGeometry.js +18 -18
  77. package/Build/Workers/createFrustumOutlineGeometry.js +18 -18
  78. package/Build/Workers/createGeometry.js +27 -26
  79. package/Build/Workers/createGroundPolylineGeometry.js +27 -26
  80. package/Build/Workers/createPlaneGeometry.js +18 -17
  81. package/Build/Workers/createPlaneOutlineGeometry.js +15 -15
  82. package/Build/Workers/createPolygonGeometry.js +35 -35
  83. package/Build/Workers/createPolygonOutlineGeometry.js +34 -34
  84. package/Build/Workers/createPolylineGeometry.js +28 -29
  85. package/Build/Workers/createPolylineVolumeGeometry.js +34 -35
  86. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +30 -31
  87. package/Build/Workers/createRectangleGeometry.js +30 -30
  88. package/Build/Workers/createRectangleOutlineGeometry.js +23 -24
  89. package/Build/Workers/createSimplePolylineGeometry.js +26 -27
  90. package/Build/Workers/createSphereGeometry.js +19 -19
  91. package/Build/Workers/createSphereOutlineGeometry.js +18 -18
  92. package/Build/Workers/createTaskProcessorWorker.js +3 -3
  93. package/Build/Workers/createVectorTileClampedPolylines.js +17 -16
  94. package/Build/Workers/createVectorTileGeometries.js +24 -24
  95. package/Build/Workers/createVectorTilePoints.js +13 -13
  96. package/Build/Workers/createVectorTilePolygons.js +22 -22
  97. package/Build/Workers/createVectorTilePolylines.js +17 -16
  98. package/Build/Workers/createVerticesFromCesium3DTilesTerrain.js +36 -26
  99. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +24 -24
  100. package/Build/Workers/createVerticesFromHeightmap.js +24 -25
  101. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +20 -20
  102. package/Build/Workers/createWallGeometry.js +27 -28
  103. package/Build/Workers/createWallOutlineGeometry.js +26 -27
  104. package/Build/Workers/decodeDraco.js +16 -12
  105. package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +336 -337
  106. package/Build/Workers/decodeI3S.js +17 -12
  107. package/Build/Workers/{chunk-GXWQZBAI.js → decodeMeshopt.js} +23 -29
  108. package/Build/Workers/decodeSpz.js +1960 -0
  109. package/Build/Workers/gaussianSplatSorter.js +13 -6
  110. package/Build/Workers/gaussianSplatTextureGenerator.js +13 -6
  111. package/Build/Workers/incrementallyBuildTerrainPicker.js +9 -10
  112. package/Build/Workers/transcodeKTX2.js +26 -12
  113. package/Build/Workers/transferTypedArrayTest.js +1 -1
  114. package/Build/Workers/upsampleQuantizedTerrainMesh.js +24 -24
  115. package/Build/Workers/upsampleVerticesFromCesium3DTilesTerrain.js +25 -25
  116. package/Source/Core/Cesium3DTilesTerrainData.js +11 -1
  117. package/Source/Core/Cesium3DTilesTerrainGeometryProcessor.js +33 -23
  118. package/Source/Core/Ion.js +1 -1
  119. package/Source/Core/IonResource.js +5 -0
  120. package/Source/Core/IonSnapGeometryType.js +59 -0
  121. package/Source/Core/IonSnapHeat.js +33 -0
  122. package/Source/Core/IonSnapMode.js +45 -0
  123. package/Source/Core/IonSnapParentGeometryType.js +52 -0
  124. package/Source/Core/IonSnapService.js +369 -0
  125. package/Source/Core/KTX2Transcoder.js +99 -5
  126. package/Source/Core/Resource.js +2 -0
  127. package/Source/Core/SnapService.js +63 -0
  128. package/Source/Core/TaskProcessor.js +249 -129
  129. package/Source/Core/TrustedServers.js +34 -1
  130. package/Source/Core/VectorPipeline.js +139 -45
  131. package/Source/Core/VectorProvider.js +311 -71
  132. package/Source/Core/WebAssemblyWorkerInitializer.js +125 -0
  133. package/Source/Core/fetchWebAssemblyBinary.js +52 -0
  134. package/Source/Renderer/AutomaticUniforms.js +44 -2
  135. package/Source/Renderer/ShaderBuilder.js +1 -1
  136. package/Source/Renderer/UniformState.js +47 -1
  137. package/Source/Scene/ArcGisMapService.js +1 -1
  138. package/Source/Scene/BufferPointCollection.js +4 -7
  139. package/Source/Scene/BufferPolygonCollection.js +56 -27
  140. package/Source/Scene/BufferPolylineCollection.js +61 -8
  141. package/Source/Scene/BufferPolylineMaterial.js +6 -5
  142. package/Source/Scene/BufferPrimitiveCollection.js +199 -29
  143. package/Source/Scene/Cesium3DTile.js +12 -0
  144. package/Source/Scene/Cesium3DTileset.js +61 -8
  145. package/Source/Scene/Cesium3DTilesetBaseTraversal.js +15 -3
  146. package/Source/Scene/Cesium3DTilesetCache.js +15 -0
  147. package/Source/Scene/ClippingPolygon.js +154 -100
  148. package/Source/Scene/ClippingPolygonCollection.js +352 -694
  149. package/Source/Scene/CreditDisplay.js +62 -0
  150. package/Source/Scene/GaussianSplatPrimitive.js +153 -66
  151. package/Source/Scene/GeoJsonPrimitive.js +114 -24
  152. package/Source/Scene/GlobeSurfaceShaderSet.js +33 -54
  153. package/Source/Scene/GlobeSurfaceTile.js +14 -1
  154. package/Source/Scene/GlobeSurfaceTileProvider.js +232 -25
  155. package/Source/Scene/GltfBufferViewLoader.js +25 -13
  156. package/Source/Scene/GltfLoader.js +56 -6
  157. package/Source/Scene/GltfSpzLoader.js +5 -4
  158. package/Source/Scene/HeightReference.js +1 -1
  159. package/Source/Scene/MVTDataProvider.js +9 -0
  160. package/Source/Scene/Model/Model.js +242 -16
  161. package/Source/Scene/Model/Model3DTileContent.js +5 -0
  162. package/Source/Scene/Model/ModelClippingPolygonsPipelineStage.js +54 -19
  163. package/Source/Scene/Model/ModelRenderResources.js +2 -3
  164. package/Source/Scene/Model/ModelSceneGraph.js +10 -1
  165. package/Source/Scene/Model/ModelVectorLookupPipelineStage.js +205 -0
  166. package/Source/Scene/Model/PickingPipelineStage.js +4 -0
  167. package/Source/Scene/PostProcessStage.js +22 -3
  168. package/Source/Scene/Scene.js +56 -1
  169. package/Source/Scene/Snapping.js +57 -0
  170. package/Source/Scene/SpzDecoder.js +106 -0
  171. package/Source/Scene/UrlTemplate3DTilesDataProvider.js +12 -1
  172. package/Source/Scene/VectorGltf3DTileContent.js +10 -2
  173. package/Source/Scene/WebMapServiceImageryProvider.js +5 -1
  174. package/Source/Scene/WebMapTileServiceImageryProvider.js +6 -1
  175. package/Source/Scene/renderBufferPolylineCollection.js +5 -1
  176. package/Source/Shaders/BufferPolylineMaterialVS.glsl +14 -2
  177. package/Source/Shaders/BufferPolylineMaterialVS.js +14 -2
  178. package/Source/Shaders/Builtin/CzmBuiltins.js +2 -4
  179. package/Source/Shaders/Builtin/Functions/eyeToCartographicDelta.glsl +74 -0
  180. package/Source/Shaders/Builtin/Functions/eyeToCartographicDelta.js +76 -0
  181. package/Source/Shaders/GlobeFS.glsl +10 -9
  182. package/Source/Shaders/GlobeFS.js +11 -9
  183. package/Source/Shaders/GlobeVS.glsl +0 -32
  184. package/Source/Shaders/GlobeVS.js +0 -32
  185. package/Source/Shaders/Model/ModelClippingPolygonsStageFS.glsl +15 -3
  186. package/Source/Shaders/Model/ModelClippingPolygonsStageFS.js +15 -3
  187. package/Source/Shaders/Model/ModelClippingPolygonsStageVS.glsl +20 -24
  188. package/Source/Shaders/Model/ModelClippingPolygonsStageVS.js +20 -24
  189. package/Source/Shaders/Model/ModelFS.glsl +4 -0
  190. package/Source/Shaders/Model/ModelFS.js +4 -0
  191. package/Source/Shaders/Model/ModelVS.glsl +7 -2
  192. package/Source/Shaders/Model/ModelVS.js +7 -2
  193. package/Source/Shaders/Model/ModelVectorLookupStageFS.glsl +6 -0
  194. package/Source/Shaders/Model/ModelVectorLookupStageFS.js +8 -0
  195. package/Source/Shaders/Model/ModelVectorLookupStageVS.glsl +15 -0
  196. package/Source/Shaders/Model/ModelVectorLookupStageVS.js +17 -0
  197. package/Source/Shaders/Model/VerticalExaggerationStageVS.glsl +9 -10
  198. package/Source/Shaders/Model/VerticalExaggerationStageVS.js +9 -11
  199. package/Source/Shaders/VectorCommon.glsl +177 -50
  200. package/Source/Shaders/VectorCommon.js +251 -19
  201. package/Source/ThirdParty/Workers/zip-web-worker.js +1 -1
  202. package/Source/ThirdParty/zip-module.wasm +0 -0
  203. package/Source/Workers/createTaskProcessorWorker.js +2 -0
  204. package/Source/Workers/createVerticesFromCesium3DTilesTerrain.js +13 -1
  205. package/Source/Workers/decodeDraco.js +7 -3
  206. package/Source/Workers/decodeI3S.js +7 -3
  207. package/Source/Workers/decodeMeshopt.js +21 -0
  208. package/Source/Workers/decodeSpz.js +20 -0
  209. package/Source/Workers/gaussianSplatSorter.js +7 -3
  210. package/Source/Workers/gaussianSplatTextureGenerator.js +7 -3
  211. package/Source/Workers/transcodeKTX2.js +22 -5
  212. package/index.d.ts +649 -55
  213. package/index.js +23 -13
  214. package/package.json +6 -6
  215. package/Build/Workers/chunk-2EFYUSUY.js +0 -1483
  216. package/Build/Workers/chunk-2H5264K7.js +0 -1284
  217. package/Build/Workers/chunk-2H73KDBM.js +0 -511
  218. package/Build/Workers/chunk-2ZKH2QZB.js +0 -387
  219. package/Build/Workers/chunk-36NI5E6W.js +0 -3820
  220. package/Build/Workers/chunk-37SW7SYS.js +0 -778
  221. package/Build/Workers/chunk-3GHVJ3SO.js +0 -455
  222. package/Build/Workers/chunk-3LB4UVPU.js +0 -387
  223. package/Build/Workers/chunk-3PONLKEL.js +0 -778
  224. package/Build/Workers/chunk-3QR662HH.js +0 -3820
  225. package/Build/Workers/chunk-3SX2WYSO.js +0 -973
  226. package/Build/Workers/chunk-3UDN6LYX.js +0 -476
  227. package/Build/Workers/chunk-47MCBSXI.js +0 -9237
  228. package/Build/Workers/chunk-4E626OCE.js +0 -1067
  229. package/Build/Workers/chunk-4NW2MJKH.js +0 -455
  230. package/Build/Workers/chunk-52YK5BSN.js +0 -198
  231. package/Build/Workers/chunk-5RNAQZK6.js +0 -9234
  232. package/Build/Workers/chunk-5YPQBFRD.js +0 -519
  233. package/Build/Workers/chunk-6FHT43QR.js +0 -140
  234. package/Build/Workers/chunk-6HK6IXK2.js +0 -138
  235. package/Build/Workers/chunk-6R5X2GUA.js +0 -1284
  236. package/Build/Workers/chunk-7A2OGDHT.js +0 -305
  237. package/Build/Workers/chunk-7CGEQUM2.js +0 -305
  238. package/Build/Workers/chunk-7D2HZKH7.js +0 -455
  239. package/Build/Workers/chunk-7I325HV6.js +0 -1344
  240. package/Build/Workers/chunk-7KVKHY7O.js +0 -147
  241. package/Build/Workers/chunk-7TKLTCZW.js +0 -219
  242. package/Build/Workers/chunk-7UUKBDH6.js +0 -1054
  243. package/Build/Workers/chunk-7W6DUHAB.js +0 -693
  244. package/Build/Workers/chunk-7XM5JK5F.js +0 -162
  245. package/Build/Workers/chunk-7YG3ND3P.js +0 -454
  246. package/Build/Workers/chunk-A3O6EDBK.js +0 -73
  247. package/Build/Workers/chunk-A6X24AZI.js +0 -1992
  248. package/Build/Workers/chunk-A7TTWVTF.js +0 -2719
  249. package/Build/Workers/chunk-ADX3CBKD.js +0 -9234
  250. package/Build/Workers/chunk-AF7DTMJ7.js +0 -398
  251. package/Build/Workers/chunk-AHWAZRBV.js +0 -82
  252. package/Build/Workers/chunk-AJSFRY4U.js +0 -1344
  253. package/Build/Workers/chunk-B4CQSLZJ.js +0 -305
  254. package/Build/Workers/chunk-BKPQFCXH.js +0 -511
  255. package/Build/Workers/chunk-BSPCI2LO.js +0 -959
  256. package/Build/Workers/chunk-BUJWSX5S.js +0 -301
  257. package/Build/Workers/chunk-C7JQVRLM.js +0 -497
  258. package/Build/Workers/chunk-C7QDUNI3.js +0 -138
  259. package/Build/Workers/chunk-CEEZE3YZ.js +0 -476
  260. package/Build/Workers/chunk-CIV5DJOQ.js +0 -778
  261. package/Build/Workers/chunk-CLCTQVVL.js +0 -241
  262. package/Build/Workers/chunk-CQNFIAZU.js +0 -56
  263. package/Build/Workers/chunk-DBD5WWG2.js +0 -959
  264. package/Build/Workers/chunk-DZBQUULR.js +0 -138
  265. package/Build/Workers/chunk-E2NKV5YT.js +0 -3820
  266. package/Build/Workers/chunk-E7NZJOK7.js +0 -3792
  267. package/Build/Workers/chunk-EB3Y5P3A.js +0 -368
  268. package/Build/Workers/chunk-EHTS2YPT.js +0 -2719
  269. package/Build/Workers/chunk-ELE6SC2C.js +0 -837
  270. package/Build/Workers/chunk-ENNFMWDW.js +0 -789
  271. package/Build/Workers/chunk-EOWDZN5S.js +0 -288
  272. package/Build/Workers/chunk-ERKUET22.js +0 -3201
  273. package/Build/Workers/chunk-F2IMBMZY.js +0 -241
  274. package/Build/Workers/chunk-F4CSNRZO.js +0 -219
  275. package/Build/Workers/chunk-FBP4DUQJ.js +0 -693
  276. package/Build/Workers/chunk-FDK4K5IA.js +0 -280
  277. package/Build/Workers/chunk-FGQFQHN5.js +0 -1054
  278. package/Build/Workers/chunk-FJWZMGOQ.js +0 -1992
  279. package/Build/Workers/chunk-FQ42MT7M.js +0 -58
  280. package/Build/Workers/chunk-GGNWQWSB.js +0 -301
  281. package/Build/Workers/chunk-GNKXEN4C.js +0 -682
  282. package/Build/Workers/chunk-GSWMAFTE.js +0 -9230
  283. package/Build/Workers/chunk-GXDHRC4J.js +0 -1344
  284. package/Build/Workers/chunk-GYSYP6PC.js +0 -1067
  285. package/Build/Workers/chunk-H2WCFXLP.js +0 -241
  286. package/Build/Workers/chunk-HHV3MCGV.js +0 -162
  287. package/Build/Workers/chunk-HLW2ZRVK.js +0 -368
  288. package/Build/Workers/chunk-HS6AD4P2.js +0 -398
  289. package/Build/Workers/chunk-HT6FASOT.js +0 -973
  290. package/Build/Workers/chunk-IDVHUDZT.js +0 -352
  291. package/Build/Workers/chunk-IGAZBTFZ.js +0 -3201
  292. package/Build/Workers/chunk-ILME5BXA.js +0 -301
  293. package/Build/Workers/chunk-IOO7Z2AV.js +0 -57
  294. package/Build/Workers/chunk-IUIFLOYO.js +0 -44
  295. package/Build/Workers/chunk-J73T2VOY.js +0 -171
  296. package/Build/Workers/chunk-JALGQYDY.js +0 -288
  297. package/Build/Workers/chunk-JW6OZT4R.js +0 -288
  298. package/Build/Workers/chunk-JXYLJCTC.js +0 -124
  299. package/Build/Workers/chunk-K27QOAW6.js +0 -97
  300. package/Build/Workers/chunk-KMV25A63.js +0 -789
  301. package/Build/Workers/chunk-KZWFWJML.js +0 -2719
  302. package/Build/Workers/chunk-LCXRRALY.js +0 -387
  303. package/Build/Workers/chunk-LD64RPYV.js +0 -368
  304. package/Build/Workers/chunk-LGNDTZVX.js +0 -97
  305. package/Build/Workers/chunk-LNSQVXFH.js +0 -1800
  306. package/Build/Workers/chunk-M4JZ6TSZ.js +0 -959
  307. package/Build/Workers/chunk-MCJDRDJQ.js +0 -102
  308. package/Build/Workers/chunk-MEENMEAH.js +0 -198
  309. package/Build/Workers/chunk-NAWU5RF4.js +0 -162
  310. package/Build/Workers/chunk-NIWITKQK.js +0 -693
  311. package/Build/Workers/chunk-OA6MYL2C.js +0 -837
  312. package/Build/Workers/chunk-OBEU25PI.js +0 -1067
  313. package/Build/Workers/chunk-OHP4ELS7.js +0 -198
  314. package/Build/Workers/chunk-PCL3Y7H5.js +0 -82
  315. package/Build/Workers/chunk-PD4GK4EM.js +0 -57
  316. package/Build/Workers/chunk-PEDU33QG.js +0 -2342
  317. package/Build/Workers/chunk-PVTSNNVI.js +0 -288
  318. package/Build/Workers/chunk-QHPZH22L.js +0 -241
  319. package/Build/Workers/chunk-QIZDWZK6.js +0 -301
  320. package/Build/Workers/chunk-QV6DG2YX.js +0 -1483
  321. package/Build/Workers/chunk-QVLAFFJY.js +0 -56
  322. package/Build/Workers/chunk-R4FPNAZ2.js +0 -352
  323. package/Build/Workers/chunk-R4K7EHOU.js +0 -171
  324. package/Build/Workers/chunk-R7JGHDD6.js +0 -789
  325. package/Build/Workers/chunk-RASQEYD4.js +0 -1483
  326. package/Build/Workers/chunk-RG4F5R57.js +0 -454
  327. package/Build/Workers/chunk-RW6ITX7Q.js +0 -3820
  328. package/Build/Workers/chunk-RYSQVJR6.js +0 -398
  329. package/Build/Workers/chunk-S6RJU5NM.js +0 -1054
  330. package/Build/Workers/chunk-SDFHDNS4.js +0 -147
  331. package/Build/Workers/chunk-SF6K72D7.js +0 -124
  332. package/Build/Workers/chunk-SGRGNDOD.js +0 -682
  333. package/Build/Workers/chunk-SM2CDCYF.js +0 -198
  334. package/Build/Workers/chunk-SS5ABQGY.js +0 -102
  335. package/Build/Workers/chunk-T5QBPLE3.js +0 -414
  336. package/Build/Workers/chunk-TN35HP5B.js +0 -1067
  337. package/Build/Workers/chunk-TNWKJNUZ.js +0 -454
  338. package/Build/Workers/chunk-TOAF47AQ.js +0 -102
  339. package/Build/Workers/chunk-TQ4QCOXT.js +0 -2719
  340. package/Build/Workers/chunk-TSDSILQB.js +0 -124
  341. package/Build/Workers/chunk-TVZD72WJ.js +0 -778
  342. package/Build/Workers/chunk-U5LV3F3Z.js +0 -1054
  343. package/Build/Workers/chunk-UEY73NRN.js +0 -38
  344. package/Build/Workers/chunk-UF46SZEZ.js +0 -789
  345. package/Build/Workers/chunk-UNRTMCET.js +0 -398
  346. package/Build/Workers/chunk-UTB7U3O6.js +0 -1992
  347. package/Build/Workers/chunk-UVO6COT2.js +0 -352
  348. package/Build/Workers/chunk-V46YGZE6.js +0 -352
  349. package/Build/Workers/chunk-VAL7DYNR.js +0 -278
  350. package/Build/Workers/chunk-VDGOCROW.js +0 -57
  351. package/Build/Workers/chunk-VFWSSBPT.js +0 -511
  352. package/Build/Workers/chunk-VVYMXI3I.js +0 -1284
  353. package/Build/Workers/chunk-VXWHPYQM.js +0 -837
  354. package/Build/Workers/chunk-VXYUBRSB.js +0 -219
  355. package/Build/Workers/chunk-VZLDLEWI.js +0 -387
  356. package/Build/Workers/chunk-W5OCKMPJ.js +0 -101
  357. package/Build/Workers/chunk-WBSY7HDY.js +0 -837
  358. package/Build/Workers/chunk-WN3F4CVG.js +0 -3201
  359. package/Build/Workers/chunk-WPRUWXGV.js +0 -693
  360. package/Build/Workers/chunk-WTO2ERBP.js +0 -414
  361. package/Build/Workers/chunk-WVHMDVG4.js +0 -959
  362. package/Build/Workers/chunk-XGA23TAX.js +0 -73
  363. package/Build/Workers/chunk-XLQZNQ4Z.js +0 -163
  364. package/Build/Workers/chunk-XLXSDIP5.js +0 -973
  365. package/Build/Workers/chunk-XQ3SKCMM.js +0 -140
  366. package/Build/Workers/chunk-XQH66YJC.js +0 -147
  367. package/Build/Workers/chunk-XTA7BXJG.js +0 -682
  368. package/Build/Workers/chunk-XTIDAFRS.js +0 -476
  369. package/Build/Workers/chunk-XUEDWBUD.js +0 -682
  370. package/Build/Workers/chunk-XYFLRH3H.js +0 -124
  371. package/Build/Workers/chunk-Y7JRTRTO.js +0 -305
  372. package/Build/Workers/chunk-Y7QSMDCJ.js +0 -352
  373. package/Build/Workers/chunk-YCB5TYTR.js +0 -1483
  374. package/Build/Workers/chunk-YEYOSTJX.js +0 -219
  375. package/Build/Workers/chunk-YGFVAGYF.js +0 -630
  376. package/Build/Workers/chunk-YIIACKQO.js +0 -368
  377. package/Build/Workers/chunk-YJGSP6PE.js +0 -511
  378. package/Build/Workers/chunk-YKU2Q3A2.js +0 -1287
  379. package/Build/Workers/chunk-Z4LR5EHE.js +0 -454
  380. package/Build/Workers/chunk-Z66EVE2A.js +0 -44
  381. package/Build/Workers/chunk-ZHIHHHTB.js +0 -414
  382. package/Build/Workers/chunk-ZMBHFYOX.js +0 -1344
  383. package/Build/Workers/chunk-ZNWHFSLE.js +0 -171
  384. package/Build/Workers/chunk-ZQLZG4IN.js +0 -2342
  385. package/Build/Workers/chunk-ZRTSMUZ2.js +0 -414
  386. package/Build/Workers/chunk-ZSGUV73H.js +0 -2342
  387. package/Build/Workers/chunk-ZZUVT5BM.js +0 -476
  388. package/Source/Shaders/Builtin/Functions/clipPolygons.glsl +0 -37
  389. package/Source/Shaders/Builtin/Functions/clipPolygons.js +0 -39
  390. package/Source/Shaders/Builtin/Functions/unpackClippingExtents.glsl +0 -14
  391. package/Source/Shaders/Builtin/Functions/unpackClippingExtents.js +0 -15
  392. package/Source/Shaders/PolygonSignedDistanceFS.glsl +0 -131
  393. package/Source/Shaders/PolygonSignedDistanceFS.js +0 -132
@@ -82,6 +82,7 @@ class GlobeSurfaceShader {
82
82
  * @property {boolean} [hasExaggeration]
83
83
  * @property {boolean} [showUndergroundColor]
84
84
  * @property {boolean} [translucent]
85
+ * @property {boolean} [vectorAntialias]
85
86
  * @private
86
87
  */
87
88
 
@@ -141,6 +142,12 @@ class GlobeSurfaceShaderSet {
141
142
  const translucent = options.translucent;
142
143
  const vectorData = surfaceTile.vectorData;
143
144
  const hasVectorLayer = vectorData?.show;
145
+ const hasVectorPolylines = hasVectorLayer && vectorData.hasPolylines;
146
+ const hasVectorPolygons = hasVectorLayer && vectorData.hasPolygons;
147
+ const vectorAntialias = hasVectorLayer && options.vectorAntialias;
148
+ const vectorWidthInMeters = hasVectorPolylines && vectorData.hasMeterWidths;
149
+ const vectorMixedWidthUnits =
150
+ vectorWidthInMeters && vectorData.hasPixelWidths;
144
151
 
145
152
  let quantization = 0;
146
153
  let quantizationDefine = "";
@@ -205,7 +212,12 @@ class GlobeSurfaceShaderSet {
205
212
  (+translucent << 31)) >>>
206
213
  0) +
207
214
  (applyDayNightAlpha ? 0x100000000 : 0) +
208
- (hasVectorLayer ? 0x200000000 : 0);
215
+ (hasVectorLayer ? 0x200000000 : 0) +
216
+ (hasVectorPolylines ? 0x400000000 : 0) +
217
+ (hasVectorPolygons ? 0x800000000 : 0) +
218
+ (vectorAntialias ? 0x1000000000 : 0) +
219
+ (vectorWidthInMeters ? 0x2000000000 : 0) +
220
+ (vectorMixedWidthUnits ? 0x4000000000 : 0);
209
221
 
210
222
  let currentClippingShaderState = 0;
211
223
  // @ts-expect-error Missing types.
@@ -263,12 +275,6 @@ class GlobeSurfaceShaderSet {
263
275
  );
264
276
  }
265
277
 
266
- // Need to go before GlobeFS
267
- if (currentClippingPolygonsShaderState !== 0) {
268
- fs.sources.unshift(getPolygonClippingFunction(frameState.context));
269
- vs.sources.unshift(getUnpackClippingFunction(frameState.context));
270
- }
271
-
272
278
  vs.defines.push(quantizationDefine);
273
279
  fs.defines.push(
274
280
  `TEXTURE_UNITS ${numberOfDayTextures}`,
@@ -364,20 +370,10 @@ class GlobeSurfaceShaderSet {
364
370
 
365
371
  if (enableClippingPolygons) {
366
372
  fs.defines.push("ENABLE_CLIPPING_POLYGONS");
367
- vs.defines.push("ENABLE_CLIPPING_POLYGONS");
368
373
 
369
374
  if (clippingPolygons.inverse) {
370
375
  fs.defines.push("CLIPPING_INVERSE");
371
376
  }
372
-
373
- fs.defines.push(
374
- // @ts-expect-error Missing types.
375
- `CLIPPING_POLYGON_REGIONS_LENGTH ${clippingPolygons.extentsCount}`,
376
- );
377
- vs.defines.push(
378
- // @ts-expect-error Missing types.
379
- `CLIPPING_POLYGON_REGIONS_LENGTH ${clippingPolygons.extentsCount}`,
380
- );
381
377
  }
382
378
 
383
379
  if (colorCorrect) {
@@ -397,9 +393,27 @@ class GlobeSurfaceShaderSet {
397
393
  }
398
394
 
399
395
  if (hasVectorLayer) {
400
- vs.defines.push("HAS_VECTOR_LAYER");
401
396
  fs.defines.push("HAS_VECTOR_LAYER");
402
- fs.sources.unshift(VectorCommon); // before GlobeFS.
397
+ if (hasVectorPolylines) {
398
+ fs.defines.push("HAS_VECTOR_POLYLINES");
399
+ }
400
+ if (hasVectorPolygons) {
401
+ fs.defines.push("HAS_VECTOR_POLYGONS");
402
+ }
403
+ if (vectorAntialias) {
404
+ fs.defines.push("VECTOR_ANTIALIAS");
405
+ }
406
+ if (vectorWidthInMeters) {
407
+ fs.defines.push("VECTOR_WIDTH_IN_METERS");
408
+ }
409
+ if (vectorMixedWidthUnits) {
410
+ fs.defines.push("VECTOR_WIDTH_MIXED_UNITS");
411
+ }
412
+ }
413
+
414
+ // Polygon clipping builds on top of the same machinery vector rendering uses
415
+ if (hasVectorLayer || enableClippingPolygons) {
416
+ fs.sources.unshift(VectorCommon);
403
417
  }
404
418
 
405
419
  let computeDayColor =
@@ -538,41 +552,6 @@ function getPositionMode(sceneMode) {
538
552
  return positionMode;
539
553
  }
540
554
 
541
- /**
542
- * @param {Context} context
543
- * @ignore
544
- */
545
- function getPolygonClippingFunction(context) {
546
- // return a noop for webgl1
547
- // @ts-expect-error Missing types.
548
- if (!context.webgl2) {
549
- return `void clipPolygons(highp sampler2D clippingDistance, int regionsLength, vec2 clippingPosition, int regionIndex) {
550
- }`;
551
- }
552
-
553
- return `void clipPolygons(highp sampler2D clippingDistance, int regionsLength, vec2 clippingPosition, int regionIndex) {
554
- czm_clipPolygons(clippingDistance, regionsLength, clippingPosition, regionIndex);
555
- }`;
556
- }
557
-
558
- /**
559
- * @param {Context} context
560
- * @ignore
561
- */
562
- function getUnpackClippingFunction(context) {
563
- // return a noop for webgl1
564
- // @ts-expect-error Missing types.
565
- if (!context.webgl2) {
566
- return `vec4 unpackClippingExtents(highp sampler2D extentsTexture, int index) {
567
- return vec4();
568
- }`;
569
- }
570
-
571
- return `vec4 unpackClippingExtents(highp sampler2D extentsTexture, int index) {
572
- return czm_unpackClippingExtents(extentsTexture, index);
573
- }`;
574
- }
575
-
576
555
  /**
577
556
  * @param {boolean} useWebMercatorProjection
578
557
  * @returns {string}
@@ -19,6 +19,7 @@ import TextureMagnificationFilter from "../Renderer/TextureMagnificationFilter.j
19
19
  import TextureMinificationFilter from "../Renderer/TextureMinificationFilter.js";
20
20
  import TextureWrap from "../Renderer/TextureWrap.js";
21
21
  import VertexArray from "../Renderer/VertexArray.js";
22
+ import ClippingPolygonCollection from "./ClippingPolygonCollection.js";
22
23
  import ImageryState from "./ImageryState.js";
23
24
  import QuadtreeTileLoadState from "./QuadtreeTileLoadState.js";
24
25
  import TerrainState from "./TerrainState.js";
@@ -37,7 +38,8 @@ import TerrainState from "./TerrainState.js";
37
38
  /** @import TerrainProvider from "../Core/TerrainProvider.js"; */
38
39
  /** @import TileBoundingRegion from "./TileBoundingRegion.js"; */
39
40
  /** @import TileImagery from "./TileImagery.js"; */
40
- /** @import VectorProvider, { VectorTileData } from "../Core/VectorProvider.js"; */
41
+ /** @import VectorProvider from "../Core/VectorProvider.js"; */
42
+ /** @import { VectorTileData } from "../Core/VectorPipeline.js"; */
41
43
 
42
44
  /**
43
45
  * Contains additional information about a {@link QuadtreeTile} of the globe's surface, and
@@ -67,6 +69,12 @@ class GlobeSurfaceTile {
67
69
  /** @type {VectorTileData} */
68
70
  this.vectorData = undefined;
69
71
 
72
+ /**
73
+ * Clipping polygons build on top of the vector tile data system (both rely on the same rendering technique).
74
+ * @type {VectorTileData}
75
+ */
76
+ this.clippingPolygonData = undefined;
77
+
70
78
  /** @type {VertexArray} */
71
79
  this.vertexArray = undefined;
72
80
 
@@ -169,6 +177,11 @@ class GlobeSurfaceTile {
169
177
  this.vectorData = undefined;
170
178
  }
171
179
 
180
+ if (defined(this.clippingPolygonData)) {
181
+ ClippingPolygonCollection.releaseRectangleData(this.clippingPolygonData);
182
+ this.clippingPolygonData = undefined;
183
+ }
184
+
172
185
  this.terrainData = undefined;
173
186
 
174
187
  this.terrainState = TerrainState.UNLOADED;
@@ -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";
@@ -209,6 +210,12 @@ class GlobeSurfaceTileProvider {
209
210
  */
210
211
  this._clippingPolygons = undefined;
211
212
 
213
+ this._clippingPolygonsDirty = false;
214
+
215
+ this._removeClippingPolygonAdded = undefined;
216
+
217
+ this._removeClippingPolygonRemoved = undefined;
218
+
212
219
  /**
213
220
  * A property specifying a {@link Rectangle} used to selectively limit terrain and imagery rendering.
214
221
  * @type {Rectangle}
@@ -348,7 +355,33 @@ class GlobeSurfaceTileProvider {
348
355
  }
349
356
 
350
357
  set clippingPolygons(value) {
358
+ if (value === this._clippingPolygons) {
359
+ return;
360
+ }
361
+
351
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);
352
385
  }
353
386
 
354
387
  /**
@@ -384,7 +417,8 @@ class GlobeSurfaceTileProvider {
384
417
  // Record regions dirtied by changed collections, re-bake overlapping
385
418
  // tiles, and build vector data for new surface tiles.
386
419
  const vectorProvider = this._vectorProvider;
387
- vectorProvider.update();
420
+ vectorProvider.minimumTileScreenPixels = minimumTileScreenPixels(this);
421
+ vectorProvider.update(frameState.frameNumber);
388
422
  this._quadtree.forEachRenderedTile(
389
423
  /** @param {QuadtreeTile} tile */
390
424
  (tile) => {
@@ -397,6 +431,7 @@ class GlobeSurfaceTileProvider {
397
431
  tile.level,
398
432
  frameState.context,
399
433
  surfaceTile.vectorData,
434
+ HeightReference.CLAMP_TO_TERRAIN,
400
435
  );
401
436
  } else {
402
437
  surfaceTile.vectorData = vectorProvider.requestTileData(
@@ -404,6 +439,7 @@ class GlobeSurfaceTileProvider {
404
439
  tile.y,
405
440
  tile.level,
406
441
  frameState.context,
442
+ HeightReference.CLAMP_TO_TERRAIN,
407
443
  );
408
444
  }
409
445
  },
@@ -447,8 +483,6 @@ class GlobeSurfaceTileProvider {
447
483
  if (defined(clippingPolygons) && clippingPolygons.enabled) {
448
484
  // @ts-expect-error Missing types.
449
485
  clippingPolygons.update(frameState);
450
- // @ts-expect-error Missing types.
451
- clippingPolygons.queueCommands(frameState);
452
486
  }
453
487
 
454
488
  this._usedDrawCommands = 0;
@@ -555,6 +589,10 @@ class GlobeSurfaceTileProvider {
555
589
  );
556
590
  }
557
591
 
592
+ if (this._clippingPolygonsDirty) {
593
+ releaseClippingPolygonData(this);
594
+ }
595
+
558
596
  // Add the tile render commands to the command list, sorted by texture count.
559
597
  const tilesToRenderByTextureCount = this._tilesToRenderByTextureCount;
560
598
  for (
@@ -575,6 +613,7 @@ class GlobeSurfaceTileProvider {
575
613
  ) {
576
614
  const tile = tilesToRender[tileIndex];
577
615
  const surfaceTile = /** @type {GlobeSurfaceTile} */ (tile.data);
616
+ updateTileClippingPolygonData(this, tile, surfaceTile, frameState);
578
617
  const tileBoundingRegion = surfaceTile.tileBoundingRegion;
579
618
  addDrawCommandsForTile(this, tile, frameState);
580
619
  frameState.minimumTerrainHeight = Math.min(
@@ -594,7 +633,16 @@ class GlobeSurfaceTileProvider {
594
633
  // Add the tile pick commands from the tiles drawn last frame.
595
634
  const drawCommands = this._drawCommands;
596
635
  for (let i = 0, length = this._usedDrawCommands; i < length; ++i) {
597
- 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);
598
646
  }
599
647
  }
600
648
 
@@ -1161,8 +1209,7 @@ class GlobeSurfaceTileProvider {
1161
1209
  this._tileProvider = this._tileProvider && this._tileProvider.destroy();
1162
1210
  this._clippingPlanes =
1163
1211
  this._clippingPlanes && this._clippingPlanes.destroy();
1164
- this._clippingPolygons =
1165
- this._clippingPolygons && this._clippingPolygons.destroy();
1212
+ this._clippingPolygons = undefined;
1166
1213
  this._removeLayerAddedListener =
1167
1214
  this._removeLayerAddedListener && this._removeLayerAddedListener();
1168
1215
  this._removeLayerRemovedListener =
@@ -1171,6 +1218,11 @@ class GlobeSurfaceTileProvider {
1171
1218
  this._removeLayerMovedListener && this._removeLayerMovedListener();
1172
1219
  this._removeLayerShownListener =
1173
1220
  this._removeLayerShownListener && this._removeLayerShownListener();
1221
+ this._removeClippingPolygonAdded =
1222
+ this._removeClippingPolygonAdded && this._removeClippingPolygonAdded();
1223
+ this._removeClippingPolygonRemoved =
1224
+ this._removeClippingPolygonRemoved &&
1225
+ this._removeClippingPolygonRemoved();
1174
1226
 
1175
1227
  return destroyObject(this);
1176
1228
  }
@@ -1325,6 +1377,40 @@ class GlobeSurfaceTileProvider {
1325
1377
  }
1326
1378
  }
1327
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
+
1328
1414
  function sortTileImageryByLayerIndex(a, b) {
1329
1415
  let aImagery = a.loadingImagery;
1330
1416
  if (!defined(aImagery)) {
@@ -1339,6 +1425,81 @@ function sortTileImageryByLayerIndex(a, b) {
1339
1425
  return aImagery.imageryLayer._layerIndex - bImagery.imageryLayer._layerIndex;
1340
1426
  }
1341
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
+
1342
1503
  /**
1343
1504
  * @param {GlobeSurfaceTileProvider} surface
1344
1505
  * @param {FrameState} frameState
@@ -1910,22 +2071,6 @@ function createTileUniformMap(frameState, globeSurfaceTileProvider) {
1910
2071
  style.alpha = this.properties.clippingPlanesEdgeWidth;
1911
2072
  return style;
1912
2073
  },
1913
- u_clippingDistance: function () {
1914
- const texture =
1915
- globeSurfaceTileProvider._clippingPolygons.clippingTexture;
1916
- if (defined(texture)) {
1917
- return texture;
1918
- }
1919
- return frameState.context.defaultTexture;
1920
- },
1921
- u_clippingExtents: function () {
1922
- // @ts-expect-error Missing types.
1923
- const texture = globeSurfaceTileProvider._clippingPolygons.extentsTexture;
1924
- if (defined(texture)) {
1925
- return texture;
1926
- }
1927
- return frameState.context.defaultTexture;
1928
- },
1929
2074
  u_minimumBrightness: function () {
1930
2075
  return frameState.fog.minimumBrightness;
1931
2076
  },
@@ -1972,6 +2117,12 @@ function createTileUniformMap(frameState, globeSurfaceTileProvider) {
1972
2117
  this.properties.vectorColorTexture ?? frameState.context.defaultTexture
1973
2118
  );
1974
2119
  },
2120
+ u_vectorPickColorTexture: function () {
2121
+ return (
2122
+ this.properties.vectorPickColorTexture ??
2123
+ frameState.context.defaultTexture
2124
+ );
2125
+ },
1975
2126
  u_vectorSegmentPrimitiveIndicesTexture: function () {
1976
2127
  return (
1977
2128
  this.properties.vectorSegmentPrimitiveIndicesTexture ??
@@ -2002,6 +2153,26 @@ function createTileUniformMap(frameState, globeSurfaceTileProvider) {
2002
2153
  frameState.context.defaultTexture
2003
2154
  );
2004
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
+ },
2005
2176
 
2006
2177
  // make a separate object so that changes to the properties are seen on
2007
2178
  // derived commands that combine another uniform map with this one.
@@ -2068,11 +2239,17 @@ function createTileUniformMap(frameState, globeSurfaceTileProvider) {
2068
2239
  vectorSegmentTexture: undefined,
2069
2240
  vectorWidthTexture: undefined,
2070
2241
  vectorColorTexture: undefined,
2242
+ vectorPickColorTexture: undefined,
2071
2243
  vectorSegmentPrimitiveIndicesTexture: undefined,
2072
2244
  vectorGridCellIndicesTexture: undefined,
2073
2245
  vectorPolygonEdgeTexture: undefined,
2074
2246
  vectorPolygonEdgePrimitiveIndicesTexture: undefined,
2075
2247
  vectorPolygonGridCellIndicesTexture: undefined,
2248
+ vectorMetersPerUv: new Cartesian2(),
2249
+
2250
+ clippingEdgeTexture: undefined,
2251
+ clippingEdgePrimitiveIndicesTexture: undefined,
2252
+ clippingGridCellIndicesTexture: undefined,
2076
2253
  },
2077
2254
  };
2078
2255
 
@@ -2312,6 +2489,7 @@ const surfaceShaderSetOptionsScratch = {
2312
2489
  colorToAlpha: undefined,
2313
2490
  hasGeodeticSurfaceNormals: undefined,
2314
2491
  hasExaggeration: undefined,
2492
+ vectorAntialias: undefined,
2315
2493
  };
2316
2494
 
2317
2495
  const defaultUndergroundColor = Color.TRANSPARENT;
@@ -2326,6 +2504,10 @@ const defaultUndergroundColorAlphaByDistance = new NearFarScalar();
2326
2504
  function addDrawCommandsForTile(tileProvider, tile, frameState) {
2327
2505
  const surfaceTile = /** @type {GlobeSurfaceTile} */ (tile.data);
2328
2506
 
2507
+ if (isTileClippedAwayByInversePolygons(tileProvider, surfaceTile)) {
2508
+ return;
2509
+ }
2510
+
2329
2511
  if (!defined(surfaceTile.vertexArray)) {
2330
2512
  if (surfaceTile.fill === undefined) {
2331
2513
  // No fill was created for this tile, probably because this tile is not connected to
@@ -2445,8 +2627,9 @@ function addDrawCommandsForTile(tileProvider, tile, frameState) {
2445
2627
  defined(tileProvider.clippingPolygons) &&
2446
2628
  tileProvider.clippingPolygons.enabled
2447
2629
  ) {
2448
- --maxTextures;
2449
- --maxTextures;
2630
+ // Vector polygon clipping samples three textures: edges, per-edge
2631
+ // primitive indices, and the grid cell index header.
2632
+ maxTextures -= 3;
2450
2633
  }
2451
2634
 
2452
2635
  maxTextures -= globeTranslucencyState.numberOfTextureUniforms;
@@ -2565,6 +2748,8 @@ function addDrawCommandsForTile(tileProvider, tile, frameState) {
2565
2748
  surfaceShaderSetOptions.clippedByBoundaries = surfaceTile.clippedByBoundaries;
2566
2749
  surfaceShaderSetOptions.hasGeodeticSurfaceNormals = hasGeodeticSurfaceNormals;
2567
2750
  surfaceShaderSetOptions.hasExaggeration = hasExaggeration;
2751
+ surfaceShaderSetOptions.vectorAntialias =
2752
+ tileProvider.vectorProvider.antialias;
2568
2753
 
2569
2754
  const tileImageryCollection = surfaceTile.imagery;
2570
2755
  let imageryIndex = 0;
@@ -3019,6 +3204,7 @@ function addDrawCommandsForTile(tileProvider, tile, frameState) {
3019
3204
  vectorData.polylineSegmentTexture;
3020
3205
  uniformMapProperties.vectorWidthTexture = vectorData.widthTexture;
3021
3206
  uniformMapProperties.vectorColorTexture = vectorData.colorTexture;
3207
+ uniformMapProperties.vectorPickColorTexture = vectorData.pickColorTexture;
3022
3208
  uniformMapProperties.vectorSegmentPrimitiveIndicesTexture =
3023
3209
  vectorData.polylineSegmentPrimitiveIndicesTexture;
3024
3210
  uniformMapProperties.vectorGridCellIndicesTexture =
@@ -3029,15 +3215,32 @@ function addDrawCommandsForTile(tileProvider, tile, frameState) {
3029
3215
  vectorData.polygonEdgePrimitiveIndicesTexture;
3030
3216
  uniformMapProperties.vectorPolygonGridCellIndicesTexture =
3031
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;
3032
3232
  }
3033
3233
 
3034
3234
  // update clipping polygons
3035
3235
  const clippingPolygons = tileProvider._clippingPolygons;
3236
+ const hasClippingPolygonGeometry =
3237
+ (clippingPolygonData?.polygonRings.length ?? 0) > 0;
3036
3238
  const clippingPolygonsEnabled =
3037
3239
  defined(clippingPolygons) &&
3038
3240
  clippingPolygons.enabled &&
3039
3241
  clippingPolygons.length > 0 &&
3040
- tile.isClipped;
3242
+ tile.isClipped &&
3243
+ hasClippingPolygonGeometry;
3041
3244
 
3042
3245
  surfaceShaderSetOptions.numberOfDayTextures = numberOfDayTextures;
3043
3246
  surfaceShaderSetOptions.applyBrightness = applyBrightness;
@@ -3068,6 +3271,10 @@ function addDrawCommandsForTile(tileProvider, tile, frameState) {
3068
3271
  command.shaderProgram = tileProvider._surfaceShaderSet.getShaderProgram(
3069
3272
  surfaceShaderSetOptions,
3070
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;
3071
3278
  command.castShadows = castShadows;
3072
3279
  command.receiveShadows = receiveShadows;
3073
3280
  command.renderState = renderState;
@@ -2,9 +2,11 @@ import Check from "../Core/Check.js";
2
2
  import Frozen from "../Core/Frozen.js";
3
3
  import defined from "../Core/defined.js";
4
4
  import findMeshoptExtension from "./findMeshoptExtension.js";
5
- import { MeshoptDecoder } from "meshoptimizer";
6
5
  import ResourceLoader from "./ResourceLoader.js";
7
6
  import ResourceLoaderState from "./ResourceLoaderState.js";
7
+ import TaskProcessor from "../Core/TaskProcessor.js";
8
+
9
+ const decodeMeshoptTaskProcessor = new TaskProcessor("decodeMeshopt");
8
10
 
9
11
  /**
10
12
  * Loads a glTF buffer view.
@@ -159,29 +161,39 @@ async function loadResources(loader) {
159
161
  }
160
162
 
161
163
  const bufferTypedArray = bufferLoader.typedArray;
162
- const bufferViewTypedArray = new Uint8Array(
164
+ let bufferViewTypedArray = new Uint8Array(
163
165
  bufferTypedArray.buffer,
164
166
  bufferTypedArray.byteOffset + loader._byteOffset,
165
167
  loader._byteLength,
166
168
  );
167
169
 
170
+ if (loader._hasMeshopt) {
171
+ // The buffer can be shared with other cached resources. Copy the encoded
172
+ // range before transferring it to the worker so the cache stays intact.
173
+ bufferViewTypedArray = new Uint8Array(bufferViewTypedArray);
174
+ }
175
+
168
176
  // Unload the buffer
169
177
  loader.unload();
170
178
 
171
179
  loader._typedArray = bufferViewTypedArray;
172
180
  if (loader._hasMeshopt) {
173
- const count = loader._meshoptCount;
174
- const byteStride = loader._meshoptByteStride;
175
- const result = new Uint8Array(count * byteStride);
176
- MeshoptDecoder.decodeGltfBuffer(
177
- result,
178
- count,
179
- byteStride,
180
- loader._typedArray,
181
- loader._meshoptMode,
182
- loader._meshoptFilter,
181
+ const result = await decodeMeshoptTaskProcessor.scheduleTask(
182
+ {
183
+ source: loader._typedArray,
184
+ count: loader._meshoptCount,
185
+ byteStride: loader._meshoptByteStride,
186
+ mode: loader._meshoptMode,
187
+ filter: loader._meshoptFilter,
188
+ },
189
+ [loader._typedArray.buffer],
183
190
  );
184
- loader._typedArray = result;
191
+
192
+ if (loader.isDestroyed()) {
193
+ return;
194
+ }
195
+
196
+ loader._typedArray = new Uint8Array(result);
185
197
  }
186
198
 
187
199
  loader._state = ResourceLoaderState.READY;