@cesium/engine 10.1.0 → 11.1.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 (845) hide show
  1. package/Build/Workers/{chunk-EB7PNZTK.js → chunk-26GA3JAM.js} +6 -5
  2. package/Build/Workers/{chunk-RZLZWKFN.js → chunk-27HUZ7SA.js} +4 -4
  3. package/Build/Workers/{chunk-A5CODJ4M.js → chunk-2ZGOQXYU.js} +6 -6
  4. package/Build/Workers/{chunk-TF776XCO.js → chunk-3Q2L65QU.js} +7 -7
  5. package/Build/Workers/{chunk-NVOABL76.js → chunk-472HQ3EH.js} +5 -5
  6. package/Build/Workers/{chunk-QX5XS4LC.js → chunk-5ODQSF26.js} +2 -2
  7. package/Build/Workers/{chunk-4YSNMHZ4.js → chunk-5OOFQLKF.js} +6 -6
  8. package/Build/Workers/{chunk-OXALEQPI.js → chunk-5PTXS2GO.js} +49 -23
  9. package/Build/Workers/{chunk-T77JILCU.js → chunk-6CHGCNMW.js} +2 -2
  10. package/Build/Workers/{chunk-FEVVHITK.js → chunk-76BYBWHP.js} +4 -4
  11. package/Build/Workers/{chunk-65MZOUNU.js → chunk-7BMOHCPM.js} +13 -13
  12. package/Build/Workers/{chunk-VE7BFUIX.js → chunk-7JO7GPJN.js} +1 -1
  13. package/Build/Workers/{chunk-5BLJ5ZM6.js → chunk-7KTQP4VB.js} +5 -5
  14. package/Build/Workers/{chunk-G5V4GPZE.js → chunk-7O373FFS.js} +8 -34
  15. package/Build/Workers/{chunk-S3PI2KFM.js → chunk-AD63PIY6.js} +2 -2
  16. package/Build/Workers/{chunk-6D66DPRV.js → chunk-BHQJ2NT7.js} +6 -6
  17. package/Build/Workers/{chunk-I2RC4XVN.js → chunk-C6YYBQXW.js} +4 -4
  18. package/Build/Workers/{chunk-X2ZQ7RJR.js → chunk-CKY7HOHV.js} +9 -9
  19. package/Build/Workers/{chunk-TO2PVHKI.js → chunk-DHYHSFFJ.js} +2 -2
  20. package/Build/Workers/{chunk-R6B7UCQB.js → chunk-DI5NGJUP.js} +2 -2
  21. package/Build/Workers/{chunk-X23FRWHJ.js → chunk-E27BLMDD.js} +7 -9
  22. package/Build/Workers/{chunk-N4QEHO3U.js → chunk-E63IIM5T.js} +1 -1
  23. package/Build/Workers/{chunk-BY3E4ONI.js → chunk-E6V6SQZW.js} +6 -6
  24. package/Build/Workers/{chunk-LSSWVB2X.js → chunk-EJZTDTUH.js} +4 -4
  25. package/Build/Workers/{chunk-XLTOBCDI.js → chunk-FDOV2LBJ.js} +7 -7
  26. package/Build/Workers/{chunk-ACRTCBN5.js → chunk-FIGIZHAQ.js} +11 -11
  27. package/Build/Workers/{chunk-4RMIRG6T.js → chunk-GESF4OXQ.js} +2 -2
  28. package/Build/Workers/{chunk-PNFHVBSF.js → chunk-GGZJN2TI.js} +16 -15
  29. package/Build/Workers/{chunk-KV4EQHK4.js → chunk-GNBFYG7F.js} +83 -79
  30. package/Build/Workers/{chunk-FOZWUH4T.js → chunk-GWCFU2SA.js} +7 -7
  31. package/Build/Workers/{chunk-Q55ECN3Y.js → chunk-I2ITFFPX.js} +1 -1
  32. package/Build/Workers/{chunk-XQI7XZHX.js → chunk-IBLIYJZR.js} +6 -6
  33. package/Build/Workers/{chunk-D2U4RI64.js → chunk-JW4FOI6M.js} +7 -7
  34. package/Build/Workers/{chunk-2J3JKXCP.js → chunk-K4GQUNB5.js} +9 -5
  35. package/Build/Workers/{chunk-POSRARY7.js → chunk-M3GMB5OP.js} +10 -10
  36. package/Build/Workers/{chunk-OOK53QUQ.js → chunk-MXIZJAPH.js} +1 -1
  37. package/Build/Workers/{chunk-OWGTMVDB.js → chunk-N5KJGGCM.js} +18 -20
  38. package/Build/Workers/{chunk-J7MQUQJY.js → chunk-NGPPMXRM.js} +12 -7
  39. package/Build/Workers/{chunk-OOMCT7OL.js → chunk-O3E4OAOE.js} +13 -13
  40. package/Build/Workers/{chunk-C3Z23UUJ.js → chunk-PGRPDNHG.js} +19 -23
  41. package/Build/Workers/{chunk-4VFBBNQ3.js → chunk-PRGYLLJT.js} +1 -1
  42. package/Build/Workers/{chunk-XZZNKIEV.js → chunk-S6MRMMQU.js} +6 -6
  43. package/Build/Workers/{chunk-76BYYG7N.js → chunk-SMDOP47J.js} +10 -10
  44. package/Build/Workers/{chunk-ZU334IDQ.js → chunk-TGONEMZO.js} +11 -11
  45. package/Build/Workers/{chunk-VRZ46QZ5.js → chunk-TKVT5GQM.js} +13 -13
  46. package/Build/Workers/{chunk-FDCLACT5.js → chunk-U72QNFOJ.js} +15 -25
  47. package/Build/Workers/{chunk-F3NDOSTZ.js → chunk-VJZB3WAV.js} +7 -7
  48. package/Build/Workers/{chunk-GPJR7MPQ.js → chunk-VU2MNO7L.js} +7 -7
  49. package/Build/Workers/{chunk-R4OIEIPE.js → chunk-XY4BATBS.js} +4 -4
  50. package/Build/Workers/{chunk-T6LPN7RI.js → chunk-YFXQECWV.js} +5 -5
  51. package/Build/Workers/{chunk-UCIPJSZX.js → chunk-YSGTGQQO.js} +14 -14
  52. package/Build/Workers/{chunk-BGE4QVG7.js → chunk-YZ733KKS.js} +12 -12
  53. package/Build/Workers/combineGeometry.js +23 -25
  54. package/Build/Workers/createBoxGeometry.js +16 -16
  55. package/Build/Workers/createBoxOutlineGeometry.js +14 -14
  56. package/Build/Workers/createCircleGeometry.js +24 -24
  57. package/Build/Workers/createCircleOutlineGeometry.js +17 -17
  58. package/Build/Workers/createCoplanarPolygonGeometry.js +31 -31
  59. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +29 -29
  60. package/Build/Workers/createCorridorGeometry.js +27 -27
  61. package/Build/Workers/createCorridorOutlineGeometry.js +26 -26
  62. package/Build/Workers/createCylinderGeometry.js +18 -18
  63. package/Build/Workers/createCylinderOutlineGeometry.js +16 -16
  64. package/Build/Workers/createEllipseGeometry.js +24 -24
  65. package/Build/Workers/createEllipseOutlineGeometry.js +17 -17
  66. package/Build/Workers/createEllipsoidGeometry.js +17 -17
  67. package/Build/Workers/createEllipsoidOutlineGeometry.js +16 -16
  68. package/Build/Workers/createFrustumGeometry.js +16 -16
  69. package/Build/Workers/createFrustumOutlineGeometry.js +16 -16
  70. package/Build/Workers/createGeometry.js +25 -26
  71. package/Build/Workers/createGroundPolylineGeometry.js +20 -20
  72. package/Build/Workers/createPlaneGeometry.js +14 -14
  73. package/Build/Workers/createPlaneOutlineGeometry.js +13 -13
  74. package/Build/Workers/createPolygonGeometry.js +36 -40
  75. package/Build/Workers/createPolygonOutlineGeometry.js +40 -48
  76. package/Build/Workers/createPolylineGeometry.js +23 -23
  77. package/Build/Workers/createPolylineVolumeGeometry.js +32 -31
  78. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +25 -25
  79. package/Build/Workers/createRectangleGeometry.js +28 -30
  80. package/Build/Workers/createRectangleOutlineGeometry.js +19 -19
  81. package/Build/Workers/createSimplePolylineGeometry.js +21 -21
  82. package/Build/Workers/createSphereGeometry.js +17 -17
  83. package/Build/Workers/createSphereOutlineGeometry.js +16 -16
  84. package/Build/Workers/createTaskProcessorWorker.js +3 -3
  85. package/Build/Workers/createVectorTileClampedPolylines.js +13 -13
  86. package/Build/Workers/createVectorTileGeometries.js +22 -22
  87. package/Build/Workers/createVectorTilePoints.js +12 -12
  88. package/Build/Workers/createVectorTilePolygons.js +20 -20
  89. package/Build/Workers/createVectorTilePolylines.js +13 -13
  90. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +22 -26
  91. package/Build/Workers/createVerticesFromHeightmap.js +26 -26
  92. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +42 -32
  93. package/Build/Workers/createWallGeometry.js +22 -22
  94. package/Build/Workers/createWallOutlineGeometry.js +21 -21
  95. package/Build/Workers/decodeDraco.js +11 -11
  96. package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +28 -5
  97. package/Build/Workers/decodeI3S.js +10 -10
  98. package/Build/Workers/transcodeKTX2.js +19 -18
  99. package/Build/Workers/transferTypedArrayTest.js +1 -1
  100. package/Build/Workers/upsampleQuantizedTerrainMesh.js +20 -20
  101. package/Source/Core/ApproximateTerrainHeights.js +15 -15
  102. package/Source/Core/ArcGISTiledElevationTerrainProvider.js +33 -35
  103. package/Source/Core/AttributeCompression.js +12 -12
  104. package/Source/Core/AxisAlignedBoundingBox.js +2 -2
  105. package/Source/Core/BingMapsGeocoderService.js +1 -1
  106. package/Source/Core/BoundingRectangle.js +3 -3
  107. package/Source/Core/BoundingSphere.js +44 -44
  108. package/Source/Core/BoxGeometry.js +6 -6
  109. package/Source/Core/BoxOutlineGeometry.js +3 -3
  110. package/Source/Core/Cartesian2.js +7 -7
  111. package/Source/Core/Cartesian3.js +20 -20
  112. package/Source/Core/Cartesian4.js +8 -8
  113. package/Source/Core/Cartographic.js +6 -6
  114. package/Source/Core/CatmullRomSpline.js +6 -6
  115. package/Source/Core/CesiumTerrainProvider.js +66 -68
  116. package/Source/Core/Check.d.ts +3 -3
  117. package/Source/Core/Check.js +11 -11
  118. package/Source/Core/CircleGeometry.js +6 -6
  119. package/Source/Core/CircleOutlineGeometry.js +4 -4
  120. package/Source/Core/Clock.js +4 -4
  121. package/Source/Core/Color.js +11 -8
  122. package/Source/Core/ColorGeometryInstanceAttribute.js +1 -1
  123. package/Source/Core/ComponentDatatype.js +4 -4
  124. package/Source/Core/CompressedTextureBuffer.js +13 -2
  125. package/Source/Core/ConstantSpline.js +1 -1
  126. package/Source/Core/CoplanarPolygonGeometry.js +44 -41
  127. package/Source/Core/CoplanarPolygonGeometryLibrary.js +5 -5
  128. package/Source/Core/CoplanarPolygonOutlineGeometry.js +6 -6
  129. package/Source/Core/CorridorGeometry.js +77 -77
  130. package/Source/Core/CorridorGeometryLibrary.js +45 -45
  131. package/Source/Core/CorridorOutlineGeometry.js +16 -16
  132. package/Source/Core/CullingVolume.js +4 -4
  133. package/Source/Core/CustomHeightmapTerrainProvider.js +13 -13
  134. package/Source/Core/CylinderGeometry.js +8 -8
  135. package/Source/Core/CylinderGeometryLibrary.js +1 -1
  136. package/Source/Core/CylinderOutlineGeometry.js +4 -4
  137. package/Source/Core/DeveloperError.js +1 -1
  138. package/Source/Core/DistanceDisplayConditionGeometryInstanceAttribute.js +20 -21
  139. package/Source/Core/DoubleEndedPriorityQueue.js +2 -2
  140. package/Source/Core/EarthOrientationParameters.js +21 -25
  141. package/Source/Core/EarthOrientationParametersSample.js +1 -1
  142. package/Source/Core/EllipseGeometry.js +54 -55
  143. package/Source/Core/EllipseGeometryLibrary.js +12 -12
  144. package/Source/Core/EllipseOutlineGeometry.js +19 -19
  145. package/Source/Core/Ellipsoid.js +25 -33
  146. package/Source/Core/EllipsoidGeodesic.js +17 -16
  147. package/Source/Core/EllipsoidGeometry.js +9 -8
  148. package/Source/Core/EllipsoidOutlineGeometry.js +4 -4
  149. package/Source/Core/EllipsoidRhumbLine.js +33 -32
  150. package/Source/Core/EllipsoidTangentPlane.js +16 -16
  151. package/Source/Core/EllipsoidTerrainProvider.js +11 -10
  152. package/Source/Core/EllipsoidalOccluder.js +110 -130
  153. package/Source/Core/FeatureDetection.js +4 -4
  154. package/Source/Core/FrustumGeometry.js +14 -14
  155. package/Source/Core/FrustumOutlineGeometry.js +4 -4
  156. package/Source/Core/GeographicTilingScheme.js +6 -6
  157. package/Source/Core/Geometry.js +15 -17
  158. package/Source/Core/GeometryAttribute.js +4 -9
  159. package/Source/Core/GeometryAttributes.js +6 -6
  160. package/Source/Core/GeometryInstance.js +3 -4
  161. package/Source/Core/GeometryInstanceAttribute.js +1 -6
  162. package/Source/Core/GeometryPipeline.js +133 -137
  163. package/Source/Core/GoogleEarthEnterpriseMetadata.js +19 -20
  164. package/Source/Core/GoogleEarthEnterpriseTerrainData.js +25 -24
  165. package/Source/Core/GoogleEarthEnterpriseTerrainProvider.js +17 -21
  166. package/Source/Core/GoogleEarthEnterpriseTileInformation.js +2 -2
  167. package/Source/Core/GoogleMaps.js +1 -1
  168. package/Source/Core/GregorianDate.js +4 -4
  169. package/Source/Core/GroundPolylineGeometry.js +104 -104
  170. package/Source/Core/HeadingPitchRoll.js +7 -7
  171. package/Source/Core/HeightmapTerrainData.js +58 -54
  172. package/Source/Core/HeightmapTessellator.js +22 -23
  173. package/Source/Core/HermitePolynomialApproximation.js +8 -8
  174. package/Source/Core/HermiteSpline.js +11 -11
  175. package/Source/Core/HilbertOrder.js +1 -1
  176. package/Source/Core/Iau2006XysData.js +6 -6
  177. package/Source/Core/IauOrientationAxes.js +2 -2
  178. package/Source/Core/IauOrientationParameters.js +1 -1
  179. package/Source/Core/IndexDatatype.js +5 -5
  180. package/Source/Core/IntersectionTests.js +36 -78
  181. package/Source/Core/Intersections2D.js +3 -3
  182. package/Source/Core/Ion.js +1 -1
  183. package/Source/Core/IonGeocoderService.js +2 -2
  184. package/Source/Core/IonResource.js +5 -5
  185. package/Source/Core/Iso8601.js +3 -3
  186. package/Source/Core/JulianDate.js +23 -33
  187. package/Source/Core/KTX2Transcoder.js +11 -18
  188. package/Source/Core/LagrangePolynomialApproximation.js +1 -1
  189. package/Source/Core/LinearApproximation.js +4 -4
  190. package/Source/Core/LinearSpline.js +2 -2
  191. package/Source/Core/Math.js +4 -4
  192. package/Source/Core/Matrix2.js +3 -3
  193. package/Source/Core/Matrix3.js +16 -16
  194. package/Source/Core/Matrix4.js +31 -31
  195. package/Source/Core/MorphWeightSpline.js +2 -2
  196. package/Source/Core/NearFarScalar.js +1 -1
  197. package/Source/Core/Occluder.js +52 -56
  198. package/Source/Core/OpenCageGeocoderService.js +2 -2
  199. package/Source/Core/OrientedBoundingBox.js +52 -51
  200. package/Source/Core/OrthographicFrustum.js +11 -11
  201. package/Source/Core/OrthographicOffCenterFrustum.js +17 -17
  202. package/Source/Core/PeliasGeocoderService.js +1 -1
  203. package/Source/Core/PerspectiveFrustum.js +61 -55
  204. package/Source/Core/PerspectiveOffCenterFrustum.js +58 -59
  205. package/Source/Core/PinBuilder.js +1 -1
  206. package/Source/Core/PixelFormat.js +7 -21
  207. package/Source/Core/Plane.js +9 -9
  208. package/Source/Core/PlaneGeometry.js +1 -1
  209. package/Source/Core/PolygonGeometry.js +95 -94
  210. package/Source/Core/PolygonGeometryLibrary.js +49 -51
  211. package/Source/Core/PolygonOutlineGeometry.js +49 -51
  212. package/Source/Core/PolygonPipeline.js +31 -31
  213. package/Source/Core/PolylineGeometry.js +10 -10
  214. package/Source/Core/PolylinePipeline.js +25 -25
  215. package/Source/Core/PolylineVolumeGeometry.js +9 -9
  216. package/Source/Core/PolylineVolumeGeometryLibrary.js +51 -51
  217. package/Source/Core/PolylineVolumeOutlineGeometry.js +6 -6
  218. package/Source/Core/QuadraticRealPolynomial.js +1 -1
  219. package/Source/Core/QuantizedMeshTerrainData.js +28 -28
  220. package/Source/Core/QuarticRealPolynomial.js +1 -1
  221. package/Source/Core/Quaternion.js +19 -19
  222. package/Source/Core/QuaternionSpline.js +2 -2
  223. package/Source/Core/Rectangle.js +34 -13
  224. package/Source/Core/RectangleCollisionChecker.js +3 -3
  225. package/Source/Core/RectangleGeometry.js +55 -56
  226. package/Source/Core/RectangleGeometryLibrary.js +8 -8
  227. package/Source/Core/RectangleOutlineGeometry.js +20 -20
  228. package/Source/Core/RequestScheduler.js +6 -6
  229. package/Source/Core/Resource.js +24 -24
  230. package/Source/Core/S2Cell.js +16 -80
  231. package/Source/Core/ScreenSpaceEventHandler.js +54 -53
  232. package/Source/Core/Simon1994PlanetaryPositions.js +13 -13
  233. package/Source/Core/SimplePolylineGeometry.js +7 -7
  234. package/Source/Core/SphereGeometry.js +2 -2
  235. package/Source/Core/SphereOutlineGeometry.js +3 -3
  236. package/Source/Core/Spline.js +1 -1
  237. package/Source/Core/SteppedSpline.js +1 -1
  238. package/Source/Core/Stereographic.js +9 -9
  239. package/Source/Core/TaskProcessor.js +13 -13
  240. package/Source/Core/TerrainEncoding.js +33 -38
  241. package/Source/Core/TerrainMesh.js +1 -1
  242. package/Source/Core/TerrainProvider.js +12 -12
  243. package/Source/Core/TileAvailability.js +28 -28
  244. package/Source/Core/TileProviderError.js +5 -5
  245. package/Source/Core/TilingScheme.js +1 -1
  246. package/Source/Core/TimeInterval.js +4 -4
  247. package/Source/Core/TimeIntervalCollection.js +16 -15
  248. package/Source/Core/Tipsify.js +2 -2
  249. package/Source/Core/Transforms.js +52 -54
  250. package/Source/Core/TranslationRotationScale.js +1 -1
  251. package/Source/Core/TridiagonalSystemSolver.js +4 -4
  252. package/Source/Core/VRTheWorldTerrainProvider.js +28 -26
  253. package/Source/Core/VertexFormat.js +6 -6
  254. package/Source/Core/VerticalExaggeration.js +4 -4
  255. package/Source/Core/VideoSynchronizer.js +1 -1
  256. package/Source/Core/WallGeometry.js +18 -18
  257. package/Source/Core/WallGeometryLibrary.js +7 -7
  258. package/Source/Core/WallOutlineGeometry.js +8 -8
  259. package/Source/Core/WebMercatorProjection.js +5 -6
  260. package/Source/Core/WebMercatorTilingScheme.js +13 -13
  261. package/Source/Core/WireframeIndexGenerator.js +8 -8
  262. package/Source/Core/arrayRemoveDuplicates.js +1 -1
  263. package/Source/Core/buildModuleUrl.js +2 -2
  264. package/Source/Core/decodeGoogleEarthEnterpriseData.js +3 -3
  265. package/Source/Core/decodeVectorPolylinePositions.js +4 -4
  266. package/Source/Core/destroyObject.js +1 -1
  267. package/Source/Core/getJsonFromTypedArray.js +1 -1
  268. package/Source/Core/getMagic.js +1 -1
  269. package/Source/Core/loadImageFromTypedArray.js +2 -2
  270. package/Source/Core/loadKTX2.js +1 -1
  271. package/Source/Core/pointInsideTriangle.js +1 -1
  272. package/Source/Core/resizeImageToNextPowerOfTwo.js +1 -1
  273. package/Source/Core/sampleTerrain.js +7 -7
  274. package/Source/Core/sampleTerrainMostDetailed.js +7 -7
  275. package/Source/Core/scaleToGeodeticSurface.js +3 -3
  276. package/Source/Core/srgbToLinear.js +1 -1
  277. package/Source/Core/writeTextToCanvas.js +1 -1
  278. package/Source/DataSources/BillboardGraphics.js +13 -13
  279. package/Source/DataSources/BillboardVisualizer.js +24 -24
  280. package/Source/DataSources/BoxGeometryUpdater.js +33 -32
  281. package/Source/DataSources/BoxGraphics.js +3 -3
  282. package/Source/DataSources/CallbackPositionProperty.js +173 -0
  283. package/Source/DataSources/CallbackProperty.js +8 -2
  284. package/Source/DataSources/Cesium3DTilesetGraphics.js +1 -1
  285. package/Source/DataSources/Cesium3DTilesetVisualizer.js +6 -6
  286. package/Source/DataSources/CheckerboardMaterialProperty.js +9 -3
  287. package/Source/DataSources/ColorMaterialProperty.js +8 -2
  288. package/Source/DataSources/CompositeEntityCollection.js +14 -15
  289. package/Source/DataSources/CompositeMaterialProperty.js +10 -11
  290. package/Source/DataSources/CompositePositionProperty.js +11 -6
  291. package/Source/DataSources/CompositeProperty.js +7 -7
  292. package/Source/DataSources/ConstantPositionProperty.js +9 -3
  293. package/Source/DataSources/CorridorGeometryUpdater.js +61 -56
  294. package/Source/DataSources/CorridorGraphics.js +6 -6
  295. package/Source/DataSources/CylinderGeometryUpdater.js +42 -40
  296. package/Source/DataSources/CylinderGraphics.js +4 -4
  297. package/Source/DataSources/CzmlDataSource.js +365 -368
  298. package/Source/DataSources/DataSourceCollection.js +1 -1
  299. package/Source/DataSources/DataSourceDisplay.js +23 -23
  300. package/Source/DataSources/DynamicGeometryBatch.js +2 -2
  301. package/Source/DataSources/DynamicGeometryUpdater.js +14 -18
  302. package/Source/DataSources/EllipseGeometryUpdater.js +67 -63
  303. package/Source/DataSources/EllipseGraphics.js +7 -7
  304. package/Source/DataSources/EllipsoidGeometryUpdater.js +88 -86
  305. package/Source/DataSources/EllipsoidGraphics.js +5 -5
  306. package/Source/DataSources/Entity.js +14 -14
  307. package/Source/DataSources/EntityCluster.js +29 -27
  308. package/Source/DataSources/EntityCollection.js +7 -7
  309. package/Source/DataSources/EntityView.js +23 -23
  310. package/Source/DataSources/GeoJsonDataSource.js +25 -25
  311. package/Source/DataSources/GeometryUpdater.js +9 -10
  312. package/Source/DataSources/GeometryUpdaterSet.js +3 -3
  313. package/Source/DataSources/GeometryVisualizer.js +65 -71
  314. package/Source/DataSources/GpxDataSource.js +10 -10
  315. package/Source/DataSources/GridMaterialProperty.js +12 -6
  316. package/Source/DataSources/GroundGeometryUpdater.js +6 -6
  317. package/Source/DataSources/ImageMaterialProperty.js +10 -3
  318. package/Source/DataSources/KmlDataSource.js +212 -212
  319. package/Source/DataSources/LabelGraphics.js +14 -14
  320. package/Source/DataSources/LabelVisualizer.js +24 -24
  321. package/Source/DataSources/MaterialProperty.js +7 -1
  322. package/Source/DataSources/ModelGraphics.js +37 -17
  323. package/Source/DataSources/ModelVisualizer.js +41 -32
  324. package/Source/DataSources/NodeTransformationProperty.js +10 -4
  325. package/Source/DataSources/PathGraphics.js +2 -2
  326. package/Source/DataSources/PathVisualizer.js +99 -35
  327. package/Source/DataSources/PlaneGeometryUpdater.js +38 -37
  328. package/Source/DataSources/PlaneGraphics.js +2 -2
  329. package/Source/DataSources/PointGraphics.js +8 -8
  330. package/Source/DataSources/PointVisualizer.js +29 -29
  331. package/Source/DataSources/PolygonGeometryUpdater.js +68 -64
  332. package/Source/DataSources/PolygonGraphics.js +9 -9
  333. package/Source/DataSources/PolylineArrowMaterialProperty.js +8 -2
  334. package/Source/DataSources/PolylineDashMaterialProperty.js +11 -5
  335. package/Source/DataSources/PolylineGeometryUpdater.js +39 -44
  336. package/Source/DataSources/PolylineGlowMaterialProperty.js +10 -4
  337. package/Source/DataSources/PolylineGraphics.js +4 -4
  338. package/Source/DataSources/PolylineOutlineMaterialProperty.js +10 -4
  339. package/Source/DataSources/PolylineVisualizer.js +39 -43
  340. package/Source/DataSources/PolylineVolumeGeometryUpdater.js +70 -68
  341. package/Source/DataSources/PolylineVolumeGraphics.js +2 -2
  342. package/Source/DataSources/PositionProperty.js +5 -4
  343. package/Source/DataSources/PositionPropertyArray.js +10 -4
  344. package/Source/DataSources/Property.js +2 -2
  345. package/Source/DataSources/PropertyArray.js +6 -6
  346. package/Source/DataSources/PropertyBag.js +10 -9
  347. package/Source/DataSources/RectangleGeometryUpdater.js +68 -63
  348. package/Source/DataSources/RectangleGraphics.js +6 -6
  349. package/Source/DataSources/ReferenceProperty.js +13 -7
  350. package/Source/DataSources/Rotation.js +2 -2
  351. package/Source/DataSources/SampledPositionProperty.js +13 -7
  352. package/Source/DataSources/SampledProperty.js +22 -20
  353. package/Source/DataSources/ScaledPositionProperty.js +8 -2
  354. package/Source/DataSources/StaticGeometryColorBatch.js +41 -41
  355. package/Source/DataSources/StaticGeometryPerMaterialBatch.js +40 -40
  356. package/Source/DataSources/StaticGroundGeometryColorBatch.js +26 -27
  357. package/Source/DataSources/StaticGroundGeometryPerMaterialBatch.js +46 -44
  358. package/Source/DataSources/StaticGroundPolylinePerMaterialBatch.js +44 -43
  359. package/Source/DataSources/StaticOutlineGeometryBatch.js +28 -29
  360. package/Source/DataSources/StripeMaterialProperty.js +9 -3
  361. package/Source/DataSources/TerrainOffsetProperty.js +20 -11
  362. package/Source/DataSources/TimeIntervalCollectionPositionProperty.js +35 -31
  363. package/Source/DataSources/TimeIntervalCollectionProperty.js +6 -6
  364. package/Source/DataSources/VelocityOrientationProperty.js +9 -4
  365. package/Source/DataSources/VelocityVectorProperty.js +7 -9
  366. package/Source/DataSources/WallGeometryUpdater.js +25 -25
  367. package/Source/DataSources/WallGraphics.js +4 -4
  368. package/Source/DataSources/createPropertyDescriptor.js +3 -3
  369. package/Source/DataSources/exportKml.js +90 -86
  370. package/Source/DataSources/getElement.js +1 -1
  371. package/Source/DataSources/heightReferenceOnEntityPropertyChanged.js +4 -4
  372. package/Source/Renderer/AutomaticUniforms.js +3 -18
  373. package/Source/Renderer/Buffer.js +18 -18
  374. package/Source/Renderer/ClearCommand.js +1 -1
  375. package/Source/Renderer/ComputeEngine.js +1 -1
  376. package/Source/Renderer/Context.js +55 -40
  377. package/Source/Renderer/CubeMap.js +332 -354
  378. package/Source/Renderer/CubeMapFace.js +43 -65
  379. package/Source/Renderer/DrawCommand.js +50 -5
  380. package/Source/Renderer/Framebuffer.js +48 -49
  381. package/Source/Renderer/FramebufferManager.js +40 -34
  382. package/Source/Renderer/MultisampleFramebuffer.js +35 -14
  383. package/Source/Renderer/PixelDatatype.js +23 -0
  384. package/Source/Renderer/RenderState.js +36 -36
  385. package/Source/Renderer/Renderbuffer.js +3 -3
  386. package/Source/Renderer/Sampler.js +9 -15
  387. package/Source/Renderer/ShaderBuilder.js +8 -8
  388. package/Source/Renderer/ShaderCache.js +11 -15
  389. package/Source/Renderer/ShaderFunction.js +1 -1
  390. package/Source/Renderer/ShaderProgram.js +22 -15
  391. package/Source/Renderer/ShaderSource.js +40 -40
  392. package/Source/Renderer/Texture.js +455 -380
  393. package/Source/Renderer/UniformState.js +68 -80
  394. package/Source/Renderer/VertexArray.js +20 -20
  395. package/Source/Renderer/VertexArrayFacade.js +15 -16
  396. package/Source/Renderer/createUniform.js +1 -1
  397. package/Source/Renderer/createUniformArray.js +4 -4
  398. package/Source/Renderer/demodernizeShader.js +7 -5
  399. package/Source/Renderer/loadCubeMap.js +3 -8
  400. package/Source/Scene/ArcGisMapServerImageryProvider.js +39 -45
  401. package/Source/Scene/ArcGisMapService.js +4 -7
  402. package/Source/Scene/AutoExposure.js +4 -5
  403. package/Source/Scene/Axis.js +6 -6
  404. package/Source/Scene/B3dmParser.js +9 -9
  405. package/Source/Scene/BatchTable.js +7 -7
  406. package/Source/Scene/BatchTableHierarchy.js +62 -59
  407. package/Source/Scene/BatchTexture.js +2 -2
  408. package/Source/Scene/Billboard.js +45 -43
  409. package/Source/Scene/BillboardCollection.js +81 -83
  410. package/Source/Scene/BingMapsImageryProvider.js +13 -13
  411. package/Source/Scene/BoundingVolumeSemantics.js +10 -10
  412. package/Source/Scene/BoxEmitter.js +1 -1
  413. package/Source/Scene/BufferLoader.js +1 -1
  414. package/Source/Scene/Camera.js +161 -164
  415. package/Source/Scene/CameraEventAggregator.js +67 -23
  416. package/Source/Scene/CameraFlightPath.js +25 -25
  417. package/Source/Scene/Cesium3DTile.js +89 -95
  418. package/Source/Scene/Cesium3DTileBatchTable.js +61 -61
  419. package/Source/Scene/Cesium3DTileContentFactory.js +7 -7
  420. package/Source/Scene/Cesium3DTileFeature.js +1 -1
  421. package/Source/Scene/Cesium3DTileFeatureTable.js +8 -8
  422. package/Source/Scene/Cesium3DTileOptimizations.js +1 -1
  423. package/Source/Scene/Cesium3DTilePointFeature.js +11 -11
  424. package/Source/Scene/Cesium3DTileStyle.js +26 -24
  425. package/Source/Scene/Cesium3DTilesVoxelProvider.js +14 -20
  426. package/Source/Scene/Cesium3DTileset.js +81 -83
  427. package/Source/Scene/Cesium3DTilesetBaseTraversal.js +8 -16
  428. package/Source/Scene/Cesium3DTilesetCache.js +2 -2
  429. package/Source/Scene/Cesium3DTilesetHeatmap.js +5 -5
  430. package/Source/Scene/Cesium3DTilesetMetadata.js +2 -2
  431. package/Source/Scene/Cesium3DTilesetMostDetailedTraversal.js +2 -2
  432. package/Source/Scene/Cesium3DTilesetSkipTraversal.js +8 -12
  433. package/Source/Scene/Cesium3DTilesetStatistics.js +1 -1
  434. package/Source/Scene/Cesium3DTilesetTraversal.js +8 -10
  435. package/Source/Scene/ClassificationPrimitive.js +70 -69
  436. package/Source/Scene/ClippingPlaneCollection.js +39 -41
  437. package/Source/Scene/ClippingPolygon.js +8 -8
  438. package/Source/Scene/ClippingPolygonCollection.js +62 -63
  439. package/Source/Scene/CloudCollection.js +3 -10
  440. package/Source/Scene/Composite3DTileContent.js +6 -6
  441. package/Source/Scene/ConditionsExpression.js +5 -5
  442. package/Source/Scene/ContentMetadata.js +4 -4
  443. package/Source/Scene/CreditDisplay.js +8 -8
  444. package/Source/Scene/CumulusCloud.js +4 -4
  445. package/Source/Scene/DebugAppearance.js +2 -2
  446. package/Source/Scene/DebugCameraPrimitive.js +2 -2
  447. package/Source/Scene/DebugInspector.js +3 -3
  448. package/Source/Scene/DebugModelMatrixPrimitive.js +4 -4
  449. package/Source/Scene/DepthPlane.js +7 -7
  450. package/Source/Scene/DerivedCommand.js +422 -238
  451. package/Source/Scene/DiscardMissingTileImagePolicy.js +1 -1
  452. package/Source/Scene/DracoLoader.js +3 -3
  453. package/Source/Scene/EllipsoidPrimitive.js +7 -7
  454. package/Source/Scene/EllipsoidSurfaceAppearance.js +3 -3
  455. package/Source/Scene/Empty3DTileContent.js +1 -1
  456. package/Source/Scene/Expression.js +91 -91
  457. package/Source/Scene/Fog.js +8 -41
  458. package/Source/Scene/FrameRateMonitor.js +22 -22
  459. package/Source/Scene/FrameState.js +31 -0
  460. package/Source/Scene/Geometry3DTileContent.js +20 -20
  461. package/Source/Scene/GetFeatureInfoFormat.js +15 -14
  462. package/Source/Scene/Globe.js +33 -28
  463. package/Source/Scene/GlobeDepth.js +95 -66
  464. package/Source/Scene/GlobeSurfaceShaderSet.js +41 -34
  465. package/Source/Scene/GlobeSurfaceTile.js +33 -33
  466. package/Source/Scene/GlobeSurfaceTileProvider.js +132 -127
  467. package/Source/Scene/GlobeTranslucency.js +4 -4
  468. package/Source/Scene/GlobeTranslucencyFramebuffer.js +9 -9
  469. package/Source/Scene/GlobeTranslucencyState.js +53 -55
  470. package/Source/Scene/GltfBufferViewLoader.js +2 -2
  471. package/Source/Scene/GltfIndexBufferLoader.js +5 -5
  472. package/Source/Scene/GltfJsonLoader.js +2 -2
  473. package/Source/Scene/GltfLoader.js +177 -100
  474. package/Source/Scene/GltfStructuralMetadataLoader.js +9 -8
  475. package/Source/Scene/GltfTextureLoader.js +5 -5
  476. package/Source/Scene/GltfVertexBufferLoader.js +12 -13
  477. package/Source/Scene/GoogleEarthEnterpriseImageryProvider.js +9 -9
  478. package/Source/Scene/GoogleEarthEnterpriseMapsProvider.js +9 -9
  479. package/Source/Scene/GridImageryProvider.js +2 -2
  480. package/Source/Scene/GroundPolylinePrimitive.js +38 -39
  481. package/Source/Scene/GroundPrimitive.js +47 -45
  482. package/Source/Scene/GroupMetadata.js +4 -4
  483. package/Source/Scene/I3SDataProvider.js +12 -12
  484. package/Source/Scene/I3SDecoder.js +7 -8
  485. package/Source/Scene/I3SField.js +8 -8
  486. package/Source/Scene/I3SGeometry.js +14 -14
  487. package/Source/Scene/I3SLayer.js +26 -20
  488. package/Source/Scene/I3SNode.js +17 -17
  489. package/Source/Scene/I3SSublayer.js +4 -4
  490. package/Source/Scene/I3SSymbology.js +8 -8
  491. package/Source/Scene/I3dmParser.js +9 -9
  492. package/Source/Scene/ImageBasedLighting.js +58 -56
  493. package/Source/Scene/Imagery.js +3 -3
  494. package/Source/Scene/ImageryLayer.js +64 -66
  495. package/Source/Scene/ImageryLayerCollection.js +13 -15
  496. package/Source/Scene/ImageryLayerFeatureInfo.js +19 -20
  497. package/Source/Scene/ImageryProvider.js +1 -1
  498. package/Source/Scene/Implicit3DTileContent.js +34 -37
  499. package/Source/Scene/ImplicitAvailabilityBitstream.js +2 -2
  500. package/Source/Scene/ImplicitMetadataView.js +2 -2
  501. package/Source/Scene/ImplicitSubtree.js +29 -30
  502. package/Source/Scene/ImplicitSubtreeCache.js +1 -1
  503. package/Source/Scene/ImplicitSubtreeMetadata.js +5 -5
  504. package/Source/Scene/ImplicitTileCoordinates.js +11 -11
  505. package/Source/Scene/ImplicitTileset.js +2 -2
  506. package/Source/Scene/InvertClassification.js +7 -7
  507. package/Source/Scene/IonImageryProvider.js +6 -6
  508. package/Source/Scene/JobScheduler.js +4 -4
  509. package/Source/Scene/Label.js +31 -31
  510. package/Source/Scene/LabelCollection.js +17 -15
  511. package/Source/Scene/MapboxImageryProvider.js +3 -3
  512. package/Source/Scene/MapboxStyleImageryProvider.js +4 -4
  513. package/Source/Scene/Material.js +50 -29
  514. package/Source/Scene/MaterialAppearance.js +4 -4
  515. package/Source/Scene/Megatexture.js +21 -24
  516. package/Source/Scene/MetadataClassProperty.js +11 -11
  517. package/Source/Scene/MetadataComponentType.js +1 -1
  518. package/Source/Scene/MetadataEntity.js +8 -8
  519. package/Source/Scene/MetadataEnum.js +1 -1
  520. package/Source/Scene/MetadataPicking.js +305 -0
  521. package/Source/Scene/MetadataSchemaLoader.js +1 -1
  522. package/Source/Scene/MetadataTable.js +2 -2
  523. package/Source/Scene/MetadataTableProperty.js +22 -22
  524. package/Source/Scene/Model/AlphaPipelineStage.js +2 -2
  525. package/Source/Scene/Model/AtmospherePipelineStage.js +3 -3
  526. package/Source/Scene/Model/B3dmLoader.js +8 -8
  527. package/Source/Scene/Model/BatchTexturePipelineStage.js +2 -2
  528. package/Source/Scene/Model/CPUStylingPipelineStage.js +4 -4
  529. package/Source/Scene/Model/ClassificationModelDrawCommand.js +8 -8
  530. package/Source/Scene/Model/ClassificationPipelineStage.js +5 -5
  531. package/Source/Scene/Model/CustomShader.js +9 -9
  532. package/Source/Scene/Model/CustomShaderPipelineStage.js +37 -38
  533. package/Source/Scene/Model/DequantizationPipelineStage.js +5 -5
  534. package/Source/Scene/Model/Extensions/Gpm/AnchorPointDirect.js +61 -0
  535. package/Source/Scene/Model/Extensions/Gpm/AnchorPointIndirect.js +77 -0
  536. package/Source/Scene/Model/Extensions/Gpm/CorrelationGroup.js +81 -0
  537. package/Source/Scene/Model/Extensions/Gpm/GltfGpmLoader.js +248 -0
  538. package/Source/Scene/Model/Extensions/Gpm/GltfGpmLocal.js +179 -0
  539. package/Source/Scene/Model/Extensions/Gpm/GltfMeshPrimitiveGpmLoader.js +548 -0
  540. package/Source/Scene/Model/Extensions/Gpm/MeshPrimitiveGpmLocal.js +28 -0
  541. package/Source/Scene/Model/Extensions/Gpm/PpeMetadata.js +79 -0
  542. package/Source/Scene/Model/Extensions/Gpm/PpeSource.js +75 -0
  543. package/Source/Scene/Model/Extensions/Gpm/PpeTexture.js +127 -0
  544. package/Source/Scene/Model/Extensions/Gpm/Spdcf.js +103 -0
  545. package/Source/Scene/Model/Extensions/Gpm/StorageType.js +30 -0
  546. package/Source/Scene/Model/FeatureIdPipelineStage.js +40 -40
  547. package/Source/Scene/Model/GeoJsonLoader.js +17 -17
  548. package/Source/Scene/Model/GeometryPipelineStage.js +23 -24
  549. package/Source/Scene/Model/I3dmLoader.js +36 -36
  550. package/Source/Scene/Model/ImageBasedLightingPipelineStage.js +22 -30
  551. package/Source/Scene/Model/InstancingPipelineStage.js +86 -86
  552. package/Source/Scene/Model/LightingPipelineStage.js +4 -4
  553. package/Source/Scene/Model/MaterialPipelineStage.js +78 -93
  554. package/Source/Scene/Model/MetadataPickingPipelineStage.js +96 -0
  555. package/Source/Scene/Model/MetadataPipelineStage.js +39 -47
  556. package/Source/Scene/Model/Model.js +134 -54
  557. package/Source/Scene/Model/Model3DTileContent.js +32 -13
  558. package/Source/Scene/Model/ModelAnimationChannel.js +2 -2
  559. package/Source/Scene/Model/ModelAnimationCollection.js +9 -9
  560. package/Source/Scene/Model/ModelArticulation.js +2 -2
  561. package/Source/Scene/Model/ModelArticulationStage.js +4 -4
  562. package/Source/Scene/Model/ModelClippingPlanesPipelineStage.js +11 -11
  563. package/Source/Scene/Model/ModelClippingPolygonsPipelineStage.js +6 -6
  564. package/Source/Scene/Model/ModelColorPipelineStage.js +12 -13
  565. package/Source/Scene/Model/ModelDrawCommand.js +5 -5
  566. package/Source/Scene/Model/{buildDrawCommand.js → ModelDrawCommands.js} +85 -28
  567. package/Source/Scene/Model/ModelFeatureTable.js +5 -5
  568. package/Source/Scene/Model/ModelMatrixUpdateStage.js +24 -12
  569. package/Source/Scene/Model/ModelRenderResources.js +1 -1
  570. package/Source/Scene/Model/ModelRuntimeNode.js +15 -15
  571. package/Source/Scene/Model/ModelRuntimePrimitive.js +8 -5
  572. package/Source/Scene/Model/ModelSceneGraph.js +42 -43
  573. package/Source/Scene/Model/ModelSilhouettePipelineStage.js +4 -4
  574. package/Source/Scene/Model/ModelSkin.js +4 -4
  575. package/Source/Scene/Model/ModelSplitterPipelineStage.js +8 -9
  576. package/Source/Scene/Model/ModelUtility.js +5 -5
  577. package/Source/Scene/Model/MorphTargetsPipelineStage.js +18 -18
  578. package/Source/Scene/Model/NodeRenderResources.js +1 -1
  579. package/Source/Scene/Model/NodeStatisticsPipelineStage.js +1 -1
  580. package/Source/Scene/Model/PickingPipelineStage.js +5 -5
  581. package/Source/Scene/Model/PntsLoader.js +7 -7
  582. package/Source/Scene/Model/PointCloudStylingPipelineStage.js +22 -23
  583. package/Source/Scene/Model/PrimitiveOutlineGenerator.js +6 -6
  584. package/Source/Scene/Model/PrimitiveOutlinePipelineStage.js +7 -7
  585. package/Source/Scene/Model/PrimitiveRenderResources.js +3 -3
  586. package/Source/Scene/Model/PrimitiveStatisticsPipelineStage.js +1 -1
  587. package/Source/Scene/Model/SceneMode2DPipelineStage.js +23 -23
  588. package/Source/Scene/Model/SelectedFeatureIdPipelineStage.js +10 -14
  589. package/Source/Scene/Model/SkinningPipelineStage.js +5 -5
  590. package/Source/Scene/Model/StyleCommandsNeeded.js +1 -1
  591. package/Source/Scene/Model/TextureManager.js +2 -2
  592. package/Source/Scene/Model/TextureUniform.js +3 -3
  593. package/Source/Scene/Model/TilesetPipelineStage.js +2 -2
  594. package/Source/Scene/Model/VerticalExaggerationPipelineStage.js +4 -4
  595. package/Source/Scene/Model/WireframePipelineStage.js +7 -7
  596. package/Source/Scene/Model/pickModel.js +26 -26
  597. package/Source/Scene/ModelComponents.js +13 -4
  598. package/Source/Scene/Moon.js +6 -5
  599. package/Source/Scene/Multiple3DTileContent.js +15 -14
  600. package/Source/Scene/OIT.js +48 -97
  601. package/Source/Scene/OpenStreetMapImageryProvider.js +8 -7
  602. package/Source/Scene/OrderedGroundPrimitiveCollection.js +2 -2
  603. package/Source/Scene/Particle.js +3 -3
  604. package/Source/Scene/ParticleEmitter.js +1 -1
  605. package/Source/Scene/ParticleSystem.js +32 -32
  606. package/Source/Scene/PerInstanceColorAppearance.js +1 -1
  607. package/Source/Scene/PickDepth.js +16 -4
  608. package/Source/Scene/PickDepthFramebuffer.js +1 -1
  609. package/Source/Scene/PickFramebuffer.js +24 -12
  610. package/Source/Scene/PickedMetadataInfo.js +39 -0
  611. package/Source/Scene/Picking.js +270 -120
  612. package/Source/Scene/PntsParser.js +28 -28
  613. package/Source/Scene/PointCloud.js +39 -38
  614. package/Source/Scene/PointCloudEyeDomeLighting.js +6 -6
  615. package/Source/Scene/PointCloudShading.js +3 -3
  616. package/Source/Scene/PointPrimitive.js +31 -28
  617. package/Source/Scene/PointPrimitiveCollection.js +34 -33
  618. package/Source/Scene/Polyline.js +9 -9
  619. package/Source/Scene/PolylineCollection.js +55 -57
  620. package/Source/Scene/PolylineColorAppearance.js +3 -3
  621. package/Source/Scene/PolylineMaterialAppearance.js +3 -3
  622. package/Source/Scene/PostProcessStage.js +95 -115
  623. package/Source/Scene/PostProcessStageCollection.js +73 -49
  624. package/Source/Scene/PostProcessStageComposite.js +2 -2
  625. package/Source/Scene/PostProcessStageLibrary.js +30 -4
  626. package/Source/Scene/PostProcessStageTextureCache.js +10 -10
  627. package/Source/Scene/Primitive.js +93 -93
  628. package/Source/Scene/PrimitiveCollection.js +1 -1
  629. package/Source/Scene/PrimitiveLoadPlan.js +1 -1
  630. package/Source/Scene/PrimitivePipeline.js +30 -30
  631. package/Source/Scene/PropertyTable.js +5 -5
  632. package/Source/Scene/PropertyTextureProperty.js +36 -7
  633. package/Source/Scene/QuadtreePrimitive.js +56 -58
  634. package/Source/Scene/QuadtreeTile.js +4 -4
  635. package/Source/Scene/QuadtreeTileProvider.js +1 -1
  636. package/Source/Scene/ResourceCache.js +7 -7
  637. package/Source/Scene/ResourceCacheKey.js +15 -15
  638. package/Source/Scene/Scene.js +897 -677
  639. package/Source/Scene/SceneFramebuffer.js +2 -2
  640. package/Source/Scene/SceneTransforms.js +30 -92
  641. package/Source/Scene/SceneTransitioner.js +47 -47
  642. package/Source/Scene/ScreenSpaceCameraController.js +171 -157
  643. package/Source/Scene/SensorVolumePortionToDisplay.js +1 -1
  644. package/Source/Scene/ShadowMap.js +71 -72
  645. package/Source/Scene/ShadowMapShader.js +9 -9
  646. package/Source/Scene/ShadowVolumeAppearance.js +39 -39
  647. package/Source/Scene/SingleTileImageryProvider.js +3 -3
  648. package/Source/Scene/SkyAtmosphere.js +8 -8
  649. package/Source/Scene/SkyBox.js +17 -24
  650. package/Source/Scene/SpatialNode.js +13 -13
  651. package/Source/Scene/SpecularEnvironmentCubeMap.js +240 -0
  652. package/Source/Scene/SphereEmitter.js +1 -1
  653. package/Source/Scene/StructuralMetadata.js +1 -1
  654. package/Source/Scene/StyleExpression.js +1 -1
  655. package/Source/Scene/Sun.js +11 -7
  656. package/Source/Scene/SunPostProcess.js +6 -6
  657. package/Source/Scene/TerrainFillMesh.js +157 -156
  658. package/Source/Scene/TextureAtlas.js +11 -11
  659. package/Source/Scene/TileBoundingRegion.js +31 -31
  660. package/Source/Scene/TileBoundingS2Cell.js +37 -40
  661. package/Source/Scene/TileBoundingSphere.js +2 -2
  662. package/Source/Scene/TileCoordinatesImageryProvider.js +3 -3
  663. package/Source/Scene/TileImagery.js +7 -11
  664. package/Source/Scene/TileMapServiceImageryProvider.js +26 -25
  665. package/Source/Scene/TileMetadata.js +4 -4
  666. package/Source/Scene/TileOrientedBoundingBox.js +6 -6
  667. package/Source/Scene/Tileset3DTileContent.js +1 -1
  668. package/Source/Scene/TilesetMetadata.js +4 -4
  669. package/Source/Scene/TimeDynamicImagery.js +3 -3
  670. package/Source/Scene/TimeDynamicPointCloud.js +9 -9
  671. package/Source/Scene/Tonemapper.js +35 -23
  672. package/Source/Scene/TranslucentTileClassification.js +48 -58
  673. package/Source/Scene/TweenCollection.js +9 -9
  674. package/Source/Scene/UrlTemplateImageryProvider.js +23 -23
  675. package/Source/Scene/Vector3DTileClampedPolylines.js +21 -21
  676. package/Source/Scene/Vector3DTileContent.js +38 -39
  677. package/Source/Scene/Vector3DTileGeometry.js +11 -8
  678. package/Source/Scene/Vector3DTilePoints.js +18 -22
  679. package/Source/Scene/Vector3DTilePolygons.js +6 -6
  680. package/Source/Scene/Vector3DTilePolylines.js +8 -8
  681. package/Source/Scene/Vector3DTilePrimitive.js +30 -31
  682. package/Source/Scene/View.js +111 -80
  683. package/Source/Scene/VoxelBoxShape.js +34 -34
  684. package/Source/Scene/VoxelCell.js +7 -7
  685. package/Source/Scene/VoxelContent.js +1 -1
  686. package/Source/Scene/VoxelCylinderShape.js +48 -48
  687. package/Source/Scene/VoxelEllipsoidShape.js +83 -97
  688. package/Source/Scene/VoxelPrimitive.js +80 -109
  689. package/Source/Scene/VoxelRenderResources.js +13 -16
  690. package/Source/Scene/VoxelTraversal.js +41 -41
  691. package/Source/Scene/WebMapServiceImageryProvider.js +12 -12
  692. package/Source/Scene/WebMapTileServiceImageryProvider.js +8 -8
  693. package/Source/Scene/buildVoxelDrawCommands.js +10 -14
  694. package/Source/Scene/computeFlyToLocationForRectangle.js +7 -5
  695. package/Source/Scene/createBillboardPointCallback.js +2 -2
  696. package/Source/Scene/createElevationBandMaterial.js +8 -8
  697. package/Source/Scene/createGooglePhotorealistic3DTileset.js +1 -1
  698. package/Source/Scene/createOsmBuildingsAsync.js +1 -1
  699. package/Source/Scene/createTangentSpaceDebugPrimitive.js +7 -7
  700. package/Source/Scene/findContentMetadata.js +2 -2
  701. package/Source/Scene/findTileMetadata.js +2 -2
  702. package/Source/Scene/getBinaryAccessor.js +1 -1
  703. package/Source/Scene/getClipAndStyleCode.js +1 -1
  704. package/Source/Scene/getClippingFunction.js +1 -1
  705. package/Source/Scene/getMetadataClassProperty.js +43 -0
  706. package/Source/Scene/parseBatchTable.js +21 -24
  707. package/Source/Scene/parseFeatureMetadataLegacy.js +3 -3
  708. package/Source/Scene/parseStructuralMetadata.js +3 -3
  709. package/Source/Scene/processVoxelProperties.js +28 -33
  710. package/Source/Shaders/Builtin/CzmBuiltins.js +2 -2
  711. package/Source/Shaders/Builtin/Functions/packDepth.glsl +2 -2
  712. package/Source/Shaders/Builtin/Functions/packDepth.js +2 -2
  713. package/Source/Shaders/Builtin/Functions/pbrLighting.glsl +2 -2
  714. package/Source/Shaders/Builtin/Functions/pbrLighting.js +2 -2
  715. package/Source/Shaders/Builtin/Functions/pbrNeutralTonemapping.glsl +23 -0
  716. package/Source/Shaders/Builtin/Functions/pbrNeutralTonemapping.js +25 -0
  717. package/Source/Shaders/Builtin/Functions/textureCube.glsl +21 -2
  718. package/Source/Shaders/Builtin/Functions/textureCube.js +21 -2
  719. package/Source/Shaders/Builtin/Functions/unpackDepth.glsl +3 -3
  720. package/Source/Shaders/Builtin/Functions/unpackDepth.js +3 -3
  721. package/Source/Shaders/Builtin/Functions/windowToEyeCoordinates.glsl +1 -1
  722. package/Source/Shaders/Builtin/Functions/windowToEyeCoordinates.js +1 -1
  723. package/Source/Shaders/Builtin/Functions/writeLogDepth.glsl +2 -2
  724. package/Source/Shaders/Builtin/Functions/writeLogDepth.js +2 -2
  725. package/Source/Shaders/Builtin/Structs/materialInput.glsl +2 -0
  726. package/Source/Shaders/Builtin/Structs/materialInput.js +2 -0
  727. package/Source/Shaders/DepthPlaneVS.glsl +1 -1
  728. package/Source/Shaders/DepthPlaneVS.js +1 -1
  729. package/Source/Shaders/GlobeFS.glsl +10 -4
  730. package/Source/Shaders/GlobeFS.js +10 -4
  731. package/Source/Shaders/Materials/WaterMaskMaterial.glsl +15 -0
  732. package/Source/Shaders/Materials/WaterMaskMaterial.js +17 -0
  733. package/Source/Shaders/Model/AtmosphereStageFS.glsl +1 -1
  734. package/Source/Shaders/Model/AtmosphereStageFS.js +1 -1
  735. package/Source/Shaders/Model/ImageBasedLightingStageFS.glsl +40 -29
  736. package/Source/Shaders/Model/ImageBasedLightingStageFS.js +40 -29
  737. package/Source/Shaders/Model/LightingStageFS.glsl +2 -2
  738. package/Source/Shaders/Model/LightingStageFS.js +2 -2
  739. package/Source/Shaders/Model/ModelFS.glsl +26 -0
  740. package/Source/Shaders/Model/ModelFS.js +26 -0
  741. package/Source/Shaders/PostProcessStages/AcesTonemappingStage.glsl +4 -0
  742. package/Source/Shaders/PostProcessStages/AcesTonemappingStage.js +4 -0
  743. package/Source/Shaders/PostProcessStages/AmbientOcclusionGenerate.glsl +59 -59
  744. package/Source/Shaders/PostProcessStages/AmbientOcclusionGenerate.js +60 -60
  745. package/Source/Shaders/PostProcessStages/FilmicTonemapping.glsl +4 -0
  746. package/Source/Shaders/PostProcessStages/FilmicTonemapping.js +4 -0
  747. package/Source/Shaders/PostProcessStages/ModifiedReinhardTonemapping.glsl +4 -0
  748. package/Source/Shaders/PostProcessStages/ModifiedReinhardTonemapping.js +4 -0
  749. package/Source/Shaders/PostProcessStages/PbrNeutralTonemapping.glsl +25 -0
  750. package/Source/Shaders/PostProcessStages/PbrNeutralTonemapping.js +27 -0
  751. package/Source/Shaders/PostProcessStages/ReinhardTonemapping.glsl +4 -0
  752. package/Source/Shaders/PostProcessStages/ReinhardTonemapping.js +4 -0
  753. package/Source/Shaders/SkyAtmosphereFS.glsl +1 -1
  754. package/Source/Shaders/SkyAtmosphereFS.js +1 -1
  755. package/Source/Widget/CesiumWidget.js +10 -9
  756. package/Source/Workers/combineGeometry.js +3 -4
  757. package/Source/Workers/createCircleGeometry.js +2 -2
  758. package/Source/Workers/createCircleOutlineGeometry.js +2 -2
  759. package/Source/Workers/createCoplanarPolygonOutlineGeometry.js +1 -1
  760. package/Source/Workers/createCorridorOutlineGeometry.js +2 -2
  761. package/Source/Workers/createEllipsoidOutlineGeometry.js +1 -1
  762. package/Source/Workers/createGeometry.js +4 -5
  763. package/Source/Workers/createGroundPolylineGeometry.js +1 -1
  764. package/Source/Workers/createPolylineVolumeGeometry.js +2 -2
  765. package/Source/Workers/createPolylineVolumeOutlineGeometry.js +4 -4
  766. package/Source/Workers/createRectangleOutlineGeometry.js +1 -1
  767. package/Source/Workers/createSimplePolylineGeometry.js +2 -2
  768. package/Source/Workers/createTaskProcessorWorker.js +1 -1
  769. package/Source/Workers/createVectorTileClampedPolylines.js +30 -30
  770. package/Source/Workers/createVectorTileGeometries.js +18 -18
  771. package/Source/Workers/createVectorTilePoints.js +3 -3
  772. package/Source/Workers/createVectorTilePolygons.js +11 -11
  773. package/Source/Workers/createVectorTilePolylines.js +7 -7
  774. package/Source/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +29 -30
  775. package/Source/Workers/createVerticesFromQuantizedTerrainMesh.js +60 -60
  776. package/Source/Workers/decodeDraco.js +23 -23
  777. package/Source/Workers/decodeGoogleEarthEnterprisePacket.js +3 -3
  778. package/Source/Workers/decodeI3S.js +53 -53
  779. package/Source/Workers/transcodeKTX2.js +9 -9
  780. package/Source/Workers/transferTypedArrayTest.js +1 -1
  781. package/Source/Workers/upsampleQuantizedTerrainMesh.js +37 -36
  782. package/index.d.ts +620 -136
  783. package/index.js +221 -205
  784. package/package.json +3 -3
  785. package/Build/Workers/chunk-2GEAGYUY.js +0 -1477
  786. package/Build/Workers/chunk-3WUV74WM.js +0 -1800
  787. package/Build/Workers/chunk-4MSUJ4I7.js +0 -456
  788. package/Build/Workers/chunk-5KWHSZYL.js +0 -834
  789. package/Build/Workers/chunk-5O6JWQ4E.js +0 -398
  790. package/Build/Workers/chunk-6OFDHMHR.js +0 -1258
  791. package/Build/Workers/chunk-AA4GZKOT.js +0 -75
  792. package/Build/Workers/chunk-B75IEX2S.js +0 -390
  793. package/Build/Workers/chunk-BAVI3ZS2.js +0 -39
  794. package/Build/Workers/chunk-BBDZYSZB.js +0 -287
  795. package/Build/Workers/chunk-C45MU4GZ.js +0 -220
  796. package/Build/Workers/chunk-CF7P7K7E.js +0 -684
  797. package/Build/Workers/chunk-D4K27X2M.js +0 -305
  798. package/Build/Workers/chunk-DKVHRNFY.js +0 -100
  799. package/Build/Workers/chunk-ELI4BUOT.js +0 -963
  800. package/Build/Workers/chunk-FQPSOOPH.js +0 -258
  801. package/Build/Workers/chunk-GNHZH7HP.js +0 -37
  802. package/Build/Workers/chunk-GWT64LKY.js +0 -171
  803. package/Build/Workers/chunk-HGEEOMSC.js +0 -157
  804. package/Build/Workers/chunk-IUROUBPA.js +0 -300
  805. package/Build/Workers/chunk-JNLWLSTP.js +0 -476
  806. package/Build/Workers/chunk-JYQNWIQQ.js +0 -44
  807. package/Build/Workers/chunk-KUN2ZA5X.js +0 -138
  808. package/Build/Workers/chunk-LXQ5QAEJ.js +0 -196
  809. package/Build/Workers/chunk-MBZH7YZ7.js +0 -945
  810. package/Build/Workers/chunk-MKXWJTFQ.js +0 -781
  811. package/Build/Workers/chunk-MMV6TO3P.js +0 -101
  812. package/Build/Workers/chunk-MSKXMXJI.js +0 -500
  813. package/Build/Workers/chunk-OAPA2RTG.js +0 -239
  814. package/Build/Workers/chunk-OE4MCOC7.js +0 -421
  815. package/Build/Workers/chunk-OJF4RTJG.js +0 -634
  816. package/Build/Workers/chunk-OXSI7N4C.js +0 -768
  817. package/Build/Workers/chunk-PYHLO636.js +0 -2857
  818. package/Build/Workers/chunk-QD4KM3GO.js +0 -138
  819. package/Build/Workers/chunk-QMLTCCYG.js +0 -55
  820. package/Build/Workers/chunk-QYQIVZBU.js +0 -117
  821. package/Build/Workers/chunk-R3TKLC6E.js +0 -1075
  822. package/Build/Workers/chunk-R4ZEWO4I.js +0 -122
  823. package/Build/Workers/chunk-RCK55EDX.js +0 -691
  824. package/Build/Workers/chunk-RHBWXX7C.js +0 -629
  825. package/Build/Workers/chunk-SAPFXU5X.js +0 -102
  826. package/Build/Workers/chunk-TBBFDFCS.js +0 -368
  827. package/Build/Workers/chunk-TGY6H6N6.js +0 -163
  828. package/Build/Workers/chunk-UOEUCKKU.js +0 -59
  829. package/Build/Workers/chunk-VFBNELXB.js +0 -353
  830. package/Build/Workers/chunk-VYWUFRRR.js +0 -1052
  831. package/Build/Workers/chunk-WVSELU6O.js +0 -2716
  832. package/Build/Workers/chunk-X43SJLQL.js +0 -10364
  833. package/Build/Workers/chunk-XUOJCLOH.js +0 -511
  834. package/Build/Workers/chunk-YLYBLJ3Y.js +0 -73
  835. package/Build/Workers/chunk-ZEE2EIFD.js +0 -430
  836. package/Build/Workers/chunk-ZIKGV7EL.js +0 -58
  837. package/Source/Scene/OctahedralProjectedCubeMap.js +0 -444
  838. package/Source/Shaders/Builtin/Functions/sampleOctahedralProjection.glsl +0 -78
  839. package/Source/Shaders/Builtin/Functions/sampleOctahedralProjection.js +0 -80
  840. package/Source/Shaders/OctahedralProjectionAtlasFS.glsl +0 -89
  841. package/Source/Shaders/OctahedralProjectionAtlasFS.js +0 -91
  842. package/Source/Shaders/OctahedralProjectionFS.glsl +0 -14
  843. package/Source/Shaders/OctahedralProjectionFS.js +0 -16
  844. package/Source/Shaders/OctahedralProjectionVS.glsl +0 -10
  845. package/Source/Shaders/OctahedralProjectionVS.js +0 -12
@@ -15,6 +15,30 @@ import TextureMagnificationFilter from "./TextureMagnificationFilter.js";
15
15
  import TextureMinificationFilter from "./TextureMinificationFilter.js";
16
16
 
17
17
  /**
18
+ * @typedef {object} Texture.ConstructorOptions
19
+ *
20
+ * @property {Context} context
21
+ * @property {object} [source] The source for texel values to be loaded into the texture.
22
+ * @property {PixelFormat} [pixelFormat=PixelFormat.RGBA] The format of each pixel, i.e., the number of components it has and what they represent.
23
+ * @property {PixelDatatype} [pixelDatatype=PixelDatatype.UNSIGNED_BYTE] The data type of each pixel.
24
+ * @property {boolean} [flipY=true] If true, the source values will be read as if the y-axis is inverted (y=0 at the top).
25
+ * @property {boolean} [skipColorSpaceConversion=false] If true, color space conversions will be skipped when reading the texel values.
26
+ * @property {Sampler} [sampler] Information about how to sample the cubemap texture.
27
+ * @property {number} [width] The pixel width of the texture. If not supplied, must be available from the source.
28
+ * @property {number} [height] The pixel height of the texture. If not supplied, must be available from the source.
29
+ * @property {boolean} [preMultiplyAlpha] If true, the alpha channel will be multiplied into the other channels.
30
+ *
31
+ * @private
32
+ */
33
+
34
+ /**
35
+ * A wrapper for a {@link https://developer.mozilla.org/en-US/docs/Web/API/WebGLTexture|WebGLTexture}
36
+ * to abstract away the verbose GL calls associated with setting up a texture.
37
+ *
38
+ * @alias Texture
39
+ * @constructor
40
+ *
41
+ * @param {Texture.ConstructorOptions} options
18
42
  * @private
19
43
  */
20
44
  function Texture(options) {
@@ -24,29 +48,38 @@ function Texture(options) {
24
48
  Check.defined("options.context", options.context);
25
49
  //>>includeEnd('debug');
26
50
 
27
- const context = options.context;
28
- let width = options.width;
29
- let height = options.height;
30
- const source = options.source;
31
-
51
+ const {
52
+ context,
53
+ source,
54
+ pixelFormat = PixelFormat.RGBA,
55
+ pixelDatatype = PixelDatatype.UNSIGNED_BYTE,
56
+ flipY = true,
57
+ skipColorSpaceConversion = false,
58
+ sampler = new Sampler(),
59
+ } = options;
60
+
61
+ let { width, height } = options;
32
62
  if (defined(source)) {
63
+ // Make sure we are using the element's intrinsic width and height where available
33
64
  if (!defined(width)) {
34
- width = defaultValue(source.videoWidth, source.width);
65
+ width = source.videoWidth ?? source.naturalWidth ?? source.width;
35
66
  }
36
67
  if (!defined(height)) {
37
- height = defaultValue(source.videoHeight, source.height);
68
+ height = source.videoHeight ?? source.naturalHeight ?? source.height;
38
69
  }
39
70
  }
40
71
 
41
- const pixelFormat = defaultValue(options.pixelFormat, PixelFormat.RGBA);
42
- const pixelDatatype = defaultValue(
43
- options.pixelDatatype,
44
- PixelDatatype.UNSIGNED_BYTE
45
- );
72
+ // Use premultiplied alpha for opaque textures should perform better on Chrome:
73
+ // http://media.tojicode.com/webglCamp4/#20
74
+ const preMultiplyAlpha =
75
+ options.preMultiplyAlpha ||
76
+ pixelFormat === PixelFormat.RGB ||
77
+ pixelFormat === PixelFormat.LUMINANCE;
78
+
46
79
  const internalFormat = PixelFormat.toInternalFormat(
47
80
  pixelFormat,
48
81
  pixelDatatype,
49
- context
82
+ context,
50
83
  );
51
84
 
52
85
  const isCompressed = PixelFormat.isCompressedFormat(internalFormat);
@@ -54,7 +87,7 @@ function Texture(options) {
54
87
  //>>includeStart('debug', pragmas.debug);
55
88
  if (!defined(width) || !defined(height)) {
56
89
  throw new DeveloperError(
57
- "options requires a source field to create an initialized texture or width and height fields to create a blank texture."
90
+ "options requires a source field to create an initialized texture or width and height fields to create a blank texture.",
58
91
  );
59
92
  }
60
93
 
@@ -62,7 +95,7 @@ function Texture(options) {
62
95
 
63
96
  if (width > ContextLimits.maximumTextureSize) {
64
97
  throw new DeveloperError(
65
- `Width must be less than or equal to the maximum texture size (${ContextLimits.maximumTextureSize}). Check maximumTextureSize.`
98
+ `Width must be less than or equal to the maximum texture size (${ContextLimits.maximumTextureSize}). Check maximumTextureSize.`,
66
99
  );
67
100
  }
68
101
 
@@ -70,7 +103,7 @@ function Texture(options) {
70
103
 
71
104
  if (height > ContextLimits.maximumTextureSize) {
72
105
  throw new DeveloperError(
73
- `Height must be less than or equal to the maximum texture size (${ContextLimits.maximumTextureSize}). Check maximumTextureSize.`
106
+ `Height must be less than or equal to the maximum texture size (${ContextLimits.maximumTextureSize}). Check maximumTextureSize.`,
74
107
  );
75
108
  }
76
109
 
@@ -88,7 +121,7 @@ function Texture(options) {
88
121
  pixelDatatype !== PixelDatatype.UNSIGNED_INT
89
122
  ) {
90
123
  throw new DeveloperError(
91
- "When options.pixelFormat is DEPTH_COMPONENT, options.pixelDatatype must be UNSIGNED_SHORT or UNSIGNED_INT."
124
+ "When options.pixelFormat is DEPTH_COMPONENT, options.pixelDatatype must be UNSIGNED_SHORT or UNSIGNED_INT.",
92
125
  );
93
126
  }
94
127
 
@@ -97,13 +130,13 @@ function Texture(options) {
97
130
  pixelDatatype !== PixelDatatype.UNSIGNED_INT_24_8
98
131
  ) {
99
132
  throw new DeveloperError(
100
- "When options.pixelFormat is DEPTH_STENCIL, options.pixelDatatype must be UNSIGNED_INT_24_8."
133
+ "When options.pixelFormat is DEPTH_STENCIL, options.pixelDatatype must be UNSIGNED_INT_24_8.",
101
134
  );
102
135
  }
103
136
 
104
137
  if (pixelDatatype === PixelDatatype.FLOAT && !context.floatingPointTexture) {
105
138
  throw new DeveloperError(
106
- "When options.pixelDatatype is FLOAT, this WebGL implementation must support the OES_texture_float extension. Check context.floatingPointTexture."
139
+ "When options.pixelDatatype is FLOAT, this WebGL implementation must support the OES_texture_float extension. Check context.floatingPointTexture.",
107
140
  );
108
141
  }
109
142
 
@@ -112,20 +145,20 @@ function Texture(options) {
112
145
  !context.halfFloatingPointTexture
113
146
  ) {
114
147
  throw new DeveloperError(
115
- "When options.pixelDatatype is HALF_FLOAT, this WebGL implementation must support the OES_texture_half_float extension. Check context.halfFloatingPointTexture."
148
+ "When options.pixelDatatype is HALF_FLOAT, this WebGL implementation must support the OES_texture_half_float extension. Check context.halfFloatingPointTexture.",
116
149
  );
117
150
  }
118
151
 
119
152
  if (PixelFormat.isDepthFormat(pixelFormat)) {
120
153
  if (defined(source)) {
121
154
  throw new DeveloperError(
122
- "When options.pixelFormat is DEPTH_COMPONENT or DEPTH_STENCIL, source cannot be provided."
155
+ "When options.pixelFormat is DEPTH_COMPONENT or DEPTH_STENCIL, source cannot be provided.",
123
156
  );
124
157
  }
125
158
 
126
159
  if (!context.depthTexture) {
127
160
  throw new DeveloperError(
128
- "When options.pixelFormat is DEPTH_COMPONENT or DEPTH_STENCIL, this WebGL implementation must support WEBGL_depth_texture. Check context.depthTexture."
161
+ "When options.pixelFormat is DEPTH_COMPONENT or DEPTH_STENCIL, this WebGL implementation must support WEBGL_depth_texture. Check context.depthTexture.",
129
162
  );
130
163
  }
131
164
  }
@@ -133,33 +166,33 @@ function Texture(options) {
133
166
  if (isCompressed) {
134
167
  if (!defined(source) || !defined(source.arrayBufferView)) {
135
168
  throw new DeveloperError(
136
- "When options.pixelFormat is compressed, options.source.arrayBufferView must be defined."
169
+ "When options.pixelFormat is compressed, options.source.arrayBufferView must be defined.",
137
170
  );
138
171
  }
139
172
 
140
173
  if (PixelFormat.isDXTFormat(internalFormat) && !context.s3tc) {
141
174
  throw new DeveloperError(
142
- "When options.pixelFormat is S3TC compressed, this WebGL implementation must support the WEBGL_compressed_texture_s3tc extension. Check context.s3tc."
175
+ "When options.pixelFormat is S3TC compressed, this WebGL implementation must support the WEBGL_compressed_texture_s3tc extension. Check context.s3tc.",
143
176
  );
144
177
  } else if (PixelFormat.isPVRTCFormat(internalFormat) && !context.pvrtc) {
145
178
  throw new DeveloperError(
146
- "When options.pixelFormat is PVRTC compressed, this WebGL implementation must support the WEBGL_compressed_texture_pvrtc extension. Check context.pvrtc."
179
+ "When options.pixelFormat is PVRTC compressed, this WebGL implementation must support the WEBGL_compressed_texture_pvrtc extension. Check context.pvrtc.",
147
180
  );
148
181
  } else if (PixelFormat.isASTCFormat(internalFormat) && !context.astc) {
149
182
  throw new DeveloperError(
150
- "When options.pixelFormat is ASTC compressed, this WebGL implementation must support the WEBGL_compressed_texture_astc extension. Check context.astc."
183
+ "When options.pixelFormat is ASTC compressed, this WebGL implementation must support the WEBGL_compressed_texture_astc extension. Check context.astc.",
151
184
  );
152
185
  } else if (PixelFormat.isETC2Format(internalFormat) && !context.etc) {
153
186
  throw new DeveloperError(
154
- "When options.pixelFormat is ETC2 compressed, this WebGL implementation must support the WEBGL_compressed_texture_etc extension. Check context.etc."
187
+ "When options.pixelFormat is ETC2 compressed, this WebGL implementation must support the WEBGL_compressed_texture_etc extension. Check context.etc.",
155
188
  );
156
189
  } else if (PixelFormat.isETC1Format(internalFormat) && !context.etc1) {
157
190
  throw new DeveloperError(
158
- "When options.pixelFormat is ETC1 compressed, this WebGL implementation must support the WEBGL_compressed_texture_etc1 extension. Check context.etc1."
191
+ "When options.pixelFormat is ETC1 compressed, this WebGL implementation must support the WEBGL_compressed_texture_etc1 extension. Check context.etc1.",
159
192
  );
160
193
  } else if (PixelFormat.isBC7Format(internalFormat) && !context.bc7) {
161
194
  throw new DeveloperError(
162
- "When options.pixelFormat is BC7 compressed, this WebGL implementation must support the EXT_texture_compression_bptc extension. Check context.bc7."
195
+ "When options.pixelFormat is BC7 compressed, this WebGL implementation must support the EXT_texture_compression_bptc extension. Check context.bc7.",
163
196
  );
164
197
  }
165
198
 
@@ -167,235 +200,288 @@ function Texture(options) {
167
200
  PixelFormat.compressedTextureSizeInBytes(
168
201
  internalFormat,
169
202
  width,
170
- height
203
+ height,
171
204
  ) !== source.arrayBufferView.byteLength
172
205
  ) {
173
206
  throw new DeveloperError(
174
- "The byte length of the array buffer is invalid for the compressed texture with the given width and height."
207
+ "The byte length of the array buffer is invalid for the compressed texture with the given width and height.",
175
208
  );
176
209
  }
177
210
  }
178
211
  //>>includeEnd('debug');
179
212
 
180
- // Use premultiplied alpha for opaque textures should perform better on Chrome:
181
- // http://media.tojicode.com/webglCamp4/#20
182
- const preMultiplyAlpha =
183
- options.preMultiplyAlpha ||
184
- pixelFormat === PixelFormat.RGB ||
185
- pixelFormat === PixelFormat.LUMINANCE;
186
- const flipY = defaultValue(options.flipY, true);
187
- const skipColorSpaceConversion = defaultValue(
188
- options.skipColorSpaceConversion,
189
- false
190
- );
191
-
192
- let initialized = true;
193
-
194
213
  const gl = context._gl;
195
- const textureTarget = gl.TEXTURE_2D;
196
- const texture = gl.createTexture();
197
214
 
198
- gl.activeTexture(gl.TEXTURE0);
199
- gl.bindTexture(textureTarget, texture);
215
+ const sizeInBytes = isCompressed
216
+ ? PixelFormat.compressedTextureSizeInBytes(pixelFormat, width, height)
217
+ : PixelFormat.textureSizeInBytes(pixelFormat, pixelDatatype, width, height);
200
218
 
201
- let unpackAlignment = 4;
202
- if (defined(source) && defined(source.arrayBufferView) && !isCompressed) {
203
- unpackAlignment = PixelFormat.alignmentInBytes(
204
- pixelFormat,
205
- pixelDatatype,
206
- width
207
- );
208
- }
219
+ this._id = createGuid();
220
+ this._context = context;
221
+ this._textureFilterAnisotropic = context._textureFilterAnisotropic;
222
+ this._textureTarget = gl.TEXTURE_2D;
223
+ this._texture = gl.createTexture();
224
+ this._internalFormat = internalFormat;
225
+ this._pixelFormat = pixelFormat;
226
+ this._pixelDatatype = pixelDatatype;
227
+ this._width = width;
228
+ this._height = height;
229
+ this._dimensions = new Cartesian2(width, height);
230
+ this._hasMipmap = false;
231
+ this._sizeInBytes = sizeInBytes;
232
+ this._preMultiplyAlpha = preMultiplyAlpha;
233
+ this._flipY = flipY;
234
+ this._initialized = false;
235
+ this._sampler = undefined;
209
236
 
210
- gl.pixelStorei(gl.UNPACK_ALIGNMENT, unpackAlignment);
237
+ this._sampler = sampler;
238
+ setupSampler(this, sampler);
211
239
 
212
- if (skipColorSpaceConversion) {
213
- gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, gl.NONE);
214
- } else {
215
- gl.pixelStorei(
216
- gl.UNPACK_COLORSPACE_CONVERSION_WEBGL,
217
- gl.BROWSER_DEFAULT_WEBGL
218
- );
219
- }
240
+ gl.activeTexture(gl.TEXTURE0);
241
+ gl.bindTexture(this._textureTarget, this._texture);
220
242
 
221
243
  if (defined(source)) {
244
+ if (skipColorSpaceConversion) {
245
+ gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, gl.NONE);
246
+ } else {
247
+ gl.pixelStorei(
248
+ gl.UNPACK_COLORSPACE_CONVERSION_WEBGL,
249
+ gl.BROWSER_DEFAULT_WEBGL,
250
+ );
251
+ }
222
252
  if (defined(source.arrayBufferView)) {
223
- gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);
224
- gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
225
-
226
- // Source: typed array
227
- let arrayBufferView = source.arrayBufferView;
228
- let i, mipWidth, mipHeight;
253
+ const isCompressed = PixelFormat.isCompressedFormat(internalFormat);
229
254
  if (isCompressed) {
230
- gl.compressedTexImage2D(
231
- textureTarget,
232
- 0,
233
- internalFormat,
234
- width,
235
- height,
236
- 0,
237
- arrayBufferView
238
- );
239
- if (defined(source.mipLevels)) {
240
- mipWidth = width;
241
- mipHeight = height;
242
- for (i = 0; i < source.mipLevels.length; ++i) {
243
- mipWidth = Math.floor(mipWidth / 2) | 0;
244
- if (mipWidth < 1) {
245
- mipWidth = 1;
246
- }
247
- mipHeight = Math.floor(mipHeight / 2) | 0;
248
- if (mipHeight < 1) {
249
- mipHeight = 1;
250
- }
251
- gl.compressedTexImage2D(
252
- textureTarget,
253
- i + 1,
254
- internalFormat,
255
- mipWidth,
256
- mipHeight,
257
- 0,
258
- source.mipLevels[i]
259
- );
260
- }
261
- }
255
+ loadCompressedBufferSource(this, source);
262
256
  } else {
263
- if (flipY) {
264
- arrayBufferView = PixelFormat.flipY(
265
- arrayBufferView,
266
- pixelFormat,
267
- pixelDatatype,
268
- width,
269
- height
270
- );
271
- }
272
- gl.texImage2D(
273
- textureTarget,
274
- 0,
275
- internalFormat,
276
- width,
277
- height,
278
- 0,
279
- pixelFormat,
280
- PixelDatatype.toWebGLConstant(pixelDatatype, context),
281
- arrayBufferView
282
- );
283
-
284
- if (defined(source.mipLevels)) {
285
- mipWidth = width;
286
- mipHeight = height;
287
- for (i = 0; i < source.mipLevels.length; ++i) {
288
- mipWidth = Math.floor(mipWidth / 2) | 0;
289
- if (mipWidth < 1) {
290
- mipWidth = 1;
291
- }
292
- mipHeight = Math.floor(mipHeight / 2) | 0;
293
- if (mipHeight < 1) {
294
- mipHeight = 1;
295
- }
296
- gl.texImage2D(
297
- textureTarget,
298
- i + 1,
299
- internalFormat,
300
- mipWidth,
301
- mipHeight,
302
- 0,
303
- pixelFormat,
304
- PixelDatatype.toWebGLConstant(pixelDatatype, context),
305
- source.mipLevels[i]
306
- );
307
- }
308
- }
257
+ loadBufferSource(this, source);
309
258
  }
310
259
  } else if (defined(source.framebuffer)) {
311
- gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);
312
- gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
260
+ loadFramebufferSource(this, source);
261
+ } else {
262
+ loadImageSource(this, source);
263
+ }
264
+ this._initialized = true;
265
+ } else {
266
+ loadNull(this);
267
+ }
313
268
 
314
- // Source: framebuffer
315
- if (source.framebuffer !== context.defaultFramebuffer) {
316
- source.framebuffer._bind();
317
- }
269
+ gl.bindTexture(this._textureTarget, null);
270
+ }
271
+
272
+ /**
273
+ * Load compressed texel data from a buffer into a texture.
274
+ *
275
+ * @param {Texture} texture The texture to which texel values will be loaded.
276
+ * @param {object} source The source for texel values to be loaded into the texture.
277
+ *
278
+ * @private
279
+ */
280
+ function loadCompressedBufferSource(texture, source) {
281
+ const context = texture._context;
282
+ const gl = context._gl;
283
+ const textureTarget = texture._textureTarget;
284
+ const internalFormat = texture._internalFormat;
285
+
286
+ const { width, height } = texture;
287
+
288
+ gl.pixelStorei(gl.UNPACK_ALIGNMENT, 4);
289
+ gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);
290
+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
291
+
292
+ gl.compressedTexImage2D(
293
+ textureTarget,
294
+ 0,
295
+ internalFormat,
296
+ width,
297
+ height,
298
+ 0,
299
+ source.arrayBufferView,
300
+ );
318
301
 
319
- gl.copyTexImage2D(
302
+ if (defined(source.mipLevels)) {
303
+ let mipWidth = width;
304
+ let mipHeight = height;
305
+ for (let i = 0; i < source.mipLevels.length; ++i) {
306
+ mipWidth = nextMipSize(mipWidth);
307
+ mipHeight = nextMipSize(mipHeight);
308
+ gl.compressedTexImage2D(
320
309
  textureTarget,
321
- 0,
310
+ i + 1,
322
311
  internalFormat,
323
- source.xOffset,
324
- source.yOffset,
325
- width,
326
- height,
327
- 0
312
+ mipWidth,
313
+ mipHeight,
314
+ 0,
315
+ source.mipLevels[i],
328
316
  );
317
+ }
318
+ }
319
+ }
329
320
 
330
- if (source.framebuffer !== context.defaultFramebuffer) {
331
- source.framebuffer._unBind();
332
- }
333
- } else {
334
- // Only valid for DOM-Element uploads
335
- gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, preMultiplyAlpha);
336
- gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);
321
+ /**
322
+ * Load texel data from a buffer into a texture.
323
+ *
324
+ * @param {Texture} texture The texture to which texel values will be loaded.
325
+ * @param {object} source The source for texel values to be loaded into the texture.
326
+ *
327
+ * @private
328
+ */
329
+ function loadBufferSource(texture, source) {
330
+ const context = texture._context;
331
+ const gl = context._gl;
332
+ const textureTarget = texture._textureTarget;
333
+ const internalFormat = texture._internalFormat;
334
+
335
+ const { width, height, pixelFormat, pixelDatatype, flipY } = texture;
337
336
 
338
- // Source: ImageData, HTMLImageElement, HTMLCanvasElement, or HTMLVideoElement
337
+ const unpackAlignment = PixelFormat.alignmentInBytes(
338
+ pixelFormat,
339
+ pixelDatatype,
340
+ width,
341
+ );
342
+ gl.pixelStorei(gl.UNPACK_ALIGNMENT, unpackAlignment);
343
+ gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);
344
+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
345
+
346
+ let arrayBufferView = source.arrayBufferView;
347
+ if (flipY) {
348
+ arrayBufferView = PixelFormat.flipY(
349
+ arrayBufferView,
350
+ pixelFormat,
351
+ pixelDatatype,
352
+ width,
353
+ height,
354
+ );
355
+ }
356
+ gl.texImage2D(
357
+ textureTarget,
358
+ 0,
359
+ internalFormat,
360
+ width,
361
+ height,
362
+ 0,
363
+ pixelFormat,
364
+ PixelDatatype.toWebGLConstant(pixelDatatype, context),
365
+ arrayBufferView,
366
+ );
367
+
368
+ if (defined(source.mipLevels)) {
369
+ let mipWidth = width;
370
+ let mipHeight = height;
371
+ for (let i = 0; i < source.mipLevels.length; ++i) {
372
+ mipWidth = nextMipSize(mipWidth);
373
+ mipHeight = nextMipSize(mipHeight);
339
374
  gl.texImage2D(
340
375
  textureTarget,
341
- 0,
376
+ i + 1,
342
377
  internalFormat,
378
+ mipWidth,
379
+ mipHeight,
380
+ 0,
343
381
  pixelFormat,
344
382
  PixelDatatype.toWebGLConstant(pixelDatatype, context),
345
- source
383
+ source.mipLevels[i],
346
384
  );
347
385
  }
348
- } else {
349
- gl.texImage2D(
350
- textureTarget,
351
- 0,
352
- internalFormat,
353
- width,
354
- height,
355
- 0,
356
- pixelFormat,
357
- PixelDatatype.toWebGLConstant(pixelDatatype, context),
358
- null
359
- );
360
- initialized = false;
361
386
  }
362
- gl.bindTexture(textureTarget, null);
387
+ }
363
388
 
364
- let sizeInBytes;
365
- if (isCompressed) {
366
- sizeInBytes = PixelFormat.compressedTextureSizeInBytes(
367
- pixelFormat,
368
- width,
369
- height
370
- );
371
- } else {
372
- sizeInBytes = PixelFormat.textureSizeInBytes(
373
- pixelFormat,
374
- pixelDatatype,
375
- width,
376
- height
377
- );
389
+ /**
390
+ * Load texel data from a framebuffer into a texture.
391
+ *
392
+ * @param {Texture} texture The texture to which texel values will be loaded.
393
+ * @param {object} source The source for texel values to be loaded into the texture.
394
+ *
395
+ * @private
396
+ */
397
+ function loadFramebufferSource(texture, source) {
398
+ const context = texture._context;
399
+ const gl = context._gl;
400
+
401
+ gl.pixelStorei(gl.UNPACK_ALIGNMENT, 4);
402
+ gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);
403
+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
404
+
405
+ if (source.framebuffer !== context.defaultFramebuffer) {
406
+ source.framebuffer._bind();
378
407
  }
379
408
 
380
- this._id = createGuid();
381
- this._context = context;
382
- this._textureFilterAnisotropic = context._textureFilterAnisotropic;
383
- this._textureTarget = textureTarget;
384
- this._texture = texture;
385
- this._internalFormat = internalFormat;
386
- this._pixelFormat = pixelFormat;
387
- this._pixelDatatype = pixelDatatype;
388
- this._width = width;
389
- this._height = height;
390
- this._dimensions = new Cartesian2(width, height);
391
- this._hasMipmap = false;
392
- this._sizeInBytes = sizeInBytes;
393
- this._preMultiplyAlpha = preMultiplyAlpha;
394
- this._flipY = flipY;
395
- this._initialized = initialized;
396
- this._sampler = undefined;
409
+ gl.copyTexImage2D(
410
+ texture._textureTarget,
411
+ 0,
412
+ texture._internalFormat,
413
+ source.xOffset,
414
+ source.yOffset,
415
+ texture.width,
416
+ texture.height,
417
+ 0,
418
+ );
419
+
420
+ if (source.framebuffer !== context.defaultFramebuffer) {
421
+ source.framebuffer._unBind();
422
+ }
423
+ }
424
+
425
+ /**
426
+ * Load texel data from an Image into a texture.
427
+ *
428
+ * @param {Texture} texture The texture to which texel values will be loaded.
429
+ * @param {ImageData|HTMLImageElement|HTMLCanvasElement|HTMLVideoElement} source The source for texel values to be loaded into the texture.
430
+ *
431
+ * @private
432
+ */
433
+ function loadImageSource(texture, source) {
434
+ const context = texture._context;
435
+ const gl = context._gl;
436
+
437
+ gl.pixelStorei(gl.UNPACK_ALIGNMENT, 4);
438
+ gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.preMultiplyAlpha);
439
+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, texture.flipY);
440
+
441
+ gl.texImage2D(
442
+ texture._textureTarget,
443
+ 0,
444
+ texture._internalFormat,
445
+ texture.pixelFormat,
446
+ PixelDatatype.toWebGLConstant(texture.pixelDatatype, context),
447
+ source,
448
+ );
449
+ }
450
+
451
+ /**
452
+ * Compute a dimension of the image for the next mip level.
453
+ *
454
+ * @param {number} currentSize The size of the current mip level.
455
+ * @returns {number} The size of the next mip level.
456
+ *
457
+ * @private
458
+ */
459
+ function nextMipSize(currentSize) {
460
+ const nextSize = Math.floor(currentSize / 2) | 0;
461
+ return Math.max(nextSize, 1);
462
+ }
463
+
464
+ /**
465
+ * Allocate a texture in GPU memory, without providing any image data.
466
+ *
467
+ * @param {Texture} texture The texture to be initialized with null values.
468
+ *
469
+ * @private
470
+ */
471
+ function loadNull(texture) {
472
+ const context = texture._context;
397
473
 
398
- this.sampler = defined(options.sampler) ? options.sampler : new Sampler();
474
+ context._gl.texImage2D(
475
+ texture._textureTarget,
476
+ 0,
477
+ texture._internalFormat,
478
+ texture._width,
479
+ texture._height,
480
+ 0,
481
+ texture._pixelFormat,
482
+ PixelDatatype.toWebGLConstant(texture._pixelDatatype, context),
483
+ null,
484
+ );
399
485
  }
400
486
 
401
487
  /**
@@ -449,13 +535,14 @@ Texture.fromFramebuffer = function (options) {
449
535
 
450
536
  const context = options.context;
451
537
  const gl = context._gl;
452
-
453
- const pixelFormat = defaultValue(options.pixelFormat, PixelFormat.RGB);
454
- const framebufferXOffset = defaultValue(options.framebufferXOffset, 0);
455
- const framebufferYOffset = defaultValue(options.framebufferYOffset, 0);
456
- const width = defaultValue(options.width, gl.drawingBufferWidth);
457
- const height = defaultValue(options.height, gl.drawingBufferHeight);
458
- const framebuffer = options.framebuffer;
538
+ const {
539
+ pixelFormat = PixelFormat.RGB,
540
+ framebufferXOffset = 0,
541
+ framebufferYOffset = 0,
542
+ width = gl.drawingBufferWidth,
543
+ height = gl.drawingBufferHeight,
544
+ framebuffer,
545
+ } = options;
459
546
 
460
547
  //>>includeStart('debug', pragmas.debug);
461
548
  if (!PixelFormat.validate(pixelFormat)) {
@@ -466,28 +553,28 @@ Texture.fromFramebuffer = function (options) {
466
553
  PixelFormat.isCompressedFormat(pixelFormat)
467
554
  ) {
468
555
  throw new DeveloperError(
469
- "pixelFormat cannot be DEPTH_COMPONENT, DEPTH_STENCIL or a compressed format."
556
+ "pixelFormat cannot be DEPTH_COMPONENT, DEPTH_STENCIL or a compressed format.",
470
557
  );
471
558
  }
472
- Check.defined("options.context", options.context);
559
+ Check.defined("options.context", context);
473
560
  Check.typeOf.number.greaterThanOrEquals(
474
561
  "framebufferXOffset",
475
562
  framebufferXOffset,
476
- 0
563
+ 0,
477
564
  );
478
565
  Check.typeOf.number.greaterThanOrEquals(
479
566
  "framebufferYOffset",
480
567
  framebufferYOffset,
481
- 0
568
+ 0,
482
569
  );
483
570
  if (framebufferXOffset + width > gl.drawingBufferWidth) {
484
571
  throw new DeveloperError(
485
- "framebufferXOffset + width must be less than or equal to drawingBufferWidth"
572
+ "framebufferXOffset + width must be less than or equal to drawingBufferWidth",
486
573
  );
487
574
  }
488
575
  if (framebufferYOffset + height > gl.drawingBufferHeight) {
489
576
  throw new DeveloperError(
490
- "framebufferYOffset + height must be less than or equal to drawingBufferHeight."
577
+ "framebufferYOffset + height must be less than or equal to drawingBufferHeight.",
491
578
  );
492
579
  }
493
580
  //>>includeEnd('debug');
@@ -538,60 +625,7 @@ Object.defineProperties(Texture.prototype, {
538
625
  return this._sampler;
539
626
  },
540
627
  set: function (sampler) {
541
- let minificationFilter = sampler.minificationFilter;
542
- let magnificationFilter = sampler.magnificationFilter;
543
- const context = this._context;
544
- const pixelFormat = this._pixelFormat;
545
- const pixelDatatype = this._pixelDatatype;
546
-
547
- const mipmap =
548
- minificationFilter ===
549
- TextureMinificationFilter.NEAREST_MIPMAP_NEAREST ||
550
- minificationFilter ===
551
- TextureMinificationFilter.NEAREST_MIPMAP_LINEAR ||
552
- minificationFilter ===
553
- TextureMinificationFilter.LINEAR_MIPMAP_NEAREST ||
554
- minificationFilter === TextureMinificationFilter.LINEAR_MIPMAP_LINEAR;
555
-
556
- // float textures only support nearest filtering unless the linear extensions are supported, so override the sampler's settings
557
- if (
558
- (pixelDatatype === PixelDatatype.FLOAT &&
559
- !context.textureFloatLinear) ||
560
- (pixelDatatype === PixelDatatype.HALF_FLOAT &&
561
- !context.textureHalfFloatLinear)
562
- ) {
563
- minificationFilter = mipmap
564
- ? TextureMinificationFilter.NEAREST_MIPMAP_NEAREST
565
- : TextureMinificationFilter.NEAREST;
566
- magnificationFilter = TextureMagnificationFilter.NEAREST;
567
- }
568
-
569
- // WebGL 2 depth texture only support nearest filtering. See section 3.8.13 OpenGL ES 3 spec
570
- if (context.webgl2) {
571
- if (PixelFormat.isDepthFormat(pixelFormat)) {
572
- minificationFilter = TextureMinificationFilter.NEAREST;
573
- magnificationFilter = TextureMagnificationFilter.NEAREST;
574
- }
575
- }
576
-
577
- const gl = context._gl;
578
- const target = this._textureTarget;
579
-
580
- gl.activeTexture(gl.TEXTURE0);
581
- gl.bindTexture(target, this._texture);
582
- gl.texParameteri(target, gl.TEXTURE_MIN_FILTER, minificationFilter);
583
- gl.texParameteri(target, gl.TEXTURE_MAG_FILTER, magnificationFilter);
584
- gl.texParameteri(target, gl.TEXTURE_WRAP_S, sampler.wrapS);
585
- gl.texParameteri(target, gl.TEXTURE_WRAP_T, sampler.wrapT);
586
- if (defined(this._textureFilterAnisotropic)) {
587
- gl.texParameteri(
588
- target,
589
- this._textureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT,
590
- sampler.maximumAnisotropy
591
- );
592
- }
593
- gl.bindTexture(target, null);
594
-
628
+ setupSampler(this, sampler);
595
629
  this._sampler = sampler;
596
630
  },
597
631
  },
@@ -645,6 +679,66 @@ Object.defineProperties(Texture.prototype, {
645
679
  },
646
680
  });
647
681
 
682
+ /**
683
+ * Set up a sampler for use with a texture
684
+ * @param {Texture} texture The texture to be sampled by this sampler
685
+ * @param {Sampler} sampler Information about how to sample the texture
686
+ * @private
687
+ */
688
+ function setupSampler(texture, sampler) {
689
+ let { minificationFilter, magnificationFilter } = sampler;
690
+
691
+ const mipmap = [
692
+ TextureMinificationFilter.NEAREST_MIPMAP_NEAREST,
693
+ TextureMinificationFilter.NEAREST_MIPMAP_LINEAR,
694
+ TextureMinificationFilter.LINEAR_MIPMAP_NEAREST,
695
+ TextureMinificationFilter.LINEAR_MIPMAP_LINEAR,
696
+ ].includes(minificationFilter);
697
+
698
+ const context = texture._context;
699
+ const pixelFormat = texture._pixelFormat;
700
+ const pixelDatatype = texture._pixelDatatype;
701
+
702
+ // float textures only support nearest filtering unless the linear extensions are supported
703
+ if (
704
+ (pixelDatatype === PixelDatatype.FLOAT && !context.textureFloatLinear) ||
705
+ (pixelDatatype === PixelDatatype.HALF_FLOAT &&
706
+ !context.textureHalfFloatLinear)
707
+ ) {
708
+ // override the sampler's settings
709
+ minificationFilter = mipmap
710
+ ? TextureMinificationFilter.NEAREST_MIPMAP_NEAREST
711
+ : TextureMinificationFilter.NEAREST;
712
+ magnificationFilter = TextureMagnificationFilter.NEAREST;
713
+ }
714
+
715
+ // WebGL 2 depth texture only support nearest filtering. See section 3.8.13 OpenGL ES 3 spec
716
+ if (context.webgl2) {
717
+ if (PixelFormat.isDepthFormat(pixelFormat)) {
718
+ minificationFilter = TextureMinificationFilter.NEAREST;
719
+ magnificationFilter = TextureMagnificationFilter.NEAREST;
720
+ }
721
+ }
722
+
723
+ const gl = context._gl;
724
+ const target = texture._textureTarget;
725
+
726
+ gl.activeTexture(gl.TEXTURE0);
727
+ gl.bindTexture(target, texture._texture);
728
+ gl.texParameteri(target, gl.TEXTURE_MIN_FILTER, minificationFilter);
729
+ gl.texParameteri(target, gl.TEXTURE_MAG_FILTER, magnificationFilter);
730
+ gl.texParameteri(target, gl.TEXTURE_WRAP_S, sampler.wrapS);
731
+ gl.texParameteri(target, gl.TEXTURE_WRAP_T, sampler.wrapT);
732
+ if (defined(texture._textureFilterAnisotropic)) {
733
+ gl.texParameteri(
734
+ target,
735
+ texture._textureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT,
736
+ sampler.maximumAnisotropy,
737
+ );
738
+ }
739
+ gl.bindTexture(target, null);
740
+ }
741
+
648
742
  /**
649
743
  * Copy new image data into this texture, from a source {@link ImageData}, {@link HTMLImageElement}, {@link HTMLCanvasElement}, or {@link HTMLVideoElement}.
650
744
  * or an object with width, height, and arrayBufferView properties.
@@ -677,37 +771,39 @@ Texture.prototype.copyFrom = function (options) {
677
771
  Check.defined("options", options);
678
772
  //>>includeEnd('debug');
679
773
 
680
- const xOffset = defaultValue(options.xOffset, 0);
681
- const yOffset = defaultValue(options.yOffset, 0);
774
+ const {
775
+ xOffset = 0,
776
+ yOffset = 0,
777
+ source,
778
+ skipColorSpaceConversion = false,
779
+ } = options;
682
780
 
683
781
  //>>includeStart('debug', pragmas.debug);
684
- Check.defined("options.source", options.source);
782
+ Check.defined("options.source", source);
685
783
  if (PixelFormat.isDepthFormat(this._pixelFormat)) {
686
784
  throw new DeveloperError(
687
- "Cannot call copyFrom when the texture pixel format is DEPTH_COMPONENT or DEPTH_STENCIL."
785
+ "Cannot call copyFrom when the texture pixel format is DEPTH_COMPONENT or DEPTH_STENCIL.",
688
786
  );
689
787
  }
690
788
  if (PixelFormat.isCompressedFormat(this._pixelFormat)) {
691
789
  throw new DeveloperError(
692
- "Cannot call copyFrom with a compressed texture pixel format."
790
+ "Cannot call copyFrom with a compressed texture pixel format.",
693
791
  );
694
792
  }
695
793
  Check.typeOf.number.greaterThanOrEquals("xOffset", xOffset, 0);
696
794
  Check.typeOf.number.greaterThanOrEquals("yOffset", yOffset, 0);
697
795
  Check.typeOf.number.lessThanOrEquals(
698
796
  "xOffset + options.source.width",
699
- xOffset + options.source.width,
700
- this._width
797
+ xOffset + source.width,
798
+ this._width,
701
799
  );
702
800
  Check.typeOf.number.lessThanOrEquals(
703
801
  "yOffset + options.source.height",
704
- yOffset + options.source.height,
705
- this._height
802
+ yOffset + source.height,
803
+ this._height,
706
804
  );
707
805
  //>>includeEnd('debug');
708
806
 
709
- const source = options.source;
710
-
711
807
  const context = this._context;
712
808
  const gl = context._gl;
713
809
  const target = this._textureTarget;
@@ -715,9 +811,17 @@ Texture.prototype.copyFrom = function (options) {
715
811
  gl.activeTexture(gl.TEXTURE0);
716
812
  gl.bindTexture(target, this._texture);
717
813
 
718
- const width = source.width;
719
- const height = source.height;
720
- let arrayBufferView = source.arrayBufferView;
814
+ let { width, height } = source;
815
+ const arrayBufferView = source.arrayBufferView;
816
+
817
+ // Make sure we are using the element's intrinsic width and height where available
818
+ if (defined(source.videoWidth) && defined(source.videoHeight)) {
819
+ width = source.videoWidth;
820
+ height = source.videoHeight;
821
+ } else if (defined(source.naturalWidth) && defined(source.naturalHeight)) {
822
+ width = source.naturalWidth;
823
+ height = source.naturalHeight;
824
+ }
721
825
 
722
826
  const textureWidth = this._width;
723
827
  const textureHeight = this._height;
@@ -727,20 +831,15 @@ Texture.prototype.copyFrom = function (options) {
727
831
 
728
832
  const preMultiplyAlpha = this._preMultiplyAlpha;
729
833
  const flipY = this._flipY;
730
- const skipColorSpaceConversion = defaultValue(
731
- options.skipColorSpaceConversion,
732
- false
733
- );
734
834
 
735
835
  let unpackAlignment = 4;
736
836
  if (defined(arrayBufferView)) {
737
837
  unpackAlignment = PixelFormat.alignmentInBytes(
738
838
  pixelFormat,
739
839
  pixelDatatype,
740
- width
840
+ width,
741
841
  );
742
842
  }
743
-
744
843
  gl.pixelStorei(gl.UNPACK_ALIGNMENT, unpackAlignment);
745
844
 
746
845
  if (skipColorSpaceConversion) {
@@ -748,12 +847,13 @@ Texture.prototype.copyFrom = function (options) {
748
847
  } else {
749
848
  gl.pixelStorei(
750
849
  gl.UNPACK_COLORSPACE_CONVERSION_WEBGL,
751
- gl.BROWSER_DEFAULT_WEBGL
850
+ gl.BROWSER_DEFAULT_WEBGL,
752
851
  );
753
852
  }
754
853
 
755
854
  let uploaded = false;
756
855
  if (!this._initialized) {
856
+ let pixels;
757
857
  if (
758
858
  xOffset === 0 &&
759
859
  yOffset === 0 &&
@@ -764,108 +864,83 @@ Texture.prototype.copyFrom = function (options) {
764
864
  if (defined(arrayBufferView)) {
765
865
  gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);
766
866
  gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
767
-
768
867
  if (flipY) {
769
- arrayBufferView = PixelFormat.flipY(
868
+ pixels = PixelFormat.flipY(
770
869
  arrayBufferView,
771
870
  pixelFormat,
772
871
  pixelDatatype,
773
872
  textureWidth,
774
- textureHeight
873
+ textureHeight,
775
874
  );
875
+ } else {
876
+ pixels = arrayBufferView;
776
877
  }
777
- gl.texImage2D(
778
- target,
779
- 0,
780
- internalFormat,
781
- textureWidth,
782
- textureHeight,
783
- 0,
784
- pixelFormat,
785
- PixelDatatype.toWebGLConstant(pixelDatatype, context),
786
- arrayBufferView
787
- );
788
878
  } else {
789
879
  // Only valid for DOM-Element uploads
790
880
  gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, preMultiplyAlpha);
791
881
  gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);
792
-
793
- gl.texImage2D(
794
- target,
795
- 0,
796
- internalFormat,
797
- pixelFormat,
798
- PixelDatatype.toWebGLConstant(pixelDatatype, context),
799
- source
800
- );
882
+ pixels = source;
801
883
  }
802
884
  uploaded = true;
803
885
  } else {
804
886
  gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);
805
887
  gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
806
-
807
888
  // initialize the entire texture to zero
808
- const bufferView = PixelFormat.createTypedArray(
889
+ pixels = PixelFormat.createTypedArray(
809
890
  pixelFormat,
810
891
  pixelDatatype,
811
892
  textureWidth,
812
- textureHeight
813
- );
814
- gl.texImage2D(
815
- target,
816
- 0,
817
- internalFormat,
818
- textureWidth,
819
893
  textureHeight,
820
- 0,
821
- pixelFormat,
822
- PixelDatatype.toWebGLConstant(pixelDatatype, context),
823
- bufferView
824
894
  );
825
895
  }
896
+ gl.texImage2D(
897
+ target,
898
+ 0,
899
+ internalFormat,
900
+ textureWidth,
901
+ textureHeight,
902
+ 0,
903
+ pixelFormat,
904
+ PixelDatatype.toWebGLConstant(pixelDatatype, context),
905
+ pixels,
906
+ );
826
907
  this._initialized = true;
827
908
  }
828
909
 
829
910
  if (!uploaded) {
911
+ let pixels;
830
912
  if (defined(arrayBufferView)) {
831
913
  gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);
832
914
  gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
833
915
 
834
916
  if (flipY) {
835
- arrayBufferView = PixelFormat.flipY(
917
+ pixels = PixelFormat.flipY(
836
918
  arrayBufferView,
837
919
  pixelFormat,
838
920
  pixelDatatype,
839
921
  width,
840
- height
922
+ height,
841
923
  );
924
+ } else {
925
+ pixels = arrayBufferView;
842
926
  }
843
- gl.texSubImage2D(
844
- target,
845
- 0,
846
- xOffset,
847
- yOffset,
848
- width,
849
- height,
850
- pixelFormat,
851
- PixelDatatype.toWebGLConstant(pixelDatatype, context),
852
- arrayBufferView
853
- );
854
927
  } else {
855
928
  // Only valid for DOM-Element uploads
856
929
  gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, preMultiplyAlpha);
857
930
  gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);
858
-
859
- gl.texSubImage2D(
860
- target,
861
- 0,
862
- xOffset,
863
- yOffset,
864
- pixelFormat,
865
- PixelDatatype.toWebGLConstant(pixelDatatype, context),
866
- source
867
- );
931
+ pixels = source;
868
932
  }
933
+ gl.texSubImage2D(
934
+ target,
935
+ 0,
936
+ xOffset,
937
+ yOffset,
938
+ width,
939
+ height,
940
+ pixelFormat,
941
+ PixelDatatype.toWebGLConstant(pixelDatatype, context),
942
+ pixels,
943
+ );
869
944
  }
870
945
 
871
946
  gl.bindTexture(target, null);
@@ -897,7 +972,7 @@ Texture.prototype.copyFromFramebuffer = function (
897
972
  framebufferXOffset,
898
973
  framebufferYOffset,
899
974
  width,
900
- height
975
+ height,
901
976
  ) {
902
977
  xOffset = defaultValue(xOffset, 0);
903
978
  yOffset = defaultValue(yOffset, 0);
@@ -909,22 +984,22 @@ Texture.prototype.copyFromFramebuffer = function (
909
984
  //>>includeStart('debug', pragmas.debug);
910
985
  if (PixelFormat.isDepthFormat(this._pixelFormat)) {
911
986
  throw new DeveloperError(
912
- "Cannot call copyFromFramebuffer when the texture pixel format is DEPTH_COMPONENT or DEPTH_STENCIL."
987
+ "Cannot call copyFromFramebuffer when the texture pixel format is DEPTH_COMPONENT or DEPTH_STENCIL.",
913
988
  );
914
989
  }
915
990
  if (this._pixelDatatype === PixelDatatype.FLOAT) {
916
991
  throw new DeveloperError(
917
- "Cannot call copyFromFramebuffer when the texture pixel data type is FLOAT."
992
+ "Cannot call copyFromFramebuffer when the texture pixel data type is FLOAT.",
918
993
  );
919
994
  }
920
995
  if (this._pixelDatatype === PixelDatatype.HALF_FLOAT) {
921
996
  throw new DeveloperError(
922
- "Cannot call copyFromFramebuffer when the texture pixel data type is HALF_FLOAT."
997
+ "Cannot call copyFromFramebuffer when the texture pixel data type is HALF_FLOAT.",
923
998
  );
924
999
  }
925
1000
  if (PixelFormat.isCompressedFormat(this._pixelFormat)) {
926
1001
  throw new DeveloperError(
927
- "Cannot call copyFrom with a compressed texture pixel format."
1002
+ "Cannot call copyFrom with a compressed texture pixel format.",
928
1003
  );
929
1004
  }
930
1005
 
@@ -933,22 +1008,22 @@ Texture.prototype.copyFromFramebuffer = function (
933
1008
  Check.typeOf.number.greaterThanOrEquals(
934
1009
  "framebufferXOffset",
935
1010
  framebufferXOffset,
936
- 0
1011
+ 0,
937
1012
  );
938
1013
  Check.typeOf.number.greaterThanOrEquals(
939
1014
  "framebufferYOffset",
940
1015
  framebufferYOffset,
941
- 0
1016
+ 0,
942
1017
  );
943
1018
  Check.typeOf.number.lessThanOrEquals(
944
1019
  "xOffset + width",
945
1020
  xOffset + width,
946
- this._width
1021
+ this._width,
947
1022
  );
948
1023
  Check.typeOf.number.lessThanOrEquals(
949
1024
  "yOffset + height",
950
1025
  yOffset + height,
951
- this._height
1026
+ this._height,
952
1027
  );
953
1028
  //>>includeEnd('debug');
954
1029
 
@@ -965,7 +1040,7 @@ Texture.prototype.copyFromFramebuffer = function (
965
1040
  framebufferXOffset,
966
1041
  framebufferYOffset,
967
1042
  width,
968
- height
1043
+ height,
969
1044
  );
970
1045
  gl.bindTexture(target, null);
971
1046
  this._initialized = true;
@@ -987,23 +1062,23 @@ Texture.prototype.generateMipmap = function (hint) {
987
1062
  //>>includeStart('debug', pragmas.debug);
988
1063
  if (PixelFormat.isDepthFormat(this._pixelFormat)) {
989
1064
  throw new DeveloperError(
990
- "Cannot call generateMipmap when the texture pixel format is DEPTH_COMPONENT or DEPTH_STENCIL."
1065
+ "Cannot call generateMipmap when the texture pixel format is DEPTH_COMPONENT or DEPTH_STENCIL.",
991
1066
  );
992
1067
  }
993
1068
  if (PixelFormat.isCompressedFormat(this._pixelFormat)) {
994
1069
  throw new DeveloperError(
995
- "Cannot call generateMipmap with a compressed pixel format."
1070
+ "Cannot call generateMipmap with a compressed pixel format.",
996
1071
  );
997
1072
  }
998
1073
  if (!this._context.webgl2) {
999
1074
  if (this._width > 1 && !CesiumMath.isPowerOfTwo(this._width)) {
1000
1075
  throw new DeveloperError(
1001
- "width must be a power of two to call generateMipmap() in a WebGL1 context."
1076
+ "width must be a power of two to call generateMipmap() in a WebGL1 context.",
1002
1077
  );
1003
1078
  }
1004
1079
  if (this._height > 1 && !CesiumMath.isPowerOfTwo(this._height)) {
1005
1080
  throw new DeveloperError(
1006
- "height must be a power of two to call generateMipmap() in a WebGL1 context."
1081
+ "height must be a power of two to call generateMipmap() in a WebGL1 context.",
1007
1082
  );
1008
1083
  }
1009
1084
  }