@cesium/engine 1.0.0 → 2.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 (472) hide show
  1. package/Build/Workers/{AttributeCompression-4589338a.js → AttributeCompression-b646d393.js} +1 -1
  2. package/Build/Workers/{AxisAlignedBoundingBox-bfb1234f.js → AxisAlignedBoundingBox-47525601.js} +1 -1
  3. package/Build/Workers/{BoundingRectangle-7ffc2153.js → BoundingRectangle-93b263ac.js} +1 -1
  4. package/Build/Workers/{BoxGeometry-93f344a3.js → BoxGeometry-8c4b4125.js} +1 -1
  5. package/Build/Workers/{Color-0c5aaf47.js → Color-52c60ed7.js} +1 -1
  6. package/Build/Workers/{CoplanarPolygonGeometryLibrary-6597982a.js → CoplanarPolygonGeometryLibrary-33c4c1f8.js} +1 -1
  7. package/Build/Workers/{CorridorGeometryLibrary-2119580e.js → CorridorGeometryLibrary-5039cd8e.js} +1 -1
  8. package/Build/Workers/{CylinderGeometry-f9503c6d.js → CylinderGeometry-3ac44974.js} +1 -1
  9. package/Build/Workers/{EllipseGeometry-fedf72d5.js → EllipseGeometry-a9c9b3be.js} +1 -1
  10. package/Build/Workers/{EllipseGeometryLibrary-4ea68687.js → EllipseGeometryLibrary-855d4681.js} +1 -1
  11. package/Build/Workers/{EllipseOutlineGeometry-e2ae6a35.js → EllipseOutlineGeometry-017a5929.js} +1 -1
  12. package/Build/Workers/{EllipsoidGeodesic-16de63ea.js → EllipsoidGeodesic-98c62a56.js} +1 -1
  13. package/Build/Workers/{EllipsoidGeometry-95c0330e.js → EllipsoidGeometry-826e7bce.js} +1 -1
  14. package/Build/Workers/{EllipsoidOutlineGeometry-d6d2ceec.js → EllipsoidOutlineGeometry-784dcdb5.js} +1 -1
  15. package/Build/Workers/{EllipsoidRhumbLine-ae5e65e0.js → EllipsoidRhumbLine-19756602.js} +1 -1
  16. package/Build/Workers/{EllipsoidTangentPlane-bfc674bf.js → EllipsoidTangentPlane-ed9443a1.js} +1 -1
  17. package/Build/Workers/{EncodedCartesian3-f473ea18.js → EncodedCartesian3-81f70735.js} +1 -1
  18. package/Build/Workers/{FrustumGeometry-3bf2e4eb.js → FrustumGeometry-9f1ee4d8.js} +1 -1
  19. package/Build/Workers/{GeometryAttribute-df5f473e.js → GeometryAttribute-334718f8.js} +1 -1
  20. package/Build/Workers/{GeometryInstance-aa75b4cf.js → GeometryInstance-451dc1cd.js} +1 -1
  21. package/Build/Workers/{GeometryPipeline-f0e46c42.js → GeometryPipeline-8fb0db69.js} +1 -1
  22. package/Build/Workers/{IntersectionTests-9de29d51.js → IntersectionTests-27d49265.js} +1 -1
  23. package/Build/Workers/{Matrix2-ce637455.js → Matrix2-13178034.js} +4 -2
  24. package/Build/Workers/{Matrix3-4f4df527.js → Matrix3-315394f6.js} +2 -1
  25. package/Build/Workers/{OrientedBoundingBox-d3ff3d4d.js → OrientedBoundingBox-79ee7cbb.js} +5 -5
  26. package/Build/Workers/{Plane-b81241c2.js → Plane-900aa728.js} +1 -1
  27. package/Build/Workers/{PolygonGeometryLibrary-6f4937bb.js → PolygonGeometryLibrary-6b5a29e9.js} +1 -1
  28. package/Build/Workers/PolygonPipeline-21668b3f.js +1345 -0
  29. package/Build/Workers/{PolylinePipeline-2e2b015c.js → PolylinePipeline-5e2e1b21.js} +1 -1
  30. package/Build/Workers/{PolylineVolumeGeometryLibrary-7ee1d449.js → PolylineVolumeGeometryLibrary-97f0b94e.js} +1 -1
  31. package/Build/Workers/{PrimitivePipeline-a9b7aae0.js → PrimitivePipeline-5640850a.js} +1 -1
  32. package/Build/Workers/{RectangleGeometryLibrary-9aa6c8f6.js → RectangleGeometryLibrary-d5457f7b.js} +1 -1
  33. package/Build/Workers/{TerrainEncoding-b52dcfc5.js → TerrainEncoding-bfdf2021.js} +1 -1
  34. package/Build/Workers/{Transforms-2f755df8.js → Transforms-a05e5e6e.js} +114 -83
  35. package/Build/Workers/{WallGeometryLibrary-ab19a93d.js → WallGeometryLibrary-6db0ebb6.js} +1 -1
  36. package/Build/Workers/{WebMercatorProjection-9f25de49.js → WebMercatorProjection-13a90d41.js} +1 -1
  37. package/Build/Workers/cesiumWorkerBootstrapper.js +92 -2
  38. package/Build/Workers/combineGeometry.js +1 -1
  39. package/Build/Workers/createBoxGeometry.js +1 -1
  40. package/Build/Workers/createBoxOutlineGeometry.js +1 -1
  41. package/Build/Workers/createCircleGeometry.js +1 -1
  42. package/Build/Workers/createCircleOutlineGeometry.js +1 -1
  43. package/Build/Workers/createCoplanarPolygonGeometry.js +1 -1
  44. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +1 -1
  45. package/Build/Workers/createCorridorGeometry.js +1 -1
  46. package/Build/Workers/createCorridorOutlineGeometry.js +1 -1
  47. package/Build/Workers/createCylinderGeometry.js +1 -1
  48. package/Build/Workers/createCylinderOutlineGeometry.js +1 -1
  49. package/Build/Workers/createEllipseGeometry.js +1 -1
  50. package/Build/Workers/createEllipseOutlineGeometry.js +1 -1
  51. package/Build/Workers/createEllipsoidGeometry.js +1 -1
  52. package/Build/Workers/createEllipsoidOutlineGeometry.js +1 -1
  53. package/Build/Workers/createFrustumGeometry.js +1 -1
  54. package/Build/Workers/createFrustumOutlineGeometry.js +1 -1
  55. package/Build/Workers/createGeometry.js +1 -1
  56. package/Build/Workers/createGroundPolylineGeometry.js +1 -1
  57. package/Build/Workers/createPlaneGeometry.js +1 -1
  58. package/Build/Workers/createPlaneOutlineGeometry.js +1 -1
  59. package/Build/Workers/createPolygonGeometry.js +1 -1
  60. package/Build/Workers/createPolygonOutlineGeometry.js +1 -1
  61. package/Build/Workers/createPolylineGeometry.js +1 -1
  62. package/Build/Workers/createPolylineVolumeGeometry.js +1 -1
  63. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +1 -1
  64. package/Build/Workers/createRectangleGeometry.js +1 -1
  65. package/Build/Workers/createRectangleOutlineGeometry.js +1 -1
  66. package/Build/Workers/createSimplePolylineGeometry.js +1 -1
  67. package/Build/Workers/createSphereGeometry.js +1 -1
  68. package/Build/Workers/createSphereOutlineGeometry.js +1 -1
  69. package/Build/Workers/createVectorTileClampedPolylines.js +1 -1
  70. package/Build/Workers/createVectorTileGeometries.js +1 -1
  71. package/Build/Workers/createVectorTilePoints.js +1 -1
  72. package/Build/Workers/createVectorTilePolygons.js +1 -1
  73. package/Build/Workers/createVectorTilePolylines.js +1 -1
  74. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +1 -1
  75. package/Build/Workers/createVerticesFromHeightmap.js +7 -3
  76. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +1 -1
  77. package/Build/Workers/createWallGeometry.js +1 -1
  78. package/Build/Workers/createWallOutlineGeometry.js +1 -1
  79. package/Build/Workers/decodeDraco.js +9 -1
  80. package/Build/Workers/decodeI3S.js +1 -1
  81. package/Build/Workers/package.js +25 -1
  82. package/Build/Workers/transcodeKTX2.js +22 -2
  83. package/Build/Workers/transferTypedArrayTest.js +25 -1
  84. package/Build/Workers/upsampleQuantizedTerrainMesh.js +1 -1
  85. package/README.md +14 -16
  86. package/Source/Core/EarthOrientationParameters.js +67 -63
  87. package/Source/Core/FeatureDetection.js +18 -0
  88. package/Source/Core/Ion.js +1 -2
  89. package/Source/Core/Matrix2.js +2 -1
  90. package/Source/Core/Matrix3.js +2 -1
  91. package/Source/Core/Matrix4.js +1 -0
  92. package/Source/Core/OrientedBoundingBox.js +4 -4
  93. package/Source/Core/PixelFormat.js +22 -2
  94. package/Source/Core/S2Cell.js +3 -3
  95. package/Source/Core/Transforms.js +3 -7
  96. package/Source/Core/sampleTerrain.js +5 -0
  97. package/Source/DataSources/GpxDataSource.js +4 -6
  98. package/Source/DataSources/KmlDataSource.js +3 -5
  99. package/Source/Renderer/AutomaticUniforms.js +3 -3
  100. package/Source/Renderer/Context.js +20 -12
  101. package/Source/Renderer/Pass.js +3 -2
  102. package/Source/Renderer/ShaderBuilder.js +13 -12
  103. package/Source/Renderer/ShaderSource.js +31 -26
  104. package/Source/Renderer/demodernizeShader.js +76 -0
  105. package/Source/Scene/AutoExposure.js +5 -5
  106. package/Source/Scene/BatchTable.js +5 -5
  107. package/Source/Scene/BillboardCollection.js +2 -2
  108. package/Source/Scene/BingMapsImageryProvider.js +1 -1
  109. package/Source/Scene/Cesium3DTile.js +8 -2
  110. package/Source/Scene/Cesium3DTileBatchTable.js +28 -28
  111. package/Source/Scene/Cesium3DTileContentType.js +19 -0
  112. package/Source/Scene/Cesium3DTilesVoxelProvider.js +494 -0
  113. package/Source/Scene/Cesium3DTileset.js +6 -1
  114. package/Source/Scene/Cesium3DTilesetMetadata.js +2 -2
  115. package/Source/Scene/ClassificationPrimitive.js +3 -8
  116. package/Source/Scene/ContentMetadata.js +2 -2
  117. package/Source/Scene/DebugAppearance.js +7 -9
  118. package/Source/Scene/DebugInspector.js +5 -5
  119. package/Source/Scene/DepthPlane.js +0 -6
  120. package/Source/Scene/DerivedCommand.js +15 -22
  121. package/Source/Scene/EllipsoidPrimitive.js +0 -7
  122. package/Source/Scene/Expression.js +1 -1
  123. package/Source/Scene/Globe.js +10 -0
  124. package/Source/Scene/GlobeSurfaceTileProvider.js +7 -0
  125. package/Source/Scene/GlobeTranslucencyState.js +6 -6
  126. package/Source/Scene/GltfImageLoader.js +1 -1
  127. package/Source/Scene/GltfVertexBufferLoader.js +10 -2
  128. package/Source/Scene/GroundPolylinePrimitive.js +2 -4
  129. package/Source/Scene/GroupMetadata.js +2 -2
  130. package/Source/Scene/ImplicitMetadataView.js +2 -2
  131. package/Source/Scene/ImplicitSubtreeCache.js +127 -0
  132. package/Source/Scene/ImplicitSubtreeMetadata.js +2 -2
  133. package/Source/Scene/ImplicitTileset.js +3 -2
  134. package/Source/Scene/InvertClassification.js +9 -10
  135. package/Source/Scene/KeyframeNode.js +47 -0
  136. package/Source/Scene/Material.js +6 -6
  137. package/Source/Scene/Megatexture.js +490 -0
  138. package/Source/Scene/MetadataClass.js +60 -25
  139. package/Source/Scene/MetadataClassProperty.js +132 -68
  140. package/Source/Scene/MetadataComponentType.js +78 -57
  141. package/Source/Scene/MetadataEnum.js +59 -23
  142. package/Source/Scene/MetadataEnumValue.js +49 -15
  143. package/Source/Scene/MetadataSchema.js +53 -24
  144. package/Source/Scene/MetadataSchemaLoader.js +2 -2
  145. package/Source/Scene/MetadataSemantic.js +8 -0
  146. package/Source/Scene/MetadataTableProperty.js +2 -2
  147. package/Source/Scene/MetadataType.js +6 -14
  148. package/Source/Scene/Model/CustomShader.js +1 -1
  149. package/Source/Scene/Model/FeatureIdPipelineStage.js +4 -4
  150. package/Source/Scene/Model/GeoJsonLoader.js +1 -1
  151. package/Source/Scene/Model/LightingModel.js +1 -1
  152. package/Source/Scene/Model/MetadataPipelineStage.js +1 -1
  153. package/Source/Scene/Model/Model.js +2 -3
  154. package/Source/Scene/Model/PickingPipelineStage.js +1 -1
  155. package/Source/Scene/Model/buildDrawCommand.js +19 -11
  156. package/Source/Scene/OIT.js +211 -119
  157. package/Source/Scene/PickDepth.js +2 -2
  158. package/Source/Scene/PointCloud.js +12 -12
  159. package/Source/Scene/PointCloudEyeDomeLighting.js +9 -4
  160. package/Source/Scene/PolylineCollection.js +2 -7
  161. package/Source/Scene/PolylineMaterialAppearance.js +2 -3
  162. package/Source/Scene/PostProcessStage.js +13 -13
  163. package/Source/Scene/PostProcessStageLibrary.js +3 -3
  164. package/Source/Scene/Primitive.js +22 -31
  165. package/Source/Scene/PropertyAttribute.js +2 -2
  166. package/Source/Scene/PropertyAttributeProperty.js +2 -2
  167. package/Source/Scene/PropertyTable.js +2 -2
  168. package/Source/Scene/PropertyTexture.js +2 -2
  169. package/Source/Scene/PropertyTextureProperty.js +2 -2
  170. package/Source/Scene/ResourceCache.js +9 -1
  171. package/Source/Scene/ResourceCacheKey.js +9 -1
  172. package/Source/Scene/Scene.js +17 -0
  173. package/Source/Scene/ShadowMap.js +7 -7
  174. package/Source/Scene/ShadowMapShader.js +9 -9
  175. package/Source/Scene/ShadowVolumeAppearance.js +1 -1
  176. package/Source/Scene/SpatialNode.js +375 -0
  177. package/Source/Scene/StructuralMetadata.js +2 -2
  178. package/Source/Scene/TextureAtlas.js +5 -3
  179. package/Source/Scene/TileMetadata.js +2 -2
  180. package/Source/Scene/TilesetMetadata.js +2 -2
  181. package/Source/Scene/Vector3DTilePolylines.js +1 -1
  182. package/Source/Scene/Vector3DTilePrimitive.js +2 -2
  183. package/Source/Scene/VoxelBoxShape.js +527 -0
  184. package/Source/Scene/VoxelContent.js +169 -0
  185. package/Source/Scene/VoxelCylinderShape.js +937 -0
  186. package/Source/Scene/VoxelEllipsoidShape.js +945 -0
  187. package/Source/Scene/VoxelPrimitive.js +1919 -0
  188. package/Source/Scene/VoxelProvider.js +255 -0
  189. package/Source/Scene/VoxelRenderResources.js +224 -0
  190. package/Source/Scene/VoxelShape.js +152 -0
  191. package/Source/Scene/VoxelShapeType.js +105 -0
  192. package/Source/Scene/VoxelTraversal.js +1144 -0
  193. package/Source/Scene/buildVoxelDrawCommands.js +116 -0
  194. package/Source/Scene/computeFlyToLocationForRectangle.js +10 -1
  195. package/Source/Scene/createElevationBandMaterial.js +10 -15
  196. package/Source/Scene/getClipAndStyleCode.js +1 -1
  197. package/Source/Scene/getClippingFunction.js +3 -3
  198. package/Source/Scene/parseBatchTable.js +18 -2
  199. package/Source/Scene/preprocess3DTileContent.js +8 -0
  200. package/Source/Scene/processVoxelProperties.js +455 -0
  201. package/Source/Shaders/AdjustTranslucentFS.glsl +9 -6
  202. package/Source/Shaders/AdjustTranslucentFS.js +9 -6
  203. package/Source/Shaders/Appearances/AllMaterialAppearanceFS.glsl +7 -7
  204. package/Source/Shaders/Appearances/AllMaterialAppearanceFS.js +7 -7
  205. package/Source/Shaders/Appearances/AllMaterialAppearanceVS.glsl +12 -12
  206. package/Source/Shaders/Appearances/AllMaterialAppearanceVS.js +12 -12
  207. package/Source/Shaders/Appearances/BasicMaterialAppearanceFS.glsl +4 -4
  208. package/Source/Shaders/Appearances/BasicMaterialAppearanceFS.js +4 -4
  209. package/Source/Shaders/Appearances/BasicMaterialAppearanceVS.glsl +6 -6
  210. package/Source/Shaders/Appearances/BasicMaterialAppearanceVS.js +6 -6
  211. package/Source/Shaders/Appearances/EllipsoidSurfaceAppearanceFS.glsl +5 -5
  212. package/Source/Shaders/Appearances/EllipsoidSurfaceAppearanceFS.js +5 -5
  213. package/Source/Shaders/Appearances/EllipsoidSurfaceAppearanceVS.glsl +7 -7
  214. package/Source/Shaders/Appearances/EllipsoidSurfaceAppearanceVS.js +7 -7
  215. package/Source/Shaders/Appearances/PerInstanceColorAppearanceFS.glsl +4 -4
  216. package/Source/Shaders/Appearances/PerInstanceColorAppearanceFS.js +4 -4
  217. package/Source/Shaders/Appearances/PerInstanceColorAppearanceVS.glsl +8 -8
  218. package/Source/Shaders/Appearances/PerInstanceColorAppearanceVS.js +8 -8
  219. package/Source/Shaders/Appearances/PerInstanceFlatColorAppearanceFS.glsl +2 -2
  220. package/Source/Shaders/Appearances/PerInstanceFlatColorAppearanceFS.js +2 -2
  221. package/Source/Shaders/Appearances/PerInstanceFlatColorAppearanceVS.glsl +5 -5
  222. package/Source/Shaders/Appearances/PerInstanceFlatColorAppearanceVS.js +5 -5
  223. package/Source/Shaders/Appearances/PolylineColorAppearanceVS.glsl +10 -10
  224. package/Source/Shaders/Appearances/PolylineColorAppearanceVS.js +10 -10
  225. package/Source/Shaders/Appearances/PolylineMaterialAppearanceVS.glsl +12 -12
  226. package/Source/Shaders/Appearances/PolylineMaterialAppearanceVS.js +12 -12
  227. package/Source/Shaders/Appearances/TexturedMaterialAppearanceFS.glsl +5 -5
  228. package/Source/Shaders/Appearances/TexturedMaterialAppearanceFS.js +5 -5
  229. package/Source/Shaders/Appearances/TexturedMaterialAppearanceVS.glsl +8 -8
  230. package/Source/Shaders/Appearances/TexturedMaterialAppearanceVS.js +8 -8
  231. package/Source/Shaders/BillboardCollectionFS.glsl +15 -15
  232. package/Source/Shaders/BillboardCollectionFS.js +15 -15
  233. package/Source/Shaders/BillboardCollectionVS.glsl +24 -24
  234. package/Source/Shaders/BillboardCollectionVS.js +24 -24
  235. package/Source/Shaders/BrdfLutGeneratorFS.glsl +2 -2
  236. package/Source/Shaders/BrdfLutGeneratorFS.js +2 -2
  237. package/Source/Shaders/Builtin/Constants/passOverlay.glsl +1 -1
  238. package/Source/Shaders/Builtin/Constants/passOverlay.js +1 -1
  239. package/Source/Shaders/Builtin/Constants/passVoxels.glsl +9 -0
  240. package/Source/Shaders/Builtin/Constants/passVoxels.js +11 -0
  241. package/Source/Shaders/Builtin/CzmBuiltins.js +19 -15
  242. package/Source/Shaders/Builtin/Functions/depthClamp.glsl +3 -3
  243. package/Source/Shaders/Builtin/Functions/depthClamp.js +3 -3
  244. package/Source/Shaders/Builtin/Functions/getWaterNoise.glsl +4 -4
  245. package/Source/Shaders/Builtin/Functions/getWaterNoise.js +4 -4
  246. package/Source/Shaders/Builtin/Functions/phong.glsl +1 -1
  247. package/Source/Shaders/Builtin/Functions/phong.js +1 -1
  248. package/Source/Shaders/Builtin/Functions/readDepth.glsl +1 -1
  249. package/Source/Shaders/Builtin/Functions/readDepth.js +1 -1
  250. package/Source/Shaders/Builtin/Functions/sampleOctahedralProjection.glsl +5 -5
  251. package/Source/Shaders/Builtin/Functions/sampleOctahedralProjection.js +5 -5
  252. package/Source/Shaders/Builtin/Functions/shadowDepthCompare.glsl +3 -3
  253. package/Source/Shaders/Builtin/Functions/shadowDepthCompare.js +3 -3
  254. package/Source/Shaders/Builtin/Functions/tangentToEyeSpaceMatrix.glsl +1 -1
  255. package/Source/Shaders/Builtin/Functions/tangentToEyeSpaceMatrix.js +1 -1
  256. package/Source/Shaders/Builtin/Functions/textureCube.glsl +17 -0
  257. package/Source/Shaders/Builtin/Functions/textureCube.js +18 -0
  258. package/Source/Shaders/Builtin/Functions/translateRelativeToEye.glsl +2 -2
  259. package/Source/Shaders/Builtin/Functions/translateRelativeToEye.js +2 -2
  260. package/Source/Shaders/Builtin/Functions/vertexLogDepth.glsl +2 -2
  261. package/Source/Shaders/Builtin/Functions/vertexLogDepth.js +2 -2
  262. package/Source/Shaders/Builtin/Functions/windowToEyeCoordinates.glsl +55 -43
  263. package/Source/Shaders/Builtin/Functions/windowToEyeCoordinates.js +55 -43
  264. package/Source/Shaders/Builtin/Functions/writeDepthClamp.glsl +5 -8
  265. package/Source/Shaders/Builtin/Functions/writeDepthClamp.js +5 -8
  266. package/Source/Shaders/Builtin/Functions/writeLogDepth.glsl +6 -6
  267. package/Source/Shaders/Builtin/Functions/writeLogDepth.js +6 -6
  268. package/Source/Shaders/CloudCollectionFS.glsl +18 -18
  269. package/Source/Shaders/CloudCollectionFS.js +18 -18
  270. package/Source/Shaders/CloudCollectionVS.glsl +11 -11
  271. package/Source/Shaders/CloudCollectionVS.js +11 -11
  272. package/Source/Shaders/CloudNoiseFS.glsl +5 -5
  273. package/Source/Shaders/CloudNoiseFS.js +5 -5
  274. package/Source/Shaders/CloudNoiseVS.glsl +2 -2
  275. package/Source/Shaders/CloudNoiseVS.js +2 -2
  276. package/Source/Shaders/CompareAndPackTranslucentDepth.glsl +4 -4
  277. package/Source/Shaders/CompareAndPackTranslucentDepth.js +4 -4
  278. package/Source/Shaders/CompositeOITFS.glsl +6 -6
  279. package/Source/Shaders/CompositeOITFS.js +6 -6
  280. package/Source/Shaders/DepthPlaneFS.glsl +2 -2
  281. package/Source/Shaders/DepthPlaneFS.js +2 -2
  282. package/Source/Shaders/DepthPlaneVS.glsl +2 -2
  283. package/Source/Shaders/DepthPlaneVS.js +2 -2
  284. package/Source/Shaders/EllipsoidFS.glsl +5 -13
  285. package/Source/Shaders/EllipsoidFS.js +6 -14
  286. package/Source/Shaders/EllipsoidVS.glsl +2 -2
  287. package/Source/Shaders/EllipsoidVS.js +2 -2
  288. package/Source/Shaders/FXAA3_11.glsl +4 -4
  289. package/Source/Shaders/FXAA3_11.js +4 -4
  290. package/Source/Shaders/GlobeFS.glsl +17 -16
  291. package/Source/Shaders/GlobeFS.js +17 -16
  292. package/Source/Shaders/GlobeVS.glsl +17 -17
  293. package/Source/Shaders/GlobeVS.js +17 -17
  294. package/Source/Shaders/Materials/AspectRampMaterial.glsl +1 -1
  295. package/Source/Shaders/Materials/AspectRampMaterial.js +1 -1
  296. package/Source/Shaders/Materials/BumpMapMaterial.glsl +3 -3
  297. package/Source/Shaders/Materials/BumpMapMaterial.js +3 -3
  298. package/Source/Shaders/Materials/ElevationBandMaterial.glsl +3 -3
  299. package/Source/Shaders/Materials/ElevationBandMaterial.js +3 -3
  300. package/Source/Shaders/Materials/ElevationContourMaterial.glsl +2 -1
  301. package/Source/Shaders/Materials/ElevationContourMaterial.js +2 -1
  302. package/Source/Shaders/Materials/ElevationRampMaterial.glsl +1 -1
  303. package/Source/Shaders/Materials/ElevationRampMaterial.js +1 -1
  304. package/Source/Shaders/Materials/GridMaterial.glsl +3 -2
  305. package/Source/Shaders/Materials/GridMaterial.js +3 -2
  306. package/Source/Shaders/Materials/NormalMapMaterial.glsl +1 -1
  307. package/Source/Shaders/Materials/NormalMapMaterial.js +1 -1
  308. package/Source/Shaders/Materials/PolylineArrowMaterial.glsl +3 -2
  309. package/Source/Shaders/Materials/PolylineArrowMaterial.js +3 -2
  310. package/Source/Shaders/Materials/PolylineDashMaterial.glsl +1 -1
  311. package/Source/Shaders/Materials/PolylineDashMaterial.js +1 -1
  312. package/Source/Shaders/Materials/PolylineOutlineMaterial.glsl +1 -1
  313. package/Source/Shaders/Materials/PolylineOutlineMaterial.js +1 -1
  314. package/Source/Shaders/Materials/SlopeRampMaterial.glsl +1 -1
  315. package/Source/Shaders/Materials/SlopeRampMaterial.js +1 -1
  316. package/Source/Shaders/Materials/Water.glsl +1 -1
  317. package/Source/Shaders/Materials/Water.js +1 -1
  318. package/Source/Shaders/Model/ImageBasedLightingStageFS.glsl +3 -3
  319. package/Source/Shaders/Model/ImageBasedLightingStageFS.js +3 -3
  320. package/Source/Shaders/Model/MaterialStageFS.glsl +10 -10
  321. package/Source/Shaders/Model/MaterialStageFS.js +10 -10
  322. package/Source/Shaders/Model/ModelClippingPlanesStageFS.glsl +3 -3
  323. package/Source/Shaders/Model/ModelClippingPlanesStageFS.js +3 -3
  324. package/Source/Shaders/Model/ModelFS.glsl +1 -1
  325. package/Source/Shaders/Model/ModelFS.js +1 -1
  326. package/Source/Shaders/Model/PrimitiveOutlineStageFS.glsl +3 -3
  327. package/Source/Shaders/Model/PrimitiveOutlineStageFS.js +3 -3
  328. package/Source/Shaders/Model/SelectedFeatureIdStageCommon.glsl +1 -1
  329. package/Source/Shaders/Model/SelectedFeatureIdStageCommon.js +1 -1
  330. package/Source/Shaders/OctahedralProjectionAtlasFS.glsl +8 -8
  331. package/Source/Shaders/OctahedralProjectionAtlasFS.js +8 -8
  332. package/Source/Shaders/OctahedralProjectionFS.glsl +4 -4
  333. package/Source/Shaders/OctahedralProjectionFS.js +4 -4
  334. package/Source/Shaders/OctahedralProjectionVS.glsl +3 -3
  335. package/Source/Shaders/OctahedralProjectionVS.js +3 -3
  336. package/Source/Shaders/PointPrimitiveCollectionFS.glsl +6 -6
  337. package/Source/Shaders/PointPrimitiveCollectionFS.js +6 -6
  338. package/Source/Shaders/PointPrimitiveCollectionVS.glsl +17 -14
  339. package/Source/Shaders/PointPrimitiveCollectionVS.js +17 -14
  340. package/Source/Shaders/PolylineFS.glsl +3 -3
  341. package/Source/Shaders/PolylineFS.js +3 -3
  342. package/Source/Shaders/PolylineShadowVolumeFS.glsl +12 -16
  343. package/Source/Shaders/PolylineShadowVolumeFS.js +12 -16
  344. package/Source/Shaders/PolylineShadowVolumeMorphFS.glsl +8 -8
  345. package/Source/Shaders/PolylineShadowVolumeMorphFS.js +8 -8
  346. package/Source/Shaders/PolylineShadowVolumeMorphVS.glsl +20 -20
  347. package/Source/Shaders/PolylineShadowVolumeMorphVS.js +20 -20
  348. package/Source/Shaders/PolylineShadowVolumeVS.glsl +20 -20
  349. package/Source/Shaders/PolylineShadowVolumeVS.js +20 -20
  350. package/Source/Shaders/PolylineVS.glsl +17 -17
  351. package/Source/Shaders/PolylineVS.js +17 -17
  352. package/Source/Shaders/PostProcessStages/AcesTonemappingStage.glsl +4 -4
  353. package/Source/Shaders/PostProcessStages/AcesTonemappingStage.js +4 -4
  354. package/Source/Shaders/PostProcessStages/AdditiveBlend.glsl +4 -4
  355. package/Source/Shaders/PostProcessStages/AdditiveBlend.js +4 -4
  356. package/Source/Shaders/PostProcessStages/AmbientOcclusionGenerate.glsl +4 -4
  357. package/Source/Shaders/PostProcessStages/AmbientOcclusionGenerate.js +4 -4
  358. package/Source/Shaders/PostProcessStages/AmbientOcclusionModulate.glsl +4 -4
  359. package/Source/Shaders/PostProcessStages/AmbientOcclusionModulate.js +4 -4
  360. package/Source/Shaders/PostProcessStages/BlackAndWhite.glsl +4 -4
  361. package/Source/Shaders/PostProcessStages/BlackAndWhite.js +4 -4
  362. package/Source/Shaders/PostProcessStages/BloomComposite.glsl +5 -5
  363. package/Source/Shaders/PostProcessStages/BloomComposite.js +5 -5
  364. package/Source/Shaders/PostProcessStages/BrightPass.glsl +3 -3
  365. package/Source/Shaders/PostProcessStages/BrightPass.js +3 -3
  366. package/Source/Shaders/PostProcessStages/Brightness.glsl +3 -3
  367. package/Source/Shaders/PostProcessStages/Brightness.js +3 -3
  368. package/Source/Shaders/PostProcessStages/CompositeTranslucentClassification.glsl +5 -5
  369. package/Source/Shaders/PostProcessStages/CompositeTranslucentClassification.js +5 -5
  370. package/Source/Shaders/PostProcessStages/ContrastBias.glsl +3 -3
  371. package/Source/Shaders/PostProcessStages/ContrastBias.js +3 -3
  372. package/Source/Shaders/PostProcessStages/DepthOfField.glsl +2 -2
  373. package/Source/Shaders/PostProcessStages/DepthOfField.js +2 -2
  374. package/Source/Shaders/PostProcessStages/DepthView.glsl +2 -2
  375. package/Source/Shaders/PostProcessStages/DepthView.js +2 -2
  376. package/Source/Shaders/PostProcessStages/DepthViewPacked.glsl +3 -3
  377. package/Source/Shaders/PostProcessStages/DepthViewPacked.js +3 -3
  378. package/Source/Shaders/PostProcessStages/EdgeDetection.glsl +7 -7
  379. package/Source/Shaders/PostProcessStages/EdgeDetection.js +7 -7
  380. package/Source/Shaders/PostProcessStages/FXAA.glsl +3 -3
  381. package/Source/Shaders/PostProcessStages/FXAA.js +3 -3
  382. package/Source/Shaders/PostProcessStages/FilmicTonemapping.glsl +4 -4
  383. package/Source/Shaders/PostProcessStages/FilmicTonemapping.js +4 -4
  384. package/Source/Shaders/PostProcessStages/GaussianBlur1D.glsl +5 -5
  385. package/Source/Shaders/PostProcessStages/GaussianBlur1D.js +5 -5
  386. package/Source/Shaders/PostProcessStages/LensFlare.glsl +13 -13
  387. package/Source/Shaders/PostProcessStages/LensFlare.js +13 -13
  388. package/Source/Shaders/PostProcessStages/ModifiedReinhardTonemapping.glsl +4 -4
  389. package/Source/Shaders/PostProcessStages/ModifiedReinhardTonemapping.js +4 -4
  390. package/Source/Shaders/PostProcessStages/NightVision.glsl +3 -3
  391. package/Source/Shaders/PostProcessStages/NightVision.js +3 -3
  392. package/Source/Shaders/PostProcessStages/PassThrough.glsl +2 -2
  393. package/Source/Shaders/PostProcessStages/PassThrough.js +2 -2
  394. package/Source/Shaders/PostProcessStages/PassThroughDepth.glsl +2 -2
  395. package/Source/Shaders/PostProcessStages/PassThroughDepth.js +2 -2
  396. package/Source/Shaders/PostProcessStages/PointCloudEyeDomeLighting.glsl +7 -9
  397. package/Source/Shaders/PostProcessStages/PointCloudEyeDomeLighting.js +8 -10
  398. package/Source/Shaders/PostProcessStages/ReinhardTonemapping.glsl +4 -4
  399. package/Source/Shaders/PostProcessStages/ReinhardTonemapping.js +4 -4
  400. package/Source/Shaders/PostProcessStages/Silhouette.glsl +4 -4
  401. package/Source/Shaders/PostProcessStages/Silhouette.js +4 -4
  402. package/Source/Shaders/ReprojectWebMercatorFS.glsl +2 -2
  403. package/Source/Shaders/ReprojectWebMercatorFS.js +2 -2
  404. package/Source/Shaders/ReprojectWebMercatorVS.glsl +3 -3
  405. package/Source/Shaders/ReprojectWebMercatorVS.js +3 -3
  406. package/Source/Shaders/ShadowVolumeAppearanceFS.glsl +19 -23
  407. package/Source/Shaders/ShadowVolumeAppearanceFS.js +20 -24
  408. package/Source/Shaders/ShadowVolumeAppearanceVS.glsl +12 -12
  409. package/Source/Shaders/ShadowVolumeAppearanceVS.js +12 -12
  410. package/Source/Shaders/ShadowVolumeFS.glsl +2 -6
  411. package/Source/Shaders/ShadowVolumeFS.js +3 -7
  412. package/Source/Shaders/SkyAtmosphereFS.glsl +6 -6
  413. package/Source/Shaders/SkyAtmosphereFS.js +6 -6
  414. package/Source/Shaders/SkyAtmosphereVS.glsl +6 -6
  415. package/Source/Shaders/SkyAtmosphereVS.js +6 -6
  416. package/Source/Shaders/SkyBoxFS.glsl +3 -3
  417. package/Source/Shaders/SkyBoxFS.js +3 -3
  418. package/Source/Shaders/SkyBoxVS.glsl +2 -2
  419. package/Source/Shaders/SkyBoxVS.js +2 -2
  420. package/Source/Shaders/SunFS.glsl +3 -3
  421. package/Source/Shaders/SunFS.js +3 -3
  422. package/Source/Shaders/SunTextureFS.glsl +2 -2
  423. package/Source/Shaders/SunTextureFS.js +2 -2
  424. package/Source/Shaders/SunVS.glsl +2 -2
  425. package/Source/Shaders/SunVS.js +2 -2
  426. package/Source/Shaders/Vector3DTileClampedPolylinesFS.glsl +9 -13
  427. package/Source/Shaders/Vector3DTileClampedPolylinesFS.js +9 -13
  428. package/Source/Shaders/Vector3DTileClampedPolylinesVS.glsl +12 -12
  429. package/Source/Shaders/Vector3DTileClampedPolylinesVS.js +12 -12
  430. package/Source/Shaders/Vector3DTilePolylinesVS.glsl +5 -5
  431. package/Source/Shaders/Vector3DTilePolylinesVS.js +5 -5
  432. package/Source/Shaders/VectorTileVS.glsl +2 -2
  433. package/Source/Shaders/VectorTileVS.js +2 -2
  434. package/Source/Shaders/ViewportQuadFS.glsl +2 -2
  435. package/Source/Shaders/ViewportQuadFS.js +2 -2
  436. package/Source/Shaders/ViewportQuadVS.glsl +3 -3
  437. package/Source/Shaders/ViewportQuadVS.js +3 -3
  438. package/Source/Shaders/Voxels/IntersectBox.glsl +79 -0
  439. package/Source/Shaders/Voxels/IntersectBox.js +81 -0
  440. package/Source/Shaders/Voxels/IntersectClippingPlanes.glsl +70 -0
  441. package/Source/Shaders/Voxels/IntersectClippingPlanes.js +72 -0
  442. package/Source/Shaders/Voxels/IntersectCylinder.glsl +273 -0
  443. package/Source/Shaders/Voxels/IntersectCylinder.js +275 -0
  444. package/Source/Shaders/Voxels/IntersectDepth.glsl +23 -0
  445. package/Source/Shaders/Voxels/IntersectDepth.js +25 -0
  446. package/Source/Shaders/Voxels/IntersectEllipsoid.glsl +347 -0
  447. package/Source/Shaders/Voxels/IntersectEllipsoid.js +349 -0
  448. package/Source/Shaders/Voxels/Intersection.glsl +54 -0
  449. package/Source/Shaders/Voxels/Intersection.js +56 -0
  450. package/Source/Shaders/Voxels/IntersectionUtils.glsl +151 -0
  451. package/Source/Shaders/Voxels/IntersectionUtils.js +153 -0
  452. package/Source/Shaders/Voxels/Megatexture.glsl +136 -0
  453. package/Source/Shaders/Voxels/Megatexture.js +138 -0
  454. package/Source/Shaders/Voxels/Octree.glsl +221 -0
  455. package/Source/Shaders/Voxels/Octree.js +223 -0
  456. package/Source/Shaders/Voxels/VoxelFS.glsl +150 -0
  457. package/Source/Shaders/Voxels/VoxelFS.js +152 -0
  458. package/Source/Shaders/Voxels/VoxelVS.glsl +11 -0
  459. package/Source/Shaders/Voxels/VoxelVS.js +13 -0
  460. package/Source/Shaders/Voxels/convertUvToBox.glsl +16 -0
  461. package/Source/Shaders/Voxels/convertUvToBox.js +18 -0
  462. package/Source/Shaders/Voxels/convertUvToCylinder.glsl +75 -0
  463. package/Source/Shaders/Voxels/convertUvToCylinder.js +77 -0
  464. package/Source/Shaders/Voxels/convertUvToEllipsoid.glsl +130 -0
  465. package/Source/Shaders/Voxels/convertUvToEllipsoid.js +132 -0
  466. package/Source/ThirdParty/Workers/z-worker-pako.js +0 -0
  467. package/Source/WorkersES6/decodeDraco.js +9 -1
  468. package/index.d.ts +3148 -2297
  469. package/index.js +1118 -1085
  470. package/package.json +3 -4
  471. package/Build/Workers/PolygonPipeline-774a8aaf.js +0 -1341
  472. package/Source/Renderer/modernizeShader.js +0 -242
@@ -126,19 +126,18 @@ const rsDefault = {
126
126
  };
127
127
 
128
128
  const translucentFS =
129
- "#extension GL_EXT_frag_depth : enable\n" +
130
129
  "uniform sampler2D colorTexture;\n" +
131
130
  "uniform sampler2D depthTexture;\n" +
132
131
  "uniform sampler2D classifiedTexture;\n" +
133
- "varying vec2 v_textureCoordinates;\n" +
132
+ "in vec2 v_textureCoordinates;\n" +
134
133
  "void main()\n" +
135
134
  "{\n" +
136
- " vec4 color = texture2D(colorTexture, v_textureCoordinates);\n" +
135
+ " vec4 color = texture(colorTexture, v_textureCoordinates);\n" +
137
136
  " if (color.a == 0.0)\n" +
138
137
  " {\n" +
139
138
  " discard;\n" +
140
139
  " }\n" +
141
- " bool isClassified = all(equal(texture2D(classifiedTexture, v_textureCoordinates), vec4(0.0)));\n" +
140
+ " bool isClassified = all(equal(texture(classifiedTexture, v_textureCoordinates), vec4(0.0)));\n" +
142
141
  "#ifdef UNCLASSIFIED\n" +
143
142
  " vec4 highlightColor = czm_invertClassificationColor;\n" +
144
143
  " if (isClassified)\n" +
@@ -152,24 +151,24 @@ const translucentFS =
152
151
  " discard;\n" +
153
152
  " }\n" +
154
153
  "#endif\n" +
155
- " gl_FragColor = color * highlightColor;\n" +
156
- " gl_FragDepthEXT = texture2D(depthTexture, v_textureCoordinates).r;\n" +
154
+ " out_FragColor = color * highlightColor;\n" +
155
+ " gl_FragDepth = texture(depthTexture, v_textureCoordinates).r;\n" +
157
156
  "}\n";
158
157
 
159
158
  const opaqueFS =
160
159
  "uniform sampler2D colorTexture;\n" +
161
- "varying vec2 v_textureCoordinates;\n" +
160
+ "in vec2 v_textureCoordinates;\n" +
162
161
  "void main()\n" +
163
162
  "{\n" +
164
- " vec4 color = texture2D(colorTexture, v_textureCoordinates);\n" +
163
+ " vec4 color = texture(colorTexture, v_textureCoordinates);\n" +
165
164
  " if (color.a == 0.0)\n" +
166
165
  " {\n" +
167
166
  " discard;\n" +
168
167
  " }\n" +
169
168
  "#ifdef UNCLASSIFIED\n" +
170
- " gl_FragColor = color * czm_invertClassificationColor;\n" +
169
+ " out_FragColor = color * czm_invertClassificationColor;\n" +
171
170
  "#else\n" +
172
- " gl_FragColor = color;\n" +
171
+ " out_FragColor = color;\n" +
173
172
  "#endif\n" +
174
173
  "}\n";
175
174
 
@@ -0,0 +1,47 @@
1
+ const LoadState = Object.freeze({
2
+ UNLOADED: 0, // Has no data and is in dormant state
3
+ RECEIVING: 1, // Is waiting on data from the provider
4
+ RECEIVED: 2, // Received data from the provider
5
+ LOADED: 3, // Processed data from provider
6
+ FAILED: 4, // Failed to receive data from the provider
7
+ UNAVAILABLE: 5, // No data available for this tile
8
+ });
9
+
10
+ /**
11
+ * @alias KeyframeNode
12
+ * @constructor
13
+ *
14
+ * @param {SpatialNode} spatialNode
15
+ * @param {Number} keyframe
16
+ *
17
+ * @private
18
+ */
19
+ function KeyframeNode(spatialNode, keyframe) {
20
+ this.spatialNode = spatialNode;
21
+ this.keyframe = keyframe;
22
+ this.state = LoadState.UNLOADED;
23
+ this.metadatas = [];
24
+ this.megatextureIndex = -1;
25
+ this.priority = -Number.MAX_VALUE;
26
+ this.highPriorityFrameNumber = -1;
27
+ }
28
+
29
+ /**
30
+ * @param {KeyframeNode} a
31
+ * @param {KeyframeNode} b
32
+ */
33
+ KeyframeNode.priorityComparator = function (a, b) {
34
+ return a.priority - b.priority;
35
+ };
36
+
37
+ /**
38
+ * @param {KeyframeNode} a
39
+ * @param {KeyframeNode} b
40
+ */
41
+ KeyframeNode.searchComparator = function (a, b) {
42
+ return a.keyframe - b.keyframe;
43
+ };
44
+
45
+ KeyframeNode.LoadState = LoadState;
46
+
47
+ export default KeyframeNode;
@@ -1264,8 +1264,8 @@ Material._materialCache.addMaterial(Material.ImageType, {
1264
1264
  },
1265
1265
  components: {
1266
1266
  diffuse:
1267
- "texture2D(image, fract(repeat * materialInput.st)).rgb * color.rgb",
1268
- alpha: "texture2D(image, fract(repeat * materialInput.st)).a * color.a",
1267
+ "texture(image, fract(repeat * materialInput.st)).rgb * color.rgb",
1268
+ alpha: "texture(image, fract(repeat * materialInput.st)).a * color.a",
1269
1269
  },
1270
1270
  },
1271
1271
  translucent: function (material) {
@@ -1288,7 +1288,7 @@ Material._materialCache.addMaterial(Material.DiffuseMapType, {
1288
1288
  repeat: new Cartesian2(1.0, 1.0),
1289
1289
  },
1290
1290
  components: {
1291
- diffuse: "texture2D(image, fract(repeat * materialInput.st)).channels",
1291
+ diffuse: "texture(image, fract(repeat * materialInput.st)).channels",
1292
1292
  },
1293
1293
  },
1294
1294
  translucent: false,
@@ -1309,7 +1309,7 @@ Material._materialCache.addMaterial(Material.AlphaMapType, {
1309
1309
  repeat: new Cartesian2(1.0, 1.0),
1310
1310
  },
1311
1311
  components: {
1312
- alpha: "texture2D(image, fract(repeat * materialInput.st)).channel",
1312
+ alpha: "texture(image, fract(repeat * materialInput.st)).channel",
1313
1313
  },
1314
1314
  },
1315
1315
  translucent: true,
@@ -1330,7 +1330,7 @@ Material._materialCache.addMaterial(Material.SpecularMapType, {
1330
1330
  repeat: new Cartesian2(1.0, 1.0),
1331
1331
  },
1332
1332
  components: {
1333
- specular: "texture2D(image, fract(repeat * materialInput.st)).channel",
1333
+ specular: "texture(image, fract(repeat * materialInput.st)).channel",
1334
1334
  },
1335
1335
  },
1336
1336
  translucent: false,
@@ -1351,7 +1351,7 @@ Material._materialCache.addMaterial(Material.EmissionMapType, {
1351
1351
  repeat: new Cartesian2(1.0, 1.0),
1352
1352
  },
1353
1353
  components: {
1354
- emission: "texture2D(image, fract(repeat * materialInput.st)).channels",
1354
+ emission: "texture(image, fract(repeat * materialInput.st)).channels",
1355
1355
  },
1356
1356
  },
1357
1357
  translucent: false,
@@ -0,0 +1,490 @@
1
+ import Cartesian2 from "../Core/Cartesian2.js";
2
+ import Cartesian3 from "../Core/Cartesian3.js";
3
+ import ComponentDatatype from "../Core/ComponentDatatype.js";
4
+ import ContextLimits from "../Renderer/ContextLimits.js";
5
+ import defaultValue from "../Core/defaultValue.js";
6
+ import defined from "../Core/defined.js";
7
+ import destroyObject from "../Core/destroyObject.js";
8
+ import DeveloperError from "../Core/DeveloperError.js";
9
+ import CesiumMath from "../Core/Math.js";
10
+ import MetadataComponentType from "./MetadataComponentType.js";
11
+ import PixelDatatype from "../Renderer/PixelDatatype.js";
12
+ import PixelFormat from "../Core/PixelFormat.js";
13
+ import RuntimeError from "../Core/RuntimeError.js";
14
+ import Sampler from "../Renderer/Sampler.js";
15
+ import Texture from "../Renderer/Texture.js";
16
+ import TextureMagnificationFilter from "../Renderer/TextureMagnificationFilter.js";
17
+ import TextureMinificationFilter from "../Renderer/TextureMinificationFilter.js";
18
+ import TextureWrap from "../Renderer/TextureWrap.js";
19
+
20
+ /**
21
+ * @alias Megatexture
22
+ * @constructor
23
+ *
24
+ * @param {Context} context
25
+ * @param {Cartesian3} dimensions
26
+ * @param {Number} channelCount
27
+ * @param {MetadataComponentType} componentType
28
+ * @param {Number} [textureMemoryByteLength]
29
+ *
30
+ * @private
31
+ */
32
+ function Megatexture(
33
+ context,
34
+ dimensions,
35
+ channelCount,
36
+ componentType,
37
+ textureMemoryByteLength
38
+ ) {
39
+ // TODO there are a lot of texture packing rules, see https://github.com/CesiumGS/cesium/issues/9572
40
+ // Unsigned short textures not allowed in webgl 1, so treat as float
41
+ if (componentType === MetadataComponentType.UNSIGNED_SHORT) {
42
+ componentType = MetadataComponentType.FLOAT32;
43
+ }
44
+
45
+ const supportsFloatingPointTexture = context.floatingPointTexture;
46
+ if (
47
+ componentType === MetadataComponentType.FLOAT32 &&
48
+ !supportsFloatingPointTexture
49
+ ) {
50
+ throw new RuntimeError("Floating point texture not supported");
51
+ }
52
+
53
+ // TODO support more
54
+ let pixelType;
55
+ if (
56
+ componentType === MetadataComponentType.FLOAT32 ||
57
+ componentType === MetadataComponentType.FLOAT64
58
+ ) {
59
+ pixelType = PixelDatatype.FLOAT;
60
+ } else if (componentType === MetadataComponentType.UINT8) {
61
+ pixelType = PixelDatatype.UNSIGNED_BYTE;
62
+ }
63
+
64
+ let pixelFormat;
65
+ if (channelCount === 1) {
66
+ pixelFormat = context.webgl2 ? PixelFormat.RED : PixelFormat.LUMINANCE;
67
+ } else if (channelCount === 2) {
68
+ pixelFormat = context.webgl2 ? PixelFormat.RG : PixelFormat.LUMINANCE_ALPHA;
69
+ } else if (channelCount === 3) {
70
+ pixelFormat = PixelFormat.RGB;
71
+ } else if (channelCount === 4) {
72
+ pixelFormat = PixelFormat.RGBA;
73
+ }
74
+
75
+ const maximumTextureMemoryByteLength = 512 * 1024 * 1024;
76
+ const defaultTextureMemoryByteLength = 128 * 1024 * 1024;
77
+ textureMemoryByteLength = Math.min(
78
+ defaultValue(textureMemoryByteLength, defaultTextureMemoryByteLength),
79
+ maximumTextureMemoryByteLength
80
+ );
81
+ const maximumTextureDimensionContext = ContextLimits.maximumTextureSize;
82
+ const componentTypeByteLength = MetadataComponentType.getSizeInBytes(
83
+ componentType
84
+ );
85
+ const texelCount = Math.floor(
86
+ textureMemoryByteLength / (channelCount * componentTypeByteLength)
87
+ );
88
+ const textureDimension = Math.min(
89
+ maximumTextureDimensionContext,
90
+ CesiumMath.previousPowerOfTwo(Math.floor(Math.sqrt(texelCount)))
91
+ );
92
+
93
+ const sliceCountPerRegionX = Math.ceil(Math.sqrt(dimensions.x));
94
+ const sliceCountPerRegionY = Math.ceil(dimensions.z / sliceCountPerRegionX);
95
+ const voxelCountPerRegionX = sliceCountPerRegionX * dimensions.x;
96
+ const voxelCountPerRegionY = sliceCountPerRegionY * dimensions.y;
97
+ const regionCountPerMegatextureX = Math.floor(
98
+ textureDimension / voxelCountPerRegionX
99
+ );
100
+ const regionCountPerMegatextureY = Math.floor(
101
+ textureDimension / voxelCountPerRegionY
102
+ );
103
+
104
+ if (regionCountPerMegatextureX === 0 || regionCountPerMegatextureY === 0) {
105
+ throw new RuntimeError("Tileset is too large to fit into megatexture");
106
+ }
107
+
108
+ /**
109
+ * @type {Number}
110
+ * @readonly
111
+ */
112
+ this.channelCount = channelCount;
113
+
114
+ /**
115
+ * @type {MetadataComponentType}
116
+ * @readonly
117
+ */
118
+ this.componentType = componentType;
119
+
120
+ /**
121
+ * @type {Cartesian3}
122
+ * @readonly
123
+ */
124
+ this.voxelCountPerTile = Cartesian3.clone(dimensions, new Cartesian3());
125
+
126
+ /**
127
+ * @type {Number}
128
+ * @readonly
129
+ */
130
+ this.maximumTileCount =
131
+ regionCountPerMegatextureX * regionCountPerMegatextureY;
132
+
133
+ /**
134
+ * @type {Cartesian2}
135
+ * @readonly
136
+ */
137
+ this.regionCountPerMegatexture = new Cartesian2(
138
+ regionCountPerMegatextureX,
139
+ regionCountPerMegatextureY
140
+ );
141
+
142
+ /**
143
+ * @type {Cartesian2}
144
+ * @readonly
145
+ */
146
+ this.voxelCountPerRegion = new Cartesian2(
147
+ voxelCountPerRegionX,
148
+ voxelCountPerRegionY
149
+ );
150
+
151
+ /**
152
+ * @type {Cartesian2}
153
+ * @readonly
154
+ */
155
+ this.sliceCountPerRegion = new Cartesian2(
156
+ sliceCountPerRegionX,
157
+ sliceCountPerRegionY
158
+ );
159
+
160
+ /**
161
+ * @type {Cartesian2}
162
+ * @readonly
163
+ */
164
+ this.voxelSizeUv = new Cartesian2(
165
+ 1.0 / textureDimension,
166
+ 1.0 / textureDimension
167
+ );
168
+
169
+ /**
170
+ * @type {Cartesian2}
171
+ * @readonly
172
+ */
173
+ this.sliceSizeUv = new Cartesian2(
174
+ dimensions.x / textureDimension,
175
+ dimensions.y / textureDimension
176
+ );
177
+
178
+ /**
179
+ * @type {Cartesian2}
180
+ * @readonly
181
+ */
182
+ this.regionSizeUv = new Cartesian2(
183
+ voxelCountPerRegionX / textureDimension,
184
+ voxelCountPerRegionY / textureDimension
185
+ );
186
+
187
+ /**
188
+ * @type {Texture}
189
+ * @readonly
190
+ */
191
+ this.texture = new Texture({
192
+ context: context,
193
+ pixelFormat: pixelFormat,
194
+ pixelDatatype: pixelType,
195
+ flipY: false,
196
+ width: textureDimension,
197
+ height: textureDimension,
198
+ sampler: new Sampler({
199
+ wrapS: TextureWrap.CLAMP_TO_EDGE,
200
+ wrapT: TextureWrap.CLAMP_TO_EDGE,
201
+ minificationFilter: TextureMinificationFilter.LINEAR,
202
+ magnificationFilter: TextureMagnificationFilter.LINEAR,
203
+ }),
204
+ });
205
+
206
+ const componentDatatype = MetadataComponentType.toComponentDatatype(
207
+ componentType
208
+ );
209
+
210
+ /**
211
+ * @type {Array}
212
+ */
213
+ this.tileVoxelDataTemp = ComponentDatatype.createTypedArray(
214
+ componentDatatype,
215
+ voxelCountPerRegionX * voxelCountPerRegionY * channelCount
216
+ );
217
+
218
+ /**
219
+ * @type {MegatextureNode[]}
220
+ * @readonly
221
+ */
222
+ this.nodes = new Array(this.maximumTileCount);
223
+ for (let tileIndex = 0; tileIndex < this.maximumTileCount; tileIndex++) {
224
+ this.nodes[tileIndex] = new MegatextureNode(tileIndex);
225
+ }
226
+ for (let tileIndex = 0; tileIndex < this.maximumTileCount; tileIndex++) {
227
+ const node = this.nodes[tileIndex];
228
+ node.previousNode = tileIndex > 0 ? this.nodes[tileIndex - 1] : undefined;
229
+ node.nextNode =
230
+ tileIndex < this.maximumTileCount - 1
231
+ ? this.nodes[tileIndex + 1]
232
+ : undefined;
233
+ }
234
+
235
+ /**
236
+ * @type {MegatextureNode}
237
+ * @readonly
238
+ */
239
+ this.occupiedList = undefined;
240
+
241
+ /**
242
+ * @type {MegatextureNode}
243
+ * @readonly
244
+ */
245
+ this.emptyList = this.nodes[0];
246
+
247
+ /**
248
+ * @type {Number}
249
+ * @readonly
250
+ */
251
+ this.occupiedCount = 0;
252
+ }
253
+
254
+ /**
255
+ * @alias MegatextureNode
256
+ * @constructor
257
+ *
258
+ * @param {Number} index
259
+ *
260
+ * @private
261
+ */
262
+ function MegatextureNode(index) {
263
+ /**
264
+ * @type {Number}
265
+ */
266
+ this.index = index;
267
+
268
+ /**
269
+ * @type {MegatextureNode}
270
+ */
271
+ this.nextNode = undefined;
272
+
273
+ /**
274
+ * @type {MegatextureNode}
275
+ */
276
+ this.previousNode = undefined;
277
+ }
278
+
279
+ /**
280
+ * @param {Array} data
281
+ * @returns {Number}
282
+ */
283
+ Megatexture.prototype.add = function (data) {
284
+ if (this.isFull()) {
285
+ throw new DeveloperError("Trying to add when there are no empty spots");
286
+ }
287
+
288
+ // remove head of empty list
289
+ const node = this.emptyList;
290
+ this.emptyList = this.emptyList.nextNode;
291
+ if (defined(this.emptyList)) {
292
+ this.emptyList.previousNode = undefined;
293
+ }
294
+
295
+ // make head of occupied list
296
+ node.nextNode = this.occupiedList;
297
+ if (defined(node.nextNode)) {
298
+ node.nextNode.previousNode = node;
299
+ }
300
+ this.occupiedList = node;
301
+
302
+ const index = node.index;
303
+ this.writeDataToTexture(index, data);
304
+
305
+ this.occupiedCount++;
306
+ return index;
307
+ };
308
+
309
+ /**
310
+ * @param {Number} index
311
+ */
312
+ Megatexture.prototype.remove = function (index) {
313
+ if (index < 0 || index >= this.maximumTileCount) {
314
+ throw new DeveloperError("Megatexture index out of bounds");
315
+ }
316
+
317
+ // remove from list
318
+ const node = this.nodes[index];
319
+ if (defined(node.previousNode)) {
320
+ node.previousNode.nextNode = node.nextNode;
321
+ }
322
+ if (defined(node.nextNode)) {
323
+ node.nextNode.previousNode = node.previousNode;
324
+ }
325
+
326
+ // make head of empty list
327
+ node.nextNode = this.emptyList;
328
+ if (defined(node.nextNode)) {
329
+ node.nextNode.previousNode = node;
330
+ }
331
+ node.previousNode = undefined;
332
+ this.emptyList = node;
333
+ this.occupiedCount--;
334
+ };
335
+
336
+ /**
337
+ * @returns {Boolean}
338
+ */
339
+ Megatexture.prototype.isFull = function () {
340
+ return this.emptyList === undefined;
341
+ };
342
+
343
+ /**
344
+ * @param {Number} tileCount
345
+ * @param {Cartesian3} dimensions
346
+ * @param {Number} channelCount number of channels in the metadata. Must be 1 to 4.
347
+ * @param {MetadataComponentType} componentType
348
+ * @returns {Number}
349
+ */
350
+ Megatexture.getApproximateTextureMemoryByteLength = function (
351
+ tileCount,
352
+ dimensions,
353
+ channelCount,
354
+ componentType
355
+ ) {
356
+ // TODO there's a lot of code duplicate with Megatexture constructor
357
+
358
+ // Unsigned short textures not allowed in webgl 1, so treat as float
359
+ if (componentType === MetadataComponentType.UNSIGNED_SHORT) {
360
+ componentType = MetadataComponentType.FLOAT32;
361
+ }
362
+
363
+ const datatypeSizeInBytes = MetadataComponentType.getSizeInBytes(
364
+ componentType
365
+ );
366
+ const voxelCountTotal =
367
+ tileCount * dimensions.x * dimensions.y * dimensions.z;
368
+
369
+ const sliceCountPerRegionX = Math.ceil(Math.sqrt(dimensions.z));
370
+ const sliceCountPerRegionY = Math.ceil(dimensions.z / sliceCountPerRegionX);
371
+ const voxelCountPerRegionX = sliceCountPerRegionX * dimensions.x;
372
+ const voxelCountPerRegionY = sliceCountPerRegionY * dimensions.y;
373
+
374
+ // Find the power of two that can fit all tile data, accounting for slices.
375
+ // There's probably a non-iterative solution for this, but this is good enough for now.
376
+ let textureDimension = CesiumMath.previousPowerOfTwo(
377
+ Math.floor(Math.sqrt(voxelCountTotal))
378
+ );
379
+ for (;;) {
380
+ const regionCountX = Math.floor(textureDimension / voxelCountPerRegionX);
381
+ const regionCountY = Math.floor(textureDimension / voxelCountPerRegionY);
382
+ const regionCount = regionCountX * regionCountY;
383
+ if (regionCount >= tileCount) {
384
+ break;
385
+ } else {
386
+ textureDimension *= 2;
387
+ }
388
+ }
389
+
390
+ const textureMemoryByteLength =
391
+ textureDimension * textureDimension * channelCount * datatypeSizeInBytes;
392
+ return textureMemoryByteLength;
393
+ };
394
+
395
+ /**
396
+ * @param {Number} index
397
+ * @param {Float32Array|Uint16Array|Uint8Array} data
398
+ */
399
+ Megatexture.prototype.writeDataToTexture = function (index, data) {
400
+ // Unsigned short textures not allowed in webgl 1, so treat as float
401
+ const tileData =
402
+ data.constructor === Uint16Array ? new Float32Array(data) : data;
403
+
404
+ const voxelDimensionsPerTile = this.voxelCountPerTile;
405
+ const sliceDimensionsPerRegion = this.sliceCountPerRegion;
406
+ const voxelDimensionsPerRegion = this.voxelCountPerRegion;
407
+ const channelCount = this.channelCount;
408
+
409
+ const tileVoxelData = this.tileVoxelDataTemp;
410
+ for (let z = 0; z < voxelDimensionsPerTile.z; z++) {
411
+ const sliceVoxelOffsetX =
412
+ (z % sliceDimensionsPerRegion.x) * voxelDimensionsPerTile.x;
413
+ const sliceVoxelOffsetY =
414
+ Math.floor(z / sliceDimensionsPerRegion.x) * voxelDimensionsPerTile.y;
415
+ for (let y = 0; y < voxelDimensionsPerTile.y; y++) {
416
+ for (let x = 0; x < voxelDimensionsPerTile.x; x++) {
417
+ const readIndex =
418
+ z * voxelDimensionsPerTile.y * voxelDimensionsPerTile.x +
419
+ y * voxelDimensionsPerTile.x +
420
+ x;
421
+ const writeIndex =
422
+ (sliceVoxelOffsetY + y) * voxelDimensionsPerRegion.x +
423
+ (sliceVoxelOffsetX + x);
424
+ for (let c = 0; c < channelCount; c++) {
425
+ tileVoxelData[writeIndex * channelCount + c] =
426
+ tileData[readIndex * channelCount + c];
427
+ }
428
+ }
429
+ }
430
+ }
431
+
432
+ const regionDimensionsPerMegatexture = this.regionCountPerMegatexture;
433
+ const voxelWidth = voxelDimensionsPerRegion.x;
434
+ const voxelHeight = voxelDimensionsPerRegion.y;
435
+ const voxelOffsetX =
436
+ (index % regionDimensionsPerMegatexture.x) * voxelDimensionsPerRegion.x;
437
+ const voxelOffsetY =
438
+ Math.floor(index / regionDimensionsPerMegatexture.x) *
439
+ voxelDimensionsPerRegion.y;
440
+
441
+ const source = {
442
+ arrayBufferView: tileVoxelData,
443
+ width: voxelWidth,
444
+ height: voxelHeight,
445
+ };
446
+
447
+ const copyOptions = {
448
+ source: source,
449
+ xOffset: voxelOffsetX,
450
+ yOffset: voxelOffsetY,
451
+ };
452
+
453
+ this.texture.copyFrom(copyOptions);
454
+ };
455
+
456
+ /**
457
+ * Returns true if this object was destroyed; otherwise, false.
458
+ * <br /><br />
459
+ * If this object was destroyed, it should not be used; calling any function other than
460
+ * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.
461
+ *
462
+ * @returns {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.
463
+ *
464
+ * @see Megatexture#destroy
465
+ */
466
+ Megatexture.prototype.isDestroyed = function () {
467
+ return false;
468
+ };
469
+
470
+ /**
471
+ * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic
472
+ * release of WebGL resources, instead of relying on the garbage collector to destroy this object.
473
+ * <br /><br />
474
+ * Once an object is destroyed, it should not be used; calling any function other than
475
+ * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,
476
+ * assign the return value (<code>undefined</code>) to the object as done in the example.
477
+ *
478
+ * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.
479
+ *
480
+ * @see Megatexture#isDestroyed
481
+ *
482
+ * @example
483
+ * megatexture = megatexture && megatexture.destroy();
484
+ */
485
+ Megatexture.prototype.destroy = function () {
486
+ this.texture = this.texture && this.texture.destroy();
487
+ return destroyObject(this);
488
+ };
489
+
490
+ export default Megatexture;