@cesium/engine 10.1.0 → 11.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (261) hide show
  1. package/Build/Workers/{chunk-N4QEHO3U.js → chunk-2EDC3QGH.js} +1 -1
  2. package/Build/Workers/{chunk-NVOABL76.js → chunk-2MKRG7L7.js} +5 -5
  3. package/Build/Workers/{chunk-X23FRWHJ.js → chunk-2RZYNSMR.js} +6 -6
  4. package/Build/Workers/{chunk-TO2PVHKI.js → chunk-4NBRIKB3.js} +2 -2
  5. package/Build/Workers/{chunk-5BLJ5ZM6.js → chunk-4TK5YR6Q.js} +5 -5
  6. package/Build/Workers/{chunk-TF776XCO.js → chunk-54VC7SCM.js} +7 -7
  7. package/Build/Workers/{chunk-2GEAGYUY.js → chunk-5IY5BXCT.js} +13 -13
  8. package/Build/Workers/{chunk-OXALEQPI.js → chunk-6FFGOENI.js} +10 -7
  9. package/Build/Workers/{chunk-65MZOUNU.js → chunk-6PJIHPQB.js} +13 -13
  10. package/Build/Workers/{chunk-FOZWUH4T.js → chunk-6ZREIBKS.js} +7 -7
  11. package/Build/Workers/{chunk-BY3E4ONI.js → chunk-AI3O7UN2.js} +6 -6
  12. package/Build/Workers/{chunk-XQI7XZHX.js → chunk-AS7P4BHI.js} +6 -6
  13. package/Build/Workers/{chunk-PNFHVBSF.js → chunk-AUM45VEG.js} +16 -15
  14. package/Build/Workers/{chunk-VRZ46QZ5.js → chunk-BBO6BGLC.js} +13 -13
  15. package/Build/Workers/{chunk-POSRARY7.js → chunk-BH5ZEN4I.js} +10 -10
  16. package/Build/Workers/{chunk-A5CODJ4M.js → chunk-BJ3WF5RW.js} +6 -6
  17. package/Build/Workers/{chunk-Q55ECN3Y.js → chunk-BUOFSNFW.js} +1 -1
  18. package/Build/Workers/{chunk-QX5XS4LC.js → chunk-BZXF3GNX.js} +2 -2
  19. package/Build/Workers/{chunk-T6LPN7RI.js → chunk-DJXXI7UF.js} +5 -5
  20. package/Build/Workers/{chunk-C3Z23UUJ.js → chunk-DVAIU7A4.js} +17 -17
  21. package/Build/Workers/{chunk-X2ZQ7RJR.js → chunk-FJT3ERV7.js} +9 -9
  22. package/Build/Workers/{chunk-UCIPJSZX.js → chunk-GOHDOWU5.js} +14 -14
  23. package/Build/Workers/{chunk-R4OIEIPE.js → chunk-HA6TZ3XT.js} +4 -4
  24. package/Build/Workers/{chunk-ACRTCBN5.js → chunk-HBZSCVZC.js} +11 -11
  25. package/Build/Workers/{chunk-BGE4QVG7.js → chunk-HC7RYWPZ.js} +12 -12
  26. package/Build/Workers/{chunk-VE7BFUIX.js → chunk-HFMJM3SX.js} +1 -1
  27. package/Build/Workers/{chunk-OOK53QUQ.js → chunk-HFPMX5L2.js} +1 -1
  28. package/Build/Workers/{chunk-6D66DPRV.js → chunk-HO2NTC7I.js} +6 -6
  29. package/Build/Workers/{chunk-F3NDOSTZ.js → chunk-HZPMWR4H.js} +7 -7
  30. package/Build/Workers/{chunk-I2RC4XVN.js → chunk-IBG5FVXC.js} +4 -4
  31. package/Build/Workers/{chunk-FEVVHITK.js → chunk-IXLNNST6.js} +4 -4
  32. package/Build/Workers/{chunk-4YSNMHZ4.js → chunk-JYUCC5NV.js} +6 -6
  33. package/Build/Workers/{chunk-FDCLACT5.js → chunk-KFW4UNQH.js} +10 -10
  34. package/Build/Workers/{chunk-R6B7UCQB.js → chunk-KKAEXHDY.js} +2 -2
  35. package/Build/Workers/{chunk-D2U4RI64.js → chunk-L6FARMF6.js} +7 -7
  36. package/Build/Workers/{chunk-OOMCT7OL.js → chunk-N3BIL6WA.js} +13 -13
  37. package/Build/Workers/{chunk-XZZNKIEV.js → chunk-O5SSW3B3.js} +6 -6
  38. package/Build/Workers/{chunk-S3PI2KFM.js → chunk-OC4MYPVW.js} +2 -2
  39. package/Build/Workers/{chunk-XLTOBCDI.js → chunk-OOA6GXKD.js} +7 -7
  40. package/Build/Workers/{chunk-GPJR7MPQ.js → chunk-OSCHEWSG.js} +7 -7
  41. package/Build/Workers/{chunk-RZLZWKFN.js → chunk-QGT2GMOK.js} +4 -4
  42. package/Build/Workers/{chunk-OWGTMVDB.js → chunk-RFQYEYAL.js} +17 -17
  43. package/Build/Workers/{chunk-LSSWVB2X.js → chunk-RJF5ZP76.js} +4 -4
  44. package/Build/Workers/{chunk-EB7PNZTK.js → chunk-SIZXFNJY.js} +6 -5
  45. package/Build/Workers/{chunk-G5V4GPZE.js → chunk-SRZJCF7G.js} +9 -9
  46. package/Build/Workers/{chunk-T77JILCU.js → chunk-T4MB73MC.js} +2 -2
  47. package/Build/Workers/{chunk-4RMIRG6T.js → chunk-TTI2SUWJ.js} +2 -2
  48. package/Build/Workers/{chunk-4VFBBNQ3.js → chunk-VHJ5ESXF.js} +1 -1
  49. package/Build/Workers/{chunk-2J3JKXCP.js → chunk-VSFFJGTA.js} +9 -5
  50. package/Build/Workers/{chunk-ZU334IDQ.js → chunk-WQRXRDCZ.js} +11 -11
  51. package/Build/Workers/{chunk-J7MQUQJY.js → chunk-WXDGOYTT.js} +12 -7
  52. package/Build/Workers/{chunk-76BYYG7N.js → chunk-XLCZE6DD.js} +10 -10
  53. package/Build/Workers/combineGeometry.js +22 -22
  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 +22 -22
  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 +30 -30
  75. package/Build/Workers/createPolygonOutlineGeometry.js +28 -28
  76. package/Build/Workers/createPolylineGeometry.js +23 -23
  77. package/Build/Workers/createPolylineVolumeGeometry.js +29 -29
  78. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +25 -25
  79. package/Build/Workers/createRectangleGeometry.js +25 -25
  80. package/Build/Workers/createRectangleOutlineGeometry.js +18 -18
  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 +20 -20
  91. package/Build/Workers/createVerticesFromHeightmap.js +24 -20
  92. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +17 -17
  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/CompressedTextureBuffer.js +11 -0
  102. package/Source/Core/Ion.js +1 -1
  103. package/Source/Core/KTX2Transcoder.js +9 -16
  104. package/Source/Core/PixelFormat.js +1 -15
  105. package/Source/DataSources/CallbackProperty.js +8 -2
  106. package/Source/DataSources/CheckerboardMaterialProperty.js +7 -1
  107. package/Source/DataSources/ColorMaterialProperty.js +7 -1
  108. package/Source/DataSources/CompositeMaterialProperty.js +5 -4
  109. package/Source/DataSources/CompositePositionProperty.js +7 -1
  110. package/Source/DataSources/CompositeProperty.js +5 -5
  111. package/Source/DataSources/ConstantPositionProperty.js +7 -1
  112. package/Source/DataSources/Entity.js +1 -1
  113. package/Source/DataSources/GridMaterialProperty.js +7 -1
  114. package/Source/DataSources/ImageMaterialProperty.js +8 -1
  115. package/Source/DataSources/MaterialProperty.js +7 -1
  116. package/Source/DataSources/NodeTransformationProperty.js +7 -1
  117. package/Source/DataSources/PolylineArrowMaterialProperty.js +7 -1
  118. package/Source/DataSources/PolylineDashMaterialProperty.js +7 -1
  119. package/Source/DataSources/PolylineGlowMaterialProperty.js +7 -1
  120. package/Source/DataSources/PolylineOutlineMaterialProperty.js +7 -1
  121. package/Source/DataSources/PositionProperty.js +1 -1
  122. package/Source/DataSources/PositionPropertyArray.js +7 -1
  123. package/Source/DataSources/Property.js +1 -1
  124. package/Source/DataSources/PropertyArray.js +5 -5
  125. package/Source/DataSources/PropertyBag.js +5 -4
  126. package/Source/DataSources/ReferenceProperty.js +7 -1
  127. package/Source/DataSources/SampledPositionProperty.js +7 -1
  128. package/Source/DataSources/SampledProperty.js +6 -4
  129. package/Source/DataSources/ScaledPositionProperty.js +6 -0
  130. package/Source/DataSources/StripeMaterialProperty.js +7 -1
  131. package/Source/DataSources/TerrainOffsetProperty.js +9 -0
  132. package/Source/DataSources/TimeIntervalCollectionPositionProperty.js +7 -1
  133. package/Source/DataSources/TimeIntervalCollectionProperty.js +5 -5
  134. package/Source/DataSources/VelocityOrientationProperty.js +6 -1
  135. package/Source/DataSources/VelocityVectorProperty.js +3 -5
  136. package/Source/Renderer/AutomaticUniforms.js +2 -17
  137. package/Source/Renderer/Context.js +15 -0
  138. package/Source/Renderer/CubeMap.js +326 -348
  139. package/Source/Renderer/CubeMapFace.js +26 -48
  140. package/Source/Renderer/PixelDatatype.js +23 -0
  141. package/Source/Renderer/Sampler.js +7 -13
  142. package/Source/Renderer/ShaderProgram.js +7 -0
  143. package/Source/Renderer/Texture.js +396 -332
  144. package/Source/Renderer/UniformState.js +3 -22
  145. package/Source/Renderer/demodernizeShader.js +2 -0
  146. package/Source/Renderer/loadCubeMap.js +3 -8
  147. package/Source/Scene/ArcGisMapService.js +1 -1
  148. package/Source/Scene/CameraEventAggregator.js +49 -5
  149. package/Source/Scene/Globe.js +1 -1
  150. package/Source/Scene/GlobeSurfaceShaderSet.js +29 -24
  151. package/Source/Scene/GlobeSurfaceTileProvider.js +5 -3
  152. package/Source/Scene/ImageBasedLighting.js +34 -34
  153. package/Source/Scene/Label.js +2 -2
  154. package/Source/Scene/Material.js +24 -2
  155. package/Source/Scene/Model/ImageBasedLightingPipelineStage.js +7 -15
  156. package/Source/Scene/PostProcessStageCollection.js +45 -15
  157. package/Source/Scene/PostProcessStageLibrary.js +26 -0
  158. package/Source/Scene/Scene.js +20 -22
  159. package/Source/Scene/SceneTransforms.js +0 -62
  160. package/Source/Scene/ScreenSpaceCameraController.js +11 -4
  161. package/Source/Scene/SkyBox.js +13 -19
  162. package/Source/Scene/SpecularEnvironmentCubeMap.js +240 -0
  163. package/Source/Scene/Tonemapper.js +35 -23
  164. package/Source/Scene/VoxelPrimitive.js +0 -29
  165. package/Source/Scene/VoxelRenderResources.js +0 -3
  166. package/Source/Shaders/Builtin/CzmBuiltins.js +2 -2
  167. package/Source/Shaders/Builtin/Functions/pbrLighting.glsl +2 -2
  168. package/Source/Shaders/Builtin/Functions/pbrLighting.js +2 -2
  169. package/Source/Shaders/Builtin/Functions/pbrNeutralTonemapping.glsl +23 -0
  170. package/Source/Shaders/Builtin/Functions/pbrNeutralTonemapping.js +25 -0
  171. package/Source/Shaders/Builtin/Functions/textureCube.glsl +21 -2
  172. package/Source/Shaders/Builtin/Functions/textureCube.js +21 -2
  173. package/Source/Shaders/Builtin/Structs/materialInput.glsl +2 -0
  174. package/Source/Shaders/Builtin/Structs/materialInput.js +2 -0
  175. package/Source/Shaders/GlobeFS.glsl +10 -4
  176. package/Source/Shaders/GlobeFS.js +10 -4
  177. package/Source/Shaders/Materials/WaterMaskMaterial.glsl +15 -0
  178. package/Source/Shaders/Materials/WaterMaskMaterial.js +17 -0
  179. package/Source/Shaders/Model/AtmosphereStageFS.glsl +1 -1
  180. package/Source/Shaders/Model/AtmosphereStageFS.js +1 -1
  181. package/Source/Shaders/Model/ImageBasedLightingStageFS.glsl +40 -29
  182. package/Source/Shaders/Model/ImageBasedLightingStageFS.js +40 -29
  183. package/Source/Shaders/Model/LightingStageFS.glsl +2 -2
  184. package/Source/Shaders/Model/LightingStageFS.js +2 -2
  185. package/Source/Shaders/PostProcessStages/AcesTonemappingStage.glsl +4 -0
  186. package/Source/Shaders/PostProcessStages/AcesTonemappingStage.js +4 -0
  187. package/Source/Shaders/PostProcessStages/FilmicTonemapping.glsl +4 -0
  188. package/Source/Shaders/PostProcessStages/FilmicTonemapping.js +4 -0
  189. package/Source/Shaders/PostProcessStages/ModifiedReinhardTonemapping.glsl +4 -0
  190. package/Source/Shaders/PostProcessStages/ModifiedReinhardTonemapping.js +4 -0
  191. package/Source/Shaders/PostProcessStages/PbrNeutralTonemapping.glsl +25 -0
  192. package/Source/Shaders/PostProcessStages/PbrNeutralTonemapping.js +27 -0
  193. package/Source/Shaders/PostProcessStages/ReinhardTonemapping.glsl +4 -0
  194. package/Source/Shaders/PostProcessStages/ReinhardTonemapping.js +4 -0
  195. package/Source/Shaders/SkyAtmosphereFS.glsl +1 -1
  196. package/Source/Shaders/SkyAtmosphereFS.js +1 -1
  197. package/Source/Widget/CesiumWidget.js +1 -1
  198. package/index.d.ts +117 -101
  199. package/index.js +212 -213
  200. package/package.json +2 -2
  201. package/Build/Workers/chunk-3WUV74WM.js +0 -1800
  202. package/Build/Workers/chunk-4MSUJ4I7.js +0 -456
  203. package/Build/Workers/chunk-5KWHSZYL.js +0 -834
  204. package/Build/Workers/chunk-5O6JWQ4E.js +0 -398
  205. package/Build/Workers/chunk-6OFDHMHR.js +0 -1258
  206. package/Build/Workers/chunk-AA4GZKOT.js +0 -75
  207. package/Build/Workers/chunk-B75IEX2S.js +0 -390
  208. package/Build/Workers/chunk-BAVI3ZS2.js +0 -39
  209. package/Build/Workers/chunk-BBDZYSZB.js +0 -287
  210. package/Build/Workers/chunk-C45MU4GZ.js +0 -220
  211. package/Build/Workers/chunk-CF7P7K7E.js +0 -684
  212. package/Build/Workers/chunk-D4K27X2M.js +0 -305
  213. package/Build/Workers/chunk-DKVHRNFY.js +0 -100
  214. package/Build/Workers/chunk-ELI4BUOT.js +0 -963
  215. package/Build/Workers/chunk-FQPSOOPH.js +0 -258
  216. package/Build/Workers/chunk-GNHZH7HP.js +0 -37
  217. package/Build/Workers/chunk-GWT64LKY.js +0 -171
  218. package/Build/Workers/chunk-HGEEOMSC.js +0 -157
  219. package/Build/Workers/chunk-IUROUBPA.js +0 -300
  220. package/Build/Workers/chunk-JNLWLSTP.js +0 -476
  221. package/Build/Workers/chunk-JYQNWIQQ.js +0 -44
  222. package/Build/Workers/chunk-KUN2ZA5X.js +0 -138
  223. package/Build/Workers/chunk-KV4EQHK4.js +0 -1477
  224. package/Build/Workers/chunk-LXQ5QAEJ.js +0 -196
  225. package/Build/Workers/chunk-MBZH7YZ7.js +0 -945
  226. package/Build/Workers/chunk-MKXWJTFQ.js +0 -781
  227. package/Build/Workers/chunk-MMV6TO3P.js +0 -101
  228. package/Build/Workers/chunk-MSKXMXJI.js +0 -500
  229. package/Build/Workers/chunk-OAPA2RTG.js +0 -239
  230. package/Build/Workers/chunk-OE4MCOC7.js +0 -421
  231. package/Build/Workers/chunk-OJF4RTJG.js +0 -634
  232. package/Build/Workers/chunk-OXSI7N4C.js +0 -768
  233. package/Build/Workers/chunk-PYHLO636.js +0 -2857
  234. package/Build/Workers/chunk-QD4KM3GO.js +0 -138
  235. package/Build/Workers/chunk-QMLTCCYG.js +0 -55
  236. package/Build/Workers/chunk-QYQIVZBU.js +0 -117
  237. package/Build/Workers/chunk-R3TKLC6E.js +0 -1075
  238. package/Build/Workers/chunk-R4ZEWO4I.js +0 -122
  239. package/Build/Workers/chunk-RCK55EDX.js +0 -691
  240. package/Build/Workers/chunk-RHBWXX7C.js +0 -629
  241. package/Build/Workers/chunk-SAPFXU5X.js +0 -102
  242. package/Build/Workers/chunk-TBBFDFCS.js +0 -368
  243. package/Build/Workers/chunk-TGY6H6N6.js +0 -163
  244. package/Build/Workers/chunk-UOEUCKKU.js +0 -59
  245. package/Build/Workers/chunk-VFBNELXB.js +0 -353
  246. package/Build/Workers/chunk-VYWUFRRR.js +0 -1052
  247. package/Build/Workers/chunk-WVSELU6O.js +0 -2716
  248. package/Build/Workers/chunk-X43SJLQL.js +0 -10364
  249. package/Build/Workers/chunk-XUOJCLOH.js +0 -511
  250. package/Build/Workers/chunk-YLYBLJ3Y.js +0 -73
  251. package/Build/Workers/chunk-ZEE2EIFD.js +0 -430
  252. package/Build/Workers/chunk-ZIKGV7EL.js +0 -58
  253. package/Source/Scene/OctahedralProjectedCubeMap.js +0 -444
  254. package/Source/Shaders/Builtin/Functions/sampleOctahedralProjection.glsl +0 -78
  255. package/Source/Shaders/Builtin/Functions/sampleOctahedralProjection.js +0 -80
  256. package/Source/Shaders/OctahedralProjectionAtlasFS.glsl +0 -89
  257. package/Source/Shaders/OctahedralProjectionAtlasFS.js +0 -91
  258. package/Source/Shaders/OctahedralProjectionFS.glsl +0 -14
  259. package/Source/Shaders/OctahedralProjectionFS.js +0 -16
  260. package/Source/Shaders/OctahedralProjectionVS.glsl +0 -10
  261. package/Source/Shaders/OctahedralProjectionVS.js +0 -12
@@ -0,0 +1,240 @@
1
+ import defined from "../Core/defined.js";
2
+ import destroyObject from "../Core/destroyObject.js";
3
+ import Event from "../Core/Event.js";
4
+ import loadKTX2 from "../Core/loadKTX2.js";
5
+ import PixelFormat from "../Core/PixelFormat.js";
6
+ import CubeMap from "../Renderer/CubeMap.js";
7
+ import PixelDatatype from "../Renderer/PixelDatatype.js";
8
+ import Sampler from "../Renderer/Sampler.js";
9
+ import TextureMinificationFilter from "../Renderer/TextureMinificationFilter.js";
10
+
11
+ /**
12
+ * Manages a cube map for use as a specular environment map.
13
+ *
14
+ * @alias SpecularEnvironmentCubeMap
15
+ * @constructor
16
+ *
17
+ * @param {string} url The url to the KTX2 file containing the specular environment map and convoluted mipmaps.
18
+ * @private
19
+ */
20
+ function SpecularEnvironmentCubeMap(url) {
21
+ this._url = url;
22
+
23
+ this._cubeMapBuffers = undefined;
24
+ this._texture = undefined;
25
+
26
+ this._maximumMipmapLevel = undefined;
27
+
28
+ this._loading = false;
29
+ this._ready = false;
30
+
31
+ this._errorEvent = new Event();
32
+ }
33
+
34
+ Object.defineProperties(SpecularEnvironmentCubeMap.prototype, {
35
+ /**
36
+ * The url to the KTX2 file containing the specular environment map and convoluted mipmaps.
37
+ * @memberof SpecularEnvironmentCubeMap.prototype
38
+ * @type {string}
39
+ * @readonly
40
+ */
41
+ url: {
42
+ get: function () {
43
+ return this._url;
44
+ },
45
+ },
46
+ /**
47
+ * Gets an event that is raised when encountering an asynchronous error. By subscribing
48
+ * to the event, you will be notified of the error and can potentially recover from it.
49
+ * @memberof SpecularEnvironmentCubeMap.prototype
50
+ * @type {Event}
51
+ * @readonly
52
+ */
53
+ errorEvent: {
54
+ get: function () {
55
+ return this._errorEvent;
56
+ },
57
+ },
58
+ /**
59
+ * A texture containing all the packed convolutions.
60
+ * @memberof SpecularEnvironmentCubeMap.prototype
61
+ * @type {Texture}
62
+ * @readonly
63
+ */
64
+ texture: {
65
+ get: function () {
66
+ return this._texture;
67
+ },
68
+ },
69
+ /**
70
+ * The maximum number of mip levels with valid environment map data.
71
+ * This may differ from the number of mips in the WebGL cubemap.
72
+ * The data loaded at <code>maximumMipmapLevel</code> is suitable for
73
+ * PBR rendering of a material with maximum roughness (1.0).
74
+ * @memberOf SpecularEnvironmentCubeMap.prototype
75
+ * @type {number}
76
+ * @readonly
77
+ */
78
+ maximumMipmapLevel: {
79
+ get: function () {
80
+ return this._maximumMipmapLevel;
81
+ },
82
+ },
83
+ /**
84
+ * Determines if the cube map is complete and ready to use.
85
+ * @memberof SpecularEnvironmentCubeMap.prototype
86
+ * @type {boolean}
87
+ * @readonly
88
+ */
89
+ ready: {
90
+ get: function () {
91
+ return this._ready;
92
+ },
93
+ },
94
+ });
95
+
96
+ SpecularEnvironmentCubeMap.isSupported = function (context) {
97
+ const supportsFloatBuffersAndTextures =
98
+ (context.colorBufferHalfFloat && context.halfFloatingPointTexture) ||
99
+ (context.floatingPointTexture && context.colorBufferFloat);
100
+ return supportsFloatBuffersAndTextures && context.supportsTextureLod;
101
+ };
102
+
103
+ function cleanupResources(map) {
104
+ map._cubeMapBuffers = undefined;
105
+ }
106
+
107
+ /**
108
+ * Loads the environment map image and constructs the cube map for specular radiance calculations.
109
+ * <p>
110
+ * Once the image is loaded, the next call cleans up unused resources. Every call after that is a no-op.
111
+ * </p>
112
+ * @param {FrameState} frameState The frame state.
113
+ *
114
+ * @private
115
+ */
116
+ SpecularEnvironmentCubeMap.prototype.update = function (frameState) {
117
+ const { context } = frameState;
118
+
119
+ if (!SpecularEnvironmentCubeMap.isSupported(context)) {
120
+ return;
121
+ }
122
+
123
+ if (defined(this._texture)) {
124
+ cleanupResources(this);
125
+ return;
126
+ }
127
+
128
+ if (!defined(this._texture) && !this._loading) {
129
+ const cachedTexture = context.textureCache.getTexture(this._url);
130
+ if (defined(cachedTexture)) {
131
+ cleanupResources(this);
132
+ this._texture = cachedTexture;
133
+ this._maximumMipmapLevel = this._texture.maximumMipmapLevel;
134
+ this._ready = true;
135
+ }
136
+ }
137
+
138
+ const cubeMapBuffers = this._cubeMapBuffers;
139
+ if (!defined(cubeMapBuffers) && !this._loading) {
140
+ const that = this;
141
+ loadKTX2(this._url)
142
+ .then(function (buffers) {
143
+ that._cubeMapBuffers = buffers;
144
+ that._loading = false;
145
+ })
146
+ .catch(function (error) {
147
+ if (that.isDestroyed()) {
148
+ return;
149
+ }
150
+ that._errorEvent.raiseEvent(error);
151
+ });
152
+ this._loading = true;
153
+ }
154
+
155
+ if (!defined(this._cubeMapBuffers)) {
156
+ return;
157
+ }
158
+
159
+ // Datatype is defined if it is a normalized type (i.e. ..._UNORM, ..._SFLOAT)
160
+ let { pixelDatatype } = cubeMapBuffers[0].positiveX;
161
+ if (!defined(pixelDatatype)) {
162
+ pixelDatatype = context.halfFloatingPointTexture
163
+ ? PixelDatatype.HALF_FLOAT
164
+ : PixelDatatype.FLOAT;
165
+ }
166
+ const pixelFormat = PixelFormat.RGBA;
167
+
168
+ const mipLevels = cubeMapBuffers.length;
169
+ this._maximumMipmapLevel = mipLevels - 1;
170
+
171
+ const faceSize = cubeMapBuffers[0].positiveX.width;
172
+ const expectedMipLevels = Math.log2(faceSize) + 1;
173
+ if (mipLevels !== expectedMipLevels) {
174
+ // We assume the last supplied mip level was computed as the specular radiance
175
+ // for roughness 1.0.
176
+ // Fill the remaining levels with null values, to avoid WebGL errors.
177
+ const dummyMipLevel = {};
178
+ Object.values(CubeMap.FaceName).forEach((faceName) => {
179
+ dummyMipLevel[faceName] = undefined;
180
+ });
181
+ for (let mipLevel = mipLevels; mipLevel < expectedMipLevels; mipLevel++) {
182
+ cubeMapBuffers.push(dummyMipLevel);
183
+ }
184
+ }
185
+
186
+ const sampler = new Sampler({
187
+ minificationFilter: TextureMinificationFilter.LINEAR_MIPMAP_LINEAR,
188
+ });
189
+
190
+ const cubeMap = new CubeMap({
191
+ context: context,
192
+ source: cubeMapBuffers[0],
193
+ flipY: false,
194
+ pixelDatatype: pixelDatatype,
195
+ pixelFormat: pixelFormat,
196
+ sampler: sampler,
197
+ });
198
+ cubeMap.loadMipmaps(cubeMapBuffers.slice(1));
199
+ this._texture = cubeMap;
200
+
201
+ this._texture.maximumMipmapLevel = this._maximumMipmapLevel;
202
+ context.textureCache.addTexture(this._url, this._texture);
203
+
204
+ this._ready = true;
205
+ };
206
+
207
+ /**
208
+ * Returns true if this object was destroyed; otherwise, false.
209
+ * <p>
210
+ * If this object was destroyed, it should not be used; calling any function other than
211
+ * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.
212
+ * </p>
213
+ *
214
+ * @returns {boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.
215
+ *
216
+ * @see SpecularEnvironmentCubeMap#destroy
217
+ */
218
+ SpecularEnvironmentCubeMap.prototype.isDestroyed = function () {
219
+ return false;
220
+ };
221
+
222
+ /**
223
+ * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic
224
+ * release of WebGL resources, instead of relying on the garbage collector to destroy this object.
225
+ * <p>
226
+ * Once an object is destroyed, it should not be used; calling any function other than
227
+ * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,
228
+ * assign the return value (<code>undefined</code>) to the object as done in the example.
229
+ * </p>
230
+ *
231
+ * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.
232
+ *
233
+ * @see SpecularEnvironmentCubeMap#isDestroyed
234
+ */
235
+ SpecularEnvironmentCubeMap.prototype.destroy = function () {
236
+ cleanupResources(this);
237
+ this._texture = this._texture && this._texture.destroy();
238
+ return destroyObject(this);
239
+ };
240
+ export default SpecularEnvironmentCubeMap;
@@ -1,52 +1,64 @@
1
1
  /**
2
2
  * A tonemapping algorithm when rendering with high dynamic range.
3
3
  *
4
- * @enum {number}
5
- * @private
4
+ * @enum {string}
6
5
  */
7
6
  const Tonemapper = {
8
7
  /**
9
- * Use the Reinhard tonemapping operator.
8
+ * Use the Reinhard tonemapping.
10
9
  *
11
- * @type {number}
10
+ * @type {string}
12
11
  * @constant
13
12
  */
14
- REINHARD: 0,
13
+ REINHARD: "REINHARD",
15
14
 
16
15
  /**
17
- * Use the modified Reinhard tonemapping operator.
16
+ * Use the modified Reinhard tonemapping.
18
17
  *
19
- * @type {number}
18
+ * @type {string}
20
19
  * @constant
21
20
  */
22
- MODIFIED_REINHARD: 1,
21
+ MODIFIED_REINHARD: "MODIFIED_REINHARD",
23
22
 
24
23
  /**
25
- * Use the Filmic tonemapping operator.
24
+ * Use the Filmic tonemapping.
26
25
  *
27
- * @type {number}
26
+ * @type {string}
28
27
  * @constant
29
28
  */
30
- FILMIC: 2,
29
+ FILMIC: "FILMIC",
31
30
 
32
31
  /**
33
- * Use the ACES tonemapping operator.
32
+ * Use the ACES tonemapping.
34
33
  *
35
- * @type {number}
34
+ * @type {string}
36
35
  * @constant
37
36
  */
38
- ACES: 3,
37
+ ACES: "ACES",
39
38
 
40
39
  /**
41
- * @private
40
+ * Use the PBR Neutral tonemapping {@link https://github.com/KhronosGroup/ToneMapping/tree/main/PBR_Neutral|from Khronos}.
41
+ *
42
+ * @type {string}
43
+ * @constant
42
44
  */
43
- validate: function (tonemapper) {
44
- return (
45
- tonemapper === Tonemapper.REINHARD ||
46
- tonemapper === Tonemapper.MODIFIED_REINHARD ||
47
- tonemapper === Tonemapper.FILMIC ||
48
- tonemapper === Tonemapper.ACES
49
- );
50
- },
45
+ PBR_NEUTRAL: "PBR_NEUTRAL",
51
46
  };
47
+
48
+ /**
49
+ * Validate whether the provided value is a known Tonemapper type
50
+ * @private
51
+ *
52
+ * @param {string} tonemapper
53
+ */
54
+ export function validateTonemapper(tonemapper) {
55
+ return (
56
+ tonemapper === Tonemapper.REINHARD ||
57
+ tonemapper === Tonemapper.MODIFIED_REINHARD ||
58
+ tonemapper === Tonemapper.FILMIC ||
59
+ tonemapper === Tonemapper.ACES ||
60
+ tonemapper === Tonemapper.PBR_NEUTRAL
61
+ );
62
+ }
63
+
52
64
  export default Object.freeze(Tonemapper);
@@ -332,12 +332,6 @@ function VoxelPrimitive(options) {
332
332
  this._transformNormalLocalToWorld = new Matrix3();
333
333
 
334
334
  // Rendering
335
- /**
336
- * @type {boolean}
337
- * @private
338
- */
339
- this._jitter = false;
340
-
341
335
  /**
342
336
  * @type {boolean}
343
337
  * @private
@@ -704,29 +698,6 @@ Object.defineProperties(VoxelPrimitive.prototype, {
704
698
  },
705
699
  },
706
700
 
707
- /**
708
- * Gets or sets whether or not to jitter the view ray during the raymarch.
709
- * This reduces stair-step artifacts but introduces noise.
710
- *
711
- * @memberof VoxelPrimitive.prototype
712
- * @type {boolean}
713
- */
714
- jitter: {
715
- get: function () {
716
- return this._jitter;
717
- },
718
- set: function (jitter) {
719
- //>>includeStart('debug', pragmas.debug);
720
- Check.typeOf.bool("jitter", jitter);
721
- //>>includeEnd('debug');
722
-
723
- if (this._jitter !== jitter) {
724
- this._jitter = jitter;
725
- this._shaderDirty = true;
726
- }
727
- },
728
- },
729
-
730
701
  /**
731
702
  * Gets or sets the nearest sampling.
732
703
  *
@@ -215,9 +215,6 @@ function VoxelRenderResources(primitive) {
215
215
  ShaderDestination.FRAGMENT
216
216
  );
217
217
  }
218
- if (primitive._jitter) {
219
- shaderBuilder.addDefine("JITTER", undefined, ShaderDestination.FRAGMENT);
220
- }
221
218
  if (primitive._nearestSampling) {
222
219
  shaderBuilder.addDefine(
223
220
  "NEAREST_SAMPLING",
@@ -103,6 +103,7 @@ import czm_nearFarScalar from './Functions/nearFarScalar.js'
103
103
  import czm_octDecode from './Functions/octDecode.js'
104
104
  import czm_packDepth from './Functions/packDepth.js'
105
105
  import czm_pbrLighting from './Functions/pbrLighting.js'
106
+ import czm_pbrNeutralTonemapping from './Functions/pbrNeutralTonemapping.js'
106
107
  import czm_phong from './Functions/phong.js'
107
108
  import czm_planeDistance from './Functions/planeDistance.js'
108
109
  import czm_pointAlongRay from './Functions/pointAlongRay.js'
@@ -112,7 +113,6 @@ import czm_readDepth from './Functions/readDepth.js'
112
113
  import czm_readNonPerspective from './Functions/readNonPerspective.js'
113
114
  import czm_reverseLogDepth from './Functions/reverseLogDepth.js'
114
115
  import czm_round from './Functions/round.js'
115
- import czm_sampleOctahedralProjection from './Functions/sampleOctahedralProjection.js'
116
116
  import czm_saturation from './Functions/saturation.js'
117
117
  import czm_shadowDepthCompare from './Functions/shadowDepthCompare.js'
118
118
  import czm_shadowVisibility from './Functions/shadowVisibility.js'
@@ -241,6 +241,7 @@ export default {
241
241
  czm_octDecode : czm_octDecode,
242
242
  czm_packDepth : czm_packDepth,
243
243
  czm_pbrLighting : czm_pbrLighting,
244
+ czm_pbrNeutralTonemapping : czm_pbrNeutralTonemapping,
244
245
  czm_phong : czm_phong,
245
246
  czm_planeDistance : czm_planeDistance,
246
247
  czm_pointAlongRay : czm_pointAlongRay,
@@ -250,7 +251,6 @@ export default {
250
251
  czm_readNonPerspective : czm_readNonPerspective,
251
252
  czm_reverseLogDepth : czm_reverseLogDepth,
252
253
  czm_round : czm_round,
253
- czm_sampleOctahedralProjection : czm_sampleOctahedralProjection,
254
254
  czm_saturation : czm_saturation,
255
255
  czm_shadowDepthCompare : czm_shadowDepthCompare,
256
256
  czm_shadowVisibility : czm_shadowVisibility,
@@ -96,8 +96,8 @@ float GGX(float alphaRoughness, float NdotH)
96
96
  */
97
97
  float computeDirectSpecularStrength(vec3 normal, vec3 lightDirection, vec3 viewDirection, vec3 halfwayDirection, float alphaRoughness)
98
98
  {
99
- float NdotL = dot(normal, lightDirection);
100
- float NdotV = abs(dot(normal, viewDirection));
99
+ float NdotL = clamp(dot(normal, lightDirection), 0.0, 1.0);
100
+ float NdotV = clamp(dot(normal, viewDirection), 0.0, 1.0);
101
101
  float G = smithVisibilityGGX(alphaRoughness, NdotL, NdotV);
102
102
  float NdotH = clamp(dot(normal, halfwayDirection), 0.0, 1.0);
103
103
  float D = GGX(alphaRoughness, NdotH);
@@ -97,8 +97,8 @@ float GGX(float alphaRoughness, float NdotH)\n\
97
97
  */\n\
98
98
  float computeDirectSpecularStrength(vec3 normal, vec3 lightDirection, vec3 viewDirection, vec3 halfwayDirection, float alphaRoughness)\n\
99
99
  {\n\
100
- float NdotL = dot(normal, lightDirection);\n\
101
- float NdotV = abs(dot(normal, viewDirection));\n\
100
+ float NdotL = clamp(dot(normal, lightDirection), 0.0, 1.0);\n\
101
+ float NdotV = clamp(dot(normal, viewDirection), 0.0, 1.0);\n\
102
102
  float G = smithVisibilityGGX(alphaRoughness, NdotL, NdotV);\n\
103
103
  float NdotH = clamp(dot(normal, halfwayDirection), 0.0, 1.0);\n\
104
104
  float D = GGX(alphaRoughness, NdotH);\n\
@@ -0,0 +1,23 @@
1
+ // KhronosGroup https://github.com/KhronosGroup/ToneMapping/tree/main/PBR_Neutral
2
+
3
+ // Input color is non-negative and resides in the Linear Rec. 709 color space.
4
+ // Output color is also Linear Rec. 709, but in the [0, 1] range.
5
+
6
+ vec3 czm_pbrNeutralTonemapping(vec3 color) {
7
+ const float startCompression = 0.8 - 0.04;
8
+ const float desaturation = 0.15;
9
+
10
+ float x = min(color.r, min(color.g, color.b));
11
+ float offset = czm_branchFreeTernary(x < 0.08, x - 6.25 * x * x, 0.04);
12
+ color -= offset;
13
+
14
+ float peak = max(color.r, max(color.g, color.b));
15
+ if (peak < startCompression) return color;
16
+
17
+ const float d = 1.0 - startCompression;
18
+ float newPeak = 1.0 - d * d / (peak + d - startCompression);
19
+ color *= newPeak / peak;
20
+
21
+ float g = 1.0 - 1.0 / (desaturation * (peak - newPeak) + 1.0);
22
+ return mix(color, newPeak * vec3(1.0, 1.0, 1.0), g);
23
+ }
@@ -0,0 +1,25 @@
1
+ //This file is automatically rebuilt by the Cesium build process.
2
+ export default "// KhronosGroup https://github.com/KhronosGroup/ToneMapping/tree/main/PBR_Neutral\n\
3
+ \n\
4
+ // Input color is non-negative and resides in the Linear Rec. 709 color space.\n\
5
+ // Output color is also Linear Rec. 709, but in the [0, 1] range.\n\
6
+ \n\
7
+ vec3 czm_pbrNeutralTonemapping(vec3 color) {\n\
8
+ const float startCompression = 0.8 - 0.04;\n\
9
+ const float desaturation = 0.15;\n\
10
+ \n\
11
+ float x = min(color.r, min(color.g, color.b));\n\
12
+ float offset = czm_branchFreeTernary(x < 0.08, x - 6.25 * x * x, 0.04);\n\
13
+ color -= offset;\n\
14
+ \n\
15
+ float peak = max(color.r, max(color.g, color.b));\n\
16
+ if (peak < startCompression) return color;\n\
17
+ \n\
18
+ const float d = 1.0 - startCompression;\n\
19
+ float newPeak = 1.0 - d * d / (peak + d - startCompression);\n\
20
+ color *= newPeak / peak;\n\
21
+ \n\
22
+ float g = 1.0 - 1.0 / (desaturation * (peak - newPeak) + 1.0);\n\
23
+ return mix(color, newPeak * vec3(1.0, 1.0, 1.0), g);\n\
24
+ }\n\
25
+ ";
@@ -6,12 +6,31 @@
6
6
  * @glslFunction
7
7
  *
8
8
  * @param {samplerCube} sampler The sampler.
9
- * @param {vec3} p The coordinates to sample the texture at.
9
+ * @param {vec3} p The coordinate at which to sample the texture.
10
10
  */
11
11
  vec4 czm_textureCube(samplerCube sampler, vec3 p) {
12
12
  #if __VERSION__ == 300
13
13
  return texture(sampler, p);
14
- #else
14
+ #else
15
15
  return textureCube(sampler, p);
16
16
  #endif
17
+ }
18
+
19
+ /**
20
+ * A wrapper around the textureLod (WebGL2) / textureCube (WebGL1)
21
+ * function to allow for WebGL 1 support in fragment shaders.
22
+ *
23
+ * @name czm_textureCubeLod
24
+ * @glslFunction
25
+ *
26
+ * @param {samplerCube} sampler The sampler.
27
+ * @param {vec3} p The coordinate at which to sample the texture.
28
+ * @param {float} lod The mipmap level from which to sample.
29
+ */
30
+ vec4 czm_textureCube(samplerCube sampler, vec3 p, float lod) {
31
+ #if __VERSION__ == 300
32
+ return textureLod(sampler, p, lod);
33
+ #elif defined(GL_EXT_shader_texture_lod)
34
+ return textureCubeLodEXT(sampler, p, lod);
35
+ #endif
17
36
  }
@@ -7,12 +7,31 @@ export default "/**\n\
7
7
  * @glslFunction\n\
8
8
  *\n\
9
9
  * @param {samplerCube} sampler The sampler.\n\
10
- * @param {vec3} p The coordinates to sample the texture at.\n\
10
+ * @param {vec3} p The coordinate at which to sample the texture.\n\
11
11
  */\n\
12
12
  vec4 czm_textureCube(samplerCube sampler, vec3 p) {\n\
13
13
  #if __VERSION__ == 300\n\
14
14
  return texture(sampler, p);\n\
15
- #else \n\
15
+ #else\n\
16
16
  return textureCube(sampler, p);\n\
17
17
  #endif\n\
18
+ }\n\
19
+ \n\
20
+ /**\n\
21
+ * A wrapper around the textureLod (WebGL2) / textureCube (WebGL1)\n\
22
+ * function to allow for WebGL 1 support in fragment shaders.\n\
23
+ *\n\
24
+ * @name czm_textureCubeLod\n\
25
+ * @glslFunction\n\
26
+ *\n\
27
+ * @param {samplerCube} sampler The sampler.\n\
28
+ * @param {vec3} p The coordinate at which to sample the texture.\n\
29
+ * @param {float} lod The mipmap level from which to sample.\n\
30
+ */\n\
31
+ vec4 czm_textureCube(samplerCube sampler, vec3 p, float lod) {\n\
32
+ #if __VERSION__ == 300\n\
33
+ return textureLod(sampler, p, lod);\n\
34
+ #elif defined(GL_EXT_shader_texture_lod)\n\
35
+ return textureCubeLodEXT(sampler, p, lod);\n\
36
+ #endif\n\
18
37
  }";
@@ -13,6 +13,7 @@
13
13
  * @property {float} height The height of the terrain in meters above or below the ellipsoid. Only available for globe materials.
14
14
  * @property {float} slope The slope of the terrain in radians. 0 is flat; pi/2 is vertical. Only available for globe materials.
15
15
  * @property {float} aspect The aspect of the terrain in radians. 0 is East, pi/2 is North, pi is West, 3pi/2 is South. Only available for globe materials.
16
+ * @property {float} waterMask The value of the water mask. 0 is land, 1 is water. Only available for globe materials.
16
17
  */
17
18
  struct czm_materialInput
18
19
  {
@@ -25,4 +26,5 @@ struct czm_materialInput
25
26
  float height;
26
27
  float slope;
27
28
  float aspect;
29
+ float waterMask;
28
30
  };
@@ -14,6 +14,7 @@ export default "/**\n\
14
14
  * @property {float} height The height of the terrain in meters above or below the ellipsoid. Only available for globe materials.\n\
15
15
  * @property {float} slope The slope of the terrain in radians. 0 is flat; pi/2 is vertical. Only available for globe materials.\n\
16
16
  * @property {float} aspect The aspect of the terrain in radians. 0 is East, pi/2 is North, pi is West, 3pi/2 is South. Only available for globe materials.\n\
17
+ * @property {float} waterMask The value of the water mask. 0 is land, 1 is water. Only available for globe materials.\n\
17
18
  */\n\
18
19
  struct czm_materialInput\n\
19
20
  {\n\
@@ -26,5 +27,6 @@ struct czm_materialInput\n\
26
27
  float height;\n\
27
28
  float slope;\n\
28
29
  float aspect;\n\
30
+ float waterMask;\n\
29
31
  };\n\
30
32
  ";
@@ -49,7 +49,7 @@ uniform vec4 u_colorsToAlpha[TEXTURE_UNITS];
49
49
  uniform vec4 u_dayTextureTexCoordsRectangle[TEXTURE_UNITS];
50
50
  #endif
51
51
 
52
- #ifdef SHOW_REFLECTIVE_OCEAN
52
+ #if defined(HAS_WATER_MASK) && (defined(SHOW_REFLECTIVE_OCEAN) || defined(APPLY_MATERIAL))
53
53
  uniform sampler2D u_waterMask;
54
54
  uniform vec4 u_waterMaskTranslationAndScale;
55
55
  uniform float u_zoomedOutOceanSpecularIntensity;
@@ -362,7 +362,7 @@ void main()
362
362
  float fade = 0.0;
363
363
  #endif
364
364
 
365
- #ifdef SHOW_REFLECTIVE_OCEAN
365
+ #if defined(HAS_WATER_MASK) && (defined(SHOW_REFLECTIVE_OCEAN) || defined(APPLY_MATERIAL))
366
366
  vec2 waterMaskTranslation = u_waterMaskTranslationAndScale.xy;
367
367
  vec2 waterMaskScale = u_waterMaskTranslationAndScale.zw;
368
368
  vec2 waterMaskTextureCoordinates = v_textureCoordinates.xy * waterMaskScale + waterMaskTranslation;
@@ -370,6 +370,7 @@ void main()
370
370
 
371
371
  float mask = texture(u_waterMask, waterMaskTextureCoordinates).r;
372
372
 
373
+ #ifdef SHOW_REFLECTIVE_OCEAN
373
374
  if (mask > 0.0)
374
375
  {
375
376
  mat3 enuToEye = czm_eastNorthUpToEyeCoordinates(v_positionMC, normalEC);
@@ -381,6 +382,7 @@ void main()
381
382
 
382
383
  color = computeWaterColor(v_positionEC, textureCoordinates, enuToEye, color, mask, fade);
383
384
  }
385
+ #endif
384
386
  #endif
385
387
 
386
388
  #ifdef APPLY_MATERIAL
@@ -392,6 +394,10 @@ void main()
392
394
  materialInput.slope = v_slope;
393
395
  materialInput.height = v_height;
394
396
  materialInput.aspect = v_aspect;
397
+ #ifdef HAS_WATER_MASK
398
+ materialInput.waterMask = mask;
399
+ #endif
400
+
395
401
  czm_material material = czm_getMaterial(materialInput);
396
402
  vec4 materialColor = vec4(material.diffuse, material.alpha);
397
403
  color = alphaBlend(materialColor, color);
@@ -422,7 +428,7 @@ void main()
422
428
  #ifdef ENABLE_CLIPPING_POLYGONS
423
429
  vec2 clippingPosition = v_clippingPosition;
424
430
  int regionIndex = v_regionIndex;
425
- clipPolygons(u_clippingDistance, CLIPPING_POLYGON_REGIONS_LENGTH, clippingPosition, regionIndex);
431
+ clipPolygons(u_clippingDistance, CLIPPING_POLYGON_REGIONS_LENGTH, clippingPosition, regionIndex);
426
432
  #endif
427
433
 
428
434
  #ifdef HIGHLIGHT_FILL_TILE
@@ -489,7 +495,7 @@ void main()
489
495
  #endif
490
496
 
491
497
  #ifndef HDR
492
- fogColor.rgb = czm_acesTonemapping(fogColor.rgb);
498
+ fogColor.rgb = czm_pbrNeutralTonemapping(fogColor.rgb);
493
499
  fogColor.rgb = czm_inverseGamma(fogColor.rgb);
494
500
  #endif
495
501