@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
@@ -14,6 +14,8 @@ import PrimitiveType from "../Core/PrimitiveType.js";
14
14
  import Quaternion from "../Core/Quaternion.js";
15
15
  import RuntimeError from "../Core/RuntimeError.js";
16
16
  import Sampler from "../Renderer/Sampler.js";
17
+ import TextureMagnificationFilter from "../Renderer/TextureMagnificationFilter.js";
18
+ import TextureMinificationFilter from "../Renderer/TextureMinificationFilter.js";
17
19
  import getAccessorByteStride from "./GltfPipeline/getAccessorByteStride.js";
18
20
  import getComponentReader from "./GltfPipeline/getComponentReader.js";
19
21
  import numberOfComponentsForType from "./GltfPipeline/numberOfComponentsForType.js";
@@ -1570,7 +1572,41 @@ function loadIndices(
1570
1572
  return indicesPlan;
1571
1573
  }
1572
1574
 
1573
- function loadTexture(loader, textureInfo, frameState, samplerOverride) {
1575
+ /**
1576
+ * Returns a copy of <code>sampler</code> with its minification and magnification
1577
+ * filters replaced. Undefined filters keep the value already on the sampler, and
1578
+ * every other property, in particular the wrap modes declared by the glTF, is
1579
+ * carried over unchanged.
1580
+ *
1581
+ * @param {Sampler} sampler The sampler created from the glTF.
1582
+ * @param {TextureMinificationFilter} [minificationFilter] The minification filter to apply instead of the one on <code>sampler</code>.
1583
+ * @param {TextureMagnificationFilter} [magnificationFilter] The magnification filter to apply instead of the one on <code>sampler</code>.
1584
+ * @returns {Sampler} A sampler using the given filters and the original wrap modes.
1585
+ *
1586
+ * @private
1587
+ */
1588
+ function overrideSamplerFilters(
1589
+ sampler,
1590
+ minificationFilter,
1591
+ magnificationFilter,
1592
+ ) {
1593
+ return new Sampler({
1594
+ wrapR: sampler.wrapR,
1595
+ wrapS: sampler.wrapS,
1596
+ wrapT: sampler.wrapT,
1597
+ minificationFilter: minificationFilter ?? sampler.minificationFilter,
1598
+ magnificationFilter: magnificationFilter ?? sampler.magnificationFilter,
1599
+ maximumAnisotropy: sampler.maximumAnisotropy,
1600
+ });
1601
+ }
1602
+
1603
+ function loadTexture(
1604
+ loader,
1605
+ textureInfo,
1606
+ frameState,
1607
+ minificationFilterOverride,
1608
+ magnificationFilterOverride,
1609
+ ) {
1574
1610
  const gltf = loader.gltfJson;
1575
1611
  const imageId = GltfLoaderUtil.getImageIdFromTexture({
1576
1612
  gltf: gltf,
@@ -1618,9 +1654,17 @@ function loadTexture(loader, textureInfo, frameState, samplerOverride) {
1618
1654
  // Save this finish callback by the loader index so it can be called
1619
1655
  // in process().
1620
1656
  loader._textureCallbacks[index] = () => {
1621
- textureReader.texture = textureLoader.texture;
1622
- if (defined(samplerOverride)) {
1623
- textureReader.texture.sampler = samplerOverride;
1657
+ const texture = textureLoader.texture;
1658
+ textureReader.texture = texture;
1659
+ if (
1660
+ defined(minificationFilterOverride) ||
1661
+ defined(magnificationFilterOverride)
1662
+ ) {
1663
+ texture.sampler = overrideSamplerFilters(
1664
+ texture.sampler,
1665
+ minificationFilterOverride,
1666
+ magnificationFilterOverride,
1667
+ );
1624
1668
  }
1625
1669
  };
1626
1670
 
@@ -2013,7 +2057,10 @@ function loadFeatureIdTexture(
2013
2057
  loader,
2014
2058
  textureInfo,
2015
2059
  frameState,
2016
- Sampler.NEAREST, // Feature ID textures require nearest sampling
2060
+ // Feature ID textures require nearest sampling. Only the filters are
2061
+ // overridden so the wrap modes declared by the glTF are preserved.
2062
+ TextureMinificationFilter.NEAREST,
2063
+ TextureMagnificationFilter.NEAREST,
2017
2064
  );
2018
2065
 
2019
2066
  // Though the new channel index is more future-proof, this implementation
@@ -2048,7 +2095,10 @@ function loadFeatureIdTextureLegacy(
2048
2095
  loader,
2049
2096
  textureInfo,
2050
2097
  frameState,
2051
- Sampler.NEAREST, // Feature ID textures require nearest sampling
2098
+ // Feature ID textures require nearest sampling. Only the filters are
2099
+ // overridden so the wrap modes declared by the glTF are preserved.
2100
+ TextureMinificationFilter.NEAREST,
2101
+ TextureMagnificationFilter.NEAREST,
2052
2102
  );
2053
2103
 
2054
2104
  featureIdTexture.textureReader.channels = featureIds.channels;
@@ -4,7 +4,7 @@ import defined from "../Core/defined.js";
4
4
  import RuntimeError from "../Core/RuntimeError.js";
5
5
  import ResourceLoader from "./ResourceLoader.js";
6
6
  import ResourceLoaderState from "./ResourceLoaderState.js";
7
- import { loadSpz } from "@spz-loader/core";
7
+ import SpzDecoder from "./SpzDecoder.js";
8
8
 
9
9
  // Cumulative number of SH coefficient floats per splat per channel for each
10
10
  // degree. Degree 0 has no extra SH data (base color is stored separately in
@@ -234,9 +234,10 @@ class GltfSpzLoader extends ResourceLoader {
234
234
  }
235
235
  }
236
236
 
237
- const decodePromise = loadSpz(this._bufferViewTypedArray, {
238
- unpackOptions: { coordinateSystem: "UNSPECIFIED" },
239
- });
237
+ // Buffer views can be shared by cached resources. Transfer a private copy
238
+ // so decoding does not detach the cached source.
239
+ const spzData = new Uint8Array(this._bufferViewTypedArray);
240
+ const decodePromise = SpzDecoder.decode(spzData);
240
241
 
241
242
  if (!defined(decodePromise)) {
242
243
  return false;
@@ -28,7 +28,7 @@ const HeightReference = {
28
28
  RELATIVE_TO_GROUND: 2,
29
29
 
30
30
  /**
31
- * The position is clamped to terain.
31
+ * The position is clamped to terrain.
32
32
  * @type {number}
33
33
  * @constant
34
34
  */
@@ -12,8 +12,10 @@ import defined from "../Core/defined.js";
12
12
 
13
13
  /** @import Cesium3DTile from "./Cesium3DTile.js"; */
14
14
  /** @import Cesium3DTileset from "./Cesium3DTileset.js"; */
15
+ /** @import HeightReference from "./HeightReference.js"; */
15
16
  /** @import Rectangle from "../Core/Rectangle.js"; */
16
17
  /** @import Resource from "../Core/Resource.js"; */
18
+ /** @import Scene from "./Scene.js"; */
17
19
 
18
20
  /**
19
21
  * A Mapbox Vector Tiles (MVT) data provider. Loads .mvt or .pbf tiles, converting tiles
@@ -36,6 +38,12 @@ class MVTDataProvider extends UrlTemplate3DTilesDataProvider {
36
38
  * @param {number} [options.maxZoom=14] Maximum zoom level represented in the generated tileset.
37
39
  * @param {Rectangle} [options.extent] Optional geographic extent in radians to constrain the generated tile tree.
38
40
  * @param {string} [options.featureIdProperty] MVT property name to use as feature ID.
41
+ * @param {HeightReference} [options.heightReference] Drapes the decoded points, lines and polygons onto the
42
+ * surfaces selected by the value: {@link HeightReference.CLAMP_TO_TERRAIN} drapes onto the globe,
43
+ * {@link HeightReference.CLAMP_TO_3D_TILE} drapes onto 3D Tiles and models, and
44
+ * {@link HeightReference.CLAMP_TO_GROUND} drapes onto both. Requires <code>options.scene</code>.
45
+ * @param {Scene} [options.scene] The scene the generated tileset is rendered in, required when
46
+ * <code>options.heightReference</code> is a clamping value.
39
47
  * @returns {Promise<MVTDataProvider>}
40
48
  */
41
49
  static async fromUrl(url, options) {
@@ -51,6 +59,7 @@ class MVTDataProvider extends UrlTemplate3DTilesDataProvider {
51
59
  */
52
60
  _createTilesetLoadOptions() {
53
61
  return {
62
+ ...super._createTilesetLoadOptions(),
54
63
  skipLevelOfDetail: false,
55
64
  enablePick: true,
56
65
  featureIdLabel: "featureId_0",
@@ -13,6 +13,7 @@ import Ellipsoid from "../../Core/Ellipsoid.js";
13
13
  import Event from "../../Core/Event.js";
14
14
  import Matrix3 from "../../Core/Matrix3.js";
15
15
  import Matrix4 from "../../Core/Matrix4.js";
16
+ import Rectangle from "../../Core/Rectangle.js";
16
17
  import Resource from "../../Core/Resource.js";
17
18
  import RuntimeError from "../../Core/RuntimeError.js";
18
19
  import Pass from "../../Renderer/Pass.js";
@@ -46,6 +47,8 @@ import StyleCommandsNeeded from "./StyleCommandsNeeded.js";
46
47
  import pickModel from "./pickModel.js";
47
48
  import ModelImagery from "./ModelImagery.js";
48
49
 
50
+ /** @import { VectorTileData } from "../../Core/VectorPipeline.js"; */
51
+
49
52
  /**
50
53
  * <div class="notice">
51
54
  * To construct a Model, call {@link Model.fromGltfAsync}. Do not call the constructor directly.
@@ -399,6 +402,30 @@ function Model(options) {
399
402
  this._clippingPolygons = clippingPolygons;
400
403
  }
401
404
  this._clippingPolygonsState = 0; // If this value changes, the shaders need to be regenerated.
405
+ this._clippingPolygonsNeedRebake = false; // If true, the clipping textures are rebaked.
406
+ this._removeClippingPolygonAdded = undefined;
407
+ this._removeClippingPolygonRemoved = undefined;
408
+ updateClippingPolygonListeners(this);
409
+
410
+ /**
411
+ * Vector lookup data baked for this model's bounding region by the scene's
412
+ * VectorProvider, draping vector data onto the model's surface.
413
+ * @type {VectorTileData|undefined}
414
+ * @ignore
415
+ */
416
+ this._vectorData = undefined;
417
+
418
+ this._vectorLookupFlags = 0; // If this value changes, the shaders need to be regenerated.
419
+
420
+ /*
421
+ * Textures and other intermediate data used in polygon clipping workflows.
422
+ * Clipping polygons build on top of the vector tile data system (both rely on the same rendering technique), thus the type.
423
+ * @type {VectorTileData | undefined}
424
+ * @private
425
+ */
426
+ this._clippingPolygonData = undefined;
427
+
428
+ this._rectangle = new Rectangle();
402
429
 
403
430
  this._modelImagery = new ModelImagery(this);
404
431
 
@@ -1376,7 +1403,17 @@ Object.defineProperties(Model.prototype, {
1376
1403
  if (value !== this._clippingPolygons) {
1377
1404
  // Handle destroying old clipping polygons, new clipping polygons ownership
1378
1405
  ClippingPolygonCollection.setOwner(value, this, "_clippingPolygons");
1406
+ updateClippingPolygonListeners(this);
1379
1407
  this.resetDrawCommands();
1408
+
1409
+ this._clippingPolygonsState = 0;
1410
+ this._clippingPolygonsNeedRebake = true;
1411
+ if (defined(this._clippingPolygonData)) {
1412
+ ClippingPolygonCollection.releaseRectangleData(
1413
+ this._clippingPolygonData,
1414
+ );
1415
+ this._clippingPolygonData = undefined;
1416
+ }
1380
1417
  }
1381
1418
  },
1382
1419
  },
@@ -1788,6 +1825,41 @@ Object.defineProperties(Model.prototype, {
1788
1825
  },
1789
1826
  });
1790
1827
 
1828
+ /**
1829
+ * A rectangle that bounds the model in geodetic coordinates. For 3D tile content with a
1830
+ * region bounding volume this is the tile's rectangle. Otherwise the model's bounding sphere
1831
+ * is projected onto the given ellipsoid.
1832
+ *
1833
+ * @param {Ellipsoid} [ellipsoid=Ellipsoid.default] Projects the bounding sphere (for models without a region bounding volume).
1834
+ * @returns {Rectangle} The bounding rectangle.
1835
+ *
1836
+ * @exception {DeveloperError} The model is not loaded. Use Model.readyEvent or wait for Model.ready to be true.
1837
+ *
1838
+ * @private
1839
+ */
1840
+ Model.prototype.getRectangle = function (ellipsoid) {
1841
+ //>>includeStart('debug', pragmas.debug);
1842
+ if (!this._ready) {
1843
+ throw new DeveloperError(
1844
+ "The model is not loaded. Use Model.readyEvent or wait for Model.ready to be true.",
1845
+ );
1846
+ }
1847
+ //>>includeEnd('debug');
1848
+
1849
+ // A region bounding volume's rectangle is fixed in WGS84, so the ellipsoid argument does not apply.
1850
+ const bv = this._content?.tile?.contentBoundingVolume;
1851
+ if (defined(bv?.rectangle)) {
1852
+ return bv.rectangle;
1853
+ }
1854
+
1855
+ ellipsoid = ellipsoid ?? this._scene?.ellipsoid ?? Ellipsoid.default;
1856
+ return Rectangle.fromBoundingSphere(
1857
+ this.boundingSphere,
1858
+ ellipsoid,
1859
+ this._rectangle,
1860
+ );
1861
+ };
1862
+
1791
1863
  /**
1792
1864
  * Returns the node with the given <code>name</code> in the glTF. This is used to
1793
1865
  * modify a node's transform for user-defined animation.
@@ -2016,6 +2088,7 @@ Model.prototype.update = function (frameState) {
2016
2088
  updateSkipLevelOfDetail(this, frameState);
2017
2089
  updateClippingPlanes(this, frameState);
2018
2090
  updateClippingPolygons(this, frameState);
2091
+ updateVectorLookup(this, frameState);
2019
2092
  updateSceneMode(this, frameState);
2020
2093
  updateFog(this, frameState);
2021
2094
  updateVerticalExaggeration(this, frameState);
@@ -2219,22 +2292,140 @@ function updateClippingPlanes(model, frameState) {
2219
2292
  }
2220
2293
  }
2221
2294
 
2295
+ // Only the collection's owner subscribes to its add/remove events. Tileset-owned
2296
+ // collections are handled by the tileset, which marks its tiles dirty instead.
2297
+ function updateClippingPolygonListeners(model) {
2298
+ model._removeClippingPolygonAdded =
2299
+ model._removeClippingPolygonAdded && model._removeClippingPolygonAdded();
2300
+ model._removeClippingPolygonRemoved =
2301
+ model._removeClippingPolygonRemoved &&
2302
+ model._removeClippingPolygonRemoved();
2303
+
2304
+ const clippingPolygons = model._clippingPolygons;
2305
+ if (!defined(clippingPolygons) || clippingPolygons.owner !== model) {
2306
+ return;
2307
+ }
2308
+
2309
+ const markDirty = () => {
2310
+ model._clippingPolygonsNeedRebake = true;
2311
+ };
2312
+ model._removeClippingPolygonAdded =
2313
+ clippingPolygons.polygonAdded.addEventListener(markDirty);
2314
+ model._removeClippingPolygonRemoved =
2315
+ clippingPolygons.polygonRemoved.addEventListener(markDirty);
2316
+ }
2317
+
2222
2318
  function updateClippingPolygons(model, frameState) {
2223
- // Update the clipping polygon collection / state for this model to detect any changes.
2319
+ const clippingPolygons = model._clippingPolygons;
2320
+ const enabled = model.isClippingPolygonsEnabled();
2321
+
2322
+ // Detect enabled/inverse changes, which require shader regeneration.
2224
2323
  let currentClippingPolygonsState = 0;
2225
- if (model.isClippingPolygonsEnabled()) {
2226
- if (model._clippingPolygons.owner === model) {
2227
- model._clippingPolygons.update(frameState);
2228
- model._clippingPolygons.queueCommands(frameState);
2324
+ if (enabled) {
2325
+ if (clippingPolygons.owner === model) {
2326
+ clippingPolygons.update(frameState);
2229
2327
  }
2230
- currentClippingPolygonsState =
2231
- model._clippingPolygons.clippingPolygonsState;
2328
+ currentClippingPolygonsState = clippingPolygons.clippingPolygonsState;
2232
2329
  }
2233
2330
 
2234
2331
  if (currentClippingPolygonsState !== model._clippingPolygonsState) {
2235
2332
  model.resetDrawCommands();
2236
2333
  model._clippingPolygonsState = currentClippingPolygonsState;
2237
2334
  }
2335
+
2336
+ const wasClipped = (model._clippingPolygonData?.polygonRings.length ?? 0) > 0;
2337
+
2338
+ // A polygon add/remove or a model move only requires rebaking the clipping textures.
2339
+ if (model._clippingPolygonsNeedRebake) {
2340
+ model._clippingPolygonsNeedRebake = false;
2341
+ if (defined(model._clippingPolygonData)) {
2342
+ ClippingPolygonCollection.releaseRectangleData(
2343
+ model._clippingPolygonData,
2344
+ );
2345
+ model._clippingPolygonData = undefined;
2346
+ }
2347
+ }
2348
+
2349
+ if (!enabled || !model._ready) {
2350
+ return;
2351
+ }
2352
+
2353
+ if (!defined(model._clippingPolygonData)) {
2354
+ model._clippingPolygonData = clippingPolygons.requestRectangleData(
2355
+ model.getRectangle(clippingPolygons.ellipsoid),
2356
+ frameState.context,
2357
+ );
2358
+ }
2359
+
2360
+ const isClipped = (model._clippingPolygonData?.polygonRings.length ?? 0) > 0;
2361
+ if (wasClipped !== isClipped) {
2362
+ // Rerun the model pipeline to enable/disable clipping
2363
+ model.resetDrawCommands();
2364
+ }
2365
+ }
2366
+
2367
+ const scratchVectorRectangle = new Rectangle();
2368
+
2369
+ function releaseVectorData(model) {
2370
+ if (!defined(model._vectorData)) {
2371
+ return;
2372
+ }
2373
+
2374
+ model._scene?.vectorProvider?.releaseTileData(model._vectorData);
2375
+ model._vectorData = undefined;
2376
+ }
2377
+
2378
+ // Each kind of geometry declares its own lookup textures, so the mix drives the shader.
2379
+ function vectorLookupFlags(vectorData) {
2380
+ if (vectorData?.show !== true) {
2381
+ return 0;
2382
+ }
2383
+
2384
+ let flags = 1;
2385
+ flags |= vectorData.hasPolylines ? 2 : 0;
2386
+ flags |= vectorData.hasPolygons ? 4 : 0;
2387
+ return flags;
2388
+ }
2389
+
2390
+ function updateVectorLookup(model, frameState) {
2391
+ const provider = model._scene?.vectorProvider;
2392
+ // HeightReference.CLAMP_TO_3D_TILE covers tileset content only, not standalone glTF.
2393
+ const active =
2394
+ defined(provider) &&
2395
+ defined(model._content) &&
2396
+ model.ready &&
2397
+ frameState.mode === SceneMode.SCENE3D;
2398
+
2399
+ if (active) {
2400
+ // A tile's content region is far tighter than a rectangle circumscribing the bounding sphere.
2401
+ const rectangle =
2402
+ model._content?.tile?.contentBoundingVolume.rectangle ??
2403
+ Rectangle.fromBoundingSphere(
2404
+ model.boundingSphere,
2405
+ provider.ellipsoid,
2406
+ scratchVectorRectangle,
2407
+ );
2408
+ model._vectorData = defined(model._vectorData)
2409
+ ? provider.updateDataForRectangle(
2410
+ rectangle,
2411
+ frameState.context,
2412
+ model._vectorData,
2413
+ HeightReference.CLAMP_TO_3D_TILE,
2414
+ )
2415
+ : provider.requestDataForRectangle(
2416
+ rectangle,
2417
+ frameState.context,
2418
+ HeightReference.CLAMP_TO_3D_TILE,
2419
+ );
2420
+ } else {
2421
+ releaseVectorData(model);
2422
+ }
2423
+
2424
+ const flags = vectorLookupFlags(model._vectorData);
2425
+ if (flags !== model._vectorLookupFlags) {
2426
+ model.resetDrawCommands();
2427
+ model._vectorLookupFlags = flags;
2428
+ }
2238
2429
  }
2239
2430
 
2240
2431
  function updateSceneMode(model, frameState) {
@@ -2502,6 +2693,10 @@ function updateSceneGraph(model, frameState) {
2502
2693
  ? model._clampedModelMatrix
2503
2694
  : model.modelMatrix;
2504
2695
  sceneGraph.updateModelMatrix(modelMatrix, frameState);
2696
+ if (model._updateModelMatrix) {
2697
+ // The model moved, so re-bake the clipping textures for its new rectangle.
2698
+ model._clippingPolygonsNeedRebake = true;
2699
+ }
2505
2700
  model._updateModelMatrix = false;
2506
2701
  }
2507
2702
 
@@ -2561,6 +2756,22 @@ function updateShowCreditsOnScreen(model) {
2561
2756
  }
2562
2757
  }
2563
2758
 
2759
+ /**
2760
+ * Determines whether a model is wholly clipped away by inverse clipping. In
2761
+ * inverse mode a model with no polygon geometry lies entirely outside every
2762
+ * polygon, so all of it is clipped and it should not be drawn.
2763
+ * @param {Model} model
2764
+ * @returns {boolean}
2765
+ * @private
2766
+ */
2767
+ function isModelClippedAwayByInversePolygons(model) {
2768
+ return (
2769
+ model.isClippingPolygonsEnabled() &&
2770
+ model._clippingPolygons.inverse &&
2771
+ (model._clippingPolygonData?.polygonRings.length ?? 0) === 0
2772
+ );
2773
+ }
2774
+
2564
2775
  function submitDrawCommands(model, frameState) {
2565
2776
  // Check that show is true after draw commands are built;
2566
2777
  // we want the user to be able to instantly see the model
@@ -2581,7 +2792,8 @@ function submitDrawCommands(model, frameState) {
2581
2792
  model._show &&
2582
2793
  model._computedScale !== 0 &&
2583
2794
  displayConditionPassed &&
2584
- (!invisible || silhouette);
2795
+ (!invisible || silhouette) &&
2796
+ !isModelClippedAwayByInversePolygons(model);
2585
2797
 
2586
2798
  const passes = frameState.passes;
2587
2799
  const submitCommandsForPass =
@@ -2806,6 +3018,16 @@ Model.prototype.isClippingPolygonsEnabled = function () {
2806
3018
  );
2807
3019
  };
2808
3020
 
3021
+ /**
3022
+ * Gets whether draped vector data is baked and renderable for this model.
3023
+ *
3024
+ * @returns {boolean} <code>true</code> if the model drapes vector data.
3025
+ * @private
3026
+ */
3027
+ Model.prototype.hasDrapedVectors = function () {
3028
+ return this._vectorData?.show === true;
3029
+ };
3030
+
2809
3031
  /**
2810
3032
  * Returns true if this object was destroyed; otherwise, false.
2811
3033
  * <br /><br />
@@ -2853,6 +3075,8 @@ Model.prototype.destroy = function () {
2853
3075
  this.destroyPipelineResources();
2854
3076
  this.destroyModelResources();
2855
3077
 
3078
+ releaseVectorData(this);
3079
+
2856
3080
  // Remove callbacks for height reference behavior.
2857
3081
  if (defined(this._removeUpdateHeightCallback)) {
2858
3082
  this._removeUpdateHeightCallback();
@@ -2864,6 +3088,12 @@ Model.prototype.destroy = function () {
2864
3088
  this._terrainProviderChangedCallback = undefined;
2865
3089
  }
2866
3090
 
3091
+ // Remove clipping polygon event listeners if this model subscribed to them.
3092
+ this._removeClippingPolygonAdded =
3093
+ this._removeClippingPolygonAdded && this._removeClippingPolygonAdded();
3094
+ this._removeClippingPolygonRemoved =
3095
+ this._removeClippingPolygonRemoved && this._removeClippingPolygonRemoved();
3096
+
2867
3097
  // Only destroy the ClippingPlaneCollection if this is the owner.
2868
3098
  const clippingPlaneCollection = this._clippingPlanes;
2869
3099
  if (
@@ -2875,15 +3105,11 @@ Model.prototype.destroy = function () {
2875
3105
  }
2876
3106
  this._clippingPlanes = undefined;
2877
3107
 
2878
- // Only destroy the ClippingPolygonCollection if this is the owner.
2879
- const clippingPolygonCollection = this._clippingPolygons;
2880
- if (
2881
- defined(clippingPolygonCollection) &&
2882
- !clippingPolygonCollection.isDestroyed() &&
2883
- clippingPolygonCollection.owner === this
2884
- ) {
2885
- clippingPolygonCollection.destroy();
3108
+ if (defined(this._clippingPolygonData)) {
3109
+ ClippingPolygonCollection.releaseRectangleData(this._clippingPolygonData);
2886
3110
  }
3111
+ this._clippingPolygonData = undefined;
3112
+
2887
3113
  this._clippingPolygons = undefined;
2888
3114
 
2889
3115
  // Only destroy the ImageBasedLighting if this is the owner.
@@ -310,6 +310,10 @@ class Model3DTileContent {
310
310
  model._clippingPolygonsState = 0;
311
311
  }
312
312
 
313
+ if (tile.clippingPolygonsNeedRebake) {
314
+ model._clippingPolygonsNeedRebake = true;
315
+ }
316
+
313
317
  model.update(frameState);
314
318
 
315
319
  if (!this._ready && model.ready) {
@@ -490,6 +494,7 @@ function makeModelOptions(tileset, tile, content, additionalOptions) {
490
494
  incrementallyLoadTextures: false,
491
495
  customShader: tileset.customShader,
492
496
  content: content,
497
+ scene: tileset._scene,
493
498
  colorBlendMode: tileset.colorBlendMode,
494
499
  colorBlendAmount: tileset.colorBlendAmount,
495
500
  lightColor: tileset.lightColor,
@@ -1,7 +1,11 @@
1
1
  import combine from "../../Core/combine.js";
2
- import ModelClippingPolygonsStageVS from "../../Shaders/Model/ModelClippingPolygonsStageVS.js";
3
2
  import ModelClippingPolygonsStageFS from "../../Shaders/Model/ModelClippingPolygonsStageFS.js";
3
+ import ModelClippingPolygonsStageVS from "../../Shaders/Model/ModelClippingPolygonsStageVS.js";
4
4
  import ShaderDestination from "../../Renderer/ShaderDestination.js";
5
+ import VectorCommon from "../../Shaders/VectorCommon.js";
6
+ import Cartesian2 from "../../Core/Cartesian2.js";
7
+ import CesiumMath from "../../Core/Math.js";
8
+ import Rectangle from "../../Core/Rectangle.js";
5
9
 
6
10
  /**
7
11
  * The model clipping planes stage is responsible for applying clipping planes to the model.
@@ -14,6 +18,10 @@ const ModelClippingPolygonsPipelineStage = {
14
18
  name: "ModelClippingPolygonsPipelineStage", // Helps with debugging
15
19
  };
16
20
 
21
+ const scratchCameraUv = new Cartesian2();
22
+ const scratchRectangleInverseSize = new Cartesian2();
23
+ const defaultRectangle = Rectangle.MAX_VALUE;
24
+
17
25
  /**
18
26
  * Process a model for polygon clipping. This modifies the following parts of the render resources:
19
27
  *
@@ -54,40 +62,67 @@ ModelClippingPolygonsPipelineStage.process = function (
54
62
  );
55
63
  }
56
64
 
57
- shaderBuilder.addDefine(
58
- "CLIPPING_POLYGON_REGIONS_LENGTH",
59
- clippingPolygons.extentsCount,
60
- ShaderDestination.BOTH,
61
- );
65
+ shaderBuilder.addVarying("vec2", "v_clippingUv");
62
66
 
63
67
  shaderBuilder.addUniform(
64
- "sampler2D",
65
- "model_clippingDistance",
66
- ShaderDestination.FRAGMENT,
68
+ "vec2",
69
+ "u_clippingCameraUv",
70
+ ShaderDestination.VERTEX,
67
71
  );
68
72
 
69
73
  shaderBuilder.addUniform(
70
- "sampler2D",
71
- "model_clippingExtents",
74
+ "vec2",
75
+ "u_clippingRectangleInverseSize",
72
76
  ShaderDestination.VERTEX,
73
77
  );
74
78
 
75
- shaderBuilder.addVarying("vec2", "v_clippingPosition");
76
- shaderBuilder.addVarying("int", "v_regionIndex", "flat");
77
79
  shaderBuilder.addVertexLines(ModelClippingPolygonsStageVS);
80
+ shaderBuilder.addFragmentLines(VectorCommon);
78
81
  shaderBuilder.addFragmentLines(ModelClippingPolygonsStageFS);
79
82
 
80
83
  const uniformMap = {
81
- model_clippingDistance: function () {
84
+ // The UV coordinates of the camera within the model's clipping rectangle.
85
+ u_clippingCameraUv: function () {
86
+ const rectangle =
87
+ model._clippingPolygonData?.rectangle ?? defaultRectangle;
88
+ const halfWidth = rectangle.width * 0.5;
89
+ const centerLongitude = rectangle.west + halfWidth;
90
+ const carto = frameState.camera.positionCartographic;
91
+
92
+ const longitudeOffset =
93
+ CesiumMath.negativePiToPi(carto.longitude - centerLongitude) +
94
+ halfWidth;
95
+ return Cartesian2.fromElements(
96
+ longitudeOffset / rectangle.width,
97
+ (carto.latitude - rectangle.south) / rectangle.height,
98
+ scratchCameraUv,
99
+ );
100
+ },
101
+ u_clippingRectangleInverseSize: function () {
102
+ const rectangle =
103
+ model._clippingPolygonData?.rectangle ?? defaultRectangle;
104
+ return Cartesian2.fromElements(
105
+ 1.0 / rectangle.width,
106
+ 1.0 / rectangle.height,
107
+ scratchRectangleInverseSize,
108
+ );
109
+ },
110
+ u_clippingEdgeTexture: function () {
111
+ return (
112
+ model._clippingPolygonData?.polygonEdgeTexture ??
113
+ frameState.context.defaultTexture
114
+ );
115
+ },
116
+ u_clippingEdgePrimitiveIndicesTexture: function () {
82
117
  return (
83
- // The later should never happen during a render pass, see https://github.com/CesiumGS/cesium/issues/12725
84
- clippingPolygons.clippingTexture ?? frameState.context.defaultTexture
118
+ model._clippingPolygonData?.polygonEdgePrimitiveIndicesTexture ??
119
+ frameState.context.defaultTexture
85
120
  );
86
121
  },
87
- model_clippingExtents: function () {
122
+ u_clippingGridCellIndicesTexture: function () {
88
123
  return (
89
- // The later should never happen during a render pass, see https://github.com/CesiumGS/cesium/issues/12725
90
- clippingPolygons.extentsTexture ?? frameState.context.defaultTexture
124
+ model._clippingPolygonData?.polygonGridCellIndicesTexture ??
125
+ frameState.context.defaultTexture
91
126
  );
92
127
  },
93
128
  };
@@ -25,7 +25,7 @@ function ModelRenderResources(model) {
25
25
  * @type {ShaderBuilder}
26
26
  * @readonly
27
27
  *
28
- * @private
28
+ * @ignore
29
29
  */
30
30
  this.shaderBuilder = new ShaderBuilder();
31
31
 
@@ -44,9 +44,8 @@ function ModelRenderResources(model) {
44
44
  * values.
45
45
  *
46
46
  * @type {Object<string, Function>}
47
- * @readonly
48
47
  *
49
- * @private
48
+ * @ignore
50
49
  */
51
50
  this.uniformMap = {};
52
51