@cesium/engine 26.2.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 (366) hide show
  1. package/Build/ThirdParty/Workers/zip-web-worker.js +656 -518
  2. package/Build/Workers/{chunk-FU4BGABC.js → chunk-2DKJSPYF.js} +14 -14
  3. package/Build/Workers/{chunk-NCL22ZUX.js → chunk-2PWVICP6.js} +1 -1
  4. package/Build/Workers/{chunk-ILME5BXA.js → chunk-2YY724ZX.js} +8 -8
  5. package/Build/Workers/{chunk-IJZJMIUY.js → chunk-4DMAXPKB.js} +11 -11
  6. package/Build/Workers/{chunk-IMBVP57H.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-UAZUP4I5.js → chunk-6BSNYZZG.js} +5 -5
  10. package/Build/Workers/{chunk-D6AY775A.js → chunk-6R6SGKYN.js} +6 -6
  11. package/Build/Workers/{chunk-3PSS3T43.js → chunk-6V2KDEHL.js} +4 -4
  12. package/Build/Workers/{chunk-GHXVQVUM.js → chunk-75BC2IHI.js} +7 -7
  13. package/Build/Workers/{chunk-SMTGMFBL.js → chunk-7SESBH2I.js} +4 -4
  14. package/Build/Workers/{chunk-NEFDMMLY.js → chunk-7WXBTNRV.js} +8 -8
  15. package/Build/Workers/{chunk-NXGQBQWE.js → chunk-A7SMPV6B.js} +12 -12
  16. package/Build/Workers/{chunk-O3XFXGPZ.js → chunk-ATSXKJ3L.js} +7 -7
  17. package/Build/Workers/{chunk-AHWAZRBV.js → chunk-B4AVL7VI.js} +1 -1
  18. package/Build/Workers/{chunk-OZGPS7FB.js → chunk-B7Q2WF6Q.js} +4 -4
  19. package/Build/Workers/{chunk-2RGJPWQX.js → chunk-BNDSDQ7D.js} +9 -9
  20. package/Build/Workers/{chunk-2Z4ZLVOD.js → chunk-CKK6CUXK.js} +6 -6
  21. package/Build/Workers/{chunk-FCP2QY4G.js → chunk-COKOYTRS.js} +5 -5
  22. package/Build/Workers/{chunk-6FZDPMTO.js → chunk-CQ4TZXAT.js} +6 -6
  23. package/Build/Workers/{chunk-HDL4HOXZ.js → chunk-DKSANM4A.js} +12 -12
  24. package/Build/Workers/{chunk-XCBZVTIV.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-NSKZ6SBK.js → chunk-F34TJJLA.js} +14 -14
  28. package/Build/Workers/{chunk-GXWQZBAI.js → chunk-GLHDTTTO.js} +2 -2
  29. package/Build/Workers/{chunk-SJYSIOEM.js → chunk-GS7RY2DH.js} +11 -11
  30. package/Build/Workers/{chunk-5YPQBFRD.js → chunk-HDD3RFLT.js} +3 -3
  31. package/Build/Workers/{chunk-36NI5E6W.js → chunk-HDPNFEPP.js} +18 -18
  32. package/Build/Workers/{chunk-DSGLDRTI.js → chunk-JBJ6BRIM.js} +4 -4
  33. package/Build/Workers/{chunk-DZUFEE4L.js → chunk-JKTWW7IO.js} +5 -5
  34. package/Build/Workers/{chunk-O3DKEX7Q.js → chunk-JL4NWWQY.js} +5 -5
  35. package/Build/Workers/{chunk-I74ZH5LK.js → chunk-JMUUAW4X.js} +10 -10
  36. package/Build/Workers/{chunk-SXSP3JHS.js → chunk-KBGAHN5R.js} +1 -1
  37. package/Build/Workers/{chunk-GVA7XQI2.js → chunk-KEWK6VZL.js} +12 -12
  38. package/Build/Workers/{chunk-EOWDZN5S.js → chunk-L73K5UPP.js} +10 -10
  39. package/Build/Workers/{chunk-J73T2VOY.js → chunk-LL2SGJYH.js} +6 -6
  40. package/Build/Workers/{chunk-QFSSCLLZ.js → chunk-LYJUL4XQ.js} +6 -6
  41. package/Build/Workers/{chunk-MAAHFYPC.js → chunk-M6W46OAP.js} +7 -7
  42. package/Build/Workers/{chunk-FX3VEAIU.js → chunk-MDDKCLMF.js} +16 -16
  43. package/Build/Workers/{chunk-M6QKXVAU.js → chunk-MUW4DJV7.js} +17 -17
  44. package/Build/Workers/{chunk-EZGQPOIG.js → chunk-N5YK44FS.js} +5 -5
  45. package/Build/Workers/{chunk-27FWRTJI.js → chunk-NZQUP52G.js} +9 -9
  46. package/Build/Workers/{chunk-A62YI6S6.js → chunk-PKZA44LH.js} +4 -4
  47. package/Build/Workers/{chunk-7MM3N2VE.js → chunk-Q2JS5LCB.js} +17 -17
  48. package/Build/Workers/{chunk-KGXSYGBG.js → chunk-QTAEVUED.js} +13 -13
  49. package/Build/Workers/{chunk-KP5QD7WU.js → chunk-SEJIXZZ4.js} +10 -10
  50. package/Build/Workers/{chunk-PRWUMCXF.js → chunk-SL2HCFYW.js} +10 -10
  51. package/Build/Workers/{chunk-NJVBJG63.js → chunk-SLHK3KAR.js} +5 -5
  52. package/Build/Workers/{chunk-JKXV6PG5.js → chunk-UZY5XRL2.js} +1 -1
  53. package/Build/Workers/{chunk-LDRQSYBN.js → chunk-VRECSMG3.js} +2 -2
  54. package/Build/Workers/{chunk-NLLCQBX3.js → chunk-X27HKF5E.js} +2 -2
  55. package/Build/Workers/{chunk-B3QHNA4A.js → chunk-XBY3354M.js} +6 -6
  56. package/Build/Workers/{chunk-CRCGE4J4.js → chunk-XRZCS3HE.js} +8 -8
  57. package/Build/Workers/{chunk-XLQZNQ4Z.js → chunk-XSIUYAT6.js} +2 -2
  58. package/Build/Workers/{chunk-SA2A2AN5.js → chunk-Z2DW5NM2.js} +4 -4
  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 +33 -33
  65. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +31 -31
  66. package/Build/Workers/createCorridorGeometry.js +29 -29
  67. package/Build/Workers/createCorridorOutlineGeometry.js +28 -28
  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 +22 -22
  78. package/Build/Workers/createPlaneGeometry.js +16 -16
  79. package/Build/Workers/createPlaneOutlineGeometry.js +15 -15
  80. package/Build/Workers/createPolygonGeometry.js +32 -32
  81. package/Build/Workers/createPolygonOutlineGeometry.js +30 -30
  82. package/Build/Workers/createPolylineGeometry.js +25 -25
  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 +20 -20
  87. package/Build/Workers/createSimplePolylineGeometry.js +23 -23
  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 +23 -23
  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/Ion.js +1 -1
  113. package/Source/Core/IonResource.js +5 -0
  114. package/Source/Core/IonSnapGeometryType.js +59 -0
  115. package/Source/Core/IonSnapHeat.js +33 -0
  116. package/Source/Core/IonSnapMode.js +45 -0
  117. package/Source/Core/IonSnapParentGeometryType.js +52 -0
  118. package/Source/Core/IonSnapService.js +369 -0
  119. package/Source/Core/SnapService.js +63 -0
  120. package/Source/Core/VectorPipeline.js +139 -45
  121. package/Source/Core/VectorProvider.js +311 -71
  122. package/Source/Renderer/AutomaticUniforms.js +44 -2
  123. package/Source/Renderer/ShaderBuilder.js +1 -1
  124. package/Source/Renderer/UniformState.js +47 -1
  125. package/Source/Scene/ArcGisMapService.js +1 -1
  126. package/Source/Scene/BufferPointCollection.js +4 -7
  127. package/Source/Scene/BufferPolygonCollection.js +56 -27
  128. package/Source/Scene/BufferPolylineCollection.js +61 -8
  129. package/Source/Scene/BufferPolylineMaterial.js +6 -5
  130. package/Source/Scene/BufferPrimitiveCollection.js +199 -29
  131. package/Source/Scene/Cesium3DTile.js +12 -0
  132. package/Source/Scene/Cesium3DTileset.js +61 -8
  133. package/Source/Scene/Cesium3DTilesetBaseTraversal.js +15 -3
  134. package/Source/Scene/Cesium3DTilesetCache.js +15 -0
  135. package/Source/Scene/ClippingPolygon.js +154 -100
  136. package/Source/Scene/ClippingPolygonCollection.js +352 -694
  137. package/Source/Scene/CreditDisplay.js +62 -0
  138. package/Source/Scene/GeoJsonPrimitive.js +114 -24
  139. package/Source/Scene/GlobeSurfaceShaderSet.js +33 -54
  140. package/Source/Scene/GlobeSurfaceTile.js +14 -1
  141. package/Source/Scene/GlobeSurfaceTileProvider.js +232 -25
  142. package/Source/Scene/GltfLoader.js +56 -6
  143. package/Source/Scene/HeightReference.js +1 -1
  144. package/Source/Scene/MVTDataProvider.js +9 -0
  145. package/Source/Scene/Model/Model.js +242 -16
  146. package/Source/Scene/Model/Model3DTileContent.js +5 -0
  147. package/Source/Scene/Model/ModelClippingPolygonsPipelineStage.js +54 -19
  148. package/Source/Scene/Model/ModelRenderResources.js +2 -3
  149. package/Source/Scene/Model/ModelSceneGraph.js +10 -1
  150. package/Source/Scene/Model/ModelVectorLookupPipelineStage.js +205 -0
  151. package/Source/Scene/Model/PickingPipelineStage.js +4 -0
  152. package/Source/Scene/PostProcessStage.js +22 -3
  153. package/Source/Scene/Scene.js +56 -1
  154. package/Source/Scene/Snapping.js +57 -0
  155. package/Source/Scene/UrlTemplate3DTilesDataProvider.js +12 -1
  156. package/Source/Scene/VectorGltf3DTileContent.js +10 -2
  157. package/Source/Scene/WebMapServiceImageryProvider.js +5 -1
  158. package/Source/Scene/WebMapTileServiceImageryProvider.js +6 -1
  159. package/Source/Scene/renderBufferPolylineCollection.js +5 -1
  160. package/Source/Shaders/BufferPolylineMaterialVS.glsl +14 -2
  161. package/Source/Shaders/BufferPolylineMaterialVS.js +14 -2
  162. package/Source/Shaders/Builtin/CzmBuiltins.js +2 -4
  163. package/Source/Shaders/Builtin/Functions/eyeToCartographicDelta.glsl +74 -0
  164. package/Source/Shaders/Builtin/Functions/eyeToCartographicDelta.js +76 -0
  165. package/Source/Shaders/GlobeFS.glsl +10 -9
  166. package/Source/Shaders/GlobeFS.js +11 -9
  167. package/Source/Shaders/GlobeVS.glsl +0 -32
  168. package/Source/Shaders/GlobeVS.js +0 -32
  169. package/Source/Shaders/Model/ModelClippingPolygonsStageFS.glsl +15 -3
  170. package/Source/Shaders/Model/ModelClippingPolygonsStageFS.js +15 -3
  171. package/Source/Shaders/Model/ModelClippingPolygonsStageVS.glsl +20 -24
  172. package/Source/Shaders/Model/ModelClippingPolygonsStageVS.js +20 -24
  173. package/Source/Shaders/Model/ModelFS.glsl +4 -0
  174. package/Source/Shaders/Model/ModelFS.js +4 -0
  175. package/Source/Shaders/Model/ModelVS.glsl +7 -2
  176. package/Source/Shaders/Model/ModelVS.js +7 -2
  177. package/Source/Shaders/Model/ModelVectorLookupStageFS.glsl +6 -0
  178. package/Source/Shaders/Model/ModelVectorLookupStageFS.js +8 -0
  179. package/Source/Shaders/Model/ModelVectorLookupStageVS.glsl +15 -0
  180. package/Source/Shaders/Model/ModelVectorLookupStageVS.js +17 -0
  181. package/Source/Shaders/Model/VerticalExaggerationStageVS.glsl +9 -10
  182. package/Source/Shaders/Model/VerticalExaggerationStageVS.js +9 -11
  183. package/Source/Shaders/VectorCommon.glsl +177 -50
  184. package/Source/Shaders/VectorCommon.js +251 -19
  185. package/Source/ThirdParty/Workers/zip-web-worker.js +1 -1
  186. package/index.d.ts +556 -55
  187. package/index.js +20 -13
  188. package/package.json +6 -6
  189. package/Build/Workers/chunk-2EFYUSUY.js +0 -1483
  190. package/Build/Workers/chunk-2H5264K7.js +0 -1284
  191. package/Build/Workers/chunk-2H73KDBM.js +0 -511
  192. package/Build/Workers/chunk-2ZKH2QZB.js +0 -387
  193. package/Build/Workers/chunk-37SW7SYS.js +0 -778
  194. package/Build/Workers/chunk-3GHVJ3SO.js +0 -455
  195. package/Build/Workers/chunk-3LB4UVPU.js +0 -387
  196. package/Build/Workers/chunk-3PONLKEL.js +0 -778
  197. package/Build/Workers/chunk-3QR662HH.js +0 -3820
  198. package/Build/Workers/chunk-3SX2WYSO.js +0 -973
  199. package/Build/Workers/chunk-3UDN6LYX.js +0 -476
  200. package/Build/Workers/chunk-47MCBSXI.js +0 -9237
  201. package/Build/Workers/chunk-4E626OCE.js +0 -1067
  202. package/Build/Workers/chunk-4NW2MJKH.js +0 -455
  203. package/Build/Workers/chunk-52YK5BSN.js +0 -198
  204. package/Build/Workers/chunk-5RNAQZK6.js +0 -9234
  205. package/Build/Workers/chunk-6FHT43QR.js +0 -140
  206. package/Build/Workers/chunk-6HK6IXK2.js +0 -138
  207. package/Build/Workers/chunk-6R5X2GUA.js +0 -1284
  208. package/Build/Workers/chunk-6YR6JBMY.js +0 -163
  209. package/Build/Workers/chunk-7A2OGDHT.js +0 -305
  210. package/Build/Workers/chunk-7CGEQUM2.js +0 -305
  211. package/Build/Workers/chunk-7D2HZKH7.js +0 -455
  212. package/Build/Workers/chunk-7I325HV6.js +0 -1344
  213. package/Build/Workers/chunk-7KVKHY7O.js +0 -147
  214. package/Build/Workers/chunk-7TKLTCZW.js +0 -219
  215. package/Build/Workers/chunk-7UUKBDH6.js +0 -1054
  216. package/Build/Workers/chunk-7W6DUHAB.js +0 -693
  217. package/Build/Workers/chunk-7XM5JK5F.js +0 -162
  218. package/Build/Workers/chunk-7YG3ND3P.js +0 -454
  219. package/Build/Workers/chunk-A3O6EDBK.js +0 -73
  220. package/Build/Workers/chunk-A6X24AZI.js +0 -1992
  221. package/Build/Workers/chunk-A7TTWVTF.js +0 -2719
  222. package/Build/Workers/chunk-ACTVJHSP.js +0 -519
  223. package/Build/Workers/chunk-ADX3CBKD.js +0 -9234
  224. package/Build/Workers/chunk-AF7DTMJ7.js +0 -398
  225. package/Build/Workers/chunk-AJSFRY4U.js +0 -1344
  226. package/Build/Workers/chunk-ARZICEEP.js +0 -301
  227. package/Build/Workers/chunk-B4CQSLZJ.js +0 -305
  228. package/Build/Workers/chunk-BKPQFCXH.js +0 -511
  229. package/Build/Workers/chunk-BSPCI2LO.js +0 -959
  230. package/Build/Workers/chunk-BUJWSX5S.js +0 -301
  231. package/Build/Workers/chunk-C7JQVRLM.js +0 -497
  232. package/Build/Workers/chunk-C7QDUNI3.js +0 -138
  233. package/Build/Workers/chunk-CDJDJ5LK.js +0 -44
  234. package/Build/Workers/chunk-CEEZE3YZ.js +0 -476
  235. package/Build/Workers/chunk-CIV5DJOQ.js +0 -778
  236. package/Build/Workers/chunk-CLCTQVVL.js +0 -241
  237. package/Build/Workers/chunk-CQNFIAZU.js +0 -56
  238. package/Build/Workers/chunk-CUTRKXUQ.js +0 -288
  239. package/Build/Workers/chunk-DBD5WWG2.js +0 -959
  240. package/Build/Workers/chunk-DIGUUD6G.js +0 -171
  241. package/Build/Workers/chunk-DZBQUULR.js +0 -138
  242. package/Build/Workers/chunk-E2NKV5YT.js +0 -3820
  243. package/Build/Workers/chunk-E7NZJOK7.js +0 -3792
  244. package/Build/Workers/chunk-EB3Y5P3A.js +0 -368
  245. package/Build/Workers/chunk-EHTS2YPT.js +0 -2719
  246. package/Build/Workers/chunk-ELE6SC2C.js +0 -837
  247. package/Build/Workers/chunk-ENNFMWDW.js +0 -789
  248. package/Build/Workers/chunk-ERKUET22.js +0 -3201
  249. package/Build/Workers/chunk-F2IMBMZY.js +0 -241
  250. package/Build/Workers/chunk-F4CSNRZO.js +0 -219
  251. package/Build/Workers/chunk-FBP4DUQJ.js +0 -693
  252. package/Build/Workers/chunk-FDK4K5IA.js +0 -280
  253. package/Build/Workers/chunk-FGQFQHN5.js +0 -1054
  254. package/Build/Workers/chunk-FJWZMGOQ.js +0 -1992
  255. package/Build/Workers/chunk-FQ42MT7M.js +0 -58
  256. package/Build/Workers/chunk-GGNWQWSB.js +0 -301
  257. package/Build/Workers/chunk-GNKXEN4C.js +0 -682
  258. package/Build/Workers/chunk-GSWMAFTE.js +0 -9230
  259. package/Build/Workers/chunk-GXDHRC4J.js +0 -1344
  260. package/Build/Workers/chunk-GYSYP6PC.js +0 -1067
  261. package/Build/Workers/chunk-H2WCFXLP.js +0 -241
  262. package/Build/Workers/chunk-HHV3MCGV.js +0 -162
  263. package/Build/Workers/chunk-HLW2ZRVK.js +0 -368
  264. package/Build/Workers/chunk-HS6AD4P2.js +0 -398
  265. package/Build/Workers/chunk-HT6FASOT.js +0 -973
  266. package/Build/Workers/chunk-IDVHUDZT.js +0 -352
  267. package/Build/Workers/chunk-IGAZBTFZ.js +0 -3201
  268. package/Build/Workers/chunk-IOO7Z2AV.js +0 -57
  269. package/Build/Workers/chunk-IUIFLOYO.js +0 -44
  270. package/Build/Workers/chunk-JALGQYDY.js +0 -288
  271. package/Build/Workers/chunk-JW6OZT4R.js +0 -288
  272. package/Build/Workers/chunk-JXYLJCTC.js +0 -124
  273. package/Build/Workers/chunk-K27QOAW6.js +0 -97
  274. package/Build/Workers/chunk-KMV25A63.js +0 -789
  275. package/Build/Workers/chunk-KZWFWJML.js +0 -2719
  276. package/Build/Workers/chunk-LCXRRALY.js +0 -387
  277. package/Build/Workers/chunk-LD64RPYV.js +0 -368
  278. package/Build/Workers/chunk-LGNDTZVX.js +0 -97
  279. package/Build/Workers/chunk-LNSQVXFH.js +0 -1800
  280. package/Build/Workers/chunk-M4JZ6TSZ.js +0 -959
  281. package/Build/Workers/chunk-MCJDRDJQ.js +0 -102
  282. package/Build/Workers/chunk-MEENMEAH.js +0 -198
  283. package/Build/Workers/chunk-NAWU5RF4.js +0 -162
  284. package/Build/Workers/chunk-NIWITKQK.js +0 -693
  285. package/Build/Workers/chunk-OA6MYL2C.js +0 -837
  286. package/Build/Workers/chunk-OBEU25PI.js +0 -1067
  287. package/Build/Workers/chunk-OHP4ELS7.js +0 -198
  288. package/Build/Workers/chunk-PCL3Y7H5.js +0 -82
  289. package/Build/Workers/chunk-PD4GK4EM.js +0 -57
  290. package/Build/Workers/chunk-PEDU33QG.js +0 -2342
  291. package/Build/Workers/chunk-PVTSNNVI.js +0 -288
  292. package/Build/Workers/chunk-QHPZH22L.js +0 -241
  293. package/Build/Workers/chunk-QIZDWZK6.js +0 -301
  294. package/Build/Workers/chunk-QV6DG2YX.js +0 -1483
  295. package/Build/Workers/chunk-QVLAFFJY.js +0 -56
  296. package/Build/Workers/chunk-R4FPNAZ2.js +0 -352
  297. package/Build/Workers/chunk-R4K7EHOU.js +0 -171
  298. package/Build/Workers/chunk-R7JGHDD6.js +0 -789
  299. package/Build/Workers/chunk-RASQEYD4.js +0 -1483
  300. package/Build/Workers/chunk-RG4F5R57.js +0 -454
  301. package/Build/Workers/chunk-RW6ITX7Q.js +0 -3820
  302. package/Build/Workers/chunk-RYSQVJR6.js +0 -398
  303. package/Build/Workers/chunk-S6RJU5NM.js +0 -1054
  304. package/Build/Workers/chunk-SDFHDNS4.js +0 -147
  305. package/Build/Workers/chunk-SF6K72D7.js +0 -124
  306. package/Build/Workers/chunk-SGRGNDOD.js +0 -682
  307. package/Build/Workers/chunk-SM2CDCYF.js +0 -198
  308. package/Build/Workers/chunk-SS5ABQGY.js +0 -102
  309. package/Build/Workers/chunk-T5QBPLE3.js +0 -414
  310. package/Build/Workers/chunk-TN35HP5B.js +0 -1067
  311. package/Build/Workers/chunk-TNWKJNUZ.js +0 -454
  312. package/Build/Workers/chunk-TOAF47AQ.js +0 -102
  313. package/Build/Workers/chunk-TQ4QCOXT.js +0 -2719
  314. package/Build/Workers/chunk-TSDSILQB.js +0 -124
  315. package/Build/Workers/chunk-TVZD72WJ.js +0 -778
  316. package/Build/Workers/chunk-U5LV3F3Z.js +0 -1054
  317. package/Build/Workers/chunk-UEY73NRN.js +0 -38
  318. package/Build/Workers/chunk-UF46SZEZ.js +0 -789
  319. package/Build/Workers/chunk-UNRTMCET.js +0 -398
  320. package/Build/Workers/chunk-UTB7U3O6.js +0 -1992
  321. package/Build/Workers/chunk-UVO6COT2.js +0 -352
  322. package/Build/Workers/chunk-V46YGZE6.js +0 -352
  323. package/Build/Workers/chunk-VAL7DYNR.js +0 -278
  324. package/Build/Workers/chunk-VDGOCROW.js +0 -57
  325. package/Build/Workers/chunk-VFWSSBPT.js +0 -511
  326. package/Build/Workers/chunk-VVYMXI3I.js +0 -1284
  327. package/Build/Workers/chunk-VXWHPYQM.js +0 -837
  328. package/Build/Workers/chunk-VXYUBRSB.js +0 -219
  329. package/Build/Workers/chunk-VZLDLEWI.js +0 -387
  330. package/Build/Workers/chunk-W5OCKMPJ.js +0 -101
  331. package/Build/Workers/chunk-WBSY7HDY.js +0 -837
  332. package/Build/Workers/chunk-WN3F4CVG.js +0 -3201
  333. package/Build/Workers/chunk-WPRUWXGV.js +0 -693
  334. package/Build/Workers/chunk-WTO2ERBP.js +0 -414
  335. package/Build/Workers/chunk-WVHMDVG4.js +0 -959
  336. package/Build/Workers/chunk-XGA23TAX.js +0 -73
  337. package/Build/Workers/chunk-XLXSDIP5.js +0 -973
  338. package/Build/Workers/chunk-XQ3SKCMM.js +0 -140
  339. package/Build/Workers/chunk-XQH66YJC.js +0 -147
  340. package/Build/Workers/chunk-XTA7BXJG.js +0 -682
  341. package/Build/Workers/chunk-XTIDAFRS.js +0 -476
  342. package/Build/Workers/chunk-XUEDWBUD.js +0 -682
  343. package/Build/Workers/chunk-XYFLRH3H.js +0 -124
  344. package/Build/Workers/chunk-Y7JRTRTO.js +0 -305
  345. package/Build/Workers/chunk-Y7QSMDCJ.js +0 -352
  346. package/Build/Workers/chunk-YCB5TYTR.js +0 -1483
  347. package/Build/Workers/chunk-YEYOSTJX.js +0 -219
  348. package/Build/Workers/chunk-YGFVAGYF.js +0 -630
  349. package/Build/Workers/chunk-YIIACKQO.js +0 -368
  350. package/Build/Workers/chunk-YJGSP6PE.js +0 -511
  351. package/Build/Workers/chunk-YKU2Q3A2.js +0 -1287
  352. package/Build/Workers/chunk-Z4LR5EHE.js +0 -454
  353. package/Build/Workers/chunk-Z66EVE2A.js +0 -44
  354. package/Build/Workers/chunk-ZHIHHHTB.js +0 -414
  355. package/Build/Workers/chunk-ZMBHFYOX.js +0 -1344
  356. package/Build/Workers/chunk-ZNWHFSLE.js +0 -171
  357. package/Build/Workers/chunk-ZQLZG4IN.js +0 -2342
  358. package/Build/Workers/chunk-ZRTSMUZ2.js +0 -414
  359. package/Build/Workers/chunk-ZSGUV73H.js +0 -2342
  360. package/Build/Workers/chunk-ZZUVT5BM.js +0 -476
  361. package/Source/Shaders/Builtin/Functions/clipPolygons.glsl +0 -37
  362. package/Source/Shaders/Builtin/Functions/clipPolygons.js +0 -39
  363. package/Source/Shaders/Builtin/Functions/unpackClippingExtents.glsl +0 -14
  364. package/Source/Shaders/Builtin/Functions/unpackClippingExtents.js +0 -15
  365. package/Source/Shaders/PolygonSignedDistanceFS.glsl +0 -131
  366. package/Source/Shaders/PolygonSignedDistanceFS.js +0 -132
@@ -12,28 +12,27 @@ void verticalExaggerationStage(
12
12
  // Uses a circular approximation for the Earth curvature along the geodesic.
13
13
  vec3 vertexPositionEC = (czm_modelView * vec4(attributes.positionMC, 1.0)).xyz;
14
14
  vec3 centerToVertex = eyeToCenter * czm_eyeEllipsoidNormalEC + vertexPositionEC;
15
- vec3 vertexNormal = normalize(centerToVertex);
15
+ vec3 vertexEllipsoidNormalEC = normalize(centerToVertex);
16
16
 
17
- // Estimate the (sine of the) angle between the camera direction and the vertex normal
17
+ // Estimate the (sine of the) angle between the camera direction and the ellipsoid normal.
18
18
  float verticalDistance = dot(vertexPositionEC, czm_eyeEllipsoidNormalEC);
19
19
  float horizontalDistance = length(vertexPositionEC - verticalDistance * czm_eyeEllipsoidNormalEC);
20
20
  float sinTheta = horizontalDistance / (eyeToCenter + verticalDistance);
21
21
  bool isSmallAngle = clamp(sinTheta, 0.0, 0.05) == sinTheta;
22
22
 
23
23
  // Approximate the change in height above the ellipsoid, from camera to vertex position.
24
- float exactVersine = 1.0 - dot(czm_eyeEllipsoidNormalEC, vertexNormal);
24
+ float exactVersine = 1.0 - dot(czm_eyeEllipsoidNormalEC, vertexEllipsoidNormalEC);
25
25
  float smallAngleVersine = 0.5 * sinTheta * sinTheta;
26
26
  float versine = isSmallAngle ? smallAngleVersine : exactVersine;
27
- float dHeight = dot(vertexPositionEC, vertexNormal) - eyeToCenter * versine;
27
+ float dHeight = dot(vertexPositionEC, vertexEllipsoidNormalEC) - eyeToCenter * versine;
28
28
  float vertexHeight = czm_eyeHeight + dHeight;
29
29
 
30
- // Transform the approximate vertex normal to model coordinates.
31
- vec3 vertexNormalMC = (czm_inverseModelView * vec4(vertexNormal, 0.0)).xyz;
32
- vertexNormalMC = normalize(vertexNormalMC);
30
+ // Transform the approximate ellipsoid normal to model coordinates.
31
+ vec3 exaggerationDirectionScaledMC = (czm_inverseModelView * vec4(vertexEllipsoidNormalEC, 0.0)).xyz;
33
32
 
34
- // Compute the exaggeration and apply it along the approximate vertex normal.
33
+ // Compute the exaggeration and apply it along the exaggeration direction in model coordinates.
35
34
  float stretch = u_verticalExaggerationAndRelativeHeight.x;
36
35
  float shift = u_verticalExaggerationAndRelativeHeight.y;
37
36
  float exaggeration = (vertexHeight - shift) * (stretch - 1.0);
38
- attributes.positionMC += exaggeration * vertexNormalMC;
39
- }
37
+ attributes.positionMC += exaggeration * exaggerationDirectionScaledMC;
38
+ }
@@ -13,29 +13,27 @@ export default "void verticalExaggerationStage(\n\
13
13
  // Uses a circular approximation for the Earth curvature along the geodesic.\n\
14
14
  vec3 vertexPositionEC = (czm_modelView * vec4(attributes.positionMC, 1.0)).xyz;\n\
15
15
  vec3 centerToVertex = eyeToCenter * czm_eyeEllipsoidNormalEC + vertexPositionEC;\n\
16
- vec3 vertexNormal = normalize(centerToVertex);\n\
16
+ vec3 vertexEllipsoidNormalEC = normalize(centerToVertex);\n\
17
17
  \n\
18
- // Estimate the (sine of the) angle between the camera direction and the vertex normal\n\
18
+ // Estimate the (sine of the) angle between the camera direction and the ellipsoid normal.\n\
19
19
  float verticalDistance = dot(vertexPositionEC, czm_eyeEllipsoidNormalEC);\n\
20
20
  float horizontalDistance = length(vertexPositionEC - verticalDistance * czm_eyeEllipsoidNormalEC);\n\
21
21
  float sinTheta = horizontalDistance / (eyeToCenter + verticalDistance);\n\
22
22
  bool isSmallAngle = clamp(sinTheta, 0.0, 0.05) == sinTheta;\n\
23
23
  \n\
24
24
  // Approximate the change in height above the ellipsoid, from camera to vertex position.\n\
25
- float exactVersine = 1.0 - dot(czm_eyeEllipsoidNormalEC, vertexNormal);\n\
25
+ float exactVersine = 1.0 - dot(czm_eyeEllipsoidNormalEC, vertexEllipsoidNormalEC);\n\
26
26
  float smallAngleVersine = 0.5 * sinTheta * sinTheta;\n\
27
27
  float versine = isSmallAngle ? smallAngleVersine : exactVersine;\n\
28
- float dHeight = dot(vertexPositionEC, vertexNormal) - eyeToCenter * versine;\n\
28
+ float dHeight = dot(vertexPositionEC, vertexEllipsoidNormalEC) - eyeToCenter * versine;\n\
29
29
  float vertexHeight = czm_eyeHeight + dHeight;\n\
30
30
  \n\
31
- // Transform the approximate vertex normal to model coordinates.\n\
32
- vec3 vertexNormalMC = (czm_inverseModelView * vec4(vertexNormal, 0.0)).xyz;\n\
33
- vertexNormalMC = normalize(vertexNormalMC);\n\
31
+ // Transform the approximate ellipsoid normal to model coordinates.\n\
32
+ vec3 exaggerationDirectionScaledMC = (czm_inverseModelView * vec4(vertexEllipsoidNormalEC, 0.0)).xyz;\n\
34
33
  \n\
35
- // Compute the exaggeration and apply it along the approximate vertex normal.\n\
34
+ // Compute the exaggeration and apply it along the exaggeration direction in model coordinates.\n\
36
35
  float stretch = u_verticalExaggerationAndRelativeHeight.x;\n\
37
36
  float shift = u_verticalExaggerationAndRelativeHeight.y;\n\
38
37
  float exaggeration = (vertexHeight - shift) * (stretch - 1.0);\n\
39
- attributes.positionMC += exaggeration * vertexNormalMC;\n\
40
- }\n\
41
- ";
38
+ attributes.positionMC += exaggeration * exaggerationDirectionScaledMC;\n\
39
+ }";
@@ -1,11 +1,29 @@
1
+ uniform highp sampler2D u_vectorColorTexture;
2
+ uniform highp sampler2D u_vectorPickColorTexture;
3
+
4
+ // Primitive index of the topmost vector draped over this fragment, or -1 for none.
5
+ int vectorPickPrimitiveIndex = -1;
6
+
7
+ #ifdef HAS_VECTOR_POLYLINES
1
8
  uniform highp sampler2D u_vectorSegmentTexture;
2
9
  uniform highp sampler2D u_vectorWidthTexture;
3
- uniform highp sampler2D u_vectorColorTexture;
4
10
  uniform highp sampler2D u_vectorSegmentPrimitiveIndicesTexture;
5
11
  uniform highp sampler2D u_vectorGridCellIndicesTexture;
12
+ #ifdef VECTOR_WIDTH_IN_METERS
13
+ // Ground size, in meters, of the tile's UV domain.
14
+ uniform vec2 u_vectorMetersPerUv;
15
+ #endif
16
+ #endif
17
+
18
+ #ifdef HAS_VECTOR_POLYGONS
6
19
  uniform highp sampler2D u_vectorPolygonEdgeTexture;
7
20
  uniform highp sampler2D u_vectorPolygonEdgePrimitiveIndicesTexture;
8
21
  uniform highp sampler2D u_vectorPolygonGridCellIndicesTexture;
22
+ #endif
23
+
24
+ uniform highp sampler2D u_clippingEdgeTexture;
25
+ uniform highp sampler2D u_clippingEdgePrimitiveIndicesTexture;
26
+ uniform highp sampler2D u_clippingGridCellIndicesTexture;
9
27
 
10
28
  // UV-space offset from the closest point on the segment to p.
11
29
  vec2 vectorOffsetToLine(vec2 p, vec4 line)
@@ -29,12 +47,59 @@ ivec2 vectorIndexToUv(int index, ivec2 size)
29
47
  return ivec2(u, v);
30
48
  }
31
49
 
32
- // Drape clamped vector polylines onto the terrain surface. The fragment's
50
+ // Returns [start, end) index range for the grid cell containing uv. An empty
51
+ // range (start == end == 0) means a placeholder grid, so callers loop zero times.
52
+ ivec2 vectorCellRange(vec2 uv, highp sampler2D gridCellIndicesTexture)
53
+ {
54
+ ivec2 headerSize = textureSize(gridCellIndicesTexture, 0);
55
+ if (headerSize.x * headerSize.y < 3)
56
+ {
57
+ return ivec2(0);
58
+ }
59
+
60
+ int gridWidth = int(texelFetch(gridCellIndicesTexture, vectorIndexToUv(0, headerSize), 0).r);
61
+ int gridHeight = int(texelFetch(gridCellIndicesTexture, vectorIndexToUv(1, headerSize), 0).r);
62
+ int cellX = clamp(int(uv.x * float(gridWidth)), 0, gridWidth - 1);
63
+ int cellY = clamp(int(uv.y * float(gridHeight)), 0, gridHeight - 1);
64
+ int cellIndex = cellX + cellY * gridWidth;
65
+
66
+ int indexEnd = int(texelFetch(gridCellIndicesTexture, vectorIndexToUv(cellIndex + 2, headerSize), 0).r);
67
+ int indexStart = cellIndex == 0
68
+ ? 0
69
+ : int(texelFetch(gridCellIndicesTexture, vectorIndexToUv(cellIndex + 1, headerSize), 0).r);
70
+
71
+ return ivec2(indexStart, indexEnd);
72
+ }
73
+
74
+ #ifdef VECTOR_ANTIALIAS
75
+ // Half-pixel band across a line's edge over which coverage fades.
76
+ const float vectorCoverageRadius = 0.5;
77
+ #else
78
+ const float vectorCoverageRadius = 0.0;
79
+ #endif
80
+
81
+ // Drape vector polylines onto the terrain surface. The fragment's
33
82
  // tile UV picks a grid cell, then only that cell's line segments (packed in
34
83
  // tile-local UV space) are tested for proximity. Within the line width, the
35
84
  // vector color is alpha-composited over the terrain (no discard).
36
85
  vec4 vectorPolylineRender(vec2 vectorUv, vec4 baseColor)
37
86
  {
87
+ #ifdef HAS_VECTOR_POLYLINES
88
+ // Inverse UV-per-pixel Jacobian: measures line distance in screen pixels so
89
+ // width stays constant under anisotropic (oblique) foreshortening.
90
+ // Computed unconditionally so the derivatives stay in uniform control flow.
91
+ mat2 screenFromUv = inverse(mat2(dFdx(vectorUv), dFdy(vectorUv)));
92
+
93
+ #ifdef VECTOR_WIDTH_IN_METERS
94
+ mat2 metersFromUv = mat2(u_vectorMetersPerUv.x, 0.0, 0.0, u_vectorMetersPerUv.y);
95
+ // Edge distances are always compared in pixels, whatever unit a width was authored in,
96
+ // so ground meters are converted using the coarser of the two screen axes.
97
+ // Computed unconditionally so the derivatives stay in uniform control flow.
98
+ float pixelsPerMeter = 1.0 / max(
99
+ length(metersFromUv * dFdx(vectorUv)),
100
+ length(metersFromUv * dFdy(vectorUv)));
101
+ #endif
102
+
38
103
  // A tile without polylines binds a 1x1 placeholder; a real grid header
39
104
  // [gridWidth, gridHeight, ...] is at least 3 texels.
40
105
  ivec2 headerSize = textureSize(u_vectorGridCellIndicesTexture, 0);
@@ -43,27 +108,17 @@ vec4 vectorPolylineRender(vec2 vectorUv, vec4 baseColor)
43
108
  return baseColor;
44
109
  }
45
110
 
46
- // Inverse UV-per-pixel Jacobian: measures line distance in screen pixels so
47
- // width stays constant under anisotropic (oblique) foreshortening.
48
- mat2 screenFromUv = inverse(mat2(dFdx(vectorUv), dFdy(vectorUv)));
49
- int gridWidth = int(texelFetch(u_vectorGridCellIndicesTexture, vectorIndexToUv(0, headerSize), 0).r);
50
- int gridHeight = int(texelFetch(u_vectorGridCellIndicesTexture, vectorIndexToUv(1, headerSize), 0).r);
51
- int cellX = clamp(int(vectorUv.x * float(gridWidth)), 0, gridWidth - 1);
52
- int cellY = clamp(int(vectorUv.y * float(gridHeight)), 0, gridHeight - 1);
53
- int cellIndex = cellX + cellY * gridWidth;
54
-
55
- // Cell end offsets follow the two gridWidth/gridHeight texels, so cell
56
- // N's end is at texel N + 2. A cell's start is the previous cell's end
57
- // (texel N + 1); cell 0's start is implicitly 0.
58
- int indexEnd = int(texelFetch(u_vectorGridCellIndicesTexture, vectorIndexToUv(cellIndex + 2, headerSize), 0).r);
59
- int indexStart = cellIndex == 0
60
- ? 0
61
- : int(texelFetch(u_vectorGridCellIndicesTexture, vectorIndexToUv(cellIndex + 1, headerSize), 0).r);
62
-
111
+ ivec2 range = vectorCellRange(vectorUv, u_vectorGridCellIndicesTexture);
63
112
  ivec2 segmentTextureSize = textureSize(u_vectorSegmentTexture, 0);
64
113
  ivec2 primitiveTextureSize = textureSize(u_vectorWidthTexture, 0);
65
114
 
66
- for (int i = indexStart; i < indexEnd; i++)
115
+ // Signed distance to the nearest edge, negative inside the line. Consecutive
116
+ // segments overlap at their shared vertex, so only the nearest is composited;
117
+ // compositing each in turn would darken the joints.
118
+ float nearestEdgeDistance = 1.0e30;
119
+ int nearestPrimitiveIndex = -1;
120
+
121
+ for (int i = range.x; i < range.y; i++)
67
122
  {
68
123
  ivec2 segmentUv = vectorIndexToUv(i, segmentTextureSize);
69
124
  vec4 segment = texelFetch(u_vectorSegmentTexture, segmentUv, 0);
@@ -71,19 +126,56 @@ vec4 vectorPolylineRender(vec2 vectorUv, vec4 baseColor)
71
126
  int primitiveIndex = int(texelFetch(u_vectorSegmentPrimitiveIndicesTexture, segmentUv, 0).r);
72
127
  ivec2 primitiveUv = vectorIndexToUv(primitiveIndex, primitiveTextureSize);
73
128
 
74
- float lineWidth = texelFetch(u_vectorWidthTexture, primitiveUv, 0).r * 255.0;
129
+ float width = texelFetch(u_vectorWidthTexture, primitiveUv, 0).r;
130
+ float halfWidth = abs(width) * 0.5;
131
+ vec2 offsetToLine = vectorOffsetToLine(vectorUv, segment);
132
+
133
+ #if defined(VECTOR_WIDTH_MIXED_UNITS)
134
+ // A negative width marks a width in meters; see VectorPipeline.
135
+ float edgeDistance = width < 0.0
136
+ ? (length(metersFromUv * offsetToLine) - halfWidth) * pixelsPerMeter
137
+ : length(screenFromUv * offsetToLine) - halfWidth;
138
+ #elif defined(VECTOR_WIDTH_IN_METERS)
139
+ float edgeDistance = (length(metersFromUv * offsetToLine) - halfWidth) * pixelsPerMeter;
140
+ #else
141
+ float edgeDistance = length(screenFromUv * offsetToLine) - halfWidth;
142
+ #endif
143
+
144
+ if (edgeDistance < nearestEdgeDistance)
145
+ {
146
+ nearestEdgeDistance = edgeDistance;
147
+ nearestPrimitiveIndex = primitiveIndex;
148
+ }
75
149
 
76
- vec2 offsetUv = vectorOffsetToLine(vectorUv, segment);
77
- if (length(screenFromUv * offsetUv) < lineWidth)
150
+ // Coverage is saturated; no further segment can raise it. Only the nearest
151
+ // segment supplies the color, so overlapping translucent lines do not blend.
152
+ if (nearestEdgeDistance <= -vectorCoverageRadius)
78
153
  {
79
- // Alpha-composite vector over terrain.
80
- vec4 vectorColor = texelFetch(u_vectorColorTexture, primitiveUv, 0);
81
- baseColor = vectorColor * vec4(vectorColor.aaa, 1.0) + baseColor * (1.0 - vectorColor.a);
82
154
  break;
83
155
  }
84
156
  }
85
157
 
158
+ if (nearestEdgeDistance > vectorCoverageRadius)
159
+ {
160
+ return baseColor;
161
+ }
162
+
163
+ #ifdef VECTOR_ANTIALIAS
164
+ float coverage = 1.0 - smoothstep(-vectorCoverageRadius, vectorCoverageRadius, nearestEdgeDistance);
165
+ #else
166
+ float coverage = 1.0;
167
+ #endif
168
+
169
+ vectorPickPrimitiveIndex = nearestPrimitiveIndex;
170
+
171
+ // Alpha-composite vector over terrain.
172
+ ivec2 primitiveUv = vectorIndexToUv(nearestPrimitiveIndex, primitiveTextureSize);
173
+ vec4 vectorColor = texelFetch(u_vectorColorTexture, primitiveUv, 0);
174
+ vectorColor.a *= coverage;
175
+ return vectorColor * vec4(vectorColor.aaa, 1.0) + baseColor * (1.0 - vectorColor.a);
176
+ #else
86
177
  return baseColor;
178
+ #endif
87
179
  }
88
180
 
89
181
  // Composites a polygon's fill over baseColor when the pixel is inside it. A
@@ -96,6 +188,8 @@ vec4 vectorCompositePolygonFill(vec4 baseColor, int primitiveIndex, bool inside,
96
188
  return baseColor;
97
189
  }
98
190
 
191
+ vectorPickPrimitiveIndex = primitiveIndex;
192
+
99
193
  ivec2 primitiveUv = vectorIndexToUv(primitiveIndex, primitiveTextureSize);
100
194
  vec4 fillColor = texelFetch(u_vectorColorTexture, primitiveUv, 0);
101
195
  return fillColor * vec4(fillColor.aaa, 1.0) + baseColor * (1.0 - fillColor.a);
@@ -115,42 +209,22 @@ bool vectorEdgeCrossesRay(vec4 edge, vec2 p)
115
209
  return p.x < xIntersect;
116
210
  }
117
211
 
118
- // Drape clamped vector polygon fills onto the terrain surface. The fragment's
212
+ // Drape vector polygon fills onto the terrain surface. The fragment's
119
213
  // tile UV picks a grid cell whose edges were clipped to the cell on the CPU,
120
214
  // forming closed loops, so an even-odd horizontal ray cast within the cell
121
215
  // decides coverage. Edges arrive grouped by primitive; each covering
122
216
  // primitive's fill color is alpha-composited in primitive order (no discard).
123
217
  vec4 vectorPolygonRender(vec2 vectorUv, vec4 baseColor)
124
218
  {
125
- // A tile without polygons binds a 1x1 placeholder; a real grid header
126
- // [gridWidth, gridHeight, ...] is at least 3 texels.
127
- ivec2 headerSize = textureSize(u_vectorPolygonGridCellIndicesTexture, 0);
128
- if (headerSize.x * headerSize.y < 3)
129
- {
130
- return baseColor;
131
- }
132
-
133
- int gridWidth = int(texelFetch(u_vectorPolygonGridCellIndicesTexture, vectorIndexToUv(0, headerSize), 0).r);
134
- int gridHeight = int(texelFetch(u_vectorPolygonGridCellIndicesTexture, vectorIndexToUv(1, headerSize), 0).r);
135
- int cellX = clamp(int(vectorUv.x * float(gridWidth)), 0, gridWidth - 1);
136
- int cellY = clamp(int(vectorUv.y * float(gridHeight)), 0, gridHeight - 1);
137
- int cellIndex = cellX + cellY * gridWidth;
138
-
139
- // Cell end offsets follow the two gridWidth/gridHeight texels, so cell
140
- // N's end is at texel N + 2. A cell's start is the previous cell's end
141
- // (texel N + 1); cell 0's start is implicitly 0.
142
- int indexEnd = int(texelFetch(u_vectorPolygonGridCellIndicesTexture, vectorIndexToUv(cellIndex + 2, headerSize), 0).r);
143
- int indexStart = cellIndex == 0
144
- ? 0
145
- : int(texelFetch(u_vectorPolygonGridCellIndicesTexture, vectorIndexToUv(cellIndex + 1, headerSize), 0).r);
146
-
219
+ #ifdef HAS_VECTOR_POLYGONS
220
+ ivec2 range = vectorCellRange(vectorUv, u_vectorPolygonGridCellIndicesTexture);
147
221
  ivec2 edgeTextureSize = textureSize(u_vectorPolygonEdgeTexture, 0);
148
222
  ivec2 primitiveTextureSize = textureSize(u_vectorColorTexture, 0);
149
223
 
150
224
  int currentPrimitive = -1;
151
225
  bool inside = false;
152
226
 
153
- for (int i = indexStart; i < indexEnd; i++)
227
+ for (int i = range.x; i < range.y; i++)
154
228
  {
155
229
  ivec2 edgeUv = vectorIndexToUv(i, edgeTextureSize);
156
230
  vec4 edge = texelFetch(u_vectorPolygonEdgeTexture, edgeUv, 0);
@@ -175,4 +249,57 @@ vec4 vectorPolygonRender(vec2 vectorUv, vec4 baseColor)
175
249
  baseColor = vectorCompositePolygonFill(baseColor, currentPrimitive, inside, primitiveTextureSize);
176
250
 
177
251
  return baseColor;
252
+ #else
253
+ return baseColor;
254
+ #endif
255
+ }
256
+
257
+ // Pick color of the vector draped over this fragment, or the surface's own where none is.
258
+ vec4 vectorPickColorOver(vec4 surfacePickColor)
259
+ {
260
+ if (vectorPickPrimitiveIndex < 0)
261
+ {
262
+ return surfacePickColor;
263
+ }
264
+
265
+ ivec2 primitiveTextureSize = textureSize(u_vectorPickColorTexture, 0);
266
+ return texelFetch(u_vectorPickColorTexture, vectorIndexToUv(vectorPickPrimitiveIndex, primitiveTextureSize), 0);
267
+ }
268
+
269
+ // Returns true if uv is inside any polygon in its grid cell
270
+ // If performing inverse-clipping, it is up to the caller to negate the result.
271
+ bool vectorClip(vec2 uv)
272
+ {
273
+ // Clamp to [0, 1] to address small interpolation precision error that can occur at the boundaries of tiles
274
+ uv = clamp(uv, vec2(0.0), vec2(1.0));
275
+ ivec2 range = vectorCellRange(uv, u_clippingGridCellIndicesTexture);
276
+ ivec2 edgeTextureSize = textureSize(u_clippingEdgeTexture, 0);
277
+
278
+ int currentPrimitive = -1;
279
+ bool inside = false;
280
+
281
+ for (int i = range.x; i < range.y; i++)
282
+ {
283
+ ivec2 edgeUv = vectorIndexToUv(i, edgeTextureSize);
284
+ int primitiveIndex = int(texelFetch(u_clippingEdgePrimitiveIndicesTexture, edgeUv, 0).r);
285
+
286
+ // New primitive: the previous group is complete, check if it was inside and return early if so.
287
+ if (primitiveIndex != currentPrimitive)
288
+ {
289
+ if (inside)
290
+ {
291
+ return true;
292
+ }
293
+ currentPrimitive = primitiveIndex;
294
+ inside = false;
295
+ }
296
+
297
+ vec4 edge = texelFetch(u_clippingEdgeTexture, edgeUv, 0);
298
+ if (vectorEdgeCrossesRay(edge, uv))
299
+ {
300
+ inside = !inside;
301
+ }
302
+ }
303
+
304
+ return inside; // last group
178
305
  }