@cesium/engine 2.1.0 → 2.3.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 (240) hide show
  1. package/Build/Workers/{AttributeCompression-8a5a065e.js → AttributeCompression-f9f6c717.js} +1 -1
  2. package/Build/Workers/{AxisAlignedBoundingBox-a6f9f0e5.js → AxisAlignedBoundingBox-31fadcf0.js} +1 -1
  3. package/Build/Workers/{BoundingRectangle-b0a68595.js → BoundingRectangle-995f0079.js} +1 -1
  4. package/Build/Workers/{BoxGeometry-baedd794.js → BoxGeometry-7eb1af60.js} +1 -1
  5. package/Build/Workers/{Color-f85df1be.js → Color-2dc49658.js} +1 -1
  6. package/Build/Workers/{CoplanarPolygonGeometryLibrary-30516950.js → CoplanarPolygonGeometryLibrary-d7d972d6.js} +1 -1
  7. package/Build/Workers/{CorridorGeometryLibrary-5d5d3b3a.js → CorridorGeometryLibrary-1f5ef7b3.js} +1 -1
  8. package/Build/Workers/{CylinderGeometry-d899ae26.js → CylinderGeometry-23c67a6c.js} +1 -1
  9. package/Build/Workers/{CylinderGeometryLibrary-135b0858.js → CylinderGeometryLibrary-7bf291b4.js} +1 -1
  10. package/Build/Workers/{EllipseGeometry-a49f8449.js → EllipseGeometry-37014da4.js} +1 -1
  11. package/Build/Workers/{EllipseGeometryLibrary-cba7edde.js → EllipseGeometryLibrary-92ab6b1e.js} +1 -1
  12. package/Build/Workers/{EllipseOutlineGeometry-8095c8cb.js → EllipseOutlineGeometry-12b6fef5.js} +1 -1
  13. package/Build/Workers/{EllipsoidGeodesic-dcff5cbd.js → EllipsoidGeodesic-5b3623dc.js} +1 -1
  14. package/Build/Workers/{EllipsoidGeometry-ed93f571.js → EllipsoidGeometry-508da15c.js} +1 -1
  15. package/Build/Workers/{EllipsoidOutlineGeometry-e4854854.js → EllipsoidOutlineGeometry-40d97455.js} +1 -1
  16. package/Build/Workers/{EllipsoidRhumbLine-b672d507.js → EllipsoidRhumbLine-ef872433.js} +1 -1
  17. package/Build/Workers/{EllipsoidTangentPlane-7ae1aa9a.js → EllipsoidTangentPlane-46d4d9c2.js} +1 -1
  18. package/Build/Workers/{EncodedCartesian3-e8bbca36.js → EncodedCartesian3-57415c8a.js} +1 -1
  19. package/Build/Workers/{FrustumGeometry-b62db3e3.js → FrustumGeometry-38605e69.js} +32 -4
  20. package/Build/Workers/{GeometryAttribute-780af4fa.js → GeometryAttribute-a466e9c7.js} +1 -1
  21. package/Build/Workers/{GeometryInstance-3fb607b7.js → GeometryInstance-34d9e21e.js} +1 -1
  22. package/Build/Workers/{GeometryPipeline-36b61c99.js → GeometryPipeline-dcf79306.js} +1 -1
  23. package/Build/Workers/{IndexDatatype-b8f3e09d.js → IndexDatatype-2643aa47.js} +1 -1
  24. package/Build/Workers/{IntersectionTests-e889fcf0.js → IntersectionTests-88c49b2e.js} +1 -1
  25. package/Build/Workers/{Math-dad82b4d.js → Math-0a2ac845.js} +12 -2
  26. package/Build/Workers/{Matrix2-1e403d0e.js → Matrix2-e1298525.js} +1 -1
  27. package/Build/Workers/{Matrix3-fa806b97.js → Matrix3-41c58dde.js} +1 -1
  28. package/Build/Workers/{OrientedBoundingBox-43478ac8.js → OrientedBoundingBox-2dd47921.js} +5 -3
  29. package/Build/Workers/{Plane-c27e1ac6.js → Plane-4c3d403b.js} +1 -1
  30. package/Build/Workers/{PolygonGeometryLibrary-38a98276.js → PolygonGeometryLibrary-59126025.js} +1 -1
  31. package/Build/Workers/PolygonPipeline-1fe328c0.js +1344 -0
  32. package/Build/Workers/{PolylinePipeline-30e4cec9.js → PolylinePipeline-896735cc.js} +1 -1
  33. package/Build/Workers/{PolylineVolumeGeometryLibrary-90551d26.js → PolylineVolumeGeometryLibrary-9c0639f7.js} +1 -1
  34. package/Build/Workers/{PrimitivePipeline-558d9cb0.js → PrimitivePipeline-fc1a47ff.js} +1 -1
  35. package/Build/Workers/{RectangleGeometryLibrary-815c68df.js → RectangleGeometryLibrary-a23c9ebe.js} +1 -1
  36. package/Build/Workers/{TerrainEncoding-341ead52.js → TerrainEncoding-51b8b33b.js} +1 -1
  37. package/Build/Workers/Transforms-bc45e707.js +14699 -0
  38. package/Build/Workers/{WallGeometryLibrary-ccf90976.js → WallGeometryLibrary-007e9883.js} +1 -1
  39. package/Build/Workers/{WebMercatorProjection-76a3fcc0.js → WebMercatorProjection-13ed1a6e.js} +1 -1
  40. package/Build/Workers/{arrayRemoveDuplicates-fac118a8.js → arrayRemoveDuplicates-d2061e85.js} +1 -1
  41. package/Build/Workers/cesiumWorkerBootstrapper.js +1 -1
  42. package/Build/Workers/combineGeometry.js +1 -1
  43. package/Build/Workers/createBoxGeometry.js +1 -1
  44. package/Build/Workers/createBoxOutlineGeometry.js +1 -1
  45. package/Build/Workers/createCircleGeometry.js +1 -1
  46. package/Build/Workers/createCircleOutlineGeometry.js +1 -1
  47. package/Build/Workers/createCoplanarPolygonGeometry.js +1 -1
  48. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +1 -1
  49. package/Build/Workers/createCorridorGeometry.js +1 -1
  50. package/Build/Workers/createCorridorOutlineGeometry.js +1 -1
  51. package/Build/Workers/createCylinderGeometry.js +1 -1
  52. package/Build/Workers/createCylinderOutlineGeometry.js +1 -1
  53. package/Build/Workers/createEllipseGeometry.js +1 -1
  54. package/Build/Workers/createEllipseOutlineGeometry.js +1 -1
  55. package/Build/Workers/createEllipsoidGeometry.js +1 -1
  56. package/Build/Workers/createEllipsoidOutlineGeometry.js +1 -1
  57. package/Build/Workers/createFrustumGeometry.js +1 -1
  58. package/Build/Workers/createFrustumOutlineGeometry.js +1 -1
  59. package/Build/Workers/createGeometry.js +1 -1
  60. package/Build/Workers/createGroundPolylineGeometry.js +1 -1
  61. package/Build/Workers/createPlaneGeometry.js +1 -1
  62. package/Build/Workers/createPlaneOutlineGeometry.js +1 -1
  63. package/Build/Workers/createPolygonGeometry.js +1 -1
  64. package/Build/Workers/createPolygonOutlineGeometry.js +1 -1
  65. package/Build/Workers/createPolylineGeometry.js +1 -1
  66. package/Build/Workers/createPolylineVolumeGeometry.js +1 -1
  67. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +1 -1
  68. package/Build/Workers/createRectangleGeometry.js +1 -1
  69. package/Build/Workers/createRectangleOutlineGeometry.js +1 -1
  70. package/Build/Workers/createSimplePolylineGeometry.js +1 -1
  71. package/Build/Workers/createSphereGeometry.js +1 -1
  72. package/Build/Workers/createSphereOutlineGeometry.js +1 -1
  73. package/Build/Workers/createVectorTileClampedPolylines.js +1 -1
  74. package/Build/Workers/createVectorTileGeometries.js +1 -1
  75. package/Build/Workers/createVectorTilePoints.js +1 -1
  76. package/Build/Workers/createVectorTilePolygons.js +1 -1
  77. package/Build/Workers/createVectorTilePolylines.js +1 -1
  78. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +1 -1
  79. package/Build/Workers/createVerticesFromHeightmap.js +5 -8
  80. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +10 -15
  81. package/Build/Workers/createWallGeometry.js +1 -1
  82. package/Build/Workers/createWallOutlineGeometry.js +1 -1
  83. package/Build/Workers/decodeDraco.js +1 -1
  84. package/Build/Workers/decodeI3S.js +1 -1
  85. package/Build/Workers/package.js +1 -1
  86. package/Build/Workers/transferTypedArrayTest.js +1 -1
  87. package/Build/Workers/upsampleQuantizedTerrainMesh.js +1 -1
  88. package/Source/Core/ArcGISTiledElevationTerrainProvider.js +291 -191
  89. package/Source/Core/BingMapsGeocoderService.js +19 -1
  90. package/Source/Core/CartographicGeocoderService.js +15 -0
  91. package/Source/Core/CesiumTerrainProvider.js +571 -434
  92. package/Source/Core/Credit.js +1 -1
  93. package/Source/Core/CustomHeightmapTerrainProvider.js +12 -0
  94. package/Source/Core/EllipsoidTerrainProvider.js +17 -10
  95. package/Source/Core/FrustumGeometry.js +4 -3
  96. package/Source/Core/GeocoderService.js +32 -1
  97. package/Source/Core/GoogleEarthEnterpriseMetadata.js +86 -34
  98. package/Source/Core/GoogleEarthEnterpriseTerrainProvider.js +119 -82
  99. package/Source/Core/Ion.js +1 -1
  100. package/Source/Core/IonGeocoderService.js +17 -2
  101. package/Source/Core/IonResource.js +14 -3
  102. package/Source/Core/OpenCageGeocoderService.js +18 -1
  103. package/Source/Core/OrientedBoundingBox.js +4 -2
  104. package/Source/Core/OrthographicFrustum.js +13 -0
  105. package/Source/Core/PeliasGeocoderService.js +14 -1
  106. package/Source/Core/PerspectiveFrustum.js +14 -0
  107. package/Source/Core/Request.js +3 -2
  108. package/Source/Core/RequestScheduler.js +10 -5
  109. package/Source/Core/Resource.js +230 -236
  110. package/Source/Core/TerrainProvider.js +9 -14
  111. package/Source/Core/TileProviderError.js +8 -8
  112. package/Source/Core/VRTheWorldTerrainProvider.js +193 -124
  113. package/Source/Core/buildModuleUrl.js +4 -3
  114. package/Source/Core/createWorldTerrain.js +20 -2
  115. package/Source/Core/createWorldTerrainAsync.js +48 -0
  116. package/Source/Core/sampleTerrain.js +9 -10
  117. package/Source/Core/sampleTerrainMostDetailed.js +66 -72
  118. package/Source/DataSources/Cesium3DTilesetVisualizer.js +37 -26
  119. package/Source/DataSources/DataSourceDisplay.js +2 -2
  120. package/Source/DataSources/Entity.js +6 -1
  121. package/Source/DataSources/EntityCluster.js +126 -128
  122. package/Source/DataSources/ModelVisualizer.js +104 -34
  123. package/Source/DataSources/PolygonGraphics.js +1 -1
  124. package/Source/Renderer/UniformState.js +3 -2
  125. package/Source/Renderer/demodernizeShader.js +5 -5
  126. package/Source/Scene/ArcGisBaseMapType.js +12 -0
  127. package/Source/Scene/ArcGisMapServerImageryProvider.js +694 -376
  128. package/Source/Scene/ArcGisMapService.js +83 -0
  129. package/Source/Scene/BingMapsImageryProvider.js +511 -305
  130. package/Source/Scene/BufferLoader.js +29 -34
  131. package/Source/Scene/Camera.js +8 -7
  132. package/Source/Scene/Cesium3DTile.js +392 -254
  133. package/Source/Scene/Cesium3DTileBatchTable.js +2 -2
  134. package/Source/Scene/Cesium3DTileContent.js +16 -0
  135. package/Source/Scene/Cesium3DTileContentFactory.js +4 -4
  136. package/Source/Scene/Cesium3DTilePass.js +8 -11
  137. package/Source/Scene/Cesium3DTileStyleEngine.js +1 -1
  138. package/Source/Scene/Cesium3DTilesVoxelProvider.js +225 -117
  139. package/Source/Scene/Cesium3DTileset.js +756 -482
  140. package/Source/Scene/Cesium3DTilesetBaseTraversal.js +301 -0
  141. package/Source/Scene/Cesium3DTilesetMostDetailedTraversal.js +33 -46
  142. package/Source/Scene/Cesium3DTilesetSkipTraversal.js +421 -0
  143. package/Source/Scene/Cesium3DTilesetTraversal.js +219 -671
  144. package/Source/Scene/ClassificationPrimitive.js +7 -0
  145. package/Source/Scene/Composite3DTileContent.js +69 -26
  146. package/Source/Scene/CreditDisplay.js +132 -20
  147. package/Source/Scene/DepthPlane.js +1 -1
  148. package/Source/Scene/Empty3DTileContent.js +31 -1
  149. package/Source/Scene/Geometry3DTileContent.js +47 -7
  150. package/Source/Scene/Globe.js +5 -1
  151. package/Source/Scene/GlobeSurfaceTile.js +2 -1
  152. package/Source/Scene/GlobeSurfaceTileProvider.js +53 -30
  153. package/Source/Scene/GltfBufferViewLoader.js +47 -91
  154. package/Source/Scene/GltfDracoLoader.js +110 -112
  155. package/Source/Scene/GltfImageLoader.js +71 -78
  156. package/Source/Scene/GltfIndexBufferLoader.js +108 -121
  157. package/Source/Scene/GltfJsonLoader.js +87 -74
  158. package/Source/Scene/GltfLoader.js +381 -300
  159. package/Source/Scene/GltfStructuralMetadataLoader.js +109 -110
  160. package/Source/Scene/GltfTextureLoader.js +97 -96
  161. package/Source/Scene/GltfVertexBufferLoader.js +128 -133
  162. package/Source/Scene/GoogleEarthEnterpriseImageryProvider.js +353 -225
  163. package/Source/Scene/GoogleEarthEnterpriseMapsProvider.js +491 -331
  164. package/Source/Scene/GridImageryProvider.js +267 -104
  165. package/Source/Scene/GroundPolylinePrimitive.js +12 -1
  166. package/Source/Scene/GroundPrimitive.js +8 -1
  167. package/Source/Scene/I3SDataProvider.js +214 -113
  168. package/Source/Scene/I3SFeature.js +7 -6
  169. package/Source/Scene/I3SLayer.js +26 -37
  170. package/Source/Scene/I3SNode.js +59 -66
  171. package/Source/Scene/Imagery.js +6 -1
  172. package/Source/Scene/ImageryLayer.js +299 -48
  173. package/Source/Scene/ImageryLayerCollection.js +26 -0
  174. package/Source/Scene/ImageryProvider.js +129 -111
  175. package/Source/Scene/Implicit3DTileContent.js +72 -23
  176. package/Source/Scene/ImplicitSubtree.js +66 -45
  177. package/Source/Scene/IonImageryProvider.js +482 -275
  178. package/Source/Scene/MapboxImageryProvider.js +272 -112
  179. package/Source/Scene/MapboxStyleImageryProvider.js +270 -111
  180. package/Source/Scene/MetadataSchemaLoader.js +26 -36
  181. package/Source/Scene/Model/B3dmLoader.js +42 -46
  182. package/Source/Scene/Model/GeoJsonLoader.js +8 -32
  183. package/Source/Scene/Model/I3dmLoader.js +48 -74
  184. package/Source/Scene/Model/MaterialPipelineStage.js +12 -12
  185. package/Source/Scene/Model/Model.js +514 -135
  186. package/Source/Scene/Model/Model3DTileContent.js +83 -31
  187. package/Source/Scene/Model/ModelAnimationCollection.js +3 -3
  188. package/Source/Scene/Model/ModelDrawCommand.js +15 -26
  189. package/Source/Scene/Model/ModelUtility.js +16 -16
  190. package/Source/Scene/Model/PntsLoader.js +27 -32
  191. package/Source/Scene/Model/UniformType.js +1 -1
  192. package/Source/Scene/Multiple3DTileContent.js +134 -115
  193. package/Source/Scene/Picking.js +3 -2
  194. package/Source/Scene/PointCloud.js +11 -19
  195. package/Source/Scene/Primitive.js +20 -0
  196. package/Source/Scene/QuadtreePrimitive.js +5 -2
  197. package/Source/Scene/QuadtreeTileProvider.js +4 -8
  198. package/Source/Scene/ResourceCache.js +47 -105
  199. package/Source/Scene/ResourceCacheStatistics.js +24 -58
  200. package/Source/Scene/ResourceLoader.js +5 -17
  201. package/Source/Scene/ResourceLoaderState.js +12 -4
  202. package/Source/Scene/Scene.js +65 -0
  203. package/Source/Scene/SceneTransforms.js +3 -2
  204. package/Source/Scene/ScreenSpaceCameraController.js +2 -2
  205. package/Source/Scene/SingleTileImageryProvider.js +382 -209
  206. package/Source/Scene/Terrain.js +196 -0
  207. package/Source/Scene/TileCoordinatesImageryProvider.js +267 -104
  208. package/Source/Scene/TileMapServiceImageryProvider.js +177 -85
  209. package/Source/Scene/Tileset3DTileContent.js +47 -5
  210. package/Source/Scene/TimeDynamicPointCloud.js +15 -2
  211. package/Source/Scene/UrlTemplateImageryProvider.js +343 -215
  212. package/Source/Scene/Vector3DTileClampedPolylines.js +96 -84
  213. package/Source/Scene/Vector3DTileContent.js +47 -22
  214. package/Source/Scene/Vector3DTileGeometry.js +57 -52
  215. package/Source/Scene/Vector3DTilePoints.js +97 -81
  216. package/Source/Scene/Vector3DTilePolygons.js +118 -117
  217. package/Source/Scene/Vector3DTilePolylines.js +86 -82
  218. package/Source/Scene/Vector3DTilePrimitive.js +0 -1
  219. package/Source/Scene/VoxelContent.js +61 -63
  220. package/Source/Scene/VoxelPrimitive.js +39 -91
  221. package/Source/Scene/VoxelProvider.js +2 -2
  222. package/Source/Scene/WebMapServiceImageryProvider.js +272 -111
  223. package/Source/Scene/WebMapTileServiceImageryProvider.js +270 -107
  224. package/Source/Scene/computeFlyToLocationForRectangle.js +33 -37
  225. package/Source/Scene/createOsmBuildings.js +6 -0
  226. package/Source/Scene/createOsmBuildingsAsync.js +82 -0
  227. package/Source/Scene/createWorldImagery.js +14 -5
  228. package/Source/Scene/createWorldImageryAsync.js +39 -0
  229. package/Source/Shaders/AtmosphereCommon.glsl +51 -8
  230. package/Source/Shaders/AtmosphereCommon.js +51 -8
  231. package/Source/Shaders/PostProcessStages/AmbientOcclusionGenerate.glsl +1 -1
  232. package/Source/Shaders/PostProcessStages/AmbientOcclusionGenerate.js +1 -1
  233. package/Source/Shaders/PostProcessStages/AmbientOcclusionModulate.glsl +3 -3
  234. package/Source/Shaders/PostProcessStages/AmbientOcclusionModulate.js +3 -3
  235. package/Source/Widget/CesiumWidget.js +67 -27
  236. package/index.d.ts +2429 -1475
  237. package/index.js +324 -315
  238. package/package.json +4 -4
  239. package/Build/Workers/PolygonPipeline-d31ff61c.js +0 -1345
  240. package/Build/Workers/Transforms-9e9df299.js +0 -14714
@@ -68,20 +68,6 @@ if (defined(Object.create)) {
68
68
  }
69
69
 
70
70
  Object.defineProperties(GltfImageLoader.prototype, {
71
- /**
72
- * A promise that resolves to the resource when the resource is ready, or undefined if the resource hasn't started loading.
73
- *
74
- * @memberof GltfImageLoader.prototype
75
- *
76
- * @type {Promise<GltfImageLoader>|undefined}
77
- * @readonly
78
- * @private
79
- */
80
- promise: {
81
- get: function () {
82
- return this._promise;
83
- },
84
- },
85
71
  /**
86
72
  * The cache key of the resource.
87
73
  *
@@ -132,6 +118,10 @@ Object.defineProperties(GltfImageLoader.prototype, {
132
118
  * @private
133
119
  */
134
120
  GltfImageLoader.prototype.load = function () {
121
+ if (defined(this._promise)) {
122
+ return this._promise;
123
+ }
124
+
135
125
  if (defined(this._bufferViewId)) {
136
126
  this._promise = loadFromBufferView(this);
137
127
  return this._promise;
@@ -158,78 +148,78 @@ function getImageAndMipLevels(image) {
158
148
  };
159
149
  }
160
150
 
161
- function loadFromBufferView(imageLoader) {
151
+ async function loadFromBufferView(imageLoader) {
152
+ imageLoader._state = ResourceLoaderState.LOADING;
162
153
  const resourceCache = imageLoader._resourceCache;
163
- const bufferViewLoader = resourceCache.loadBufferView({
164
- gltf: imageLoader._gltf,
165
- bufferViewId: imageLoader._bufferViewId,
166
- gltfResource: imageLoader._gltfResource,
167
- baseResource: imageLoader._baseResource,
168
- });
154
+ try {
155
+ const bufferViewLoader = resourceCache.getBufferViewLoader({
156
+ gltf: imageLoader._gltf,
157
+ bufferViewId: imageLoader._bufferViewId,
158
+ gltfResource: imageLoader._gltfResource,
159
+ baseResource: imageLoader._baseResource,
160
+ });
161
+ imageLoader._bufferViewLoader = bufferViewLoader;
162
+ await bufferViewLoader.load();
169
163
 
170
- imageLoader._bufferViewLoader = bufferViewLoader;
171
- imageLoader._state = ResourceLoaderState.LOADING;
164
+ if (imageLoader.isDestroyed()) {
165
+ return;
166
+ }
172
167
 
173
- return bufferViewLoader.promise
174
- .then(function () {
175
- if (imageLoader.isDestroyed()) {
176
- return;
177
- }
178
-
179
- const typedArray = bufferViewLoader.typedArray;
180
- return loadImageFromBufferTypedArray(typedArray).then(function (image) {
181
- if (imageLoader.isDestroyed()) {
182
- return;
183
- }
184
-
185
- const imageAndMipLevels = getImageAndMipLevels(image);
186
-
187
- // Unload everything except the image
188
- imageLoader.unload();
189
-
190
- imageLoader._image = imageAndMipLevels.image;
191
- imageLoader._mipLevels = imageAndMipLevels.mipLevels;
192
- imageLoader._state = ResourceLoaderState.READY;
193
- return imageLoader;
194
- });
195
- })
196
- .catch(function (error) {
197
- if (imageLoader.isDestroyed()) {
198
- return;
199
- }
200
- return handleError(imageLoader, error, "Failed to load embedded image");
201
- });
168
+ const typedArray = bufferViewLoader.typedArray;
169
+ const image = await loadImageFromBufferTypedArray(typedArray);
170
+ if (imageLoader.isDestroyed()) {
171
+ return;
172
+ }
173
+
174
+ const imageAndMipLevels = getImageAndMipLevels(image);
175
+
176
+ // Unload everything except the image
177
+ imageLoader.unload();
178
+
179
+ imageLoader._image = imageAndMipLevels.image;
180
+ imageLoader._mipLevels = imageAndMipLevels.mipLevels;
181
+ imageLoader._state = ResourceLoaderState.READY;
182
+
183
+ return imageLoader;
184
+ } catch (error) {
185
+ if (imageLoader.isDestroyed()) {
186
+ return;
187
+ }
188
+
189
+ return handleError(imageLoader, error, "Failed to load embedded image");
190
+ }
202
191
  }
203
192
 
204
- function loadFromUri(imageLoader) {
193
+ async function loadFromUri(imageLoader) {
194
+ imageLoader._state = ResourceLoaderState.LOADING;
205
195
  const baseResource = imageLoader._baseResource;
206
196
  const uri = imageLoader._uri;
207
197
  const resource = baseResource.getDerivedResource({
208
198
  url: uri,
209
199
  });
210
- imageLoader._state = ResourceLoaderState.LOADING;
211
- return loadImageFromUri(resource)
212
- .then(function (image) {
213
- if (imageLoader.isDestroyed()) {
214
- return;
215
- }
216
-
217
- const imageAndMipLevels = getImageAndMipLevels(image);
218
-
219
- // Unload everything except the image
220
- imageLoader.unload();
221
-
222
- imageLoader._image = imageAndMipLevels.image;
223
- imageLoader._mipLevels = imageAndMipLevels.mipLevels;
224
- imageLoader._state = ResourceLoaderState.READY;
225
- return imageLoader;
226
- })
227
- .catch(function (error) {
228
- if (imageLoader.isDestroyed()) {
229
- return;
230
- }
231
- return handleError(imageLoader, error, `Failed to load image: ${uri}`);
232
- });
200
+
201
+ try {
202
+ const image = await loadImageFromUri(resource);
203
+ if (imageLoader.isDestroyed()) {
204
+ return;
205
+ }
206
+
207
+ const imageAndMipLevels = getImageAndMipLevels(image);
208
+
209
+ // Unload everything except the image
210
+ imageLoader.unload();
211
+
212
+ imageLoader._image = imageAndMipLevels.image;
213
+ imageLoader._mipLevels = imageAndMipLevels.mipLevels;
214
+ imageLoader._state = ResourceLoaderState.READY;
215
+
216
+ return imageLoader;
217
+ } catch (error) {
218
+ if (imageLoader.isDestroyed()) {
219
+ return;
220
+ }
221
+ return handleError(imageLoader, error, `Failed to load image: ${uri}`);
222
+ }
233
223
  }
234
224
 
235
225
  function handleError(imageLoader, error, errorMessage) {
@@ -269,7 +259,7 @@ function getMimeTypeFromTypedArray(typedArray) {
269
259
  throw new RuntimeError("Image format is not recognized");
270
260
  }
271
261
 
272
- function loadImageFromBufferTypedArray(typedArray) {
262
+ async function loadImageFromBufferTypedArray(typedArray) {
273
263
  const mimeType = getMimeTypeFromTypedArray(typedArray);
274
264
  if (mimeType === "image/ktx2") {
275
265
  // Need to make a copy of the embedded KTX2 buffer otherwise the underlying
@@ -310,7 +300,10 @@ function loadImageFromUri(resource) {
310
300
  * @private
311
301
  */
312
302
  GltfImageLoader.prototype.unload = function () {
313
- if (defined(this._bufferViewLoader)) {
303
+ if (
304
+ defined(this._bufferViewLoader) &&
305
+ !this._bufferViewLoader.isDestroyed()
306
+ ) {
314
307
  this._resourceCache.unload(this._bufferViewLoader);
315
308
  }
316
309
 
@@ -79,7 +79,6 @@ function GltfIndexBufferLoader(options) {
79
79
  this._buffer = undefined;
80
80
  this._state = ResourceLoaderState.UNLOADED;
81
81
  this._promise = undefined;
82
- this._process = function (loader, frameState) {};
83
82
  }
84
83
 
85
84
  if (defined(Object.create)) {
@@ -88,20 +87,6 @@ if (defined(Object.create)) {
88
87
  }
89
88
 
90
89
  Object.defineProperties(GltfIndexBufferLoader.prototype, {
91
- /**
92
- * A promise that resolves to the resource when the resource is ready, or undefined if the resource has not yet started loading.
93
- *
94
- * @memberof GltfIndexBufferLoader.prototype
95
- *
96
- * @type {Promise<GltfIndexBufferLoader>|undefined}
97
- * @readonly
98
- * @private
99
- */
100
- promise: {
101
- get: function () {
102
- return this._promise;
103
- },
104
- },
105
90
  /**
106
91
  * The cache key of the resource.
107
92
  *
@@ -168,135 +153,72 @@ const scratchIndexBufferJob = new CreateIndexBufferJob();
168
153
  * @returns {Promise<GltfIndexBufferLoader>} A promise which resolves to the loader when the resource loading is completed.
169
154
  * @private
170
155
  */
171
- GltfIndexBufferLoader.prototype.load = function () {
172
- let promise;
156
+ GltfIndexBufferLoader.prototype.load = async function () {
157
+ if (defined(this._promise)) {
158
+ return this._promise;
159
+ }
173
160
 
174
161
  if (defined(this._draco)) {
175
- promise = loadFromDraco(this);
176
- } else {
177
- promise = loadFromBufferView(this);
162
+ this._promise = loadFromDraco(this);
163
+ return this._promise;
178
164
  }
179
165
 
180
- const that = this;
181
- const processPromise = new Promise(function (resolve) {
182
- that._process = function (loader, frameState) {
183
- if (loader._state === ResourceLoaderState.READY) {
184
- return;
185
- }
186
-
187
- const typedArray = loader._typedArray;
188
- const indexDatatype = loader._indexDatatype;
189
-
190
- if (defined(loader._dracoLoader)) {
191
- loader._dracoLoader.process(frameState);
192
- }
193
-
194
- if (defined(loader._bufferViewLoader)) {
195
- loader._bufferViewLoader.process(frameState);
196
- }
197
-
198
- if (!defined(typedArray)) {
199
- // Buffer view hasn't been loaded yet
200
- return;
201
- }
202
-
203
- let buffer;
204
- if (loader._loadBuffer && loader._asynchronous) {
205
- const indexBufferJob = scratchIndexBufferJob;
206
- indexBufferJob.set(typedArray, indexDatatype, frameState.context);
207
- const jobScheduler = frameState.jobScheduler;
208
- if (!jobScheduler.execute(indexBufferJob, JobType.BUFFER)) {
209
- // Job scheduler is full. Try again next frame.
210
- return;
211
- }
212
- buffer = indexBufferJob.buffer;
213
- } else if (loader._loadBuffer) {
214
- buffer = createIndexBuffer(
215
- typedArray,
216
- indexDatatype,
217
- frameState.context
218
- );
219
- }
220
-
221
- // Unload everything except the index buffer and/or typed array.
222
- loader.unload();
223
-
224
- loader._buffer = buffer;
225
- loader._typedArray = loader._loadTypedArray ? typedArray : undefined;
226
- loader._state = ResourceLoaderState.READY;
227
- resolve(loader);
228
- };
229
- });
230
-
231
- this._promise = promise
232
- .then(function () {
233
- if (that.isDestroyed()) {
234
- return;
235
- }
236
-
237
- return processPromise;
238
- })
239
- .catch(function (error) {
240
- if (that.isDestroyed()) {
241
- return;
242
- }
243
-
244
- return handleError(that, error);
245
- });
246
-
166
+ this._promise = loadFromBufferView(this);
247
167
  return this._promise;
248
168
  };
249
169
 
250
- function loadFromDraco(indexBufferLoader) {
170
+ async function loadFromDraco(indexBufferLoader) {
171
+ indexBufferLoader._state = ResourceLoaderState.LOADING;
251
172
  const resourceCache = indexBufferLoader._resourceCache;
252
- const dracoLoader = resourceCache.loadDraco({
253
- gltf: indexBufferLoader._gltf,
254
- draco: indexBufferLoader._draco,
255
- gltfResource: indexBufferLoader._gltfResource,
256
- baseResource: indexBufferLoader._baseResource,
257
- });
258
173
 
259
- indexBufferLoader._dracoLoader = dracoLoader;
260
- indexBufferLoader._state = ResourceLoaderState.LOADING;
174
+ try {
175
+ const dracoLoader = resourceCache.getDracoLoader({
176
+ gltf: indexBufferLoader._gltf,
177
+ draco: indexBufferLoader._draco,
178
+ gltfResource: indexBufferLoader._gltfResource,
179
+ baseResource: indexBufferLoader._baseResource,
180
+ });
181
+ indexBufferLoader._dracoLoader = dracoLoader;
182
+ await dracoLoader.load();
261
183
 
262
- return dracoLoader.promise.then(function () {
263
184
  if (indexBufferLoader.isDestroyed()) {
264
185
  return;
265
186
  }
187
+
266
188
  // Now wait for process() to run to finish loading
267
- const typedArray = dracoLoader.decodedData.indices.typedArray;
268
- indexBufferLoader._typedArray = typedArray;
269
- // The index datatype may be a smaller datatype after draco decode
270
- indexBufferLoader._indexDatatype = ComponentDatatype.fromTypedArray(
271
- typedArray
272
- );
273
- indexBufferLoader._state = ResourceLoaderState.PROCESSING;
189
+ indexBufferLoader._state = ResourceLoaderState.LOADED;
274
190
  return indexBufferLoader;
275
- });
191
+ } catch (error) {
192
+ if (indexBufferLoader.isDestroyed()) {
193
+ return;
194
+ }
195
+
196
+ handleError(indexBufferLoader, error);
197
+ }
276
198
  }
277
199
 
278
- function loadFromBufferView(indexBufferLoader) {
200
+ async function loadFromBufferView(indexBufferLoader) {
279
201
  const gltf = indexBufferLoader._gltf;
280
202
  const accessorId = indexBufferLoader._accessorId;
281
203
  const accessor = gltf.accessors[accessorId];
282
204
  const bufferViewId = accessor.bufferView;
283
205
 
284
- const resourceCache = indexBufferLoader._resourceCache;
285
- const bufferViewLoader = resourceCache.loadBufferView({
286
- gltf: gltf,
287
- bufferViewId: bufferViewId,
288
- gltfResource: indexBufferLoader._gltfResource,
289
- baseResource: indexBufferLoader._baseResource,
290
- });
291
206
  indexBufferLoader._state = ResourceLoaderState.LOADING;
292
- indexBufferLoader._bufferViewLoader = bufferViewLoader;
207
+ const resourceCache = indexBufferLoader._resourceCache;
208
+ try {
209
+ const bufferViewLoader = resourceCache.getBufferViewLoader({
210
+ gltf: gltf,
211
+ bufferViewId: bufferViewId,
212
+ gltfResource: indexBufferLoader._gltfResource,
213
+ baseResource: indexBufferLoader._baseResource,
214
+ });
215
+ indexBufferLoader._bufferViewLoader = bufferViewLoader;
293
216
 
294
- return bufferViewLoader.promise.then(function () {
217
+ await bufferViewLoader.load();
295
218
  if (indexBufferLoader.isDestroyed()) {
296
219
  return;
297
220
  }
298
221
 
299
- // Now wait for process() to run to finish loading
300
222
  const bufferViewTypedArray = bufferViewLoader.typedArray;
301
223
  indexBufferLoader._typedArray = createIndicesTypedArray(
302
224
  indexBufferLoader,
@@ -304,7 +226,13 @@ function loadFromBufferView(indexBufferLoader) {
304
226
  );
305
227
  indexBufferLoader._state = ResourceLoaderState.PROCESSING;
306
228
  return indexBufferLoader;
307
- });
229
+ } catch (error) {
230
+ if (indexBufferLoader.isDestroyed()) {
231
+ return;
232
+ }
233
+
234
+ handleError(indexBufferLoader, error);
235
+ }
308
236
  }
309
237
 
310
238
  function createIndicesTypedArray(indexBufferLoader, bufferViewTypedArray) {
@@ -346,8 +274,7 @@ function handleError(indexBufferLoader, error) {
346
274
  indexBufferLoader.unload();
347
275
  indexBufferLoader._state = ResourceLoaderState.FAILED;
348
276
  const errorMessage = "Failed to load index buffer";
349
- error = indexBufferLoader.getError(errorMessage, error);
350
- return Promise.reject(error);
277
+ throw indexBufferLoader.getError(errorMessage, error);
351
278
  }
352
279
 
353
280
  function CreateIndexBufferJob() {
@@ -397,7 +324,64 @@ GltfIndexBufferLoader.prototype.process = function (frameState) {
397
324
  Check.typeOf.object("frameState", frameState);
398
325
  //>>includeEnd('debug');
399
326
 
400
- return this._process(this, frameState);
327
+ if (this._state === ResourceLoaderState.READY) {
328
+ return true;
329
+ }
330
+
331
+ if (
332
+ this._state !== ResourceLoaderState.LOADED &&
333
+ this._state !== ResourceLoaderState.PROCESSING
334
+ ) {
335
+ return false;
336
+ }
337
+
338
+ let typedArray = this._typedArray;
339
+ let indexDatatype = this._indexDatatype;
340
+
341
+ if (defined(this._dracoLoader)) {
342
+ try {
343
+ const ready = this._dracoLoader.process(frameState);
344
+ if (ready) {
345
+ const dracoLoader = this._dracoLoader;
346
+ typedArray = dracoLoader.decodedData.indices.typedArray;
347
+ this._typedArray = typedArray;
348
+ // The index datatype may be a smaller datatype after draco decode
349
+ indexDatatype = ComponentDatatype.fromTypedArray(typedArray);
350
+ this._indexDatatype = indexDatatype;
351
+ }
352
+ } catch (error) {
353
+ handleError(this, error);
354
+ }
355
+ }
356
+
357
+ if (!defined(typedArray)) {
358
+ // Buffer view hasn't been loaded yet
359
+ return false;
360
+ }
361
+
362
+ let buffer;
363
+ if (this._loadBuffer && this._asynchronous) {
364
+ const indexBufferJob = scratchIndexBufferJob;
365
+ indexBufferJob.set(typedArray, indexDatatype, frameState.context);
366
+ const jobScheduler = frameState.jobScheduler;
367
+ if (!jobScheduler.execute(indexBufferJob, JobType.BUFFER)) {
368
+ // Job scheduler is full. Try again next frame.
369
+ return false;
370
+ }
371
+ buffer = indexBufferJob.buffer;
372
+ } else if (this._loadBuffer) {
373
+ buffer = createIndexBuffer(typedArray, indexDatatype, frameState.context);
374
+ }
375
+
376
+ // Unload everything except the index buffer and/or typed array.
377
+ this.unload();
378
+
379
+ this._buffer = buffer;
380
+ this._typedArray = this._loadTypedArray ? typedArray : undefined;
381
+ this._state = ResourceLoaderState.READY;
382
+
383
+ this._resourceCache.statistics.addGeometryLoader(this);
384
+ return true;
401
385
  };
402
386
 
403
387
  /**
@@ -411,7 +395,10 @@ GltfIndexBufferLoader.prototype.unload = function () {
411
395
 
412
396
  const resourceCache = this._resourceCache;
413
397
 
414
- if (defined(this._bufferViewLoader)) {
398
+ if (
399
+ defined(this._bufferViewLoader) &&
400
+ !this._bufferViewLoader.isDestroyed()
401
+ ) {
415
402
  resourceCache.unload(this._bufferViewLoader);
416
403
  }
417
404