@cesium/engine 24.0.0 → 26.0.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 (362) hide show
  1. package/Build/Workers/{chunk-6WLHJFD3.js → chunk-3VFEWOBI.js} +59 -32
  2. package/Build/Workers/{chunk-UQU4RXLT.js → chunk-424RNO3D.js} +50 -45
  3. package/Build/Workers/chunk-4MGMYHOO.js +147 -0
  4. package/Build/Workers/{chunk-AMIHNSST.js → chunk-4S7IE3LB.js} +2 -2
  5. package/Build/Workers/{chunk-J6AW5YHS.js → chunk-52JDLOEM.js} +14 -14
  6. package/Build/Workers/{chunk-6RMS4S72.js → chunk-54I6Y66F.js} +6 -6
  7. package/Build/Workers/{chunk-C6P4IG5P.js → chunk-6YEE6JDR.js} +6 -6
  8. package/Build/Workers/{chunk-72VYSVEW.js → chunk-7J2HKPRH.js} +11 -10
  9. package/Build/Workers/{chunk-7O5XJTVE.js → chunk-7WM2PX4V.js} +5 -5
  10. package/Build/Workers/{chunk-5A2SW66E.js → chunk-ACXQXN46.js} +16 -16
  11. package/Build/Workers/{chunk-VLDEUTOP.js → chunk-AYKR4VBR.js} +2 -2
  12. package/Build/Workers/{chunk-YQFTYQMZ.js → chunk-C6J67V5A.js} +3 -2
  13. package/Build/Workers/{chunk-D4EJ2NXG.js → chunk-C6KNZ7T4.js} +17 -17
  14. package/Build/Workers/{chunk-7MDYBRYJ.js → chunk-CFQP6LYM.js} +4 -4
  15. package/Build/Workers/{chunk-YAOZMOFL.js → chunk-CXOYE2WM.js} +5 -5
  16. package/Build/Workers/{chunk-B6SCUUFP.js → chunk-CZEYZU4N.js} +10 -10
  17. package/Build/Workers/{chunk-NPF7SSHZ.js → chunk-DBOEKL43.js} +7 -7
  18. package/Build/Workers/{chunk-44EMEGKW.js → chunk-DDWSZVMY.js} +5 -5
  19. package/Build/Workers/{chunk-7X322WP2.js → chunk-DOBXCNC3.js} +13 -13
  20. package/Build/Workers/{chunk-JCI63T3K.js → chunk-E7VQ76KE.js} +6 -6
  21. package/Build/Workers/{chunk-7TYLCBGK.js → chunk-EBSIOBXY.js} +12 -10
  22. package/Build/Workers/{chunk-GQUNK2XC.js → chunk-EF2QYXGA.js} +14 -14
  23. package/Build/Workers/{chunk-BJD6QGXZ.js → chunk-EPYXRCDB.js} +12 -12
  24. package/Build/Workers/{chunk-63SIWPLS.js → chunk-F6QDY6HU.js} +13 -13
  25. package/Build/Workers/{chunk-XY6HMDGI.js → chunk-FRQZECAO.js} +5 -5
  26. package/Build/Workers/{chunk-VMVOUQ5J.js → chunk-G7PXZRVF.js} +7 -7
  27. package/Build/Workers/{chunk-N65BAKSH.js → chunk-INUEEEQA.js} +8 -8
  28. package/Build/Workers/{chunk-7QRFIKWQ.js → chunk-IRBKFCEJ.js} +2 -2
  29. package/Build/Workers/{chunk-UIGVOKKI.js → chunk-IYOUHCZB.js} +3 -2
  30. package/Build/Workers/{chunk-5GXYJQ2K.js → chunk-J6BWOHUF.js} +3 -3
  31. package/Build/Workers/{chunk-A47HVBC5.js → chunk-KFSTQKNM.js} +7 -7
  32. package/Build/Workers/{chunk-EV3VGO6Y.js → chunk-KKOSKAZB.js} +17 -17
  33. package/Build/Workers/{chunk-6MPGQEHA.js → chunk-KSSWJIZW.js} +2 -2
  34. package/Build/Workers/{chunk-DHKPFLSJ.js → chunk-M3B5JKSM.js} +3 -2
  35. package/Build/Workers/chunk-MPZHGZU6.js +2342 -0
  36. package/Build/Workers/{chunk-YJZGW74L.js → chunk-MYP774IS.js} +2213 -1349
  37. package/Build/Workers/{chunk-LIB2H534.js → chunk-O3EA5HS7.js} +12 -11
  38. package/Build/Workers/{chunk-ILMFADZA.js → chunk-P3CK7MCY.js} +27 -5
  39. package/Build/Workers/chunk-Q3PY526V.js +3201 -0
  40. package/Build/Workers/chunk-QN67VG36.js +973 -0
  41. package/Build/Workers/{chunk-XJRBB253.js → chunk-QRWGUWI6.js} +11 -11
  42. package/Build/Workers/{chunk-AF3MU2RL.js → chunk-S4MCOY6I.js} +7 -6
  43. package/Build/Workers/{chunk-Y7HNNPNK.js → chunk-SMQZZOW6.js} +10 -10
  44. package/Build/Workers/{chunk-PVV64VFW.js → chunk-TKKIREQ6.js} +3 -2
  45. package/Build/Workers/{chunk-MKM27KGV.js → chunk-U3ZA64U7.js} +2 -2
  46. package/Build/Workers/{chunk-2N4KDHS3.js → chunk-UA25D5MX.js} +12 -11
  47. package/Build/Workers/{chunk-RQNJD3O4.js → chunk-UOOIQ3KX.js} +12 -12
  48. package/Build/Workers/{chunk-GOQBUCXH.js → chunk-V7VQKN6N.js} +709 -431
  49. package/Build/Workers/{chunk-LXMCPFFS.js → chunk-VQYETPWC.js} +4 -4
  50. package/Build/Workers/{chunk-NKT5K3K3.js → chunk-VWV2IJRB.js} +13 -12
  51. package/Build/Workers/chunk-XZMBNNDX.js +1287 -0
  52. package/Build/Workers/{chunk-ISY4EZCA.js → chunk-Y57HREW5.js} +4 -4
  53. package/Build/Workers/{chunk-EDXL4W76.js → chunk-Y5BF6AFU.js} +2 -2
  54. package/Build/Workers/{chunk-Q3C6VQH6.js → chunk-YLY7NKAB.js} +4 -4
  55. package/Build/Workers/{chunk-4TIG36AW.js → chunk-ZK3CF7ZD.js} +12 -12
  56. package/Build/Workers/{chunk-AJLTU6PF.js → chunk-ZP7JMQV4.js} +4 -1
  57. package/Build/Workers/{chunk-HXJMS2ZI.js → chunk-ZZ46LWL6.js} +1 -1
  58. package/Build/Workers/combineGeometry.js +24 -24
  59. package/Build/Workers/createBoxGeometry.js +18 -18
  60. package/Build/Workers/createBoxOutlineGeometry.js +16 -16
  61. package/Build/Workers/createCircleGeometry.js +26 -26
  62. package/Build/Workers/createCircleOutlineGeometry.js +19 -19
  63. package/Build/Workers/createCoplanarPolygonGeometry.js +33 -33
  64. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +31 -31
  65. package/Build/Workers/createCorridorGeometry.js +29 -29
  66. package/Build/Workers/createCorridorOutlineGeometry.js +28 -28
  67. package/Build/Workers/createCylinderGeometry.js +20 -20
  68. package/Build/Workers/createCylinderOutlineGeometry.js +18 -18
  69. package/Build/Workers/createEllipseGeometry.js +26 -26
  70. package/Build/Workers/createEllipseOutlineGeometry.js +19 -19
  71. package/Build/Workers/createEllipsoidGeometry.js +19 -19
  72. package/Build/Workers/createEllipsoidOutlineGeometry.js +18 -18
  73. package/Build/Workers/createFrustumGeometry.js +18 -18
  74. package/Build/Workers/createFrustumOutlineGeometry.js +18 -18
  75. package/Build/Workers/createGeometry.js +24 -24
  76. package/Build/Workers/createGroundPolylineGeometry.js +175 -118
  77. package/Build/Workers/createPlaneGeometry.js +16 -16
  78. package/Build/Workers/createPlaneOutlineGeometry.js +15 -15
  79. package/Build/Workers/createPolygonGeometry.js +32 -32
  80. package/Build/Workers/createPolygonOutlineGeometry.js +30 -30
  81. package/Build/Workers/createPolylineGeometry.js +25 -25
  82. package/Build/Workers/createPolylineVolumeGeometry.js +31 -31
  83. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +27 -27
  84. package/Build/Workers/createRectangleGeometry.js +27 -27
  85. package/Build/Workers/createRectangleOutlineGeometry.js +20 -20
  86. package/Build/Workers/createSimplePolylineGeometry.js +23 -23
  87. package/Build/Workers/createSphereGeometry.js +19 -19
  88. package/Build/Workers/createSphereOutlineGeometry.js +18 -18
  89. package/Build/Workers/createTaskProcessorWorker.js +3 -3
  90. package/Build/Workers/createVectorTileClampedPolylines.js +14 -14
  91. package/Build/Workers/createVectorTileGeometries.js +24 -24
  92. package/Build/Workers/createVectorTilePoints.js +13 -13
  93. package/Build/Workers/createVectorTilePolygons.js +22 -22
  94. package/Build/Workers/createVectorTilePolylines.js +14 -14
  95. package/Build/Workers/createVerticesFromCesium3DTilesTerrain.js +25 -25
  96. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +22 -22
  97. package/Build/Workers/createVerticesFromHeightmap.js +24 -23
  98. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +20 -20
  99. package/Build/Workers/createWallGeometry.js +24 -24
  100. package/Build/Workers/createWallOutlineGeometry.js +23 -23
  101. package/Build/Workers/decodeDraco.js +10 -10
  102. package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +5 -5
  103. package/Build/Workers/decodeI3S.js +10 -10
  104. package/Build/Workers/gaussianSplatSorter.js +4 -4
  105. package/Build/Workers/gaussianSplatTextureGenerator.js +4 -4
  106. package/Build/Workers/incrementallyBuildTerrainPicker.js +10 -10
  107. package/Build/Workers/transcodeKTX2.js +12 -9
  108. package/Build/Workers/transferTypedArrayTest.js +1 -1
  109. package/Build/Workers/upsampleQuantizedTerrainMesh.js +22 -22
  110. package/Build/Workers/upsampleVerticesFromCesium3DTilesTerrain.js +25 -25
  111. package/Source/Core/ArcType.js +6 -1
  112. package/Source/Core/ArticulationStageType.js +5 -1
  113. package/Source/Core/AssociativeArray.js +100 -94
  114. package/Source/Core/BoundingSphere.js +1296 -1300
  115. package/Source/Core/Cartesian2.js +1 -1
  116. package/Source/Core/Cartesian3.js +2 -3
  117. package/Source/Core/Cartesian4.js +1 -1
  118. package/Source/Core/Cartographic.js +257 -249
  119. package/Source/Core/ClockRange.js +6 -1
  120. package/Source/Core/ClockStep.js +6 -1
  121. package/Source/Core/Color.js +844 -835
  122. package/Source/Core/ComponentDatatype.js +39 -1
  123. package/Source/Core/CornerType.js +6 -1
  124. package/Source/Core/Credit.js +121 -124
  125. package/Source/Core/Ellipsoid.js +637 -660
  126. package/Source/Core/ExtrapolationType.js +6 -1
  127. package/Source/Core/GeocodeType.js +6 -1
  128. package/Source/Core/GeographicProjection.js +74 -74
  129. package/Source/Core/GeographicTilingScheme.js +179 -198
  130. package/Source/Core/GeometryOffsetAttribute.js +7 -1
  131. package/Source/Core/GeometryType.js +7 -1
  132. package/Source/Core/HeightmapEncoding.js +6 -1
  133. package/Source/Core/Iau2006XysData.js +24 -13
  134. package/Source/Core/IndexDatatype.js +3 -1
  135. package/Source/Core/InterpolationType.js +5 -1
  136. package/Source/Core/Intersect.js +6 -1
  137. package/Source/Core/Ion.js +1 -1
  138. package/Source/Core/IonGeocodeProviderType.js +5 -1
  139. package/Source/Core/JulianDate.js +850 -848
  140. package/Source/Core/KeyboardEventModifier.js +6 -1
  141. package/Source/Core/MapProjection.js +40 -44
  142. package/Source/Core/Matrix2.js +906 -893
  143. package/Source/Core/Matrix3.js +1643 -1575
  144. package/Source/Core/Matrix4.js +2903 -2872
  145. package/Source/Core/PixelFormat.js +3 -1
  146. package/Source/Core/PrimitiveType.js +11 -1
  147. package/Source/Core/Ray.js +62 -60
  148. package/Source/Core/Rectangle.js +913 -904
  149. package/Source/Core/ReferenceFrame.js +6 -1
  150. package/Source/Core/RequestScheduler.js +8 -3
  151. package/Source/Core/RequestState.js +6 -1
  152. package/Source/Core/RequestType.js +6 -1
  153. package/Source/Core/Resource.js +1 -1
  154. package/Source/Core/ScreenSpaceEventHandler.js +51 -41
  155. package/Source/Core/ScreenSpaceEventType.js +6 -1
  156. package/Source/Core/TerrainQuantization.js +6 -1
  157. package/Source/Core/TilingScheme.js +100 -98
  158. package/Source/Core/TimeConstants.js +6 -1
  159. package/Source/Core/TimeStandard.js +6 -1
  160. package/Source/Core/TrackingReferenceFrame.js +6 -1
  161. package/Source/Core/Visibility.js +6 -1
  162. package/Source/Core/VulkanConstants.js +6 -1
  163. package/Source/Core/WebGLConstants.js +6 -1
  164. package/Source/Core/WebMercatorProjection.js +108 -109
  165. package/Source/Core/WebMercatorTilingScheme.js +246 -242
  166. package/Source/Core/WindingOrder.js +3 -1
  167. package/Source/Core/createColorRamp.js +37 -0
  168. package/Source/Core/globalTypes.js +25 -0
  169. package/Source/DataSources/StaticGroundGeometryPerMaterialBatch.js +1 -0
  170. package/Source/DataSources/StaticGroundPolylinePerMaterialBatch.js +1 -0
  171. package/Source/DataSources/StripeOrientation.js +6 -1
  172. package/Source/Renderer/BufferUsage.js +20 -9
  173. package/Source/Renderer/Context.js +2 -29
  174. package/Source/Renderer/DrawCommand.js +435 -403
  175. package/Source/Renderer/MipmapHint.js +5 -1
  176. package/Source/Renderer/Pass.js +10 -3
  177. package/Source/Renderer/PickId.js +44 -0
  178. package/Source/Renderer/PixelDatatype.js +3 -1
  179. package/Source/Renderer/RenderbufferFormat.js +5 -1
  180. package/Source/Renderer/ShaderDestination.js +4 -1
  181. package/Source/Renderer/TextureMagnificationFilter.js +3 -1
  182. package/Source/Renderer/TextureMinificationFilter.js +3 -1
  183. package/Source/Renderer/TextureWrap.js +5 -1
  184. package/Source/Renderer/createUniform.js +346 -239
  185. package/Source/Renderer/createUniformArray.js +494 -381
  186. package/Source/Scene/AlphaMode.js +5 -1
  187. package/Source/Scene/ArcGisBaseMapType.js +6 -1
  188. package/Source/Scene/ArcGisMapService.js +1 -1
  189. package/Source/Scene/AttributeType.js +3 -1
  190. package/Source/Scene/Axis.js +3 -1
  191. package/Source/Scene/BingMapsStyle.js +6 -1
  192. package/Source/Scene/BlendEquation.js +6 -1
  193. package/Source/Scene/BlendFunction.js +6 -1
  194. package/Source/Scene/BlendOption.js +6 -1
  195. package/Source/Scene/BlendingState.js +6 -1
  196. package/Source/Scene/BufferLoader.js +0 -2
  197. package/Source/Scene/BufferPoint.js +1 -0
  198. package/Source/Scene/BufferPointCollection.js +17 -1
  199. package/Source/Scene/BufferPolygon.js +3 -2
  200. package/Source/Scene/BufferPolygonCollection.js +13 -1
  201. package/Source/Scene/BufferPolyline.js +1 -0
  202. package/Source/Scene/BufferPolylineCollection.js +5 -1
  203. package/Source/Scene/BufferPrimitiveCollection.js +210 -43
  204. package/Source/Scene/CameraEventAggregator.js +30 -18
  205. package/Source/Scene/CameraEventType.js +6 -1
  206. package/Source/Scene/Cesium3DTile.js +54 -1
  207. package/Source/Scene/Cesium3DTileColorBlendMode.js +6 -1
  208. package/Source/Scene/Cesium3DTileContent.js +195 -254
  209. package/Source/Scene/Cesium3DTileContentFactory.js +10 -2
  210. package/Source/Scene/Cesium3DTileContentState.js +6 -1
  211. package/Source/Scene/Cesium3DTileContentType.js +3 -1
  212. package/Source/Scene/Cesium3DTileFeature.js +289 -306
  213. package/Source/Scene/Cesium3DTileOptimizationHint.js +6 -1
  214. package/Source/Scene/Cesium3DTilePass.js +5 -1
  215. package/Source/Scene/Cesium3DTilePointFeature.js +433 -511
  216. package/Source/Scene/Cesium3DTileRefine.js +6 -1
  217. package/Source/Scene/Cesium3DTileVectorFeature.js +586 -0
  218. package/Source/Scene/Cesium3DTileset.js +46 -6
  219. package/Source/Scene/ClassificationType.js +3 -1
  220. package/Source/Scene/CloudType.js +3 -1
  221. package/Source/Scene/ColorBlendMode.js +4 -1
  222. package/Source/Scene/Composite3DTileContent.js +254 -292
  223. package/Source/Scene/CullFace.js +6 -1
  224. package/Source/Scene/DepthFunction.js +6 -1
  225. package/Source/Scene/DynamicAtmosphereLightingType.js +3 -1
  226. package/Source/Scene/EdgeDisplayMode.js +50 -0
  227. package/Source/Scene/Empty3DTileContent.js +100 -132
  228. package/Source/Scene/EquirectangularPanorama.js +1 -0
  229. package/Source/Scene/ExpressionNodeType.js +6 -1
  230. package/Source/Scene/GaussianSplat3DTileContent.js +436 -478
  231. package/Source/Scene/GeoJsonPrimitive.js +874 -0
  232. package/Source/Scene/Geometry3DTileContent.js +151 -185
  233. package/Source/Scene/GltfBufferViewLoader.js +0 -2
  234. package/Source/Scene/GltfDracoLoader.js +0 -2
  235. package/Source/Scene/GltfImageLoader.js +0 -3
  236. package/Source/Scene/GltfIndexBufferLoader.js +0 -4
  237. package/Source/Scene/GltfJsonLoader.js +0 -2
  238. package/Source/Scene/GltfLoader.js +109 -5
  239. package/Source/Scene/GltfLoaderUtil.js +14 -0
  240. package/Source/Scene/GltfSpzLoader.js +0 -2
  241. package/Source/Scene/GltfStructuralMetadataLoader.js +0 -2
  242. package/Source/Scene/GltfTextureLoader.js +0 -2
  243. package/Source/Scene/GltfVertexBufferLoader.js +0 -4
  244. package/Source/Scene/HeightReference.js +5 -1
  245. package/Source/Scene/HorizontalOrigin.js +6 -1
  246. package/Source/Scene/ImageryProvider.js +1 -1
  247. package/Source/Scene/ImageryState.js +6 -1
  248. package/Source/Scene/Implicit3DTileContent.js +179 -214
  249. package/Source/Scene/ImplicitSubdivisionScheme.js +3 -1
  250. package/Source/Scene/InstanceAttributeSemantic.js +3 -1
  251. package/Source/Scene/IonWorldImageryStyle.js +6 -1
  252. package/Source/Scene/JobType.js +6 -1
  253. package/Source/Scene/LabelStyle.js +6 -1
  254. package/Source/Scene/MVTDataProvider.js +147 -0
  255. package/Source/Scene/MapMode2D.js +6 -1
  256. package/Source/Scene/MetadataComponentType.js +3 -1
  257. package/Source/Scene/MetadataSchemaLoader.js +0 -2
  258. package/Source/Scene/MetadataSemantic.js +6 -2
  259. package/Source/Scene/MetadataType.js +3 -1
  260. package/Source/Scene/Model/B3dmLoader.js +0 -3
  261. package/Source/Scene/Model/CustomShaderMode.js +3 -1
  262. package/Source/Scene/Model/CustomShaderTranslucencyMode.js +5 -1
  263. package/Source/Scene/Model/EdgeVisibilityPipelineStage.js +78 -337
  264. package/Source/Scene/Model/Extensions/Gpm/PpeSource.js +5 -1
  265. package/Source/Scene/Model/Extensions/Gpm/StorageType.js +5 -1
  266. package/Source/Scene/Model/GeoJsonLoader.js +0 -2
  267. package/Source/Scene/Model/I3dmLoader.js +0 -3
  268. package/Source/Scene/Model/InstancingPipelineStage.js +1 -1
  269. package/Source/Scene/Model/LightingModel.js +5 -1
  270. package/Source/Scene/Model/MaterialPipelineStage.js +184 -3
  271. package/Source/Scene/Model/Model.js +34 -0
  272. package/Source/Scene/Model/Model3DTileContent.js +424 -458
  273. package/Source/Scene/Model/ModelDrawCommand.js +31 -3
  274. package/Source/Scene/Model/ModelReader.js +474 -3
  275. package/Source/Scene/Model/ModelRuntimePrimitive.js +2 -1
  276. package/Source/Scene/Model/ModelType.js +3 -1
  277. package/Source/Scene/Model/ModelUtility.js +4 -0
  278. package/Source/Scene/Model/PntsLoader.js +4 -3
  279. package/Source/Scene/Model/StyleCommandsNeeded.js +3 -1
  280. package/Source/Scene/Model/UniformType.js +5 -1
  281. package/Source/Scene/Model/VaryingType.js +5 -1
  282. package/Source/Scene/Model/createVectorTileBuffersFromModelComponents.js +500 -139
  283. package/Source/Scene/Model/pickModel.js +94 -299
  284. package/Source/Scene/ModelAnimationLoop.js +6 -1
  285. package/Source/Scene/ModelAnimationState.js +6 -1
  286. package/Source/Scene/ModelComponents.js +47 -2
  287. package/Source/Scene/Multiple3DTileContent.js +291 -334
  288. package/Source/Scene/PrimitiveState.js +7 -1
  289. package/Source/Scene/QuadtreeOccluders.js +20 -15
  290. package/Source/Scene/QuadtreeTile.js +547 -541
  291. package/Source/Scene/QuadtreeTileLoadState.js +6 -1
  292. package/Source/Scene/QuadtreeTileProvider.js +159 -175
  293. package/Source/Scene/ResourceLoader.js +0 -1
  294. package/Source/Scene/ResourceLoaderState.js +7 -1
  295. package/Source/Scene/Scene.js +26 -0
  296. package/Source/Scene/SceneMode.js +4 -1
  297. package/Source/Scene/ShadowMode.js +3 -1
  298. package/Source/Scene/SkyBox.js +1 -1
  299. package/Source/Scene/SplitDirection.js +6 -1
  300. package/Source/Scene/StencilFunction.js +6 -1
  301. package/Source/Scene/StencilOperation.js +6 -1
  302. package/Source/Scene/TerrainState.js +7 -1
  303. package/Source/Scene/TileState.js +7 -1
  304. package/Source/Scene/Tileset3DTileContent.js +113 -146
  305. package/Source/Scene/Tonemapper.js +5 -1
  306. package/Source/Scene/UrlTemplate3DTilesDataProvider.js +499 -0
  307. package/Source/Scene/Vector3DTileContent.js +205 -234
  308. package/Source/Scene/VectorGltf3DTileContent.js +131 -61
  309. package/Source/Scene/VertexAttributeSemantic.js +3 -1
  310. package/Source/Scene/VerticalOrigin.js +6 -1
  311. package/Source/Scene/VoxelBoxShape.js +12 -6
  312. package/Source/Scene/VoxelContent.js +2 -0
  313. package/Source/Scene/VoxelCylinderShape.js +39 -38
  314. package/Source/Scene/VoxelEllipsoidShape.js +46 -96
  315. package/Source/Scene/VoxelMetadataOrder.js +6 -1
  316. package/Source/Scene/VoxelPrimitive.js +159 -175
  317. package/Source/Scene/VoxelProvider.js +64 -90
  318. package/Source/Scene/VoxelShapeType.js +3 -1
  319. package/Source/Scene/buildVectorGltfFromMVT.js +1059 -0
  320. package/Source/Scene/buildVoxelCustomShader.js +199 -0
  321. package/Source/Scene/decodeMVT.js +634 -0
  322. package/Source/Scene/renderBufferPointCollection.js +124 -127
  323. package/Source/Scene/renderBufferPolygonCollection.js +122 -122
  324. package/Source/Scene/renderBufferPolylineCollection.js +386 -238
  325. package/Source/Shaders/BufferPointMaterialFS.glsl +1 -0
  326. package/Source/Shaders/BufferPointMaterialFS.js +1 -0
  327. package/Source/Shaders/BufferPointMaterialVS.glsl +19 -9
  328. package/Source/Shaders/BufferPointMaterialVS.js +20 -10
  329. package/Source/Shaders/BufferPolygonMaterialVS.glsl +13 -4
  330. package/Source/Shaders/BufferPolygonMaterialVS.js +14 -5
  331. package/Source/Shaders/BufferPolylineMaterialVS.glsl +16 -2
  332. package/Source/Shaders/BufferPolylineMaterialVS.js +17 -3
  333. package/Source/Shaders/Builtin/Constants/passCesium3DTileEdgesDirect.glsl +9 -0
  334. package/Source/Shaders/Builtin/Constants/passCesium3DTileEdgesDirect.js +11 -0
  335. package/Source/Shaders/Builtin/Constants/passOverlay.glsl +1 -1
  336. package/Source/Shaders/Builtin/Constants/passOverlay.js +1 -1
  337. package/Source/Shaders/Builtin/CzmBuiltins.js +4 -0
  338. package/Source/Shaders/Builtin/Functions/computeTextureTransform.glsl +24 -0
  339. package/Source/Shaders/Builtin/Functions/computeTextureTransform.js +25 -0
  340. package/Source/Shaders/Model/ConstantLodStageFS.glsl +60 -0
  341. package/Source/Shaders/Model/ConstantLodStageFS.js +62 -0
  342. package/Source/Shaders/Model/ConstantLodStageVS.glsl +12 -0
  343. package/Source/Shaders/Model/ConstantLodStageVS.js +13 -0
  344. package/Source/Shaders/Model/EdgeVisibilityStageVS.glsl +0 -1
  345. package/Source/Shaders/Model/EdgeVisibilityStageVS.js +0 -1
  346. package/Source/Shaders/Model/MaterialStageFS.glsl +46 -20
  347. package/Source/Shaders/Model/MaterialStageFS.js +46 -20
  348. package/Source/Shaders/Voxels/convertLocalToBoxUv.glsl +0 -1
  349. package/Source/Shaders/Voxels/convertLocalToBoxUv.js +0 -1
  350. package/Source/Shaders/Voxels/convertLocalToCylinderUv.glsl +7 -9
  351. package/Source/Shaders/Voxels/convertLocalToCylinderUv.js +7 -9
  352. package/Source/Shaders/Voxels/convertLocalToEllipsoidUv.glsl +7 -17
  353. package/Source/Shaders/Voxels/convertLocalToEllipsoidUv.js +7 -17
  354. package/Source/Widget/CesiumWidget.js +11 -4
  355. package/index.d.ts +595 -343
  356. package/index.js +392 -378
  357. package/package.json +3 -3
  358. package/Build/Workers/chunk-DVB56LG7.js +0 -114
  359. package/Build/Workers/chunk-HKUES6UG.js +0 -2357
  360. package/Build/Workers/chunk-HRHRYFHS.js +0 -940
  361. package/Build/Workers/chunk-KLPGTXS3.js +0 -642
  362. package/Build/Workers/chunk-ZBZRTRJB.js +0 -1829
@@ -14,6 +14,7 @@ import BlendingState from "../BlendingState.js";
14
14
  import CullFace from "../CullFace.js";
15
15
  import SceneMode from "../SceneMode.js";
16
16
  import ShadowMode from "../ShadowMode.js";
17
+ import EdgeDisplayMode from "../EdgeDisplayMode.js";
17
18
  import StencilConstants from "../StencilConstants.js";
18
19
  import StencilFunction from "../StencilFunction.js";
19
20
  import StencilOperation from "../StencilOperation.js";
@@ -572,10 +573,22 @@ ModelDrawCommand.prototype.pushCommands = function (frameState, result) {
572
573
  return;
573
574
  }
574
575
 
576
+ // Skip surface rendering if EDGES_ONLY mode is enabled and this primitive
577
+ // has edge visibility data. Only the edges will render (via pushEdgeCommands).
578
+ if (
579
+ this._model.edgeDisplayMode === EdgeDisplayMode.EDGES_ONLY &&
580
+ this._needsEdgeCommands
581
+ ) {
582
+ return result;
583
+ }
584
+
575
585
  pushCommand(result, this._originalCommand, use2D);
576
586
 
577
587
  // Push edge commands after the original command
578
- if (this._needsEdgeCommands) {
588
+ if (
589
+ this._needsEdgeCommands &&
590
+ this._model.edgeDisplayMode !== EdgeDisplayMode.SURFACES_ONLY
591
+ ) {
579
592
  pushCommand(result, this._edgeCommand, use2D);
580
593
  }
581
594
 
@@ -623,6 +636,23 @@ ModelDrawCommand.prototype.pushEdgeCommands = function (frameState, result) {
623
636
  return result;
624
637
  }
625
638
 
639
+ // SURFACES_ONLY mode suppresses all edge rendering
640
+ if (this._model.edgeDisplayMode === EdgeDisplayMode.SURFACES_ONLY) {
641
+ return result;
642
+ }
643
+
644
+ // Use direct pass (renders to main framebuffer) when EDGES_ONLY mode is enabled,
645
+ // otherwise use MRT pass (renders to edge framebuffer for compositing)
646
+ const edgePass =
647
+ this._model.edgeDisplayMode === EdgeDisplayMode.EDGES_ONLY
648
+ ? Pass.CESIUM_3D_TILE_EDGES_DIRECT
649
+ : Pass.CESIUM_3D_TILE_EDGES;
650
+
651
+ this._edgeCommand.command.pass = edgePass;
652
+ if (defined(this._edgeCommand.derivedCommand2D)) {
653
+ this._edgeCommand.derivedCommand2D.command.pass = edgePass;
654
+ }
655
+
626
656
  const use2D = shouldUse2DCommands(this, frameState);
627
657
  pushCommand(result, this._edgeCommand, use2D);
628
658
 
@@ -818,8 +848,6 @@ function deriveEdgeCommand(command, renderResources) {
818
848
  uniformMap.u_isEdgePass = function () {
819
849
  return true; // This is the edge pass
820
850
  };
821
- edgeCommand.uniformMap = uniformMap;
822
-
823
851
  edgeCommand.uniformMap = uniformMap;
824
852
  edgeCommand.castShadows = false;
825
853
  edgeCommand.receiveShadows = false;
@@ -9,8 +9,13 @@ import AttributeCompression from "../../Core/AttributeCompression.js";
9
9
  import IndexDatatype from "../../Core/IndexDatatype.js";
10
10
  import PrimitiveType from "../../Core/PrimitiveType.js";
11
11
  import Matrix4 from "../../Core/Matrix4.js";
12
+ import Quaternion from "../../Core/Quaternion.js";
13
+ import Transforms from "../../Core/Transforms.js";
12
14
 
13
15
  import AttributeType from "../AttributeType.js";
16
+ import InstanceAttributeSemantic from "../InstanceAttributeSemantic.js";
17
+ import VertexAttributeSemantic from "../VertexAttributeSemantic.js";
18
+ import ModelUtility from "./ModelUtility.js";
14
19
 
15
20
  /**
16
21
  * A class for reading the data from a <code>ModelComponents.Attribute</code>.
@@ -144,7 +149,20 @@ class ModelReader {
144
149
  const byteStride = attribute.byteStride;
145
150
  const bytesPerComponent = ComponentDatatype.getSizeInBytes(componentType);
146
151
  const defaultByteStride = componentsPerElement * bytesPerComponent;
147
- if (!defined(byteStride) || byteStride === defaultByteStride) {
152
+
153
+ const isDefaultStride =
154
+ !defined(byteStride) || byteStride === defaultByteStride;
155
+ const hasTypedArray = defined(attribute.typedArray);
156
+
157
+ // If in-memory — return as-is
158
+ // Important: typedArray is already tightly-packed on creation (See: ModelComponents.typedArray and GltfLoader.getPackedTypedArray)
159
+ // byteOffset and byteStride should thus be ignored
160
+ if (hasTypedArray) {
161
+ return attribute.typedArray;
162
+ }
163
+
164
+ // Non-interleaved — copy from typedArray or read from GPU
165
+ if (isDefaultStride) {
148
166
  const typedArray = ComponentDatatype.createTypedArray(
149
167
  componentType,
150
168
  totalComponentCount,
@@ -161,6 +179,8 @@ class ModelReader {
161
179
  // have ONE "TypedArray[] getThemFrom(buffer)" call that
162
180
  // returns all of the (interleaved) attributes at once,
163
181
  // but this requires abstractions that we don't have.
182
+
183
+ // Read back from GPU if not available in memory
164
184
  const fullTypedArray = new Uint8Array(buffer.sizeInBytes);
165
185
  buffer.getBufferData(fullTypedArray);
166
186
 
@@ -320,8 +340,8 @@ class ModelReader {
320
340
  const c = new Cartesian3();
321
341
  for (let i = 0; i < elementCount; i++) {
322
342
  Cartesian3.unpack(quantizedTypedArray, i * 3, c);
323
- AttributeCompression.octDecodeInRange(c, normalizationRange, c);
324
- Cartesian3.pack(dequantizedTypedArray, c, i * 3);
343
+ AttributeCompression.octDecodeInRange(c.x, c.y, normalizationRange, c);
344
+ Cartesian3.pack(c, dequantizedTypedArray, i * 3);
325
345
  }
326
346
  return dequantizedTypedArray;
327
347
  }
@@ -645,6 +665,33 @@ class ModelReader {
645
665
  return result;
646
666
  }
647
667
 
668
+ /**
669
+ * Reads feature IDs from an implicit range feature ID set into a typed array.
670
+ *
671
+ * Generates values using <code>offset + Math.floor(i / repeat)</code> for
672
+ * each vertex. If <code>repeat</code> is undefined, all values are set to
673
+ * <code>offset</code>.
674
+ *
675
+ * @param {FeatureIdImplicitRange} featureIdSet The implicit range feature ID set.
676
+ * @param {object} attributeOwner An object with an <code>attributes</code> array
677
+ * (a primitive or an instances object)
678
+ * @returns {Float32Array} The generated feature ID values.
679
+ */
680
+ static readImplicitRangeAsTypedArray(featureIdSet, attributeOwner) {
681
+ const count = attributeOwner.attributes[0]?.count ?? 0;
682
+ const offset = featureIdSet.offset;
683
+ const repeat = featureIdSet.repeat;
684
+ const typedArray = new Float32Array(count);
685
+ if (defined(repeat)) {
686
+ for (let i = 0; i < count; i++) {
687
+ typedArray[i] = offset + Math.floor(i / repeat);
688
+ }
689
+ } else {
690
+ typedArray.fill(offset);
691
+ }
692
+ return typedArray;
693
+ }
694
+
648
695
  /**
649
696
  * Read the indices values from the given primitive indices, and
650
697
  * return them as a typed array.
@@ -805,6 +852,430 @@ class ModelReader {
805
852
  `UNSIGNED_INT (${IndexDatatype.UNSIGNED_INT}, but is ${indexDatatype}`,
806
853
  );
807
854
  }
855
+
856
+ /**
857
+ * Per-instance data combining a transform matrix with an optional feature ID.
858
+ *
859
+ * @typedef {object} ModelReader.Instance
860
+ * @property {Matrix4} transform The instance transform matrix.
861
+ * @property {number} [featureId] The per-instance feature ID, or undefined.
862
+ *
863
+ * @private
864
+ */
865
+
866
+ /**
867
+ * A callback invoked by {@link ModelReader.forEachPrimitive} for each
868
+ * runtime primitive in the model.
869
+ *
870
+ * @callback ModelReader.ForEachPrimitiveCallback
871
+ * @param {object} runtimePrimitive The runtime primitive wrapper.
872
+ * @param {object} primitive The underlying model primitive (runtimePrimitive.primitive).
873
+ * @param {ModelReader.Instance[]} instances Per-instance data (transforms and optional feature IDs).
874
+ * @param {Matrix4} computedModelMatrix The computed model matrix for the node.
875
+ *
876
+ * @private
877
+ */
878
+
879
+ /**
880
+ * Iterates over every primitive in a model's scene graph, computing
881
+ * node transforms and instance transforms once per node and invoking
882
+ * a callback for each runtime primitive.
883
+ * <p>
884
+ * When a map projection is provided, the computed model matrix is
885
+ * projected to 2D via {@link Transforms.basisTo2D}.
886
+ * </p>
887
+ *
888
+ * @param {Model} model The model whose scene graph to traverse.
889
+ * @param {object} [options] Object with the following properties:
890
+ * @param {MapProjection} [options.mapProjection] The map projection for 2D mode. When defined, the computed model matrix is projected to 2D.
891
+ * @param {string} [options.instanceFeatureIdLabel] The label used to select which instance feature ID set to read. When defined, per-instance feature IDs are fetched. When undefined, feature IDs are not fetched.
892
+ * @param {ModelReader.ForEachPrimitiveCallback} callback The function invoked for each primitive.
893
+ */
894
+ static forEachPrimitive(model, options, callback) {
895
+ const mapProjection = options?.mapProjection;
896
+ const instanceFeatureIdLabel = options?.instanceFeatureIdLabel;
897
+ const sceneGraph = model.sceneGraph;
898
+ if (!defined(sceneGraph)) {
899
+ return;
900
+ }
901
+
902
+ const scratchNodeTransforms = {
903
+ nodeComputedTransform: new Matrix4(),
904
+ modelMatrix: new Matrix4(),
905
+ computedModelMatrix: new Matrix4(),
906
+ };
907
+
908
+ const nodes = sceneGraph._runtimeNodes;
909
+ const nodesLength = nodes.length;
910
+
911
+ for (let n = 0; n < nodesLength; n++) {
912
+ const runtimeNode = nodes[n];
913
+
914
+ const nodeTransforms = ModelReader.computeNodeTransforms(
915
+ runtimeNode,
916
+ sceneGraph,
917
+ model,
918
+ scratchNodeTransforms,
919
+ );
920
+
921
+ let computedModelMatrix = nodeTransforms.computedModelMatrix;
922
+
923
+ if (defined(mapProjection)) {
924
+ computedModelMatrix = Transforms.basisTo2D(
925
+ mapProjection,
926
+ computedModelMatrix,
927
+ computedModelMatrix,
928
+ );
929
+ }
930
+
931
+ const instanceTransforms = ModelReader.computeInstanceTransforms(
932
+ runtimeNode,
933
+ computedModelMatrix,
934
+ nodeTransforms.nodeComputedTransform,
935
+ nodeTransforms.modelMatrix,
936
+ );
937
+
938
+ const instanceFeatureIds = defined(instanceFeatureIdLabel)
939
+ ? ModelReader.computeInstanceFeatureIds(
940
+ runtimeNode,
941
+ instanceFeatureIdLabel,
942
+ )
943
+ : undefined;
944
+
945
+ const instances = [];
946
+ for (let i = 0; i < instanceTransforms.length; i++) {
947
+ instances.push({
948
+ transform: instanceTransforms[i],
949
+ featureId: defined(instanceFeatureIds)
950
+ ? instanceFeatureIds[i]
951
+ : undefined,
952
+ });
953
+ }
954
+
955
+ const primitivesLength = runtimeNode.runtimePrimitives.length;
956
+ for (let p = 0; p < primitivesLength; p++) {
957
+ const runtimePrimitive = runtimeNode.runtimePrimitives[p];
958
+ callback(
959
+ runtimePrimitive,
960
+ runtimePrimitive.primitive,
961
+ instances,
962
+ computedModelMatrix,
963
+ );
964
+ }
965
+ }
966
+ }
967
+
968
+ /**
969
+ * Computes the model matrix for a runtime node, accounting for instancing
970
+ * and world-space transforms.
971
+ *
972
+ * @param {object} runtimeNode The runtime node.
973
+ * @param {ModelSceneGraph} sceneGraph The model scene graph.
974
+ * @param {Model} model The model.
975
+ * @param {object} result An object with scratch matrices: { nodeComputedTransform: Matrix4, modelMatrix: Matrix4, computedModelMatrix: Matrix4 }.
976
+ * @returns {object} The result parameter, populated with the computed transforms.
977
+ *
978
+ */
979
+ static computeNodeTransforms(runtimeNode, sceneGraph, model, result) {
980
+ const node = runtimeNode.node;
981
+
982
+ let nodeComputedTransform = Matrix4.clone(
983
+ runtimeNode.computedTransform,
984
+ result.nodeComputedTransform,
985
+ );
986
+ let modelMatrix = Matrix4.clone(
987
+ sceneGraph.computedModelMatrix,
988
+ result.modelMatrix,
989
+ );
990
+
991
+ const instances = node.instances;
992
+ if (defined(instances)) {
993
+ if (instances.transformInWorldSpace) {
994
+ // Replicate the multiplication order in LegacyInstancingStageVS.
995
+ modelMatrix = Matrix4.multiplyTransformation(
996
+ model.modelMatrix,
997
+ sceneGraph.components.transform,
998
+ modelMatrix,
999
+ );
1000
+ nodeComputedTransform = Matrix4.multiplyTransformation(
1001
+ sceneGraph.axisCorrectionMatrix,
1002
+ runtimeNode.computedTransform,
1003
+ nodeComputedTransform,
1004
+ );
1005
+ }
1006
+ }
1007
+
1008
+ const computedModelMatrix = Matrix4.multiplyTransformation(
1009
+ modelMatrix,
1010
+ nodeComputedTransform,
1011
+ result.computedModelMatrix,
1012
+ );
1013
+
1014
+ result.computedModelMatrix = computedModelMatrix;
1015
+ result.nodeComputedTransform = nodeComputedTransform;
1016
+ result.modelMatrix = modelMatrix;
1017
+ return result;
1018
+ }
1019
+
1020
+ /**
1021
+ * Builds an array of instance transforms for a node.
1022
+ * If the node is not instanced, returns an array containing only the
1023
+ * computedModelMatrix.
1024
+ *
1025
+ * @param {object} runtimeNode The runtime node.
1026
+ * @param {Matrix4} computedModelMatrix The computed model matrix.
1027
+ * @param {Matrix4} nodeComputedTransform The node computed transform.
1028
+ * @param {Matrix4} modelMatrix The model matrix.
1029
+ * @returns {Matrix4[]}
1030
+ */
1031
+ static computeInstanceTransforms(
1032
+ runtimeNode,
1033
+ computedModelMatrix,
1034
+ nodeComputedTransform,
1035
+ modelMatrix,
1036
+ ) {
1037
+ const transforms = [];
1038
+ const node = runtimeNode.node;
1039
+ const instances = node.instances;
1040
+
1041
+ if (defined(instances)) {
1042
+ const transformsCount = instances.attributes[0].count;
1043
+ const instanceComponentDatatype =
1044
+ instances.attributes[0].componentDatatype;
1045
+
1046
+ const transformElements = 12;
1047
+ let transformsTypedArray = runtimeNode.transformsTypedArray;
1048
+
1049
+ if (!defined(transformsTypedArray)) {
1050
+ const instanceTransformsBuffer = runtimeNode.instancingTransformsBuffer;
1051
+ if (defined(instanceTransformsBuffer)) {
1052
+ transformsTypedArray = ComponentDatatype.createTypedArray(
1053
+ instanceComponentDatatype,
1054
+ transformsCount * transformElements,
1055
+ );
1056
+ instanceTransformsBuffer.getBufferData(transformsTypedArray);
1057
+ }
1058
+ }
1059
+
1060
+ if (defined(transformsTypedArray)) {
1061
+ ModelReader.computeInstanceTransformsFromTypedArray(
1062
+ transformsTypedArray,
1063
+ transformsCount,
1064
+ transforms,
1065
+ );
1066
+ } else {
1067
+ ModelReader.computeInstanceTransformsFromAttributes(
1068
+ instances,
1069
+ transformsCount,
1070
+ transforms,
1071
+ );
1072
+ }
1073
+
1074
+ for (let i = 0; i < transforms.length; i++) {
1075
+ const transform = transforms[i];
1076
+ if (instances.transformInWorldSpace) {
1077
+ Matrix4.multiplyTransformation(
1078
+ transform,
1079
+ nodeComputedTransform,
1080
+ transform,
1081
+ );
1082
+ Matrix4.multiplyTransformation(modelMatrix, transform, transform);
1083
+ } else {
1084
+ Matrix4.multiplyTransformation(
1085
+ computedModelMatrix,
1086
+ transform,
1087
+ transform,
1088
+ );
1089
+ }
1090
+ }
1091
+ }
1092
+
1093
+ if (transforms.length === 0) {
1094
+ transforms.push(computedModelMatrix);
1095
+ }
1096
+
1097
+ return transforms;
1098
+ }
1099
+
1100
+ /**
1101
+ * Builds an array of per-instance feature IDs for a node.
1102
+ * If the node is not instanced or has no matching feature ID set,
1103
+ * returns <code>undefined</code>.
1104
+ *
1105
+ * @param {object} runtimeNode The runtime node.
1106
+ * @param {string} instanceFeatureIdLabel The label used to select the feature ID set.
1107
+ * @returns {number[]|undefined} The per-instance feature IDs, or undefined.
1108
+ */
1109
+ static computeInstanceFeatureIds(runtimeNode, instanceFeatureIdLabel) {
1110
+ const node = runtimeNode.node;
1111
+ const instances = node.instances;
1112
+
1113
+ if (!defined(instances)) {
1114
+ return undefined;
1115
+ }
1116
+
1117
+ const featureIdSet = ModelUtility.getFeatureIdsByLabel(
1118
+ instances.featureIds,
1119
+ instanceFeatureIdLabel,
1120
+ );
1121
+
1122
+ if (!defined(featureIdSet)) {
1123
+ return undefined;
1124
+ }
1125
+
1126
+ let typedArray;
1127
+
1128
+ // Case: FeatureIdAttribute
1129
+ if ("setIndex" in featureIdSet) {
1130
+ const attribute = ModelUtility.getAttributeBySemantic(
1131
+ instances,
1132
+ VertexAttributeSemantic.FEATURE_ID,
1133
+ featureIdSet.setIndex,
1134
+ );
1135
+ if (defined(attribute)) {
1136
+ typedArray = ModelReader.readAttributeAsTypedArray(attribute);
1137
+ }
1138
+ }
1139
+
1140
+ // Case: FeatureIdImplicitRange
1141
+ if ("offset" in featureIdSet) {
1142
+ typedArray = ModelReader.readImplicitRangeAsTypedArray(
1143
+ featureIdSet,
1144
+ instances,
1145
+ );
1146
+ }
1147
+
1148
+ if (!defined(typedArray)) {
1149
+ return undefined;
1150
+ }
1151
+
1152
+ const featureIds = new Array(typedArray.length);
1153
+ for (let i = 0; i < typedArray.length; i++) {
1154
+ featureIds[i] = typedArray[i];
1155
+ }
1156
+ return featureIds;
1157
+ }
1158
+
1159
+ /**
1160
+ * Builds instance transforms from a packed typed array where each instance
1161
+ * is stored as 12 floats (3 rows of 4 columns, row-major).
1162
+ *
1163
+ * @param {TypedArray} transformsTypedArray The packed transforms array.
1164
+ * @param {number} count The number of instances.
1165
+ * @param {Matrix4[]} transforms The output array to push transforms into.
1166
+ */
1167
+ static computeInstanceTransformsFromTypedArray(
1168
+ transformsTypedArray,
1169
+ count,
1170
+ transforms,
1171
+ ) {
1172
+ const transformElements = 12;
1173
+ for (let i = 0; i < count; i++) {
1174
+ const index = i * transformElements;
1175
+
1176
+ const transform = new Matrix4(
1177
+ transformsTypedArray[index],
1178
+ transformsTypedArray[index + 1],
1179
+ transformsTypedArray[index + 2],
1180
+ transformsTypedArray[index + 3],
1181
+ transformsTypedArray[index + 4],
1182
+ transformsTypedArray[index + 5],
1183
+ transformsTypedArray[index + 6],
1184
+ transformsTypedArray[index + 7],
1185
+ transformsTypedArray[index + 8],
1186
+ transformsTypedArray[index + 9],
1187
+ transformsTypedArray[index + 10],
1188
+ transformsTypedArray[index + 11],
1189
+ 0,
1190
+ 0,
1191
+ 0,
1192
+ 1,
1193
+ );
1194
+
1195
+ transforms.push(transform);
1196
+ }
1197
+ }
1198
+
1199
+ /**
1200
+ * Builds instance transforms from individual TRANSLATION, ROTATION, and SCALE
1201
+ * attributes when no packed transformsTypedArray is available.
1202
+ *
1203
+ * @param {object} instances The instances object.
1204
+ * @param {number} count The number of instances.
1205
+ * @param {Matrix4[]} transforms The output array to push transforms into.
1206
+ */
1207
+ static computeInstanceTransformsFromAttributes(instances, count, transforms) {
1208
+ const translationAttribute = ModelUtility.getAttributeBySemantic(
1209
+ instances,
1210
+ InstanceAttributeSemantic.TRANSLATION,
1211
+ );
1212
+ const rotationAttribute = ModelUtility.getAttributeBySemantic(
1213
+ instances,
1214
+ InstanceAttributeSemantic.ROTATION,
1215
+ );
1216
+ const scaleAttribute = ModelUtility.getAttributeBySemantic(
1217
+ instances,
1218
+ InstanceAttributeSemantic.SCALE,
1219
+ );
1220
+
1221
+ const hasTranslation = defined(translationAttribute);
1222
+ const hasRotation = defined(rotationAttribute);
1223
+ const hasScale = defined(scaleAttribute);
1224
+
1225
+ if (!hasTranslation && !hasRotation && !hasScale) {
1226
+ return;
1227
+ }
1228
+
1229
+ let translationTypedArray, rotationTypedArray, scaleTypedArray;
1230
+ if (hasTranslation) {
1231
+ translationTypedArray =
1232
+ ModelReader.readAttributeAsRawCompactTypedArray(translationAttribute);
1233
+ }
1234
+ if (hasRotation) {
1235
+ rotationTypedArray =
1236
+ ModelReader.readAttributeAsRawCompactTypedArray(rotationAttribute);
1237
+ }
1238
+ if (hasScale) {
1239
+ scaleTypedArray =
1240
+ ModelReader.readAttributeAsRawCompactTypedArray(scaleAttribute);
1241
+ }
1242
+
1243
+ for (let i = 0; i < count; i++) {
1244
+ const translation = hasTranslation
1245
+ ? new Cartesian3(
1246
+ translationTypedArray[i * 3],
1247
+ translationTypedArray[i * 3 + 1],
1248
+ translationTypedArray[i * 3 + 2],
1249
+ )
1250
+ : Cartesian3.ZERO;
1251
+
1252
+ const rotation = hasRotation
1253
+ ? new Quaternion(
1254
+ rotationTypedArray[i * 4],
1255
+ rotationTypedArray[i * 4 + 1],
1256
+ rotationTypedArray[i * 4 + 2],
1257
+ rotationTypedArray[i * 4 + 3],
1258
+ )
1259
+ : Quaternion.IDENTITY;
1260
+
1261
+ const scale = hasScale
1262
+ ? new Cartesian3(
1263
+ scaleTypedArray[i * 3],
1264
+ scaleTypedArray[i * 3 + 1],
1265
+ scaleTypedArray[i * 3 + 2],
1266
+ )
1267
+ : Cartesian3.ONE;
1268
+
1269
+ const transform = Matrix4.fromTranslationQuaternionRotationScale(
1270
+ translation,
1271
+ rotation,
1272
+ scale,
1273
+ new Matrix4(),
1274
+ );
1275
+
1276
+ transforms.push(transform);
1277
+ }
1278
+ }
808
1279
  }
809
1280
 
810
1281
  export default ModelReader;
@@ -214,7 +214,8 @@ ModelRuntimePrimitive.prototype.configurePipeline = function (frameState) {
214
214
  // Check whether the model is part of a `Model3DTileContent` that
215
215
  // belongs to a tileset that has imagery layers. If this is the
216
216
  // case, then the `ImageryPipelineStage` will be required.
217
- const hasImageryLayers = defined(model.imageryLayers);
217
+ const hasImageryLayers =
218
+ defined(model.imageryLayers) && model.imageryLayers.length > 0;
218
219
 
219
220
  const hasCustomShader = defined(customShader);
220
221
  const hasCustomFragmentShader =
@@ -91,4 +91,6 @@ ModelType.is3DTiles = function (modelType) {
91
91
  }
92
92
  };
93
93
 
94
- export default Object.freeze(ModelType);
94
+ Object.freeze(ModelType);
95
+
96
+ export default ModelType;
@@ -345,6 +345,7 @@ ModelUtility.sanitizeGlslIdentifier = function (identifier) {
345
345
 
346
346
  ModelUtility.supportedExtensions = {
347
347
  AGI_articulations: true,
348
+ CESIUM_mesh_vector: true,
348
349
  CESIUM_primitive_outline: true,
349
350
  CESIUM_RTC: true,
350
351
  EXT_feature_metadata: true,
@@ -353,6 +354,8 @@ ModelUtility.supportedExtensions = {
353
354
  EXT_instance_features: true,
354
355
  EXT_mesh_features: true,
355
356
  EXT_mesh_gpu_instancing: true,
357
+ EXT_mesh_polygon: true,
358
+ EXT_mesh_primitive_edge_visibility: true,
356
359
  EXT_meshopt_compression: true,
357
360
  EXT_primitive_voxels: true,
358
361
  EXT_structural_metadata: true,
@@ -367,6 +370,7 @@ ModelUtility.supportedExtensions = {
367
370
  KHR_materials_clearcoat: true,
368
371
  KHR_materials_unlit: true,
369
372
  KHR_mesh_quantization: true,
373
+ KHR_mesh_primitive_restart: true,
370
374
  KHR_techniques_webgl: true,
371
375
  KHR_texture_basisu: true,
372
376
  KHR_texture_transform: true,
@@ -79,7 +79,6 @@ class PntsLoader extends ResourceLoader {
79
79
  /**
80
80
  * The cache key of the resource
81
81
  *
82
- * @memberof PntsLoader.prototype
83
82
  *
84
83
  * @type {string}
85
84
  * @readonly
@@ -92,7 +91,6 @@ class PntsLoader extends ResourceLoader {
92
91
  /**
93
92
  * The loaded components.
94
93
  *
95
- * @memberof PntsLoader.prototype
96
94
  *
97
95
  * @type {ModelComponents.Components}
98
96
  * @readonly
@@ -106,7 +104,6 @@ class PntsLoader extends ResourceLoader {
106
104
  * A world-space transform to apply to the primitives.
107
105
  * See {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/TileFormats/PointCloud#global-semantics}
108
106
  *
109
- * @memberof PntsLoader.prototype
110
107
  *
111
108
  * @type {Matrix4}
112
109
  * @readonly
@@ -528,19 +525,23 @@ function makeAttributes(loader, parsedContent, context) {
528
525
 
529
526
  if (defined(parsedContent.normals)) {
530
527
  attribute = makeAttribute(loader, parsedContent.normals, context);
528
+ attribute.count = parsedContent.pointsLength;
531
529
  attributes.push(attribute);
532
530
  }
533
531
 
534
532
  if (defined(parsedContent.colors)) {
535
533
  attribute = makeAttribute(loader, parsedContent.colors, context);
534
+ attribute.count = parsedContent.pointsLength;
536
535
  attributes.push(attribute);
537
536
  } else {
538
537
  attribute = makeAttribute(loader, defaultColorAttribute, context);
538
+ attribute.count = parsedContent.pointsLength;
539
539
  attributes.push(attribute);
540
540
  }
541
541
 
542
542
  if (defined(parsedContent.batchIds)) {
543
543
  attribute = makeAttribute(loader, parsedContent.batchIds, context);
544
+ attribute.count = parsedContent.pointsLength;
544
545
  attributes.push(attribute);
545
546
  }
546
547
 
@@ -26,4 +26,6 @@ StyleCommandsNeeded.getStyleCommandsNeeded = function (
26
26
  return StyleCommandsNeeded.OPAQUE_AND_TRANSLUCENT;
27
27
  };
28
28
 
29
- export default Object.freeze(StyleCommandsNeeded);
29
+ Object.freeze(StyleCommandsNeeded);
30
+
31
+ export default StyleCommandsNeeded;
@@ -1,3 +1,5 @@
1
+ // @ts-check
2
+
1
3
  /**
2
4
  * An enum of the basic GLSL uniform types. These can be used with
3
5
  * {@link CustomShader} to declare user-defined uniforms.
@@ -121,4 +123,6 @@ const UniformType = {
121
123
  SAMPLER_CUBE: "samplerCube",
122
124
  };
123
125
 
124
- export default Object.freeze(UniformType);
126
+ Object.freeze(UniformType);
127
+
128
+ export default UniformType;