@cesium/engine 3.0.2 → 4.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 (230) hide show
  1. package/Build/ThirdParty/Workers/pako_deflate.min.js +605 -0
  2. package/Build/ThirdParty/Workers/pako_inflate.min.js +800 -0
  3. package/Build/ThirdParty/Workers/z-worker-pako.js +502 -0
  4. package/Build/Workers/chunk-27R2KRIK.js +634 -0
  5. package/Build/Workers/chunk-2C65EKYA.js +55 -0
  6. package/Build/Workers/chunk-2NLMZNJI.js +138 -0
  7. package/Build/Workers/chunk-4V6RCTVH.js +289 -0
  8. package/Build/Workers/chunk-4VWUFKYW.js +368 -0
  9. package/Build/Workers/chunk-527JG4D7.js +629 -0
  10. package/Build/Workers/chunk-5U4UHRZ2.js +8644 -0
  11. package/Build/Workers/chunk-7CZEWQWE.js +353 -0
  12. package/Build/Workers/chunk-7IMAWM6A.js +842 -0
  13. package/Build/Workers/{package.js → chunk-A6EA6KIE.js} +13 -2
  14. package/Build/Workers/chunk-AXGQUPXA.js +1075 -0
  15. package/Build/Workers/chunk-BT6YIL2N.js +39 -0
  16. package/Build/Workers/chunk-C6MRR5YL.js +476 -0
  17. package/Build/Workers/chunk-DJUTBX6A.js +1860 -0
  18. package/Build/Workers/chunk-EQ6ZAP37.js +218 -0
  19. package/Build/Workers/chunk-F7P2HCYZ.js +73 -0
  20. package/Build/Workers/chunk-FE2XG3SS.js +73 -0
  21. package/Build/Workers/chunk-FKHRSGKP.js +781 -0
  22. package/Build/Workers/chunk-FVDTKX3F.js +58 -0
  23. package/Build/Workers/chunk-FYHCAKU6.js +684 -0
  24. package/Build/Workers/chunk-G3MOT7BZ.js +157 -0
  25. package/Build/Workers/chunk-H52L6U76.js +421 -0
  26. package/Build/Workers/chunk-H6MBQ4W4.js +305 -0
  27. package/Build/Workers/chunk-HCZR75II.js +2716 -0
  28. package/Build/Workers/chunk-I5MQWHBR.js +102 -0
  29. package/Build/Workers/chunk-KAFF2QX3.js +258 -0
  30. package/Build/Workers/chunk-LGSGX2RH.js +757 -0
  31. package/Build/Workers/chunk-LQRFWCNX.js +124 -0
  32. package/Build/Workers/chunk-N5MMDSD2.js +44 -0
  33. package/Build/Workers/chunk-NRETMGYL.js +390 -0
  34. package/Build/Workers/chunk-P4M4QUNQ.js +196 -0
  35. package/Build/Workers/chunk-P7PWX5HR.js +430 -0
  36. package/Build/Workers/chunk-PGB3EFR7.js +171 -0
  37. package/Build/Workers/chunk-PW5CA4MJ.js +3273 -0
  38. package/Build/Workers/chunk-PWDYKCNC.js +501 -0
  39. package/Build/Workers/chunk-QIS3NB7U.js +1258 -0
  40. package/Build/Workers/chunk-QVJ6IRKV.js +77 -0
  41. package/Build/Workers/chunk-RDCDRNJ7.js +117 -0
  42. package/Build/Workers/chunk-RDM3BKNC.js +1009 -0
  43. package/Build/Workers/chunk-RRUPTJ6P.js +452 -0
  44. package/Build/Workers/chunk-SGRWJKNO.js +400 -0
  45. package/Build/Workers/chunk-TF5D2H7B.js +138 -0
  46. package/Build/Workers/chunk-TVYIHH4V.js +513 -0
  47. package/Build/Workers/chunk-U5LKG6LX.js +101 -0
  48. package/Build/Workers/chunk-UGZGTV5K.js +302 -0
  49. package/Build/Workers/chunk-UN7AK64D.js +163 -0
  50. package/Build/Workers/chunk-V2LKNJGT.js +59 -0
  51. package/Build/Workers/chunk-VSCXSFHE.js +1477 -0
  52. package/Build/Workers/chunk-XJCTFTBM.js +2041 -0
  53. package/Build/Workers/chunk-XZVQMPWG.js +100 -0
  54. package/Build/Workers/chunk-YLAFWVOW.js +834 -0
  55. package/Build/Workers/chunk-YLS3FX3U.js +236 -0
  56. package/Build/Workers/chunk-YMJPANZZ.js +693 -0
  57. package/Build/Workers/combineGeometry.js +65 -15
  58. package/Build/Workers/createBoxGeometry.js +55 -10
  59. package/Build/Workers/createBoxOutlineGeometry.js +231 -310
  60. package/Build/Workers/createCircleGeometry.js +185 -202
  61. package/Build/Workers/createCircleOutlineGeometry.js +141 -155
  62. package/Build/Workers/createCoplanarPolygonGeometry.js +477 -557
  63. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +218 -230
  64. package/Build/Workers/createCorridorGeometry.js +1162 -1307
  65. package/Build/Workers/createCorridorOutlineGeometry.js +533 -569
  66. package/Build/Workers/createCylinderGeometry.js +57 -10
  67. package/Build/Workers/createCylinderOutlineGeometry.js +224 -258
  68. package/Build/Workers/createEllipseGeometry.js +68 -12
  69. package/Build/Workers/createEllipseOutlineGeometry.js +61 -12
  70. package/Build/Workers/createEllipsoidGeometry.js +56 -10
  71. package/Build/Workers/createEllipsoidOutlineGeometry.js +58 -13
  72. package/Build/Workers/createFrustumGeometry.js +55 -10
  73. package/Build/Workers/createFrustumOutlineGeometry.js +226 -243
  74. package/Build/Workers/createGeometry.js +143 -48
  75. package/Build/Workers/createGroundPolylineGeometry.js +1484 -2012
  76. package/Build/Workers/createPlaneGeometry.js +216 -243
  77. package/Build/Workers/createPlaneOutlineGeometry.js +121 -113
  78. package/Build/Workers/createPolygonGeometry.js +1041 -1327
  79. package/Build/Workers/createPolygonOutlineGeometry.js +516 -657
  80. package/Build/Workers/createPolylineGeometry.js +471 -547
  81. package/Build/Workers/createPolylineVolumeGeometry.js +352 -384
  82. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +271 -295
  83. package/Build/Workers/createRectangleGeometry.js +1128 -1331
  84. package/Build/Workers/createRectangleOutlineGeometry.js +445 -500
  85. package/Build/Workers/createSimplePolylineGeometry.js +381 -440
  86. package/Build/Workers/createSphereGeometry.js +112 -118
  87. package/Build/Workers/createSphereOutlineGeometry.js +112 -121
  88. package/Build/Workers/createTaskProcessorWorker.js +32 -127
  89. package/Build/Workers/createVectorTileClampedPolylines.js +462 -505
  90. package/Build/Workers/createVectorTileGeometries.js +377 -436
  91. package/Build/Workers/createVectorTilePoints.js +110 -77
  92. package/Build/Workers/createVectorTilePolygons.js +369 -391
  93. package/Build/Workers/createVectorTilePolylines.js +252 -244
  94. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +543 -615
  95. package/Build/Workers/createVerticesFromHeightmap.js +2244 -2677
  96. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +682 -904
  97. package/Build/Workers/createWallGeometry.js +459 -593
  98. package/Build/Workers/createWallOutlineGeometry.js +324 -419
  99. package/Build/Workers/decodeDraco.js +327 -347
  100. package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +2530 -3567
  101. package/Build/Workers/decodeI3S.js +765 -970
  102. package/Build/Workers/transcodeKTX2.js +3351 -1473
  103. package/Build/Workers/transferTypedArrayTest.js +3 -4
  104. package/Build/Workers/upsampleQuantizedTerrainMesh.js +748 -953
  105. package/LICENSE.md +0 -12
  106. package/Source/Core/CesiumTerrainProvider.js +1 -2
  107. package/Source/Core/FeatureDetection.js +9 -0
  108. package/Source/Core/GoogleMaps.js +1 -1
  109. package/Source/Core/Ion.js +1 -1
  110. package/Source/Core/KTX2Transcoder.js +7 -3
  111. package/Source/Core/TaskProcessor.js +150 -146
  112. package/Source/Core/Transforms.js +2 -2
  113. package/Source/Core/buildModuleUrl.js +6 -5
  114. package/Source/Scene/ArcGisMapService.js +1 -1
  115. package/Source/Scene/DracoLoader.js +26 -3
  116. package/Source/Scene/I3SDataProvider.js +0 -27
  117. package/Source/Scene/I3SDecoder.js +127 -0
  118. package/Source/Scene/I3SNode.js +32 -110
  119. package/Source/Scene/Implicit3DTileContent.js +13 -0
  120. package/Source/Scene/ImplicitTileset.js +5 -0
  121. package/Source/Scene/Model/I3dmLoader.js +5 -1
  122. package/Source/Scene/Model/Model.js +4 -1
  123. package/Source/Scene/OpenStreetMapImageryProvider.js +4 -1
  124. package/Source/Scene/SingleTileImageryProvider.js +4 -2
  125. package/Source/ThirdParty/Workers/basis_transcoder.js +1 -1
  126. package/Source/{WorkersES6 → Workers}/createGeometry.js +11 -12
  127. package/Source/{WorkersES6 → Workers}/createTaskProcessorWorker.js +43 -59
  128. package/Source/{WorkersES6 → Workers}/decodeDraco.js +19 -25
  129. package/Source/{WorkersES6 → Workers}/decodeI3S.js +18 -32
  130. package/Source/{WorkersES6 → Workers}/transcodeKTX2.js +19 -26
  131. package/Source/Workers/transferTypedArrayTest.js +0 -6
  132. package/index.d.ts +16 -7
  133. package/index.js +252 -251
  134. package/package.json +2 -1
  135. package/Build/Workers/ArcType-2d9abbbc.js +0 -37
  136. package/Build/Workers/AttributeCompression-f9f6c717.js +0 -716
  137. package/Build/Workers/AxisAlignedBoundingBox-a03420b1.js +0 -258
  138. package/Build/Workers/BoundingRectangle-32fa8a4a.js +0 -369
  139. package/Build/Workers/BoxGeometry-cd550612.js +0 -884
  140. package/Build/Workers/Check-6ede7e26.js +0 -290
  141. package/Build/Workers/Color-571a6085.js +0 -2262
  142. package/Build/Workers/ComponentDatatype-cf1fa08e.js +0 -341
  143. package/Build/Workers/CoplanarPolygonGeometryLibrary-488b1a9f.js +0 -132
  144. package/Build/Workers/CorridorGeometryLibrary-fc4ff147.js +0 -498
  145. package/Build/Workers/CylinderGeometry-bc26926d.js +0 -467
  146. package/Build/Workers/CylinderGeometryLibrary-7bf291b4.js +0 -63
  147. package/Build/Workers/EllipseGeometry-89533a10.js +0 -1304
  148. package/Build/Workers/EllipseGeometryLibrary-b0d7df17.js +0 -366
  149. package/Build/Workers/EllipseOutlineGeometry-63ff7a87.js +0 -443
  150. package/Build/Workers/EllipsoidGeodesic-5b3623dc.js +0 -520
  151. package/Build/Workers/EllipsoidGeometry-07e99d2d.js +0 -637
  152. package/Build/Workers/EllipsoidOutlineGeometry-ba5c7ee2.js +0 -454
  153. package/Build/Workers/EllipsoidRhumbLine-ef872433.js +0 -741
  154. package/Build/Workers/EllipsoidTangentPlane-65d41b3e.js +0 -373
  155. package/Build/Workers/EncodedCartesian3-57415c8a.js +0 -171
  156. package/Build/Workers/FrustumGeometry-4a7589ed.js +0 -2540
  157. package/Build/Workers/GeometryAttribute-a5b6275b.js +0 -619
  158. package/Build/Workers/GeometryAttributes-ad136444.js +0 -91
  159. package/Build/Workers/GeometryInstance-34d9e21e.js +0 -121
  160. package/Build/Workers/GeometryOffsetAttribute-9ad0019c.js +0 -16
  161. package/Build/Workers/GeometryPipeline-fa9e6ffc.js +0 -3690
  162. package/Build/Workers/IndexDatatype-2643aa47.js +0 -200
  163. package/Build/Workers/IntersectionTests-feace3da.js +0 -1836
  164. package/Build/Workers/Math-0a2ac845.js +0 -1340
  165. package/Build/Workers/Matrix2-e1298525.js +0 -7086
  166. package/Build/Workers/Matrix3-41c58dde.js +0 -4283
  167. package/Build/Workers/OrientedBoundingBox-6b94d955.js +0 -1259
  168. package/Build/Workers/Plane-4c3d403b.js +0 -309
  169. package/Build/Workers/PolygonGeometryLibrary-4ffc457d.js +0 -1074
  170. package/Build/Workers/PolygonPipeline-d5e66350.js +0 -1344
  171. package/Build/Workers/PolylinePipeline-83410f0c.js +0 -573
  172. package/Build/Workers/PolylineVolumeGeometryLibrary-290e7aec.js +0 -781
  173. package/Build/Workers/PrimitivePipeline-6081d138.js +0 -966
  174. package/Build/Workers/RectangleGeometryLibrary-986710d8.js +0 -280
  175. package/Build/Workers/RuntimeError-ef395448.js +0 -68
  176. package/Build/Workers/TerrainEncoding-528e1d68.js +0 -1227
  177. package/Build/Workers/Transforms-b527bb09.js +0 -14714
  178. package/Build/Workers/VertexFormat-030f11ff.js +0 -312
  179. package/Build/Workers/WallGeometryLibrary-faf583f8.js +0 -211
  180. package/Build/Workers/WebGLConstants-0b1ce7ba.js +0 -620
  181. package/Build/Workers/WebMercatorProjection-13ed1a6e.js +0 -151
  182. package/Build/Workers/arrayRemoveDuplicates-d2061e85.js +0 -129
  183. package/Build/Workers/cesiumWorkerBootstrapper.js +0 -1363
  184. package/Build/Workers/combine-d9581036.js +0 -82
  185. package/Build/Workers/defaultValue-fe22d8c0.js +0 -51
  186. package/Source/ThirdParty/Workers/draco_decoder_nodejs.js +0 -117
  187. package/Source/Workers/cesiumWorkerBootstrapper.js +0 -2290
  188. package/Source/Workers/package.json +0 -1
  189. /package/Source/{WorkersES6 → Workers}/combineGeometry.js +0 -0
  190. /package/Source/{WorkersES6 → Workers}/createBoxGeometry.js +0 -0
  191. /package/Source/{WorkersES6 → Workers}/createBoxOutlineGeometry.js +0 -0
  192. /package/Source/{WorkersES6 → Workers}/createCircleGeometry.js +0 -0
  193. /package/Source/{WorkersES6 → Workers}/createCircleOutlineGeometry.js +0 -0
  194. /package/Source/{WorkersES6 → Workers}/createCoplanarPolygonGeometry.js +0 -0
  195. /package/Source/{WorkersES6 → Workers}/createCoplanarPolygonOutlineGeometry.js +0 -0
  196. /package/Source/{WorkersES6 → Workers}/createCorridorGeometry.js +0 -0
  197. /package/Source/{WorkersES6 → Workers}/createCorridorOutlineGeometry.js +0 -0
  198. /package/Source/{WorkersES6 → Workers}/createCylinderGeometry.js +0 -0
  199. /package/Source/{WorkersES6 → Workers}/createCylinderOutlineGeometry.js +0 -0
  200. /package/Source/{WorkersES6 → Workers}/createEllipseGeometry.js +0 -0
  201. /package/Source/{WorkersES6 → Workers}/createEllipseOutlineGeometry.js +0 -0
  202. /package/Source/{WorkersES6 → Workers}/createEllipsoidGeometry.js +0 -0
  203. /package/Source/{WorkersES6 → Workers}/createEllipsoidOutlineGeometry.js +0 -0
  204. /package/Source/{WorkersES6 → Workers}/createFrustumGeometry.js +0 -0
  205. /package/Source/{WorkersES6 → Workers}/createFrustumOutlineGeometry.js +0 -0
  206. /package/Source/{WorkersES6 → Workers}/createGroundPolylineGeometry.js +0 -0
  207. /package/Source/{WorkersES6 → Workers}/createPlaneGeometry.js +0 -0
  208. /package/Source/{WorkersES6 → Workers}/createPlaneOutlineGeometry.js +0 -0
  209. /package/Source/{WorkersES6 → Workers}/createPolygonGeometry.js +0 -0
  210. /package/Source/{WorkersES6 → Workers}/createPolygonOutlineGeometry.js +0 -0
  211. /package/Source/{WorkersES6 → Workers}/createPolylineGeometry.js +0 -0
  212. /package/Source/{WorkersES6 → Workers}/createPolylineVolumeGeometry.js +0 -0
  213. /package/Source/{WorkersES6 → Workers}/createPolylineVolumeOutlineGeometry.js +0 -0
  214. /package/Source/{WorkersES6 → Workers}/createRectangleGeometry.js +0 -0
  215. /package/Source/{WorkersES6 → Workers}/createRectangleOutlineGeometry.js +0 -0
  216. /package/Source/{WorkersES6 → Workers}/createSimplePolylineGeometry.js +0 -0
  217. /package/Source/{WorkersES6 → Workers}/createSphereGeometry.js +0 -0
  218. /package/Source/{WorkersES6 → Workers}/createSphereOutlineGeometry.js +0 -0
  219. /package/Source/{WorkersES6 → Workers}/createVectorTileClampedPolylines.js +0 -0
  220. /package/Source/{WorkersES6 → Workers}/createVectorTileGeometries.js +0 -0
  221. /package/Source/{WorkersES6 → Workers}/createVectorTilePoints.js +0 -0
  222. /package/Source/{WorkersES6 → Workers}/createVectorTilePolygons.js +0 -0
  223. /package/Source/{WorkersES6 → Workers}/createVectorTilePolylines.js +0 -0
  224. /package/Source/{WorkersES6 → Workers}/createVerticesFromGoogleEarthEnterpriseBuffer.js +0 -0
  225. /package/Source/{WorkersES6 → Workers}/createVerticesFromHeightmap.js +0 -0
  226. /package/Source/{WorkersES6 → Workers}/createVerticesFromQuantizedTerrainMesh.js +0 -0
  227. /package/Source/{WorkersES6 → Workers}/createWallGeometry.js +0 -0
  228. /package/Source/{WorkersES6 → Workers}/createWallOutlineGeometry.js +0 -0
  229. /package/Source/{WorkersES6 → Workers}/decodeGoogleEarthEnterprisePacket.js +0 -0
  230. /package/Source/{WorkersES6 → Workers}/upsampleQuantizedTerrainMesh.js +0 -0
package/LICENSE.md CHANGED
@@ -270,18 +270,6 @@ https://github.com/sole/tween.js
270
270
  >
271
271
  > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
272
272
 
273
- ### RequireJS
274
-
275
- https://github.com/jrburke/requirejs
276
-
277
- > Copyright (c) 2010-2015, The Dojo Foundation
278
- >
279
- > Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
280
- >
281
- > The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
282
- >
283
- > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
284
-
285
273
  ### topojson-client
286
274
 
287
275
  https://github.com/topojson/topojson-client
@@ -867,8 +867,7 @@ CesiumTerrainProvider.prototype.requestTileGeometry = function (
867
867
  // Optimized path for single layers
868
868
  layerToUse = layers[0];
869
869
  } else {
870
- // Use the last layer where terrain data is available as it should be the most up-to-date
871
- for (let i = layerCount - 1; i >= 0; --i) {
870
+ for (let i = 0; i < layerCount; ++i) {
872
871
  const layer = layers[i];
873
872
  if (
874
873
  !defined(layer.availability) ||
@@ -426,4 +426,13 @@ FeatureDetection.supportsWebgl2 = function (scene) {
426
426
  return scene.context.webgl2;
427
427
  };
428
428
 
429
+ /**
430
+ * Detects whether the current browser supports ECMAScript modules in web workers.
431
+ * @returns {boolean} true if the browser supports ECMAScript modules in web workers.
432
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Worker|Worker}
433
+ */
434
+ FeatureDetection.supportsEsmWebWorkers = function () {
435
+ return !isFirefox() || parseInt(firefoxVersionResult) >= 114;
436
+ };
437
+
429
438
  export default FeatureDetection;
@@ -3,7 +3,7 @@ import defined from "./defined.js";
3
3
  import Resource from "./Resource.js";
4
4
 
5
5
  let defaultKeyCredit;
6
- const defaultKey = "AIzaSyDG4malBzpWiOoWpAm9q2OXvt_plH-NxcM";
6
+ const defaultKey = "AIzaSyAgSPRO-w15SwJ57JlOmZHI7JJ_qBR0c1k";
7
7
 
8
8
  /**
9
9
  * Default settings for accessing the Google Maps API.
@@ -4,7 +4,7 @@ import Resource from "./Resource.js";
4
4
 
5
5
  let defaultTokenCredit;
6
6
  const defaultAccessToken =
7
- "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJkNDE4MTdhNy0yYjYzLTQwNjktODJiMy0xMWU2MjI4MTA4ODQiLCJpZCI6MjU5LCJpYXQiOjE2OTA5MDkwMjZ9.G-iUU-kiQeQx74_iQdhyc5IUrVbIIFDhFx7RFn94LaQ";
7
+ "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJlMmIzZjlhMy1kNzU1LTRmMmQtYTFkNi1jMWQ5NTliM2RmN2YiLCJpZCI6MjU5LCJpYXQiOjE2OTM1ODIzNDJ9.-Tpp8s9ismoMrkKqnNsHFEMZgXDfa2uZfBQRE-kn3gM";
8
8
  /**
9
9
  * Default settings for accessing the Cesium ion API.
10
10
  *
@@ -1,6 +1,7 @@
1
1
  import Check from "./Check.js";
2
2
  import CompressedTextureBuffer from "./CompressedTextureBuffer.js";
3
3
  import defined from "./defined.js";
4
+ import RuntimeError from "./RuntimeError.js";
4
5
  import TaskProcessor from "./TaskProcessor.js";
5
6
 
6
7
  /**
@@ -20,11 +21,14 @@ KTX2Transcoder._readyPromise = undefined;
20
21
  function makeReadyPromise() {
21
22
  const readyPromise = KTX2Transcoder._transcodeTaskProcessor
22
23
  .initWebAssemblyModule({
23
- modulePath: "ThirdParty/Workers/basis_transcoder.js",
24
24
  wasmBinaryFile: "ThirdParty/basis_transcoder.wasm",
25
25
  })
26
- .then(function () {
27
- return KTX2Transcoder._transcodeTaskProcessor;
26
+ .then(function (result) {
27
+ if (result) {
28
+ return KTX2Transcoder._transcodeTaskProcessor;
29
+ }
30
+
31
+ throw new RuntimeError("KTX2 transcoder could not be initialized.");
28
32
  });
29
33
  KTX2Transcoder._readyPromise = readyPromise;
30
34
  }
@@ -1,7 +1,6 @@
1
1
  import Uri from "urijs";
2
2
  import buildModuleUrl from "./buildModuleUrl.js";
3
3
  import defaultValue from "./defaultValue.js";
4
- import defer from "./defer.js";
5
4
  import defined from "./defined.js";
6
5
  import destroyObject from "./destroyObject.js";
7
6
  import DeveloperError from "./DeveloperError.js";
@@ -38,23 +37,21 @@ function canTransferArrayBuffer() {
38
37
  return TaskProcessor._canTransferArrayBuffer;
39
38
  }
40
39
 
41
- const deferred = defer();
42
-
43
- worker.onmessage = function (event) {
44
- const array = event.data.array;
45
-
46
- // some versions of Firefox silently fail to transfer typed arrays.
47
- // https://bugzilla.mozilla.org/show_bug.cgi?id=841904
48
- // Check to make sure the value round-trips successfully.
49
- const result = defined(array) && array[0] === value;
50
- deferred.resolve(result);
40
+ TaskProcessor._canTransferArrayBuffer = new Promise((resolve) => {
41
+ worker.onmessage = function (event) {
42
+ const array = event.data.array;
51
43
 
52
- worker.terminate();
44
+ // some versions of Firefox silently fail to transfer typed arrays.
45
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=841904
46
+ // Check to make sure the value round-trips successfully.
47
+ const result = defined(array) && array[0] === value;
48
+ resolve(result);
53
49
 
54
- TaskProcessor._canTransferArrayBuffer = result;
55
- };
50
+ worker.terminate();
56
51
 
57
- TaskProcessor._canTransferArrayBuffer = deferred.promise;
52
+ TaskProcessor._canTransferArrayBuffer = result;
53
+ };
54
+ });
58
55
  }
59
56
 
60
57
  return TaskProcessor._canTransferArrayBuffer;
@@ -62,37 +59,6 @@ function canTransferArrayBuffer() {
62
59
 
63
60
  const taskCompletedEvent = new Event();
64
61
 
65
- function completeTask(processor, data) {
66
- --processor._activeTasks;
67
-
68
- const id = data.id;
69
- if (!defined(id)) {
70
- // This is not one of ours.
71
- return;
72
- }
73
-
74
- const deferreds = processor._deferreds;
75
- const deferred = deferreds[id];
76
-
77
- if (defined(data.error)) {
78
- let error = data.error;
79
- if (error.name === "RuntimeError") {
80
- error = new RuntimeError(data.error.message);
81
- error.stack = data.error.stack;
82
- } else if (error.name === "DeveloperError") {
83
- error = new DeveloperError(data.error.message);
84
- error.stack = data.error.stack;
85
- }
86
- taskCompletedEvent.raiseEvent(error);
87
- deferred.reject(error);
88
- } else {
89
- taskCompletedEvent.raiseEvent();
90
- deferred.resolve(data.result);
91
- }
92
-
93
- delete deferreds[id];
94
- }
95
-
96
62
  function getWorkerUrl(moduleID) {
97
63
  let url = buildModuleUrl(moduleID);
98
64
 
@@ -123,40 +89,28 @@ function getWorkerUrl(moduleID) {
123
89
  return url;
124
90
  }
125
91
 
126
- let bootstrapperUrlResult;
127
- function getBootstrapperUrl() {
128
- if (!defined(bootstrapperUrlResult)) {
129
- bootstrapperUrlResult = getWorkerUrl("Workers/cesiumWorkerBootstrapper.js");
130
- }
131
- return bootstrapperUrlResult;
132
- }
133
-
134
92
  function createWorker(processor) {
135
- const worker = new Worker(getBootstrapperUrl());
136
- worker.postMessage = defaultValue(
137
- worker.webkitPostMessage,
138
- worker.postMessage
139
- );
140
-
141
- const bootstrapMessage = {
142
- loaderConfig: {
143
- paths: {
144
- Workers: buildModuleUrl("Workers"),
145
- },
146
- baseUrl: buildModuleUrl.getCesiumBaseUrl().url,
147
- },
148
- workerModule: processor._workerPath,
149
- };
93
+ if (!FeatureDetection.supportsEsmWebWorkers()) {
94
+ throw new RuntimeError(
95
+ "This browser is not supported. Please update your browser to continue."
96
+ );
97
+ }
150
98
 
151
- worker.postMessage(bootstrapMessage);
152
- worker.onmessage = function (event) {
153
- completeTask(processor, event.data);
154
- };
99
+ const uri = new Uri(processor._workerPath);
100
+ const isUri = uri.scheme().length !== 0 && uri.fragment().length === 0;
101
+ const workerPath = isUri
102
+ ? processor._workerPath
103
+ : getWorkerUrl(
104
+ `${
105
+ TaskProcessor._workerModulePrefix +
106
+ processor._workerPath.replace(/\.js$/, "")
107
+ }.js`
108
+ );
155
109
 
156
- return worker;
110
+ return new Worker(workerPath, { type: "module" });
157
111
  }
158
112
 
159
- function getWebAssemblyLoaderConfig(processor, wasmOptions) {
113
+ async function getWebAssemblyLoaderConfig(processor, wasmOptions) {
160
114
  const config = {
161
115
  modulePath: undefined,
162
116
  wasmBinaryFile: undefined,
@@ -172,18 +126,17 @@ function getWebAssemblyLoaderConfig(processor, wasmOptions) {
172
126
  }
173
127
 
174
128
  config.modulePath = buildModuleUrl(wasmOptions.fallbackModulePath);
175
- return Promise.resolve(config);
129
+ return config;
176
130
  }
177
131
 
178
- config.modulePath = buildModuleUrl(wasmOptions.modulePath);
179
132
  config.wasmBinaryFile = buildModuleUrl(wasmOptions.wasmBinaryFile);
180
133
 
181
- return Resource.fetchArrayBuffer({
134
+ const arrayBuffer = await Resource.fetchArrayBuffer({
182
135
  url: config.wasmBinaryFile,
183
- }).then(function (arrayBuffer) {
184
- config.wasmBinary = arrayBuffer;
185
- return config;
186
136
  });
137
+
138
+ config.wasmBinary = arrayBuffer;
139
+ return config;
187
140
  }
188
141
 
189
142
  /**
@@ -201,21 +154,89 @@ function getWebAssemblyLoaderConfig(processor, wasmOptions) {
201
154
  * work to be rescheduled in future frames.
202
155
  */
203
156
  function TaskProcessor(workerPath, maximumActiveTasks) {
204
- const uri = new Uri(workerPath);
205
- this._workerPath =
206
- uri.scheme().length !== 0 && uri.fragment().length === 0
207
- ? workerPath
208
- : TaskProcessor._workerModulePrefix + workerPath;
157
+ this._workerPath = workerPath;
209
158
  this._maximumActiveTasks = defaultValue(
210
159
  maximumActiveTasks,
211
160
  Number.POSITIVE_INFINITY
212
161
  );
213
162
  this._activeTasks = 0;
214
- this._deferreds = {};
215
163
  this._nextID = 0;
164
+ this._webAssemblyPromise = undefined;
216
165
  }
217
166
 
167
+ const createOnmessageHandler = (worker, id, resolve, reject) => {
168
+ const listener = ({ data }) => {
169
+ if (data.id !== id) {
170
+ return;
171
+ }
172
+
173
+ if (defined(data.error)) {
174
+ let error = data.error;
175
+ if (error.name === "RuntimeError") {
176
+ error = new RuntimeError(data.error.message);
177
+ error.stack = data.error.stack;
178
+ } else if (error.name === "DeveloperError") {
179
+ error = new DeveloperError(data.error.message);
180
+ error.stack = data.error.stack;
181
+ } else if (error.name === "Error") {
182
+ error = new Error(data.error.message);
183
+ error.stack = data.error.stack;
184
+ }
185
+ taskCompletedEvent.raiseEvent(error);
186
+ reject(error);
187
+ } else {
188
+ taskCompletedEvent.raiseEvent();
189
+ resolve(data.result);
190
+ }
191
+
192
+ worker.removeEventListener("message", listener);
193
+ };
194
+
195
+ return listener;
196
+ };
197
+
218
198
  const emptyTransferableObjectArray = [];
199
+ async function runTask(processor, parameters, transferableObjects) {
200
+ const canTransfer = await Promise.resolve(canTransferArrayBuffer());
201
+ if (!defined(transferableObjects)) {
202
+ transferableObjects = emptyTransferableObjectArray;
203
+ } else if (!canTransfer) {
204
+ transferableObjects.length = 0;
205
+ }
206
+
207
+ const id = processor._nextID++;
208
+ const promise = new Promise((resolve, reject) => {
209
+ processor._worker.addEventListener(
210
+ "message",
211
+ createOnmessageHandler(processor._worker, id, resolve, reject)
212
+ );
213
+ });
214
+
215
+ processor._worker.postMessage(
216
+ {
217
+ id: id,
218
+ baseUrl: buildModuleUrl.getCesiumBaseUrl().url,
219
+ parameters: parameters,
220
+ canTransferArrayBuffer: canTransfer,
221
+ },
222
+ transferableObjects
223
+ );
224
+
225
+ return promise;
226
+ }
227
+
228
+ async function scheduleTask(processor, parameters, transferableObjects) {
229
+ ++processor._activeTasks;
230
+
231
+ try {
232
+ const result = await runTask(processor, parameters, transferableObjects);
233
+ --processor._activeTasks;
234
+ return result;
235
+ } catch (error) {
236
+ --processor._activeTasks;
237
+ throw error;
238
+ }
239
+ }
219
240
 
220
241
  /**
221
242
  * Schedule a task to be processed by the web worker asynchronously. If there are currently more
@@ -255,82 +276,65 @@ TaskProcessor.prototype.scheduleTask = function (
255
276
  return undefined;
256
277
  }
257
278
 
258
- ++this._activeTasks;
259
-
260
- const processor = this;
261
- return Promise.resolve(canTransferArrayBuffer()).then(function (
262
- canTransferArrayBuffer
263
- ) {
264
- if (!defined(transferableObjects)) {
265
- transferableObjects = emptyTransferableObjectArray;
266
- } else if (!canTransferArrayBuffer) {
267
- transferableObjects.length = 0;
268
- }
269
-
270
- const id = processor._nextID++;
271
- const deferred = defer();
272
- processor._deferreds[id] = deferred;
273
-
274
- processor._worker.postMessage(
275
- {
276
- id: id,
277
- parameters: parameters,
278
- canTransferArrayBuffer: canTransferArrayBuffer,
279
- },
280
- transferableObjects
281
- );
282
-
283
- return deferred.promise;
284
- });
279
+ return scheduleTask(this, parameters, transferableObjects);
285
280
  };
286
281
 
287
282
  /**
288
283
  * Posts a message to a web worker with configuration to initialize loading
289
- * and compiling a web assembly module asychronously, as well as an optional
284
+ * and compiling a web assembly module asynchronously, as well as an optional
290
285
  * fallback JavaScript module to use if Web Assembly is not supported.
291
286
  *
292
287
  * @param {object} [webAssemblyOptions] An object with the following properties:
293
288
  * @param {string} [webAssemblyOptions.modulePath] The path of the web assembly JavaScript wrapper module.
294
289
  * @param {string} [webAssemblyOptions.wasmBinaryFile] The path of the web assembly binary file.
295
290
  * @param {string} [webAssemblyOptions.fallbackModulePath] The path of the fallback JavaScript module to use if web assembly is not supported.
296
- * @returns {Promise<object>} A promise that resolves to the result when the web worker has loaded and compiled the web assembly module and is ready to process tasks.
291
+ * @returns {Promise<*>} A promise that resolves to the result when the web worker has loaded and compiled the web assembly module and is ready to process tasks.
292
+ *
293
+ * @exception {RuntimeError} This browser does not support Web Assembly, and no backup module was provided
297
294
  */
298
- TaskProcessor.prototype.initWebAssemblyModule = function (webAssemblyOptions) {
299
- if (!defined(this._worker)) {
300
- this._worker = createWorker(this);
295
+ TaskProcessor.prototype.initWebAssemblyModule = async function (
296
+ webAssemblyOptions
297
+ ) {
298
+ if (defined(this._webAssemblyPromise)) {
299
+ return this._webAssemblyPromise;
301
300
  }
302
301
 
303
- const deferred = defer();
304
- const processor = this;
305
- const worker = this._worker;
306
- getWebAssemblyLoaderConfig(this, webAssemblyOptions).then(function (
307
- wasmConfig
308
- ) {
309
- return Promise.resolve(canTransferArrayBuffer()).then(function (
310
- canTransferArrayBuffer
311
- ) {
312
- let transferableObjects;
313
- const binary = wasmConfig.wasmBinary;
314
- if (defined(binary) && canTransferArrayBuffer) {
315
- transferableObjects = [binary];
316
- }
317
-
318
- worker.onmessage = function (event) {
319
- worker.onmessage = function (event) {
320
- completeTask(processor, event.data);
321
- };
302
+ const init = async () => {
303
+ const worker = (this._worker = createWorker(this));
304
+ const wasmConfig = await getWebAssemblyLoaderConfig(
305
+ this,
306
+ webAssemblyOptions
307
+ );
308
+ const canTransfer = await Promise.resolve(canTransferArrayBuffer());
309
+ let transferableObjects;
310
+ const binary = wasmConfig.wasmBinary;
311
+ if (defined(binary) && canTransfer) {
312
+ transferableObjects = [binary];
313
+ }
322
314
 
323
- deferred.resolve(event.data);
315
+ const promise = new Promise((resolve, reject) => {
316
+ worker.onmessage = function ({ data }) {
317
+ if (defined(data)) {
318
+ resolve(data.result);
319
+ } else {
320
+ reject(new RuntimeError("Could not configure wasm module"));
321
+ }
324
322
  };
325
-
326
- worker.postMessage(
327
- { webAssemblyConfig: wasmConfig },
328
- transferableObjects
329
- );
330
323
  });
331
- });
332
324
 
333
- return deferred.promise;
325
+ worker.postMessage(
326
+ {
327
+ canTransferArrayBuffer: canTransfer,
328
+ parameters: { webAssemblyConfig: wasmConfig },
329
+ },
330
+ transferableObjects
331
+ );
332
+
333
+ return promise;
334
+ };
335
+
336
+ this._webAssemblyPromise = init();
337
+ return this._webAssemblyPromise;
334
338
  };
335
339
 
336
340
  /**
@@ -749,10 +749,10 @@ const rotation2Scratch = new Matrix3();
749
749
  *
750
750
  *
751
751
  * @example
752
- * // Transform a point from the ICRF axes to the Fixed axes.
752
+ * // Transform a point from the Fixed axes to the ICRF axes.
753
753
  * const now = Cesium.JulianDate.now();
754
754
  * const pointInFixed = Cesium.Cartesian3.fromDegrees(0.0, 0.0);
755
- * const fixedToIcrf = Cesium.Transforms.computeIcrfToFixedMatrix(now);
755
+ * const fixedToIcrf = Cesium.Transforms.computeFixedToIcrfMatrix(now);
756
756
  * let pointInInertial = new Cesium.Cartesian3();
757
757
  * if (Cesium.defined(fixedToIcrf)) {
758
758
  * pointInInertial = Cesium.Matrix3.multiplyByVector(fixedToIcrf, pointInFixed, pointInInertial);
@@ -21,7 +21,7 @@ function getBaseUrlFromCesiumScript() {
21
21
  let a;
22
22
  function tryMakeAbsolute(url) {
23
23
  if (typeof document === "undefined") {
24
- //Node.js and Web Workers. In both cases, the URL will already be absolute.
24
+ // Node.js and Web Workers. In both cases, the URL will already be absolute.
25
25
  return url;
26
26
  }
27
27
 
@@ -29,10 +29,6 @@ function tryMakeAbsolute(url) {
29
29
  a = document.createElement("a");
30
30
  }
31
31
  a.href = url;
32
-
33
- // IE only absolutizes href on get, not set
34
- // eslint-disable-next-line no-self-assign
35
- a.href = a.href;
36
32
  return a.href;
37
33
  }
38
34
 
@@ -45,17 +41,22 @@ function getCesiumBaseUrl() {
45
41
  let baseUrlString;
46
42
  if (typeof CESIUM_BASE_URL !== "undefined") {
47
43
  baseUrlString = CESIUM_BASE_URL;
44
+ } else if (defined(import.meta) && defined(import.meta.url)) {
45
+ // ESM
46
+ baseUrlString = getAbsoluteUri(".", import.meta.url);
48
47
  } else if (
49
48
  typeof define === "object" &&
50
49
  defined(define.amd) &&
51
50
  !define.amd.toUrlUndefined &&
52
51
  defined(require.toUrl)
53
52
  ) {
53
+ // RequireJS
54
54
  baseUrlString = getAbsoluteUri(
55
55
  "..",
56
56
  buildModuleUrl("Core/buildModuleUrl.js")
57
57
  );
58
58
  } else {
59
+ // IIFE
59
60
  baseUrlString = getBaseUrlFromCesiumScript();
60
61
  }
61
62
 
@@ -4,7 +4,7 @@ import Resource from "../Core/Resource.js";
4
4
 
5
5
  let defaultTokenCredit;
6
6
  const defaultAccessToken =
7
- "AAPK8f33c81975d04fa5bc64d58baa922e4d8t7EX1YAV3MBqwKXAhJ1uohub5U5OCU0PyXE7kNEVf8hebc9ZA4kk17Y4FYDA_rV";
7
+ "AAPK101bfb95c8624cafa30b55ec1709f9e65mp_hzhcQWdW-Km2L7Gukj--gHqZ8PQIEfih4Wa00sxBZyuTpBisCt5aJNvQm32h";
8
8
  /**
9
9
  * Default options for accessing the ArcGIS image tile service.
10
10
  *
@@ -1,5 +1,6 @@
1
1
  import defined from "../Core/defined.js";
2
2
  import FeatureDetection from "../Core/FeatureDetection.js";
3
+ import RuntimeError from "../Core/RuntimeError.js";
3
4
  import TaskProcessor from "../Core/TaskProcessor.js";
4
5
 
5
6
  /**
@@ -16,6 +17,7 @@ DracoLoader._maxDecodingConcurrency = Math.max(
16
17
  // Exposed for testing purposes
17
18
  DracoLoader._decoderTaskProcessor = undefined;
18
19
  DracoLoader._taskProcessorReady = false;
20
+ DracoLoader._error = undefined;
19
21
  DracoLoader._getDecoderTaskProcessor = function () {
20
22
  if (!defined(DracoLoader._decoderTaskProcessor)) {
21
23
  const processor = new TaskProcessor(
@@ -24,11 +26,19 @@ DracoLoader._getDecoderTaskProcessor = function () {
24
26
  );
25
27
  processor
26
28
  .initWebAssemblyModule({
27
- modulePath: "ThirdParty/Workers/draco_decoder_nodejs.js",
28
29
  wasmBinaryFile: "ThirdParty/draco_decoder.wasm",
29
30
  })
30
- .then(function () {
31
- DracoLoader._taskProcessorReady = true;
31
+ .then(function (result) {
32
+ if (result) {
33
+ DracoLoader._taskProcessorReady = true;
34
+ } else {
35
+ DracoLoader._error = new RuntimeError(
36
+ "Draco decoder could not be initialized."
37
+ );
38
+ }
39
+ })
40
+ .catch((error) => {
41
+ DracoLoader._error = error;
32
42
  });
33
43
  DracoLoader._decoderTaskProcessor = processor;
34
44
  }
@@ -39,9 +49,15 @@ DracoLoader._getDecoderTaskProcessor = function () {
39
49
  /**
40
50
  * Decodes a compressed point cloud. Returns undefined if the task cannot be scheduled.
41
51
  * @private
52
+ *
53
+ * @exception {RuntimeError} Draco decoder could not be initialized.
42
54
  */
43
55
  DracoLoader.decodePointCloud = function (parameters) {
44
56
  const decoderTaskProcessor = DracoLoader._getDecoderTaskProcessor();
57
+ if (defined(DracoLoader._error)) {
58
+ throw DracoLoader._error;
59
+ }
60
+
45
61
  if (!DracoLoader._taskProcessorReady) {
46
62
  // The task processor is not ready to schedule tasks
47
63
  return;
@@ -62,9 +78,16 @@ DracoLoader.decodePointCloud = function (parameters) {
62
78
  *
63
79
  * @returns {Promise} A promise that resolves to the decoded indices and attributes.
64
80
  * @private
81
+ *
82
+ * @exception {RuntimeError} Draco decoder could not be initialized.
65
83
  */
66
84
  DracoLoader.decodeBufferView = function (options) {
67
85
  const decoderTaskProcessor = DracoLoader._getDecoderTaskProcessor();
86
+
87
+ if (defined(DracoLoader._error)) {
88
+ throw DracoLoader._error;
89
+ }
90
+
68
91
  if (!DracoLoader._taskProcessorReady) {
69
92
  // The task processor is not ready to schedule tasks
70
93
  return;
@@ -55,7 +55,6 @@ import destroyObject from "../Core/destroyObject.js";
55
55
  import HeightmapEncoding from "../Core/HeightmapEncoding.js";
56
56
  import Resource from "../Core/Resource.js";
57
57
  import RuntimeError from "../Core/RuntimeError.js";
58
- import TaskProcessor from "../Core/TaskProcessor.js";
59
58
  import WebMercatorProjection from "../Core/WebMercatorProjection.js";
60
59
  import I3SLayer from "./I3SLayer.js";
61
60
  import Lerc from "lerc";
@@ -492,32 +491,6 @@ I3SDataProvider.prototype._binarizeGltf = function (rawGltf) {
492
491
  return binaryGltfData;
493
492
  };
494
493
 
495
- /**
496
- * @private
497
- * @returns {Promise<TaskProcessor>}
498
- */
499
- I3SDataProvider.prototype.getDecoderTaskProcessor = function () {
500
- if (defined(this._taskProcessorReadyPromise)) {
501
- return this._taskProcessorReadyPromise;
502
- }
503
-
504
- if (!defined(this._decoderTaskProcessor)) {
505
- const processor = new TaskProcessor("decodeI3S");
506
- this._taskProcessorReadyPromise = processor
507
- .initWebAssemblyModule({
508
- modulePath: "ThirdParty/Workers/draco_decoder_nodejs.js",
509
- wasmBinaryFile: "ThirdParty/draco_decoder.wasm",
510
- })
511
- .then(() => {
512
- return processor;
513
- });
514
-
515
- this._decoderTaskProcessor = processor;
516
- }
517
-
518
- return this._taskProcessorReadyPromise;
519
- };
520
-
521
494
  const scratchCartesian2 = new Cartesian2();
522
495
 
523
496
  function getCoveredTiles(terrainProvider, extent) {