@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,7 +68,9 @@ function GltfStructuralMetadataLoader(options) {
68
68
  this._cacheKey = cacheKey;
69
69
  this._asynchronous = asynchronous;
70
70
  this._bufferViewLoaders = [];
71
+ this._bufferViewIds = [];
71
72
  this._textureLoaders = [];
73
+ this._textureIds = [];
72
74
  this._schemaLoader = undefined;
73
75
  this._structuralMetadata = undefined;
74
76
  this._state = ResourceLoaderState.UNLOADED;
@@ -83,20 +85,6 @@ if (defined(Object.create)) {
83
85
  }
84
86
 
85
87
  Object.defineProperties(GltfStructuralMetadataLoader.prototype, {
86
- /**
87
- * A promise that resolves to the resource when the resource is ready, or undefined if the resource hasn't started loading.
88
- *
89
- * @memberof GltfStructuralMetadataLoader.prototype
90
- *
91
- * @type {Promise<GltfStructuralMetadataLoader>|undefined}
92
- * @readonly
93
- * @private
94
- */
95
- promise: {
96
- get: function () {
97
- return this._promise;
98
- },
99
- },
100
88
  /**
101
89
  * The cache key of the resource.
102
90
  *
@@ -127,61 +115,47 @@ Object.defineProperties(GltfStructuralMetadataLoader.prototype, {
127
115
  },
128
116
  });
129
117
 
118
+ async function loadResources(loader) {
119
+ try {
120
+ const bufferViewsPromise = loadBufferViews(loader);
121
+ const texturesPromise = loadTextures(loader);
122
+ const schemaPromise = loadSchema(loader);
123
+
124
+ await Promise.all([bufferViewsPromise, texturesPromise, schemaPromise]);
125
+
126
+ if (loader.isDestroyed()) {
127
+ return;
128
+ }
129
+
130
+ loader._gltf = undefined; // No longer need to hold onto the glTF
131
+
132
+ loader._state = ResourceLoaderState.LOADED;
133
+ return loader;
134
+ } catch (error) {
135
+ if (loader.isDestroyed()) {
136
+ return;
137
+ }
138
+
139
+ loader.unload();
140
+ loader._state = ResourceLoaderState.FAILED;
141
+ const errorMessage = "Failed to load structural metadata";
142
+ throw loader.getError(errorMessage, error);
143
+ }
144
+ }
145
+
130
146
  /**
131
147
  * Loads the resource.
132
148
  * @returns {Promise<GltfStructuralMetadataLoader>} A promise which resolves to the loader when the resource loading is completed.
133
149
  * @private
134
150
  */
135
151
  GltfStructuralMetadataLoader.prototype.load = function () {
136
- const bufferViewsPromise = loadBufferViews(this);
137
- const texturesPromise = loadTextures(this);
138
- const schemaPromise = loadSchema(this);
152
+ if (defined(this._promise)) {
153
+ return this._promise;
154
+ }
139
155
 
140
- this._gltf = undefined; // No longer need to hold onto the glTF
141
156
  this._state = ResourceLoaderState.LOADING;
142
-
143
- const that = this;
144
-
145
- this._promise = Promise.all([
146
- bufferViewsPromise,
147
- texturesPromise,
148
- schemaPromise,
149
- ])
150
- .then(function (results) {
151
- if (that.isDestroyed()) {
152
- return;
153
- }
154
- const bufferViews = results[0];
155
- const textures = results[1];
156
- const schema = results[2];
157
-
158
- if (defined(that._extension)) {
159
- that._structuralMetadata = parseStructuralMetadata({
160
- extension: that._extension,
161
- schema: schema,
162
- bufferViews: bufferViews,
163
- textures: textures,
164
- });
165
- } else {
166
- that._structuralMetadata = parseFeatureMetadataLegacy({
167
- extension: that._extensionLegacy,
168
- schema: schema,
169
- bufferViews: bufferViews,
170
- textures: textures,
171
- });
172
- }
173
- that._state = ResourceLoaderState.READY;
174
- return that;
175
- })
176
- .catch(function (error) {
177
- if (that.isDestroyed()) {
178
- return;
179
- }
180
- that.unload();
181
- that._state = ResourceLoaderState.FAILED;
182
- const errorMessage = "Failed to load structural metadata";
183
- return Promise.reject(that.getError(errorMessage, error));
184
- });
157
+ this._promise = loadResources(this);
158
+ return this._promise;
185
159
  };
186
160
 
187
161
  function gatherBufferViewIdsFromProperties(properties, bufferViewIdSet) {
@@ -261,7 +235,7 @@ function gatherUsedBufferViewIdsLegacy(extensionLegacy) {
261
235
  return bufferViewIdSet;
262
236
  }
263
237
 
264
- function loadBufferViews(structuralMetadataLoader) {
238
+ async function loadBufferViews(structuralMetadataLoader) {
265
239
  let bufferViewIds;
266
240
  if (defined(structuralMetadataLoader._extension)) {
267
241
  bufferViewIds = gatherUsedBufferViewIds(
@@ -275,40 +249,23 @@ function loadBufferViews(structuralMetadataLoader) {
275
249
 
276
250
  // Load the buffer views
277
251
  const bufferViewPromises = [];
278
- const bufferViewLoaders = {};
279
252
  for (const bufferViewId in bufferViewIds) {
280
253
  if (bufferViewIds.hasOwnProperty(bufferViewId)) {
281
- const bufferViewLoader = ResourceCache.loadBufferView({
254
+ const bufferViewLoader = ResourceCache.getBufferViewLoader({
282
255
  gltf: structuralMetadataLoader._gltf,
283
256
  bufferViewId: parseInt(bufferViewId),
284
257
  gltfResource: structuralMetadataLoader._gltfResource,
285
258
  baseResource: structuralMetadataLoader._baseResource,
286
259
  });
287
- bufferViewPromises.push(bufferViewLoader.promise);
260
+
288
261
  structuralMetadataLoader._bufferViewLoaders.push(bufferViewLoader);
289
- bufferViewLoaders[bufferViewId] = bufferViewLoader;
290
- }
291
- }
262
+ structuralMetadataLoader._bufferViewIds.push(bufferViewId);
292
263
 
293
- // Return a promise to a map of buffer view IDs to typed arrays
294
- return Promise.all(bufferViewPromises).then(function () {
295
- const bufferViews = {};
296
- for (const bufferViewId in bufferViewLoaders) {
297
- if (bufferViewLoaders.hasOwnProperty(bufferViewId)) {
298
- const bufferViewLoader = bufferViewLoaders[bufferViewId];
299
- // Copy the typed array and let the underlying ArrayBuffer be freed
300
- const bufferViewTypedArray = new Uint8Array(
301
- bufferViewLoader.typedArray
302
- );
303
- bufferViews[bufferViewId] = bufferViewTypedArray;
304
- }
264
+ bufferViewPromises.push(bufferViewLoader.load());
305
265
  }
266
+ }
306
267
 
307
- // Buffer views can be unloaded after the data has been copied
308
- unloadBufferViews(structuralMetadataLoader);
309
-
310
- return bufferViews;
311
- });
268
+ return Promise.all(bufferViewPromises);
312
269
  }
313
270
 
314
271
  function gatherUsedTextureIds(structuralMetadataExtension) {
@@ -385,10 +342,9 @@ function loadTextures(structuralMetadataLoader) {
385
342
 
386
343
  // Load the textures
387
344
  const texturePromises = [];
388
- const textureLoaders = {};
389
345
  for (const textureId in textureIds) {
390
346
  if (textureIds.hasOwnProperty(textureId)) {
391
- const textureLoader = ResourceCache.loadTexture({
347
+ const textureLoader = ResourceCache.getTextureLoader({
392
348
  gltf: gltf,
393
349
  textureInfo: textureIds[textureId],
394
350
  gltfResource: gltfResource,
@@ -397,26 +353,16 @@ function loadTextures(structuralMetadataLoader) {
397
353
  frameState: frameState,
398
354
  asynchronous: asynchronous,
399
355
  });
400
- texturePromises.push(textureLoader.promise);
401
356
  structuralMetadataLoader._textureLoaders.push(textureLoader);
402
- textureLoaders[textureId] = textureLoader;
357
+ structuralMetadataLoader._textureIds.push(textureId);
358
+ texturePromises.push(textureLoader.load());
403
359
  }
404
360
  }
405
361
 
406
- // Return a promise to a map of texture IDs to Texture objects
407
- return Promise.all(texturePromises).then(function () {
408
- const textures = {};
409
- for (const textureId in textureLoaders) {
410
- if (textureLoaders.hasOwnProperty(textureId)) {
411
- const textureLoader = textureLoaders[textureId];
412
- textures[textureId] = textureLoader.texture;
413
- }
414
- }
415
- return textures;
416
- });
362
+ return Promise.all(texturePromises);
417
363
  }
418
364
 
419
- function loadSchema(structuralMetadataLoader) {
365
+ async function loadSchema(structuralMetadataLoader) {
420
366
  const extension = defaultValue(
421
367
  structuralMetadataLoader._extension,
422
368
  structuralMetadataLoader._extensionLegacy
@@ -427,20 +373,20 @@ function loadSchema(structuralMetadataLoader) {
427
373
  const resource = structuralMetadataLoader._baseResource.getDerivedResource({
428
374
  url: extension.schemaUri,
429
375
  });
430
- schemaLoader = ResourceCache.loadSchema({
376
+ schemaLoader = ResourceCache.getSchemaLoader({
431
377
  resource: resource,
432
378
  });
433
379
  } else {
434
- schemaLoader = ResourceCache.loadSchema({
380
+ schemaLoader = ResourceCache.getSchemaLoader({
435
381
  schema: extension.schema,
436
382
  });
437
383
  }
438
384
 
439
385
  structuralMetadataLoader._schemaLoader = schemaLoader;
440
-
441
- return schemaLoader.promise.then(function (schemaLoader) {
386
+ await schemaLoader.load();
387
+ if (!schemaLoader.isDestroyed()) {
442
388
  return schemaLoader.schema;
443
- });
389
+ }
444
390
  }
445
391
 
446
392
  /**
@@ -454,17 +400,68 @@ GltfStructuralMetadataLoader.prototype.process = function (frameState) {
454
400
  Check.typeOf.object("frameState", frameState);
455
401
  //>>includeEnd('debug');
456
402
 
457
- if (this._state !== ResourceLoaderState.LOADING) {
458
- return;
403
+ if (this._state === ResourceLoaderState.READY) {
404
+ return true;
405
+ }
406
+
407
+ if (this._state !== ResourceLoaderState.LOADED) {
408
+ return false;
459
409
  }
460
410
 
461
411
  const textureLoaders = this._textureLoaders;
462
412
  const textureLoadersLength = textureLoaders.length;
463
-
413
+ let ready = true;
464
414
  for (let i = 0; i < textureLoadersLength; ++i) {
465
415
  const textureLoader = textureLoaders[i];
466
- textureLoader.process(frameState);
416
+ const textureReady = textureLoader.process(frameState);
417
+ ready = ready && textureReady;
418
+ }
419
+
420
+ if (!ready) {
421
+ return false;
422
+ }
423
+
424
+ const schema = this._schemaLoader.schema;
425
+ const bufferViews = {};
426
+ for (let i = 0; i < this._bufferViewIds.length; ++i) {
427
+ const bufferViewId = this._bufferViewIds[i];
428
+ const bufferViewLoader = this._bufferViewLoaders[i];
429
+ if (!bufferViewLoader.isDestroyed()) {
430
+ // Copy the typed array and let the underlying ArrayBuffer be freed
431
+ const bufferViewTypedArray = new Uint8Array(bufferViewLoader.typedArray);
432
+ bufferViews[bufferViewId] = bufferViewTypedArray;
433
+ }
434
+ }
435
+
436
+ const textures = {};
437
+ for (let i = 0; i < this._textureIds.length; ++i) {
438
+ const textureId = this._textureIds[i];
439
+ const textureLoader = textureLoaders[i];
440
+ if (!textureLoader.isDestroyed()) {
441
+ textures[textureId] = textureLoader.texture;
442
+ }
467
443
  }
444
+ if (defined(this._extension)) {
445
+ this._structuralMetadata = parseStructuralMetadata({
446
+ extension: this._extension,
447
+ schema: schema,
448
+ bufferViews: bufferViews,
449
+ textures: textures,
450
+ });
451
+ } else {
452
+ this._structuralMetadata = parseFeatureMetadataLegacy({
453
+ extension: this._extensionLegacy,
454
+ schema: schema,
455
+ bufferViews: bufferViews,
456
+ textures: textures,
457
+ });
458
+ }
459
+
460
+ // Buffer views can be unloaded after the data has been copied
461
+ unloadBufferViews(this);
462
+
463
+ this._state = ResourceLoaderState.READY;
464
+ return true;
468
465
  };
469
466
 
470
467
  function unloadBufferViews(structuralMetadataLoader) {
@@ -474,6 +471,7 @@ function unloadBufferViews(structuralMetadataLoader) {
474
471
  ResourceCache.unload(bufferViewLoaders[i]);
475
472
  }
476
473
  structuralMetadataLoader._bufferViewLoaders.length = 0;
474
+ structuralMetadataLoader._bufferViewIds.length = 0;
477
475
  }
478
476
 
479
477
  function unloadTextures(structuralMetadataLoader) {
@@ -483,6 +481,7 @@ function unloadTextures(structuralMetadataLoader) {
483
481
  ResourceCache.unload(textureLoaders[i]);
484
482
  }
485
483
  structuralMetadataLoader._textureLoaders.length = 0;
484
+ structuralMetadataLoader._textureIds.length = 0;
486
485
  }
487
486
 
488
487
  /**
@@ -78,7 +78,6 @@ function GltfTextureLoader(options) {
78
78
  this._texture = undefined;
79
79
  this._state = ResourceLoaderState.UNLOADED;
80
80
  this._promise = undefined;
81
- this._process = function (loader, frameState) {};
82
81
  }
83
82
 
84
83
  if (defined(Object.create)) {
@@ -87,20 +86,6 @@ if (defined(Object.create)) {
87
86
  }
88
87
 
89
88
  Object.defineProperties(GltfTextureLoader.prototype, {
90
- /**
91
- * A promise that resolves to the resource when the resource is ready, or undefined if the resource hasn't started loading.
92
- *
93
- * @memberof GltfTextureLoader.prototype
94
- *
95
- * @type {Promise<GltfTextureLoader>|undefined}
96
- * @readonly
97
- * @private
98
- */
99
- promise: {
100
- get: function () {
101
- return this._promise;
102
- },
103
- },
104
89
  /**
105
90
  * The cache key of the resource.
106
91
  *
@@ -133,92 +118,52 @@ Object.defineProperties(GltfTextureLoader.prototype, {
133
118
 
134
119
  const scratchTextureJob = new CreateTextureJob();
135
120
 
121
+ async function loadResources(loader) {
122
+ const resourceCache = loader._resourceCache;
123
+ try {
124
+ const imageLoader = resourceCache.getImageLoader({
125
+ gltf: loader._gltf,
126
+ imageId: loader._imageId,
127
+ gltfResource: loader._gltfResource,
128
+ baseResource: loader._baseResource,
129
+ });
130
+ loader._imageLoader = imageLoader;
131
+ await imageLoader.load();
132
+
133
+ if (loader.isDestroyed()) {
134
+ return;
135
+ }
136
+
137
+ // Now wait for process() to run to finish loading
138
+ loader._image = imageLoader.image;
139
+ loader._mipLevels = imageLoader.mipLevels;
140
+ loader._state = ResourceLoaderState.LOADED;
141
+
142
+ return loader;
143
+ } catch (error) {
144
+ if (loader.isDestroyed()) {
145
+ return;
146
+ }
147
+
148
+ loader.unload();
149
+ loader._state = ResourceLoaderState.FAILED;
150
+ const errorMessage = "Failed to load texture";
151
+ throw loader.getError(errorMessage, error);
152
+ }
153
+ }
154
+
136
155
  /**
137
156
  * Loads the resource.
138
157
  * @returns {Promise<GltfDracoLoader>} A promise which resolves to the loader when the resource loading is completed.
139
158
  * @private
140
159
  */
141
- GltfTextureLoader.prototype.load = function () {
142
- const resourceCache = this._resourceCache;
143
- const imageLoader = resourceCache.loadImage({
144
- gltf: this._gltf,
145
- imageId: this._imageId,
146
- gltfResource: this._gltfResource,
147
- baseResource: this._baseResource,
148
- });
160
+ GltfTextureLoader.prototype.load = async function () {
161
+ if (defined(this._promise)) {
162
+ return this._promise;
163
+ }
149
164
 
150
- this._imageLoader = imageLoader;
151
165
  this._state = ResourceLoaderState.LOADING;
152
- const that = this;
153
- const processPromise = new Promise(function (resolve) {
154
- that._process = function (loader, frameState) {
155
- if (defined(loader._texture)) {
156
- // Already created texture
157
- return;
158
- }
159
-
160
- if (!defined(loader._image)) {
161
- // Not ready to create texture
162
- return;
163
- }
164
-
165
- let texture;
166
-
167
- if (loader._asynchronous) {
168
- const textureJob = scratchTextureJob;
169
- textureJob.set(
170
- loader._gltf,
171
- loader._textureInfo,
172
- loader._image,
173
- loader._mipLevels,
174
- frameState.context
175
- );
176
- const jobScheduler = frameState.jobScheduler;
177
- if (!jobScheduler.execute(textureJob, JobType.TEXTURE)) {
178
- // Job scheduler is full. Try again next frame.
179
- return;
180
- }
181
- texture = textureJob.texture;
182
- } else {
183
- texture = createTexture(
184
- loader._gltf,
185
- loader._textureInfo,
186
- loader._image,
187
- loader._mipLevels,
188
- frameState.context
189
- );
190
- }
191
-
192
- // Unload everything except the texture
193
- loader.unload();
194
-
195
- loader._texture = texture;
196
- loader._state = ResourceLoaderState.READY;
197
- resolve(loader);
198
- };
199
- });
200
-
201
- this._promise = imageLoader.promise
202
- .then(function () {
203
- if (that.isDestroyed()) {
204
- return;
205
- }
206
- // Now wait for process() to run to finish loading
207
- that._image = imageLoader.image;
208
- that._mipLevels = imageLoader.mipLevels;
209
- that._state = ResourceLoaderState.PROCESSING;
210
- return processPromise;
211
- })
212
- .catch(function (error) {
213
- if (that.isDestroyed()) {
214
- return;
215
- }
216
- that.unload();
217
- that._state = ResourceLoaderState.FAILED;
218
- const errorMessage = "Failed to load texture";
219
- return Promise.reject(that.getError(errorMessage, error));
220
- });
221
-
166
+ this._promise = loadResources(this);
222
167
  return this._promise;
223
168
  };
224
169
 
@@ -350,6 +295,7 @@ function createTexture(gltf, textureInfo, image, mipLevels, context) {
350
295
  * Processes the resource until it becomes ready.
351
296
  *
352
297
  * @param {FrameState} frameState The frame state.
298
+ * @returns {boolean} true once all resourced are ready.
353
299
  * @private
354
300
  */
355
301
  GltfTextureLoader.prototype.process = function (frameState) {
@@ -357,7 +303,62 @@ GltfTextureLoader.prototype.process = function (frameState) {
357
303
  Check.typeOf.object("frameState", frameState);
358
304
  //>>includeEnd('debug');
359
305
 
360
- return this._process(this, frameState);
306
+ if (this._state === ResourceLoaderState.READY) {
307
+ return true;
308
+ }
309
+
310
+ if (
311
+ this._state !== ResourceLoaderState.LOADED &&
312
+ this._state !== ResourceLoaderState.PROCESSING
313
+ ) {
314
+ return false;
315
+ }
316
+
317
+ if (defined(this._texture)) {
318
+ // Already created texture
319
+ return false;
320
+ }
321
+
322
+ if (!defined(this._image)) {
323
+ // Not ready to create texture
324
+ return false;
325
+ }
326
+
327
+ this._state = ResourceLoaderState.PROCESSING;
328
+
329
+ let texture;
330
+ if (this._asynchronous) {
331
+ const textureJob = scratchTextureJob;
332
+ textureJob.set(
333
+ this._gltf,
334
+ this._textureInfo,
335
+ this._image,
336
+ this._mipLevels,
337
+ frameState.context
338
+ );
339
+ const jobScheduler = frameState.jobScheduler;
340
+ if (!jobScheduler.execute(textureJob, JobType.TEXTURE)) {
341
+ // Job scheduler is full. Try again next frame.
342
+ return;
343
+ }
344
+ texture = textureJob.texture;
345
+ } else {
346
+ texture = createTexture(
347
+ this._gltf,
348
+ this._textureInfo,
349
+ this._image,
350
+ this._mipLevels,
351
+ frameState.context
352
+ );
353
+ }
354
+
355
+ // Unload everything except the texture
356
+ this.unload();
357
+
358
+ this._texture = texture;
359
+ this._state = ResourceLoaderState.READY;
360
+ this._resourceCache.statistics.addTextureLoader(this);
361
+ return true;
361
362
  };
362
363
 
363
364
  /**
@@ -369,7 +370,7 @@ GltfTextureLoader.prototype.unload = function () {
369
370
  this._texture.destroy();
370
371
  }
371
372
 
372
- if (defined(this._imageLoader)) {
373
+ if (defined(this._imageLoader) && !this._imageLoader.isDestroyed()) {
373
374
  this._resourceCache.unload(this._imageLoader);
374
375
  }
375
376