@hztxi/cesium-engine 25.0.6 → 26.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (484) hide show
  1. package/Build/Workers/chunk-2GJAWJJT.js +1344 -0
  2. package/Build/Workers/chunk-2J2VS5RI.js +288 -0
  3. package/Build/Workers/chunk-2NCNUVAT.js +56 -0
  4. package/Build/Workers/chunk-2ZYRUVVU.js +301 -0
  5. package/Build/Workers/chunk-36IU7N4V.js +1284 -0
  6. package/Build/Workers/chunk-375SHKGW.js +44 -0
  7. package/Build/Workers/chunk-3BDLET5S.js +198 -0
  8. package/Build/Workers/chunk-3PRHI4KX.js +241 -0
  9. package/Build/Workers/chunk-3R6E2SH4.js +672 -0
  10. package/Build/Workers/chunk-3ZKKXEXL.js +415 -0
  11. package/Build/Workers/chunk-47KVKPTO.js +415 -0
  12. package/Build/Workers/chunk-4N227IPR.js +973 -0
  13. package/Build/Workers/chunk-4P6OAPBM.js +97 -0
  14. package/Build/Workers/chunk-4ZOLEPZK.js +519 -0
  15. package/Build/Workers/chunk-5EF3WWQG.js +352 -0
  16. package/Build/Workers/chunk-5FYUSABU.js +945 -0
  17. package/Build/Workers/chunk-5I76476T.js +288 -0
  18. package/Build/Workers/chunk-5PBZKBAP.js +511 -0
  19. package/Build/Workers/chunk-5RVAAW26.js +82 -0
  20. package/Build/Workers/chunk-5VWK76PO.js +511 -0
  21. package/Build/Workers/chunk-5WU37CUJ.js +630 -0
  22. package/Build/Workers/chunk-6EBDN5WS.js +97 -0
  23. package/Build/Workers/chunk-75HIWCEV.js +301 -0
  24. package/Build/Workers/chunk-77DBX23X.js +455 -0
  25. package/Build/Workers/chunk-7AMVPXZY.js +1992 -0
  26. package/Build/Workers/chunk-7BMDD6SM.js +124 -0
  27. package/Build/Workers/chunk-7GQOWCSN.js +959 -0
  28. package/Build/Workers/chunk-7J2ONMKC.js +198 -0
  29. package/Build/Workers/chunk-7MHUHXZZ.js +219 -0
  30. package/Build/Workers/chunk-7MQPHOAS.js +455 -0
  31. package/Build/Workers/chunk-7NJ5O7TP.js +387 -0
  32. package/Build/Workers/chunk-7OME2OKM.js +171 -0
  33. package/Build/Workers/chunk-7Y642MCO.js +352 -0
  34. package/Build/Workers/chunk-7ZFKBLUE.js +1054 -0
  35. package/Build/Workers/chunk-A2BROW3D.js +352 -0
  36. package/Build/Workers/chunk-A7LGY5XS.js +140 -0
  37. package/Build/Workers/chunk-AN2NVYL6.js +1483 -0
  38. package/Build/Workers/chunk-B4XOVZGA.js +476 -0
  39. package/Build/Workers/chunk-B7PT2VL5.js +630 -0
  40. package/Build/Workers/chunk-C6XQGBPV.js +476 -0
  41. package/Build/Workers/chunk-CAEC5DA2.js +57 -0
  42. package/Build/Workers/chunk-CBCOHH5O.js +837 -0
  43. package/Build/Workers/chunk-CDLPLYLV.js +1287 -0
  44. package/Build/Workers/chunk-CEKCKPFN.js +368 -0
  45. package/Build/Workers/chunk-CEMXKBQO.js +1800 -0
  46. package/Build/Workers/chunk-CHMDKP5L.js +2342 -0
  47. package/Build/Workers/chunk-CKW3STKA.js +1067 -0
  48. package/Build/Workers/chunk-CV5RICKT.js +1992 -0
  49. package/Build/Workers/chunk-CWGB3D4Z.js +257 -0
  50. package/Build/Workers/chunk-DBWSISJT.js +56 -0
  51. package/Build/Workers/chunk-DQEUGBGA.js +2719 -0
  52. package/Build/Workers/chunk-DSBSPPPJ.js +1344 -0
  53. package/Build/Workers/chunk-DSGLDRTI.js +278 -0
  54. package/Build/Workers/chunk-DUBE5G2H.js +497 -0
  55. package/Build/Workers/chunk-DXD7OPSP.js +1992 -0
  56. package/Build/Workers/chunk-DXECZBSA.js +368 -0
  57. package/Build/Workers/chunk-DZIRO6ZK.js +682 -0
  58. package/Build/Workers/chunk-E4CRPGX5.js +140 -0
  59. package/Build/Workers/chunk-E4IVMEBH.js +52 -0
  60. package/Build/Workers/chunk-E4PBNWWK.js +58 -0
  61. package/Build/Workers/chunk-E5MWOMVC.js +57 -0
  62. package/Build/Workers/chunk-ECN3VUMA.js +73 -0
  63. package/Build/Workers/chunk-ECSKVHUB.js +476 -0
  64. package/Build/Workers/chunk-EE3XBOQI.js +1483 -0
  65. package/Build/Workers/chunk-EHA2ZDPZ.js +415 -0
  66. package/Build/Workers/chunk-EKEKPAJF.js +454 -0
  67. package/Build/Workers/chunk-EL4B5CSQ.js +162 -0
  68. package/Build/Workers/chunk-EOHKUXPX.js +198 -0
  69. package/Build/Workers/chunk-ERENMHG2.js +754 -0
  70. package/Build/Workers/chunk-ESQGFRLZ.js +163 -0
  71. package/Build/Workers/chunk-FAYBQGKO.js +219 -0
  72. package/Build/Workers/chunk-FGCXPEZM.js +3201 -0
  73. package/Build/Workers/chunk-FHCRXPA6.js +44 -0
  74. package/Build/Workers/chunk-FQ42MT7M.js +58 -0
  75. package/Build/Workers/chunk-FQDYQG4P.js +1284 -0
  76. package/Build/Workers/chunk-FTCBY5HH.js +138 -0
  77. package/Build/Workers/chunk-FV4OWDV4.js +9230 -0
  78. package/Build/Workers/chunk-FYRNNQSL.js +280 -0
  79. package/Build/Workers/chunk-GI5RWJAY.js +101 -0
  80. package/Build/Workers/chunk-GNLMSDRO.js +945 -0
  81. package/Build/Workers/chunk-GVUJ6O3R.js +73 -0
  82. package/Build/Workers/chunk-HCGU7OCG.js +97 -0
  83. package/Build/Workers/chunk-HRIPVWSC.js +58 -0
  84. package/Build/Workers/chunk-IC3BR6SC.js +102 -0
  85. package/Build/Workers/chunk-IU3YAYPT.js +1344 -0
  86. package/Build/Workers/chunk-J7MZR7B2.js +1483 -0
  87. package/Build/Workers/chunk-JMF4ATAS.js +3794 -0
  88. package/Build/Workers/chunk-KEJKMITY.js +82 -0
  89. package/Build/Workers/chunk-KSIEJYNL.js +3822 -0
  90. package/Build/Workers/chunk-KT3GG7AW.js +754 -0
  91. package/Build/Workers/chunk-KW2QZDUS.js +147 -0
  92. package/Build/Workers/chunk-KYCEM22I.js +1800 -0
  93. package/Build/Workers/chunk-L6B5XPBL.js +73 -0
  94. package/Build/Workers/chunk-LGJXN2VP.js +352 -0
  95. package/Build/Workers/chunk-LJTQW46H.js +57 -0
  96. package/Build/Workers/chunk-LMQGYJME.js +672 -0
  97. package/Build/Workers/chunk-LOBYJQA4.js +76 -0
  98. package/Build/Workers/chunk-LOF32O7F.js +163 -0
  99. package/Build/Workers/chunk-LOTIJA7D.js +124 -0
  100. package/Build/Workers/chunk-LY2UG3HV.js +38 -0
  101. package/Build/Workers/chunk-M7Z3MPAX.js +973 -0
  102. package/Build/Workers/chunk-MHNLTQHO.js +3201 -0
  103. package/Build/Workers/chunk-ML7OMD72.js +2342 -0
  104. package/Build/Workers/chunk-NBTGXEMT.js +945 -0
  105. package/Build/Workers/chunk-NCPJBP24.js +140 -0
  106. package/Build/Workers/chunk-NFY5V6MR.js +102 -0
  107. package/Build/Workers/chunk-NQZC37F7.js +38 -0
  108. package/Build/Workers/chunk-O3X3D2Z3.js +352 -0
  109. package/Build/Workers/chunk-OBUIHPKF.js +352 -0
  110. package/Build/Workers/chunk-OYPSUED3.js +1067 -0
  111. package/Build/Workers/chunk-PAEWNYIV.js +138 -0
  112. package/Build/Workers/chunk-PANJ7YH6.js +102 -0
  113. package/Build/Workers/chunk-PCL3Y7H5.js +82 -0
  114. package/Build/Workers/chunk-PIIUGRQD.js +387 -0
  115. package/Build/Workers/chunk-POKD22OT.js +2719 -0
  116. package/Build/Workers/chunk-PQMA7MFS.js +9237 -0
  117. package/Build/Workers/chunk-PURIPUSY.js +682 -0
  118. package/Build/Workers/chunk-QIOOTLWN.js +56 -0
  119. package/Build/Workers/chunk-QQZPPXY4.js +3822 -0
  120. package/Build/Workers/chunk-QUPRALOD.js +101 -0
  121. package/Build/Workers/chunk-QXLQLGL2.js +1067 -0
  122. package/Build/Workers/chunk-RBEVHHXK.js +3201 -0
  123. package/Build/Workers/chunk-RC4YC3VU.js +278 -0
  124. package/Build/Workers/chunk-RGNNWVR6.js +171 -0
  125. package/Build/Workers/chunk-RHO5HV52.js +305 -0
  126. package/Build/Workers/chunk-SBBIEHYT.js +44 -0
  127. package/Build/Workers/chunk-SVCZUP5R.js +837 -0
  128. package/Build/Workers/chunk-SWVZTU6X.js +305 -0
  129. package/Build/Workers/chunk-T3EUPM5A.js +454 -0
  130. package/Build/Workers/chunk-TA6IU2XL.js +171 -0
  131. package/Build/Workers/chunk-TBHW5UME.js +973 -0
  132. package/Build/Workers/chunk-TLSGD5TR.js +280 -0
  133. package/Build/Workers/chunk-TOXDLWKZ.js +368 -0
  134. package/Build/Workers/chunk-TPOX6IOR.js +1054 -0
  135. package/Build/Workers/chunk-TZBM6TAB.js +124 -0
  136. package/Build/Workers/chunk-U2OY6MX6.js +398 -0
  137. package/Build/Workers/chunk-UCY4B5EV.js +288 -0
  138. package/Build/Workers/chunk-ULNBTI6R.js +138 -0
  139. package/Build/Workers/chunk-UMUS2AQQ.js +398 -0
  140. package/Build/Workers/chunk-UZ7GTP2L.js +162 -0
  141. package/Build/Workers/chunk-V52FEPCV.js +754 -0
  142. package/Build/Workers/chunk-VBEXZBG5.js +147 -0
  143. package/Build/Workers/chunk-VC76B6GM.js +959 -0
  144. package/Build/Workers/chunk-VCUOYHWC.js +519 -0
  145. package/Build/Workers/chunk-VJIL5H6K.js +2719 -0
  146. package/Build/Workers/chunk-VMF7KOGY.js +162 -0
  147. package/Build/Workers/chunk-W3C7OHXF.js +387 -0
  148. package/Build/Workers/chunk-W5OCKMPJ.js +101 -0
  149. package/Build/Workers/chunk-WB5GWYDP.js +455 -0
  150. package/Build/Workers/chunk-WN6MAL25.js +682 -0
  151. package/Build/Workers/chunk-WTR7KMQA.js +693 -0
  152. package/Build/Workers/chunk-WTTFMU3P.js +241 -0
  153. package/Build/Workers/chunk-WULONJZC.js +1800 -0
  154. package/Build/Workers/chunk-WZPMAVTV.js +511 -0
  155. package/Build/Workers/chunk-XHT5SVP4.js +52 -0
  156. package/Build/Workers/chunk-XITBARMZ.js +2342 -0
  157. package/Build/Workers/chunk-XLQZNQ4Z.js +163 -0
  158. package/Build/Workers/chunk-XZ6HDXKM.js +76 -0
  159. package/Build/Workers/chunk-Y7KVUJEB.js +219 -0
  160. package/Build/Workers/chunk-Y7NDFEQ3.js +398 -0
  161. package/Build/Workers/chunk-YBBQDYX2.js +301 -0
  162. package/Build/Workers/chunk-YHPYPVAB.js +837 -0
  163. package/Build/Workers/chunk-YNKK6BXY.js +454 -0
  164. package/Build/Workers/chunk-YRAJ74HR.js +305 -0
  165. package/Build/Workers/chunk-YULTZK5O.js +147 -0
  166. package/Build/Workers/chunk-YUNQYP3Z.js +9237 -0
  167. package/Build/Workers/chunk-Z6JV4DZG.js +1046 -0
  168. package/Build/Workers/chunk-Z7BONRW2.js +241 -0
  169. package/Build/Workers/chunk-ZK2R3DEJ.js +1054 -0
  170. package/Build/Workers/chunk-ZTK5EBUI.js +76 -0
  171. package/Build/Workers/chunk-ZZPDORJK.js +56 -0
  172. package/Build/Workers/combineGeometry.js +24 -24
  173. package/Build/Workers/createBoxGeometry.js +18 -18
  174. package/Build/Workers/createBoxOutlineGeometry.js +18 -18
  175. package/Build/Workers/createCircleGeometry.js +26 -26
  176. package/Build/Workers/createCircleOutlineGeometry.js +19 -19
  177. package/Build/Workers/createCoplanarPolygonGeometry.js +39 -39
  178. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +33 -33
  179. package/Build/Workers/createCorridorGeometry.js +36 -37
  180. package/Build/Workers/createCorridorOutlineGeometry.js +34 -35
  181. package/Build/Workers/createCylinderGeometry.js +20 -20
  182. package/Build/Workers/createCylinderOutlineGeometry.js +20 -20
  183. package/Build/Workers/createEllipseGeometry.js +26 -26
  184. package/Build/Workers/createEllipseOutlineGeometry.js +19 -19
  185. package/Build/Workers/createEllipsoidGeometry.js +19 -19
  186. package/Build/Workers/createEllipsoidOutlineGeometry.js +18 -18
  187. package/Build/Workers/createFrustumGeometry.js +18 -18
  188. package/Build/Workers/createFrustumOutlineGeometry.js +20 -20
  189. package/Build/Workers/createGeometry.js +25 -24
  190. package/Build/Workers/createGroundPolylineGeometry.js +98 -34
  191. package/Build/Workers/createMvtTile.js +111 -19
  192. package/Build/Workers/createPlaneGeometry.js +18 -18
  193. package/Build/Workers/createPlaneOutlineGeometry.js +17 -17
  194. package/Build/Workers/createPolygonGeometry.js +36 -36
  195. package/Build/Workers/createPolygonOutlineGeometry.js +33 -33
  196. package/Build/Workers/createPolylineGeometry.js +28 -28
  197. package/Build/Workers/createPolylineVolumeGeometry.js +38 -36
  198. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +32 -31
  199. package/Build/Workers/createRectangleGeometry.js +29 -29
  200. package/Build/Workers/createRectangleOutlineGeometry.js +23 -23
  201. package/Build/Workers/createSimplePolylineGeometry.js +26 -26
  202. package/Build/Workers/createSphereGeometry.js +19 -19
  203. package/Build/Workers/createSphereOutlineGeometry.js +18 -18
  204. package/Build/Workers/createTaskProcessorWorker.js +3 -3
  205. package/Build/Workers/createVectorTileClampedPolylines.js +14 -14
  206. package/Build/Workers/createVectorTileGeometries.js +24 -24
  207. package/Build/Workers/createVectorTilePoints.js +13 -13
  208. package/Build/Workers/createVectorTilePolygons.js +22 -22
  209. package/Build/Workers/createVectorTilePolylines.js +14 -14
  210. package/Build/Workers/createVerticesFromCesium3DTilesTerrain.js +26 -26
  211. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +23 -23
  212. package/Build/Workers/createVerticesFromHeightmap.js +23 -23
  213. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +21 -21
  214. package/Build/Workers/createWallGeometry.js +26 -26
  215. package/Build/Workers/createWallOutlineGeometry.js +26 -26
  216. package/Build/Workers/decodeDraco.js +10 -10
  217. package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +993 -2334
  218. package/Build/Workers/decodeI3S.js +10 -10
  219. package/Build/Workers/gaussianSplatSorter.js +4 -4
  220. package/Build/Workers/gaussianSplatTextureGenerator.js +4 -4
  221. package/Build/Workers/incrementallyBuildTerrainPicker.js +10 -10
  222. package/Build/Workers/transcodeKTX2.js +6 -6
  223. package/Build/Workers/transferTypedArrayTest.js +1 -1
  224. package/Build/Workers/upsampleQuantizedTerrainMesh.js +23 -23
  225. package/Build/Workers/upsampleVerticesFromCesium3DTilesTerrain.js +26 -26
  226. package/Source/Core/ArcGISTiledElevationTerrainProvider.js +1 -5
  227. package/Source/Core/BoundingRectangle.js +6 -8
  228. package/Source/Core/BoundingSphere.js +0 -3
  229. package/Source/Core/Cartesian2.js +1 -1
  230. package/Source/Core/Cartesian3.js +1 -1
  231. package/Source/Core/Cartesian4.js +1 -1
  232. package/Source/Core/Cesium3DTilesTerrainGeometryProcessor.js +3 -4
  233. package/Source/Core/Color.js +1 -0
  234. package/Source/Core/ComponentDatatype.js +35 -0
  235. package/Source/Core/CoplanarPolygonGeometry.js +2 -2
  236. package/Source/Core/CorridorGeometry.js +2 -4
  237. package/Source/Core/CorridorOutlineGeometry.js +1 -3
  238. package/Source/Core/EarthOrientationParameters.js +2 -2
  239. package/Source/Core/EllipseGeometryLibrary.js +2 -2
  240. package/Source/Core/EllipsoidGeodesic.js +3 -3
  241. package/Source/Core/EllipsoidRhumbLine.js +1 -1
  242. package/Source/Core/GroundPolylineGeometry.js +99 -4
  243. package/Source/Core/Heap.js +1 -1
  244. package/Source/Core/HermitePolynomialApproximation.js +215 -179
  245. package/Source/Core/InterpolationAlgorithm.js +58 -50
  246. package/Source/Core/Ion.js +1 -1
  247. package/Source/Core/JulianDate.js +1 -1
  248. package/Source/Core/LagrangePolynomialApproximation.js +55 -52
  249. package/Source/Core/LinearApproximation.js +69 -66
  250. package/Source/Core/MapProjection.js +1 -0
  251. package/Source/Core/Math.js +59 -0
  252. package/Source/Core/Matrix2.js +3 -3
  253. package/Source/Core/Matrix3.js +3 -3
  254. package/Source/Core/Matrix4.js +1 -1
  255. package/Source/Core/OrthographicFrustum.js +1 -1
  256. package/Source/Core/PerspectiveFrustum.js +1 -1
  257. package/Source/Core/PolygonGeometry.js +2 -2
  258. package/Source/Core/PolygonGeometryLibrary.js +1 -1
  259. package/Source/Core/PolygonOutlineGeometry.js +1 -1
  260. package/Source/Core/PolylineGeometry.js +1 -1
  261. package/Source/Core/PolylinePipeline.js +9 -2
  262. package/Source/Core/PolylineVolumeGeometryLibrary.js +1 -1
  263. package/Source/Core/Rectangle.js +7 -1
  264. package/Source/Core/RectangleOutlineGeometry.js +1 -1
  265. package/Source/Core/Resource.js +1 -1
  266. package/Source/Core/ScreenSpaceEventHandler.js +51 -41
  267. package/Source/Core/SimplePolylineGeometry.js +1 -1
  268. package/Source/Core/TerrainEncoding.js +2 -2
  269. package/Source/Core/TerrainMesh.js +3 -3
  270. package/Source/Core/TerrainPicker.js +180 -168
  271. package/Source/Core/TimeIntervalCollection.js +1 -3
  272. package/Source/Core/Tipsify.js +1 -1
  273. package/Source/Core/Transforms.js +5 -1
  274. package/Source/Core/VectorPipeline.js +1117 -0
  275. package/Source/Core/VectorProvider.js +429 -0
  276. package/Source/Core/WallOutlineGeometry.js +1 -1
  277. package/Source/Core/createColorRamp.js +37 -0
  278. package/Source/Core/getTimestamp.js +4 -2
  279. package/Source/Core/globalTypes.js +25 -0
  280. package/Source/Core/writeTextToCanvas.js +1 -0
  281. package/Source/DataSources/CompositeEntityCollection.js +0 -1
  282. package/Source/DataSources/CzmlDataSource.js +14 -0
  283. package/Source/DataSources/DataSourceDisplay.js +1 -1
  284. package/Source/DataSources/GeoJsonDataSource.js +0 -1
  285. package/Source/DataSources/GeometryVisualizer.js +1 -1
  286. package/Source/DataSources/KmlDataSource.js +529 -557
  287. package/Source/DataSources/PathGraphics.js +8 -1
  288. package/Source/DataSources/PathMode.js +27 -0
  289. package/Source/DataSources/PathVisualizer.js +298 -1
  290. package/Source/DataSources/PolylineGeometryUpdater.js +125 -7
  291. package/Source/DataSources/PolylineVisualizer.js +1 -1
  292. package/Source/DataSources/StaticOutlineGeometryBatch.js +1 -1
  293. package/Source/Renderer/AutomaticUniforms.js +23 -0
  294. package/Source/Renderer/Context.js +9 -3
  295. package/Source/Renderer/DrawCommand.js +22 -0
  296. package/Source/Renderer/Framebuffer.js +4 -0
  297. package/Source/Renderer/Pass.js +11 -9
  298. package/Source/Renderer/Texture.js +12 -1
  299. package/Source/Renderer/UniformState.js +7 -0
  300. package/Source/Renderer/VertexArray.js +1 -1
  301. package/Source/Renderer/createUniform.js +346 -239
  302. package/Source/Renderer/createUniformArray.js +494 -381
  303. package/Source/Scene/ArcGisMapServerImageryProvider.js +0 -5
  304. package/Source/Scene/ArcGisMapService.js +1 -1
  305. package/Source/Scene/Billboard.js +2 -1
  306. package/Source/Scene/BillboardCollection.js +15 -5
  307. package/Source/Scene/BillboardTexture.js +5 -3
  308. package/Source/Scene/BufferPointCollection.js +11 -1
  309. package/Source/Scene/BufferPolygonCollection.js +26 -0
  310. package/Source/Scene/BufferPolylineCollection.js +2 -0
  311. package/Source/Scene/BufferPrimitiveCollection.js +105 -32
  312. package/Source/Scene/Camera.js +137 -8
  313. package/Source/Scene/CameraEventAggregator.js +30 -18
  314. package/Source/Scene/CameraFlightPath.js +17 -0
  315. package/Source/Scene/Cesium3DTile.js +102 -4
  316. package/Source/Scene/Cesium3DTileContent.js +195 -254
  317. package/Source/Scene/Cesium3DTileContentFactory.js +10 -2
  318. package/Source/Scene/Cesium3DTileOptimizations.js +4 -6
  319. package/Source/Scene/Cesium3DTileStyle.js +40 -0
  320. package/Source/Scene/Cesium3DTileset.js +213 -8
  321. package/Source/Scene/Cesium3DTilesetTraversal.js +14 -0
  322. package/Source/Scene/ClippingPlaneCollection.js +4 -4
  323. package/Source/Scene/ClippingPolygon.js +2 -0
  324. package/Source/Scene/ClippingPolygonCollection.js +2 -2
  325. package/Source/Scene/ColumbusWorlds.js +190 -0
  326. package/Source/Scene/Composite3DTileContent.js +254 -292
  327. package/Source/Scene/Controllers/Controller.js +63 -0
  328. package/Source/Scene/Controllers/ControllerHost.js +78 -0
  329. package/Source/Scene/Controllers/HybridScreenSpacePanCameraController.js +106 -0
  330. package/Source/Scene/Controllers/MouseButton.js +32 -0
  331. package/Source/Scene/Controllers/ScreenSpaceElevatorCameraController.js +295 -0
  332. package/Source/Scene/Controllers/ScreenSpaceInputBindings.js +154 -0
  333. package/Source/Scene/Controllers/ScreenSpaceMapCameraController.js +310 -0
  334. package/Source/Scene/Controllers/ScreenSpaceTiltOrbitCameraController.js +642 -0
  335. package/Source/Scene/Controllers/ScreenSpaceZoomCameraController.js +431 -0
  336. package/Source/Scene/Controllers/defaultPickWorldPosition.js +84 -0
  337. package/Source/Scene/DerivedCommand.js +98 -0
  338. package/Source/Scene/EdgeDisplayMode.js +50 -0
  339. package/Source/Scene/EdgeFramebuffer.js +1 -5
  340. package/Source/Scene/Empty3DTileContent.js +100 -132
  341. package/Source/Scene/Expression.js +6 -8
  342. package/Source/Scene/FrameState.js +27 -0
  343. package/Source/Scene/GaussianSplat3DTileContent.js +436 -478
  344. package/Source/Scene/GeoJsonPrimitive.js +874 -0
  345. package/Source/Scene/Geometry3DTileContent.js +151 -185
  346. package/Source/Scene/Globe.js +110 -22
  347. package/Source/Scene/GlobeDepth.js +243 -6
  348. package/Source/Scene/GlobeSurfaceShaderSet.js +637 -540
  349. package/Source/Scene/GlobeSurfaceTile.js +575 -398
  350. package/Source/Scene/GlobeSurfaceTileProvider.js +2289 -1842
  351. package/Source/Scene/GltfBufferViewLoader.js +3 -3
  352. package/Source/Scene/GltfLoader.js +146 -3
  353. package/Source/Scene/GltfLoaderUtil.js +20 -4
  354. package/Source/Scene/GltfPipeline/forEachTextureInMaterial.js +10 -0
  355. package/Source/Scene/GltfPipeline/removeUnusedElements.js +21 -11
  356. package/Source/Scene/GltfSpzLoader.js +1 -1
  357. package/Source/Scene/GltfVertexBufferLoader.js +6 -3
  358. package/Source/Scene/GroundPolylinePrimitive.js +2 -1
  359. package/Source/Scene/I3SDataProvider.js +1 -1
  360. package/Source/Scene/I3SLayer.js +1 -1
  361. package/Source/Scene/I3SNode.js +2 -2
  362. package/Source/Scene/ImageryLayer.js +2 -2
  363. package/Source/Scene/ImageryLayerCollection.js +190 -6
  364. package/Source/Scene/Implicit3DTileContent.js +192 -216
  365. package/Source/Scene/ImplicitTileCoordinates.js +17 -0
  366. package/Source/Scene/IonImageryProvider.js +1 -5
  367. package/Source/Scene/Label.js +4 -4
  368. package/Source/Scene/LabelCollection.js +4 -1
  369. package/Source/Scene/MVTDataProvider.js +555 -0
  370. package/Source/Scene/Material.js +1 -0
  371. package/Source/Scene/Model/B3dmLoader.js +1 -2
  372. package/Source/Scene/Model/EdgeVisibilityPipelineStage.js +82 -312
  373. package/Source/Scene/Model/Extensions/Gpm/GltfGpmLoader.js +4 -0
  374. package/Source/Scene/Model/I3dmLoader.js +1 -1
  375. package/Source/Scene/Model/InstancingPipelineStage.js +4 -7
  376. package/Source/Scene/Model/MaterialPipelineStage.js +124 -1
  377. package/Source/Scene/Model/Model.js +45 -10
  378. package/Source/Scene/Model/Model3DTileContent.js +424 -458
  379. package/Source/Scene/Model/ModelClippingPlanesPipelineStage.js +28 -1
  380. package/Source/Scene/Model/ModelDrawCommand.js +180 -8
  381. package/Source/Scene/Model/ModelDrawCommands.js +4 -0
  382. package/Source/Scene/Model/ModelSceneGraph.js +21 -0
  383. package/Source/Scene/Model/ModelUtility.js +5 -0
  384. package/Source/Scene/Model/PickingPipelineStage.js +29 -0
  385. package/Source/Scene/Model/PrimitiveRenderResources.js +24 -0
  386. package/Source/Scene/Model/createVectorTileBuffersFromModelComponents.js +645 -153
  387. package/Source/Scene/ModelComponents.js +112 -0
  388. package/Source/Scene/Multiple3DTileContent.js +291 -334
  389. package/Source/Scene/MvtLabelCandidates.js +295 -0
  390. package/Source/Scene/MvtLabelManager.js +1069 -0
  391. package/Source/Scene/Picking.js +19 -3
  392. package/Source/Scene/PlanarFillIdFramebuffer.js +172 -0
  393. package/Source/Scene/PntsParser.js +1 -1
  394. package/Source/Scene/Polyline.js +32 -5
  395. package/Source/Scene/PolylineCollection.js +39 -0
  396. package/Source/Scene/PostProcessStage.js +4 -2
  397. package/Source/Scene/Primitive.js +12 -13
  398. package/Source/Scene/PrimitivePipeline.js +158 -28
  399. package/Source/Scene/QuadtreePrimitive.js +3 -2
  400. package/Source/Scene/ResourceCache.js +7 -4
  401. package/Source/Scene/ResourceCacheKey.js +21 -18
  402. package/Source/Scene/Scene.js +655 -6
  403. package/Source/Scene/SceneTransforms.js +18 -0
  404. package/Source/Scene/ScreenSpaceCameraController.js +12 -3
  405. package/Source/Scene/ShadowMap.js +9 -3
  406. package/Source/Scene/ShadowMapShader.js +50 -2
  407. package/Source/Scene/SnapFramebuffer.js +121 -0
  408. package/Source/Scene/Snapping.js +184 -0
  409. package/Source/Scene/TerrainFillMesh.js +3 -2
  410. package/Source/Scene/Tileset3DTileContent.js +113 -146
  411. package/Source/Scene/UrlTemplate3DTilesDataProvider.js +543 -0
  412. package/Source/Scene/Vector3DTileContent.js +207 -237
  413. package/Source/Scene/VectorGltf3DTileContent.js +185 -45
  414. package/Source/Scene/View.js +10 -8
  415. package/Source/Scene/VoxelPrimitive.js +159 -175
  416. package/Source/Scene/VoxelProvider.js +64 -91
  417. package/Source/Scene/VoxelTraversal.js +1 -1
  418. package/Source/Scene/buildVectorGltfFromMVT.js +1208 -0
  419. package/Source/Scene/buildVoxelCustomShader.js +199 -0
  420. package/Source/Scene/createElevationBandMaterial.js +1 -1
  421. package/Source/Scene/decodeMVT.js +877 -0
  422. package/Source/Scene/findMeshoptExtension.js +23 -0
  423. package/Source/Scene/renderBufferPointCollection.js +114 -64
  424. package/Source/Scene/renderBufferPolygonCollection.js +245 -53
  425. package/Source/Scene/renderBufferPolylineCollection.js +271 -145
  426. package/Source/Shaders/BillboardCollectionVS.glsl +23 -25
  427. package/Source/Shaders/BillboardCollectionVS.js +23 -25
  428. package/Source/Shaders/BufferPointMaterialFS.glsl +1 -0
  429. package/Source/Shaders/BufferPointMaterialFS.js +1 -0
  430. package/Source/Shaders/BufferPointMaterialVS.glsl +19 -9
  431. package/Source/Shaders/BufferPointMaterialVS.js +20 -10
  432. package/Source/Shaders/BufferPolygonMaterialFS.glsl +13 -0
  433. package/Source/Shaders/BufferPolygonMaterialFS.js +13 -0
  434. package/Source/Shaders/BufferPolygonMaterialVS.glsl +22 -4
  435. package/Source/Shaders/BufferPolygonMaterialVS.js +23 -5
  436. package/Source/Shaders/BufferPolylineMaterialVS.glsl +16 -2
  437. package/Source/Shaders/BufferPolylineMaterialVS.js +17 -3
  438. package/Source/Shaders/Builtin/Constants/passCesium3DTile.glsl +1 -1
  439. package/Source/Shaders/Builtin/Constants/passCesium3DTile.js +1 -1
  440. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassification.glsl +1 -1
  441. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassification.js +1 -1
  442. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassificationIgnoreShow.glsl +1 -1
  443. package/Source/Shaders/Builtin/Constants/passCesium3DTileClassificationIgnoreShow.js +1 -1
  444. package/Source/Shaders/Builtin/Constants/passCesium3DTileEdgesDirect.glsl +9 -0
  445. package/Source/Shaders/Builtin/Constants/passCesium3DTileEdgesDirect.js +11 -0
  446. package/Source/Shaders/Builtin/Constants/passCesium3DTilePlanarFillId.glsl +9 -0
  447. package/Source/Shaders/Builtin/Constants/passCesium3DTilePlanarFillId.js +11 -0
  448. package/Source/Shaders/Builtin/Constants/passClassification.glsl +1 -1
  449. package/Source/Shaders/Builtin/Constants/passClassification.js +1 -1
  450. package/Source/Shaders/Builtin/Constants/passGaussianSplats.glsl +1 -1
  451. package/Source/Shaders/Builtin/Constants/passGaussianSplats.js +1 -1
  452. package/Source/Shaders/Builtin/Constants/passOpaque.glsl +1 -1
  453. package/Source/Shaders/Builtin/Constants/passOpaque.js +1 -1
  454. package/Source/Shaders/Builtin/Constants/passOverlay.glsl +1 -1
  455. package/Source/Shaders/Builtin/Constants/passOverlay.js +1 -1
  456. package/Source/Shaders/Builtin/Constants/passTranslucent.glsl +1 -1
  457. package/Source/Shaders/Builtin/Constants/passTranslucent.js +1 -1
  458. package/Source/Shaders/Builtin/Constants/passVoxels.glsl +1 -1
  459. package/Source/Shaders/Builtin/Constants/passVoxels.js +1 -1
  460. package/Source/Shaders/Builtin/CzmBuiltins.js +4 -0
  461. package/Source/Shaders/GlobeFS.glsl +10 -6
  462. package/Source/Shaders/GlobeFS.js +10 -6
  463. package/Source/Shaders/Materials/PolylineGlowMaterial.glsl +1 -1
  464. package/Source/Shaders/Materials/PolylineGlowMaterial.js +1 -1
  465. package/Source/Shaders/Model/EdgeVisibilityStageVS.glsl +0 -1
  466. package/Source/Shaders/Model/EdgeVisibilityStageVS.js +0 -1
  467. package/Source/Shaders/Model/MaterialStageFS.glsl +8 -2
  468. package/Source/Shaders/Model/MaterialStageFS.js +8 -2
  469. package/Source/Shaders/Model/ModelFS.glsl +105 -0
  470. package/Source/Shaders/Model/ModelFS.js +105 -0
  471. package/Source/Shaders/PolylineShadowVolumeFS.glsl +14 -0
  472. package/Source/Shaders/PolylineShadowVolumeFS.js +14 -0
  473. package/Source/Shaders/RestoreDepth.glsl +8 -0
  474. package/Source/Shaders/RestoreDepth.js +10 -0
  475. package/Source/Shaders/VectorCommon.glsl +178 -0
  476. package/Source/Shaders/VectorCommon.js +180 -0
  477. package/Source/ThirdParty/zip-module.wasm +0 -0
  478. package/Source/Widget/CesiumWidget.js +30 -0
  479. package/Source/Workers/createMvtTile.js +39 -0
  480. package/Source/Workers/decodeGoogleEarthEnterprisePacket.js +2 -2
  481. package/Source/Workers/incrementallyBuildTerrainPicker.js +2 -0
  482. package/index.d.ts +535 -1393
  483. package/index.js +125 -93
  484. package/package.json +13 -13
@@ -12,6 +12,7 @@ import IndexDatatype from "../Core/IndexDatatype.js";
12
12
  import Matrix4 from "../Core/Matrix4.js";
13
13
  import OffsetGeometryInstanceAttribute from "../Core/OffsetGeometryInstanceAttribute.js";
14
14
  import WebMercatorProjection from "../Core/WebMercatorProjection.js";
15
+ import ColumbusWorlds from "./ColumbusWorlds.js";
15
16
 
16
17
  function transformToWorldCoordinates(
17
18
  instances,
@@ -84,11 +85,120 @@ function addBatchIds(instances) {
84
85
  }
85
86
  }
86
87
 
88
+ /**
89
+ * Keeps a polyline's projected 2D attributes on one contiguous world copy in
90
+ * Columbus repeat-worlds mode. PolylineGeometry subdivides along the arc and
91
+ * projects every vertex independently, so a line crossing the ±180° meridian
92
+ * ends up with consecutive vertices on opposite sides of the primary world,
93
+ * connected by an edge drawn across the whole map. Consecutive vertices whose
94
+ * projected u jumps by roughly a full world width are seam crossings: lift
95
+ * them onto the adjacent copy (the same rule PolylineCollection.getSegments
96
+ * applies). The per-vertex lift is computed from `position2D` and applied
97
+ * identically to `prevPosition2D` and `nextPosition2D` so each vertex's
98
+ * extrusion references stay on the copy the vertex itself was lifted to.
99
+ *
100
+ * Other primitive types (no prev/next position attributes) keep the stock
101
+ * per-side projection; their own IDL splitting still applies.
102
+ *
103
+ * @private
104
+ */
105
+ function liftPolyline2DToWorldCopy(geometry, projection) {
106
+ const attributes = geometry.attributes;
107
+ const position2D = attributes.position2D;
108
+ const prevPosition2D = attributes.prevPosition2D;
109
+ const nextPosition2D = attributes.nextPosition2D;
110
+ if (
111
+ !defined(position2D) ||
112
+ !defined(prevPosition2D) ||
113
+ !defined(nextPosition2D)
114
+ ) {
115
+ return;
116
+ }
117
+
118
+ const worldWidth = ColumbusWorlds.getWorldWidth(projection);
119
+ const halfWorldWidth = worldWidth * 0.5;
120
+ const positions = position2D.values;
121
+ const vertexCount = positions.length / 3;
122
+ const lifts = new Float64Array(vertexCount);
123
+
124
+ let lift = 0.0;
125
+ let lifted = false;
126
+ for (let i = 1; i < vertexCount; ++i) {
127
+ const du = positions[i * 3] - (positions[(i - 1) * 3] + lift);
128
+ if (du > halfWorldWidth) {
129
+ lift -= worldWidth;
130
+ lifted = true;
131
+ } else if (du < -halfWorldWidth) {
132
+ lift += worldWidth;
133
+ lifted = true;
134
+ }
135
+ lifts[i] = lift;
136
+ }
137
+ if (!lifted) {
138
+ return;
139
+ }
140
+
141
+ const prevPositions = prevPosition2D.values;
142
+ const nextPositions = nextPosition2D.values;
143
+ for (let i = 0; i < vertexCount; ++i) {
144
+ const vertexLift = lifts[i];
145
+ if (vertexLift !== 0.0) {
146
+ positions[i * 3] += vertexLift;
147
+ prevPositions[i * 3] += vertexLift;
148
+ nextPositions[i * 3] += vertexLift;
149
+ }
150
+ }
151
+ }
152
+
153
+ /**
154
+ * Replays the world-copy shift that {@link GroundPolylineGeometry} baked into
155
+ * its 2D shadow-volume attributes onto the projected volume positions. The
156
+ * volume positions are projected here, after the geometry was built, so a
157
+ * ground polyline crossing the antimeridian would otherwise keep one half on
158
+ * the neighbouring world copy while its plane tests sit on the other, and the
159
+ * shifted half is discarded by the fragment shader.
160
+ *
161
+ * @private
162
+ */
163
+ function liftGroundPolyline2DToWorldCopy(geometry, projection) {
164
+ const attributes = geometry.attributes;
165
+ const startHiLo2D = attributes.startHiLo2D;
166
+ const position2D = attributes.position2D;
167
+ if (!defined(startHiLo2D) || !defined(position2D)) {
168
+ return;
169
+ }
170
+
171
+ const worldWidth = ColumbusWorlds.getWorldWidth(projection);
172
+ const halfWorldWidth = worldWidth * 0.5;
173
+ if (!(halfWorldWidth > 0.0)) {
174
+ return;
175
+ }
176
+
177
+ const starts = startHiLo2D.values;
178
+ const positions = position2D.values;
179
+ const count = Math.min(starts.length / 4, positions.length / 3);
180
+ for (let i = 0; i < count; ++i) {
181
+ // startHiLo2D holds the segment start in the unwrapped projection space
182
+ // (GroundPolylineGeometry nudges and lifts the 2D attributes so a line
183
+ // crossing the antimeridian stays on one copy), while the volume position
184
+ // is projected from the ECEF position and therefore wraps. Snap the
185
+ // position onto the world copy of its own segment: the two can only
186
+ // differ by whole worlds.
187
+ const startU = starts[i * 4] + starts[i * 4 + 2];
188
+ const u = positions[i * 3];
189
+ const delta = startU - u;
190
+ if (delta > halfWorldWidth || delta < -halfWorldWidth) {
191
+ positions[i * 3] = u + Math.round(delta / worldWidth) * worldWidth;
192
+ }
193
+ }
194
+ }
195
+
87
196
  function geometryPipeline(parameters) {
88
197
  const instances = parameters.instances;
89
198
  const projection = parameters.projection;
90
199
  const uintIndexSupport = parameters.elementIndexUintSupported;
91
200
  const scene3DOnly = parameters.scene3DOnly;
201
+ const columbusRepeatWorlds = parameters.columbusRepeatWorlds === true;
92
202
  const vertexCacheOptimize = parameters.vertexCacheOptimize;
93
203
  const compressVertices = parameters.compressVertices;
94
204
  const modelMatrix = parameters.modelMatrix;
@@ -170,41 +280,59 @@ function geometryPipeline(parameters) {
170
280
  // Split positions for GPU RTE
171
281
  const attributes = geometry.attributes;
172
282
  if (!scene3DOnly) {
283
+ // Collect DOUBLE attribute names up front: projectTo2D renames the
284
+ // attributes it touches, so projecting while iterating them risks
285
+ // reprocessing the freshly added *3D attributes.
286
+ const doubleAttributeNames = [];
173
287
  for (const name in attributes) {
174
288
  if (
175
289
  attributes.hasOwnProperty(name) &&
176
290
  attributes[name].componentDatatype === ComponentDatatype.DOUBLE
177
291
  ) {
178
- const name3D = `${name}3D`;
179
- const name2D = `${name}2D`;
292
+ doubleAttributeNames.push(name);
293
+ }
294
+ }
180
295
 
181
- // Compute 2D positions
182
- GeometryPipeline.projectTo2D(
183
- geometry,
184
- name,
185
- name3D,
186
- name2D,
187
- projection,
188
- );
189
- if (defined(geometry.boundingSphere) && name === "position") {
190
- geometry.boundingSphereCV = BoundingSphere.fromVertices(
191
- geometry.attributes.position2D.values,
192
- );
193
- }
296
+ for (let a = 0; a < doubleAttributeNames.length; ++a) {
297
+ const name = doubleAttributeNames[a];
298
+ GeometryPipeline.projectTo2D(
299
+ geometry,
300
+ name,
301
+ `${name}3D`,
302
+ `${name}2D`,
303
+ projection,
304
+ );
305
+ }
194
306
 
195
- GeometryPipeline.encodeAttribute(
196
- geometry,
197
- name3D,
198
- `${name3D}High`,
199
- `${name3D}Low`,
200
- );
201
- GeometryPipeline.encodeAttribute(
202
- geometry,
203
- name2D,
204
- `${name2D}High`,
205
- `${name2D}Low`,
206
- );
207
- }
307
+ if (columbusRepeatWorlds) {
308
+ liftPolyline2DToWorldCopy(geometry, projection);
309
+ liftGroundPolyline2DToWorldCopy(geometry, projection);
310
+ }
311
+
312
+ // Compute the Columbus-view bounding sphere before encodeAttribute
313
+ // renames position2D into position2DHigh/Low.
314
+ if (defined(geometry.boundingSphere) && defined(attributes.position2D)) {
315
+ geometry.boundingSphereCV = BoundingSphere.fromVertices(
316
+ attributes.position2D.values,
317
+ );
318
+ }
319
+
320
+ for (let a = 0; a < doubleAttributeNames.length; ++a) {
321
+ const name3D = `${doubleAttributeNames[a]}3D`;
322
+ const name2D = `${doubleAttributeNames[a]}2D`;
323
+
324
+ GeometryPipeline.encodeAttribute(
325
+ geometry,
326
+ name3D,
327
+ `${name3D}High`,
328
+ `${name3D}Low`,
329
+ );
330
+ GeometryPipeline.encodeAttribute(
331
+ geometry,
332
+ name2D,
333
+ `${name2D}High`,
334
+ `${name2D}Low`,
335
+ );
208
336
  }
209
337
  } else {
210
338
  for (const name in attributes) {
@@ -715,6 +843,7 @@ PrimitivePipeline.packCombineGeometryParameters = function (
715
843
  isGeographic: parameters.projection instanceof GeographicProjection,
716
844
  elementIndexUintSupported: parameters.elementIndexUintSupported,
717
845
  scene3DOnly: parameters.scene3DOnly,
846
+ columbusRepeatWorlds: parameters.columbusRepeatWorlds === true,
718
847
  vertexCacheOptimize: parameters.vertexCacheOptimize,
719
848
  compressVertices: parameters.compressVertices,
720
849
  modelMatrix: parameters.modelMatrix,
@@ -761,6 +890,7 @@ PrimitivePipeline.unpackCombineGeometryParameters = function (
761
890
  projection: projection,
762
891
  elementIndexUintSupported: packedParameters.elementIndexUintSupported,
763
892
  scene3DOnly: packedParameters.scene3DOnly,
893
+ columbusRepeatWorlds: packedParameters.columbusRepeatWorlds === true,
764
894
  vertexCacheOptimize: packedParameters.vertexCacheOptimize,
765
895
  compressVertices: packedParameters.compressVertices,
766
896
  modelMatrix: Matrix4.clone(packedParameters.modelMatrix),
@@ -1781,11 +1781,12 @@ function updateHeights(primitive, frameState) {
1781
1781
  );
1782
1782
 
1783
1783
  if (defined(position)) {
1784
- // Store the computed position in the cache for future reuse
1784
+ // `pick` wrote into the module-level `scratchPosition`, so `position`
1785
+ // aliases it — clone before caching or the next pick mutates every entry.
1785
1786
  tile.setPositionCacheEntry(
1786
1787
  data.positionCartographic,
1787
1788
  primitive.maximumScreenSpaceError,
1788
- position,
1789
+ Cartesian3.clone(position),
1789
1790
  );
1790
1791
  }
1791
1792
  }
@@ -419,7 +419,7 @@ ResourceCache.getSpzLoader = function (options) {
419
419
 
420
420
  const cacheKey = ResourceCacheKey.getSpzCacheKey({
421
421
  gltf: gltf,
422
- primitive: primitive,
422
+ spz: spz,
423
423
  gltfResource: gltfResource,
424
424
  baseResource: baseResource,
425
425
  });
@@ -453,13 +453,14 @@ ResourceCache.getSpzLoader = function (options) {
453
453
  * @param {number} [options.bufferViewId] The bufferView ID corresponding to the vertex buffer.
454
454
  * @param {object} [options.primitive] The primitive containing the Draco extension.
455
455
  * @param {object} [options.draco] The Draco extension object.
456
+ * @param {object} [options.spz] The SPZ extension object.
456
457
  * @param {string} [options.attributeSemantic] The attribute semantic, e.g. POSITION or NORMAL.
457
458
  * @param {number} [options.accessorId] The accessor ID.
458
459
  * @param {boolean} [options.asynchronous=true] Determines if WebGL resource creation will be spread out over several frames or block until all WebGL resources are created.
459
460
  * @param {boolean} [options.dequantize=false] Determines whether or not the vertex buffer will be dequantized on the CPU.
460
461
  * @param {boolean} [options.loadBuffer=false] Load vertex buffer as a GPU vertex buffer.
461
462
  * @param {boolean} [options.loadTypedArray=false] Load vertex buffer as a typed array.
462
- * @exception {DeveloperError} One of options.bufferViewId and options.draco must be defined.
463
+ * @exception {DeveloperError} Exactly one vertex buffer source must be effective: options.bufferViewId, options.spz, or options.draco for options.attributeSemantic.
463
464
  * @exception {DeveloperError} When options.draco is defined options.attributeSemantic must also be defined.
464
465
  * @exception {DeveloperError} When options.draco is defined options.accessorId must also be defined.
465
466
  *
@@ -503,9 +504,11 @@ ResourceCache.getVertexBufferLoader = function (options) {
503
504
  const hasAccessorId = defined(accessorId);
504
505
  const hasSpz = defined(spz);
505
506
 
506
- if (hasBufferViewId === (hasDraco !== hasSpz)) {
507
+ const sourceCount =
508
+ Number(hasBufferViewId) + Number(hasDraco) + Number(hasSpz);
509
+ if (sourceCount !== 1) {
507
510
  throw new DeveloperError(
508
- "One of options.bufferViewId, options.draco, or options.spz must be defined.",
511
+ "Exactly one vertex buffer source must be effective: options.bufferViewId, options.spz, or options.draco for options.attributeSemantic.",
509
512
  );
510
513
  }
511
514
 
@@ -3,8 +3,8 @@ import Frozen from "../Core/Frozen.js";
3
3
  import defined from "../Core/defined.js";
4
4
  import DeveloperError from "../Core/DeveloperError.js";
5
5
  import getAbsoluteUri from "../Core/getAbsoluteUri.js";
6
+ import findMeshoptExtension from "./findMeshoptExtension.js";
6
7
  import GltfLoaderUtil from "./GltfLoaderUtil.js";
7
- import hasExtension from "./hasExtension.js";
8
8
 
9
9
  /**
10
10
  * Compute cache keys for resources in {@link ResourceCache}.
@@ -22,8 +22,8 @@ function getExternalResourceCacheKey(resource) {
22
22
  function getBufferViewCacheKey(bufferView) {
23
23
  let { byteOffset, byteLength } = bufferView;
24
24
 
25
- if (hasExtension(bufferView, "EXT_meshopt_compression")) {
26
- const meshopt = bufferView.extensions.EXT_meshopt_compression;
25
+ const meshopt = findMeshoptExtension(bufferView);
26
+ if (defined(meshopt)) {
27
27
  byteOffset = meshopt.byteOffset ?? 0;
28
28
  byteLength = meshopt.byteLength;
29
29
  }
@@ -71,8 +71,8 @@ function getDracoCacheKey(gltf, draco, gltfResource, baseResource) {
71
71
  return `${bufferCacheKey}-range-${bufferViewCacheKey}`;
72
72
  }
73
73
 
74
- function getSpzCacheKey(gltf, primitive, gltfResource, baseResource) {
75
- const bufferViewId = 0;
74
+ function getSpzCacheKey(gltf, spz, gltfResource, baseResource) {
75
+ const bufferViewId = spz.bufferView;
76
76
  const bufferView = gltf.bufferViews[bufferViewId];
77
77
  const bufferId = bufferView.buffer;
78
78
  const buffer = gltf.buffers[bufferId];
@@ -247,8 +247,8 @@ ResourceCacheKey.getBufferViewCacheKey = function (options) {
247
247
  const bufferView = gltf.bufferViews[bufferViewId];
248
248
  let bufferId = bufferView.buffer;
249
249
  const buffer = gltf.buffers[bufferId];
250
- if (hasExtension(bufferView, "EXT_meshopt_compression")) {
251
- const meshopt = bufferView.extensions.EXT_meshopt_compression;
250
+ const meshopt = findMeshoptExtension(bufferView);
251
+ if (defined(meshopt)) {
252
252
  bufferId = meshopt.buffer;
253
253
  }
254
254
 
@@ -292,16 +292,16 @@ ResourceCacheKey.getDracoCacheKey = function (options) {
292
292
 
293
293
  ResourceCacheKey.getSpzCacheKey = function (options) {
294
294
  options = options ?? Frozen.EMPTY_OBJECT;
295
- const { gltf, primitive, gltfResource, baseResource } = options;
295
+ const { gltf, spz, gltfResource, baseResource } = options;
296
296
 
297
297
  //>>includeStart('debug', pragmas.debug);
298
298
  Check.typeOf.object("options.gltf", gltf);
299
- Check.typeOf.object("options.primitive", primitive);
299
+ Check.typeOf.object("options.spz", spz);
300
300
  Check.typeOf.object("options.gltfResource", gltfResource);
301
301
  Check.typeOf.object("options.baseResource", baseResource);
302
302
  //>>includeEnd('debug');
303
303
 
304
- return `spz:${getSpzCacheKey(gltf, primitive, gltfResource, baseResource)}`;
304
+ return `spz:${getSpzCacheKey(gltf, spz, gltfResource, baseResource)}`;
305
305
  };
306
306
  /**
307
307
  * Gets the vertex buffer cache key.
@@ -313,11 +313,12 @@ ResourceCacheKey.getSpzCacheKey = function (options) {
313
313
  * @param {FrameState} options.frameState The frame state.
314
314
  * @param {number} [options.bufferViewId] The bufferView ID corresponding to the vertex buffer.
315
315
  * @param {object} [options.draco] The Draco extension object.
316
+ * @param {object} [options.spz] The SPZ extension object.
316
317
  * @param {string} [options.attributeSemantic] The attribute semantic, e.g. POSITION or NORMAL.
317
318
  * @param {boolean} [options.dequantize=false] Determines whether or not the vertex buffer will be dequantized on the CPU.
318
319
  * @param {boolean} [options.loadBuffer=false] Load vertex buffer as a GPU vertex buffer.
319
320
  * @param {boolean} [options.loadTypedArray=false] Load vertex buffer as a typed array.
320
- * @exception {DeveloperError} One of options.bufferViewId and options.draco must be defined.
321
+ * @exception {DeveloperError} Exactly one vertex buffer source must be effective: options.bufferViewId, options.spz, or options.draco for options.attributeSemantic.
321
322
  * @exception {DeveloperError} When options.draco is defined options.attributeSemantic must also be defined.
322
323
  *
323
324
  * @returns {string} The vertex buffer cache key.
@@ -350,9 +351,11 @@ ResourceCacheKey.getVertexBufferCacheKey = function (options) {
350
351
  const hasAttributeSemantic = defined(attributeSemantic);
351
352
  const hasSpz = defined(spz);
352
353
 
353
- if (hasBufferViewId === (hasDraco !== hasSpz)) {
354
+ const sourceCount =
355
+ Number(hasBufferViewId) + Number(hasDraco) + Number(hasSpz);
356
+ if (sourceCount !== 1) {
354
357
  throw new DeveloperError(
355
- "One of options.bufferViewId and options.draco must be defined.",
358
+ "Exactly one vertex buffer source must be effective: options.bufferViewId, options.spz, or options.draco for options.attributeSemantic.",
356
359
  );
357
360
  }
358
361
 
@@ -388,6 +391,11 @@ ResourceCacheKey.getVertexBufferCacheKey = function (options) {
388
391
  cacheKeySuffix += "-typed-array";
389
392
  }
390
393
 
394
+ if (defined(spz)) {
395
+ const spzCacheKey = getSpzCacheKey(gltf, spz, gltfResource, baseResource);
396
+ return `vertex-buffer:${spzCacheKey}-spz-${attributeSemantic}${cacheKeySuffix}`;
397
+ }
398
+
391
399
  if (defined(draco)) {
392
400
  const dracoCacheKey = getDracoCacheKey(
393
401
  gltf,
@@ -398,11 +406,6 @@ ResourceCacheKey.getVertexBufferCacheKey = function (options) {
398
406
  return `vertex-buffer:${dracoCacheKey}-draco-${attributeSemantic}${cacheKeySuffix}`;
399
407
  }
400
408
 
401
- if (spz) {
402
- const spzCacheKey = getSpzCacheKey(gltf, spz, gltfResource, baseResource);
403
- return `vertex-buffer:${spzCacheKey}-spz-${attributeSemantic}${cacheKeySuffix}`;
404
- }
405
-
406
409
  const bufferView = gltf.bufferViews[bufferViewId];
407
410
  const bufferId = bufferView.buffer;
408
411
  const buffer = gltf.buffers[bufferId];