@cesium/engine 2.1.0 → 2.2.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.
- package/Build/Workers/{AxisAlignedBoundingBox-a6f9f0e5.js → AxisAlignedBoundingBox-379015ef.js} +1 -1
- package/Build/Workers/{BoundingRectangle-b0a68595.js → BoundingRectangle-57f2b24f.js} +1 -1
- package/Build/Workers/{BoxGeometry-baedd794.js → BoxGeometry-ecabfc78.js} +1 -1
- package/Build/Workers/{Color-f85df1be.js → Color-14d1a36d.js} +1 -1
- package/Build/Workers/{CoplanarPolygonGeometryLibrary-30516950.js → CoplanarPolygonGeometryLibrary-048c3c14.js} +1 -1
- package/Build/Workers/{CorridorGeometryLibrary-5d5d3b3a.js → CorridorGeometryLibrary-520c8619.js} +1 -1
- package/Build/Workers/{CylinderGeometry-d899ae26.js → CylinderGeometry-119068b8.js} +1 -1
- package/Build/Workers/{EllipseGeometry-a49f8449.js → EllipseGeometry-2dfc3523.js} +1 -1
- package/Build/Workers/{EllipseGeometryLibrary-cba7edde.js → EllipseGeometryLibrary-0a1e0170.js} +1 -1
- package/Build/Workers/{EllipseOutlineGeometry-8095c8cb.js → EllipseOutlineGeometry-c5251669.js} +1 -1
- package/Build/Workers/{EllipsoidGeometry-ed93f571.js → EllipsoidGeometry-d10a5221.js} +1 -1
- package/Build/Workers/{EllipsoidOutlineGeometry-e4854854.js → EllipsoidOutlineGeometry-7039a0ae.js} +1 -1
- package/Build/Workers/{EllipsoidTangentPlane-7ae1aa9a.js → EllipsoidTangentPlane-857186be.js} +1 -1
- package/Build/Workers/{FrustumGeometry-b62db3e3.js → FrustumGeometry-400fa1b7.js} +2 -2
- package/Build/Workers/{GeometryAttribute-780af4fa.js → GeometryAttribute-7a2de5c6.js} +1 -1
- package/Build/Workers/{GeometryPipeline-36b61c99.js → GeometryPipeline-916636fa.js} +1 -1
- package/Build/Workers/{IntersectionTests-e889fcf0.js → IntersectionTests-b4d02d4d.js} +1 -1
- package/Build/Workers/{OrientedBoundingBox-43478ac8.js → OrientedBoundingBox-96fe1752.js} +5 -3
- package/Build/Workers/{PolygonGeometryLibrary-38a98276.js → PolygonGeometryLibrary-931f1ec6.js} +1 -1
- package/Build/Workers/{PolygonPipeline-d31ff61c.js → PolygonPipeline-32fc92cc.js} +1 -1
- package/Build/Workers/{PolylinePipeline-30e4cec9.js → PolylinePipeline-6d5c63e5.js} +1 -1
- package/Build/Workers/{PolylineVolumeGeometryLibrary-90551d26.js → PolylineVolumeGeometryLibrary-f068c1fb.js} +1 -1
- package/Build/Workers/{PrimitivePipeline-558d9cb0.js → PrimitivePipeline-879f996a.js} +1 -1
- package/Build/Workers/{RectangleGeometryLibrary-815c68df.js → RectangleGeometryLibrary-2d6f36f3.js} +1 -1
- package/Build/Workers/{TerrainEncoding-341ead52.js → TerrainEncoding-82882059.js} +1 -1
- package/Build/Workers/{Transforms-9e9df299.js → Transforms-9052372a.js} +6 -5
- package/Build/Workers/{WallGeometryLibrary-ccf90976.js → WallGeometryLibrary-db7a64fb.js} +1 -1
- package/Build/Workers/cesiumWorkerBootstrapper.js +1 -1
- package/Build/Workers/combineGeometry.js +1 -1
- package/Build/Workers/createBoxGeometry.js +1 -1
- package/Build/Workers/createBoxOutlineGeometry.js +1 -1
- package/Build/Workers/createCircleGeometry.js +1 -1
- package/Build/Workers/createCircleOutlineGeometry.js +1 -1
- package/Build/Workers/createCoplanarPolygonGeometry.js +1 -1
- package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +1 -1
- package/Build/Workers/createCorridorGeometry.js +1 -1
- package/Build/Workers/createCorridorOutlineGeometry.js +1 -1
- package/Build/Workers/createCylinderGeometry.js +1 -1
- package/Build/Workers/createCylinderOutlineGeometry.js +1 -1
- package/Build/Workers/createEllipseGeometry.js +1 -1
- package/Build/Workers/createEllipseOutlineGeometry.js +1 -1
- package/Build/Workers/createEllipsoidGeometry.js +1 -1
- package/Build/Workers/createEllipsoidOutlineGeometry.js +1 -1
- package/Build/Workers/createFrustumGeometry.js +1 -1
- package/Build/Workers/createFrustumOutlineGeometry.js +1 -1
- package/Build/Workers/createGeometry.js +1 -1
- package/Build/Workers/createGroundPolylineGeometry.js +1 -1
- package/Build/Workers/createPlaneGeometry.js +1 -1
- package/Build/Workers/createPlaneOutlineGeometry.js +1 -1
- package/Build/Workers/createPolygonGeometry.js +1 -1
- package/Build/Workers/createPolygonOutlineGeometry.js +1 -1
- package/Build/Workers/createPolylineGeometry.js +1 -1
- package/Build/Workers/createPolylineVolumeGeometry.js +1 -1
- package/Build/Workers/createPolylineVolumeOutlineGeometry.js +1 -1
- package/Build/Workers/createRectangleGeometry.js +1 -1
- package/Build/Workers/createRectangleOutlineGeometry.js +1 -1
- package/Build/Workers/createSimplePolylineGeometry.js +1 -1
- package/Build/Workers/createSphereGeometry.js +1 -1
- package/Build/Workers/createSphereOutlineGeometry.js +1 -1
- package/Build/Workers/createVectorTileGeometries.js +1 -1
- package/Build/Workers/createVectorTilePolygons.js +1 -1
- package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +1 -1
- package/Build/Workers/createVerticesFromHeightmap.js +1 -1
- package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +10 -15
- package/Build/Workers/createWallGeometry.js +1 -1
- package/Build/Workers/createWallOutlineGeometry.js +1 -1
- package/Build/Workers/package.js +1 -1
- package/Build/Workers/transferTypedArrayTest.js +1 -1
- package/Build/Workers/upsampleQuantizedTerrainMesh.js +1 -1
- package/Source/Core/ArcGISTiledElevationTerrainProvider.js +291 -191
- package/Source/Core/CesiumTerrainProvider.js +571 -434
- package/Source/Core/CustomHeightmapTerrainProvider.js +12 -0
- package/Source/Core/EllipsoidTerrainProvider.js +17 -10
- package/Source/Core/FrustumGeometry.js +1 -1
- package/Source/Core/GoogleEarthEnterpriseMetadata.js +86 -34
- package/Source/Core/GoogleEarthEnterpriseTerrainProvider.js +119 -82
- package/Source/Core/Ion.js +1 -1
- package/Source/Core/IonResource.js +14 -3
- package/Source/Core/OrientedBoundingBox.js +4 -2
- package/Source/Core/RequestScheduler.js +1 -1
- package/Source/Core/Resource.js +2 -2
- package/Source/Core/TerrainProvider.js +9 -14
- package/Source/Core/TileProviderError.js +8 -8
- package/Source/Core/VRTheWorldTerrainProvider.js +193 -124
- package/Source/Core/buildModuleUrl.js +4 -3
- package/Source/Core/createWorldTerrain.js +20 -2
- package/Source/Core/createWorldTerrainAsync.js +48 -0
- package/Source/Core/sampleTerrain.js +9 -10
- package/Source/Core/sampleTerrainMostDetailed.js +66 -72
- package/Source/DataSources/Cesium3DTilesetVisualizer.js +37 -26
- package/Source/DataSources/Entity.js +6 -1
- package/Source/DataSources/ModelVisualizer.js +99 -31
- package/Source/DataSources/PolygonGraphics.js +1 -1
- package/Source/Scene/ArcGisMapServerImageryProvider.js +552 -376
- package/Source/Scene/BingMapsImageryProvider.js +511 -305
- package/Source/Scene/BufferLoader.js +29 -34
- package/Source/Scene/Cesium3DTile.js +388 -251
- package/Source/Scene/Cesium3DTileBatchTable.js +2 -2
- package/Source/Scene/Cesium3DTileContent.js +16 -0
- package/Source/Scene/Cesium3DTileContentFactory.js +4 -4
- package/Source/Scene/Cesium3DTilePass.js +8 -11
- package/Source/Scene/Cesium3DTileStyleEngine.js +1 -1
- package/Source/Scene/Cesium3DTilesVoxelProvider.js +225 -117
- package/Source/Scene/Cesium3DTileset.js +755 -481
- package/Source/Scene/Cesium3DTilesetBaseTraversal.js +301 -0
- package/Source/Scene/Cesium3DTilesetMostDetailedTraversal.js +33 -46
- package/Source/Scene/Cesium3DTilesetSkipTraversal.js +421 -0
- package/Source/Scene/Cesium3DTilesetTraversal.js +219 -671
- package/Source/Scene/ClassificationPrimitive.js +7 -0
- package/Source/Scene/Composite3DTileContent.js +69 -26
- package/Source/Scene/CreditDisplay.js +20 -4
- package/Source/Scene/DepthPlane.js +1 -1
- package/Source/Scene/Empty3DTileContent.js +31 -1
- package/Source/Scene/Geometry3DTileContent.js +47 -7
- package/Source/Scene/Globe.js +5 -1
- package/Source/Scene/GlobeSurfaceTile.js +2 -1
- package/Source/Scene/GlobeSurfaceTileProvider.js +50 -27
- package/Source/Scene/GltfBufferViewLoader.js +47 -91
- package/Source/Scene/GltfDracoLoader.js +110 -112
- package/Source/Scene/GltfImageLoader.js +71 -78
- package/Source/Scene/GltfIndexBufferLoader.js +108 -121
- package/Source/Scene/GltfJsonLoader.js +75 -74
- package/Source/Scene/GltfLoader.js +392 -280
- package/Source/Scene/GltfStructuralMetadataLoader.js +109 -110
- package/Source/Scene/GltfTextureLoader.js +97 -96
- package/Source/Scene/GltfVertexBufferLoader.js +128 -133
- package/Source/Scene/GoogleEarthEnterpriseImageryProvider.js +353 -225
- package/Source/Scene/GoogleEarthEnterpriseMapsProvider.js +491 -331
- package/Source/Scene/GridImageryProvider.js +267 -104
- package/Source/Scene/GroundPolylinePrimitive.js +12 -1
- package/Source/Scene/GroundPrimitive.js +8 -1
- package/Source/Scene/I3SDataProvider.js +214 -113
- package/Source/Scene/I3SFeature.js +7 -6
- package/Source/Scene/I3SLayer.js +26 -37
- package/Source/Scene/I3SNode.js +59 -66
- package/Source/Scene/Imagery.js +6 -1
- package/Source/Scene/ImageryLayer.js +299 -48
- package/Source/Scene/ImageryLayerCollection.js +26 -0
- package/Source/Scene/ImageryProvider.js +129 -111
- package/Source/Scene/Implicit3DTileContent.js +72 -23
- package/Source/Scene/ImplicitSubtree.js +66 -45
- package/Source/Scene/IonImageryProvider.js +471 -264
- package/Source/Scene/MapboxImageryProvider.js +272 -112
- package/Source/Scene/MapboxStyleImageryProvider.js +270 -111
- package/Source/Scene/MetadataSchemaLoader.js +26 -36
- package/Source/Scene/Model/B3dmLoader.js +42 -46
- package/Source/Scene/Model/GeoJsonLoader.js +8 -32
- package/Source/Scene/Model/I3dmLoader.js +48 -74
- package/Source/Scene/Model/Model.js +470 -132
- package/Source/Scene/Model/Model3DTileContent.js +83 -31
- package/Source/Scene/Model/ModelAnimationCollection.js +3 -3
- package/Source/Scene/Model/ModelDrawCommand.js +15 -26
- package/Source/Scene/Model/ModelUtility.js +16 -16
- package/Source/Scene/Model/PntsLoader.js +27 -32
- package/Source/Scene/Multiple3DTileContent.js +134 -115
- package/Source/Scene/PointCloud.js +11 -19
- package/Source/Scene/Primitive.js +20 -0
- package/Source/Scene/QuadtreePrimitive.js +2 -0
- package/Source/Scene/QuadtreeTileProvider.js +4 -8
- package/Source/Scene/ResourceCache.js +47 -105
- package/Source/Scene/ResourceCacheStatistics.js +24 -58
- package/Source/Scene/ResourceLoader.js +5 -17
- package/Source/Scene/ResourceLoaderState.js +12 -4
- package/Source/Scene/Scene.js +65 -0
- package/Source/Scene/ScreenSpaceCameraController.js +1 -1
- package/Source/Scene/SingleTileImageryProvider.js +382 -209
- package/Source/Scene/Terrain.js +196 -0
- package/Source/Scene/TileCoordinatesImageryProvider.js +267 -104
- package/Source/Scene/TileMapServiceImageryProvider.js +177 -85
- package/Source/Scene/Tileset3DTileContent.js +47 -5
- package/Source/Scene/TimeDynamicPointCloud.js +15 -2
- package/Source/Scene/UrlTemplateImageryProvider.js +343 -215
- package/Source/Scene/Vector3DTileClampedPolylines.js +96 -84
- package/Source/Scene/Vector3DTileContent.js +47 -22
- package/Source/Scene/Vector3DTileGeometry.js +57 -52
- package/Source/Scene/Vector3DTilePoints.js +72 -68
- package/Source/Scene/Vector3DTilePolygons.js +118 -117
- package/Source/Scene/Vector3DTilePolylines.js +86 -82
- package/Source/Scene/Vector3DTilePrimitive.js +0 -1
- package/Source/Scene/VoxelContent.js +61 -63
- package/Source/Scene/VoxelPrimitive.js +39 -91
- package/Source/Scene/VoxelProvider.js +2 -2
- package/Source/Scene/WebMapServiceImageryProvider.js +272 -111
- package/Source/Scene/WebMapTileServiceImageryProvider.js +270 -107
- package/Source/Scene/computeFlyToLocationForRectangle.js +33 -37
- package/Source/Scene/createOsmBuildings.js +6 -0
- package/Source/Scene/createOsmBuildingsAsync.js +82 -0
- package/Source/Scene/createWorldImagery.js +14 -5
- package/Source/Scene/createWorldImageryAsync.js +39 -0
- package/Source/Widget/CesiumWidget.js +55 -27
- package/index.d.ts +2158 -1395
- package/index.js +58 -51
- package/package.json +1 -1
|
@@ -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
|
-
|
|
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
|
-
|
|
176
|
-
|
|
177
|
-
promise = loadFromBufferView(this);
|
|
162
|
+
this._promise = loadFromDraco(this);
|
|
163
|
+
return this._promise;
|
|
178
164
|
}
|
|
179
165
|
|
|
180
|
-
|
|
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
|
-
|
|
260
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 (
|
|
398
|
+
if (
|
|
399
|
+
defined(this._bufferViewLoader) &&
|
|
400
|
+
!this._bufferViewLoader.isDestroyed()
|
|
401
|
+
) {
|
|
415
402
|
resourceCache.unload(this._bufferViewLoader);
|
|
416
403
|
}
|
|
417
404
|
|
|
@@ -68,20 +68,6 @@ if (defined(Object.create)) {
|
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
Object.defineProperties(GltfJsonLoader.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 GltfJsonLoader.prototype
|
|
75
|
-
*
|
|
76
|
-
* @type {Promise<GltfJsonLoader>|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
|
*
|
|
@@ -117,56 +103,55 @@ Object.defineProperties(GltfJsonLoader.prototype, {
|
|
|
117
103
|
* @returns {Promise<GltfJsonLoader>} A promise which resolves to the loader when the resource loading is completed.
|
|
118
104
|
* @private
|
|
119
105
|
*/
|
|
120
|
-
GltfJsonLoader.prototype.load = function () {
|
|
106
|
+
GltfJsonLoader.prototype.load = async function () {
|
|
107
|
+
if (defined(this._promise)) {
|
|
108
|
+
return this._promise;
|
|
109
|
+
}
|
|
110
|
+
|
|
121
111
|
this._state = ResourceLoaderState.LOADING;
|
|
122
112
|
|
|
123
|
-
let processPromise;
|
|
124
113
|
if (defined(this._gltfJson)) {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
processPromise = processGltfTypedArray(this, this._typedArray);
|
|
128
|
-
} else {
|
|
129
|
-
processPromise = loadFromUri(this);
|
|
114
|
+
this._promise = processGltfJson(this, this._gltfJson);
|
|
115
|
+
return this._promise;
|
|
130
116
|
}
|
|
131
117
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
.
|
|
135
|
-
|
|
136
|
-
return;
|
|
137
|
-
}
|
|
138
|
-
that._gltf = gltf;
|
|
139
|
-
that._state = ResourceLoaderState.READY;
|
|
140
|
-
return that;
|
|
141
|
-
})
|
|
142
|
-
.catch(function (error) {
|
|
143
|
-
if (that.isDestroyed()) {
|
|
144
|
-
return;
|
|
145
|
-
}
|
|
146
|
-
return handleError(that, error);
|
|
147
|
-
});
|
|
118
|
+
if (defined(this._typedArray)) {
|
|
119
|
+
this._promise = processGltfTypedArray(this, this._typedArray);
|
|
120
|
+
return this._promise;
|
|
121
|
+
}
|
|
148
122
|
|
|
123
|
+
this._promise = loadFromUri(this);
|
|
149
124
|
return this._promise;
|
|
150
125
|
};
|
|
151
126
|
|
|
152
|
-
function loadFromUri(gltfJsonLoader) {
|
|
153
|
-
|
|
127
|
+
async function loadFromUri(gltfJsonLoader) {
|
|
128
|
+
let typedArray;
|
|
129
|
+
try {
|
|
130
|
+
const arrayBuffer = await gltfJsonLoader._fetchGltf();
|
|
154
131
|
if (gltfJsonLoader.isDestroyed()) {
|
|
155
132
|
return;
|
|
156
133
|
}
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
})
|
|
134
|
+
|
|
135
|
+
typedArray = new Uint8Array(arrayBuffer);
|
|
136
|
+
} catch (error) {
|
|
137
|
+
if (gltfJsonLoader.isDestroyed()) {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
handleError(gltfJsonLoader, error);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
return processGltfTypedArray(gltfJsonLoader, typedArray);
|
|
160
145
|
}
|
|
161
146
|
|
|
162
147
|
function handleError(gltfJsonLoader, error) {
|
|
163
148
|
gltfJsonLoader.unload();
|
|
164
149
|
gltfJsonLoader._state = ResourceLoaderState.FAILED;
|
|
165
150
|
const errorMessage = `Failed to load glTF: ${gltfJsonLoader._gltfResource.url}`;
|
|
166
|
-
|
|
151
|
+
throw gltfJsonLoader.getError(errorMessage, error);
|
|
167
152
|
}
|
|
168
153
|
|
|
169
|
-
function upgradeVersion(gltfJsonLoader, gltf) {
|
|
154
|
+
async function upgradeVersion(gltfJsonLoader, gltf) {
|
|
170
155
|
if (
|
|
171
156
|
defined(gltf.asset) &&
|
|
172
157
|
gltf.asset.version === "2.0" &&
|
|
@@ -188,23 +173,25 @@ function upgradeVersion(gltfJsonLoader, gltf) {
|
|
|
188
173
|
url: buffer.uri,
|
|
189
174
|
});
|
|
190
175
|
const resourceCache = gltfJsonLoader._resourceCache;
|
|
191
|
-
const bufferLoader = resourceCache.
|
|
176
|
+
const bufferLoader = resourceCache.getExternalBufferLoader({
|
|
192
177
|
resource: resource,
|
|
193
178
|
});
|
|
194
|
-
|
|
195
179
|
gltfJsonLoader._bufferLoaders.push(bufferLoader);
|
|
196
180
|
|
|
197
181
|
promises.push(
|
|
198
|
-
bufferLoader.
|
|
182
|
+
bufferLoader.load().then(function () {
|
|
183
|
+
if (bufferLoader.isDestroyed()) {
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
|
|
199
187
|
buffer.extras._pipeline.source = bufferLoader.typedArray;
|
|
200
188
|
})
|
|
201
189
|
);
|
|
202
190
|
}
|
|
203
191
|
});
|
|
204
192
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
});
|
|
193
|
+
await Promise.all(promises);
|
|
194
|
+
updateVersion(gltf);
|
|
208
195
|
}
|
|
209
196
|
|
|
210
197
|
function decodeDataUris(gltf) {
|
|
@@ -233,42 +220,54 @@ function loadEmbeddedBuffers(gltfJsonLoader, gltf) {
|
|
|
233
220
|
const source = buffer.extras._pipeline.source;
|
|
234
221
|
if (defined(source) && !defined(buffer.uri)) {
|
|
235
222
|
const resourceCache = gltfJsonLoader._resourceCache;
|
|
236
|
-
const bufferLoader = resourceCache.
|
|
223
|
+
const bufferLoader = resourceCache.getEmbeddedBufferLoader({
|
|
237
224
|
parentResource: gltfJsonLoader._gltfResource,
|
|
238
225
|
bufferId: bufferId,
|
|
239
226
|
typedArray: source,
|
|
240
227
|
});
|
|
241
|
-
|
|
242
228
|
gltfJsonLoader._bufferLoaders.push(bufferLoader);
|
|
243
|
-
promises.push(bufferLoader.
|
|
229
|
+
promises.push(bufferLoader.load());
|
|
244
230
|
}
|
|
245
231
|
});
|
|
246
232
|
return Promise.all(promises);
|
|
247
233
|
}
|
|
248
234
|
|
|
249
|
-
function processGltfJson(gltfJsonLoader, gltf) {
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
.
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
235
|
+
async function processGltfJson(gltfJsonLoader, gltf) {
|
|
236
|
+
try {
|
|
237
|
+
addPipelineExtras(gltf);
|
|
238
|
+
|
|
239
|
+
await decodeDataUris(gltf);
|
|
240
|
+
await upgradeVersion(gltfJsonLoader, gltf);
|
|
241
|
+
addDefaults(gltf);
|
|
242
|
+
await loadEmbeddedBuffers(gltfJsonLoader, gltf);
|
|
243
|
+
removePipelineExtras(gltf);
|
|
244
|
+
|
|
245
|
+
gltfJsonLoader._gltf = gltf;
|
|
246
|
+
gltfJsonLoader._state = ResourceLoaderState.READY;
|
|
247
|
+
return gltfJsonLoader;
|
|
248
|
+
} catch (error) {
|
|
249
|
+
if (gltfJsonLoader.isDestroyed()) {
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
handleError(gltfJsonLoader, error);
|
|
254
|
+
}
|
|
264
255
|
}
|
|
265
256
|
|
|
266
|
-
function processGltfTypedArray(gltfJsonLoader, typedArray) {
|
|
257
|
+
async function processGltfTypedArray(gltfJsonLoader, typedArray) {
|
|
267
258
|
let gltf;
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
259
|
+
try {
|
|
260
|
+
if (getMagic(typedArray) === "glTF") {
|
|
261
|
+
gltf = parseGlb(typedArray);
|
|
262
|
+
} else {
|
|
263
|
+
gltf = getJsonFromTypedArray(typedArray);
|
|
264
|
+
}
|
|
265
|
+
} catch (error) {
|
|
266
|
+
if (gltfJsonLoader.isDestroyed()) {
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
handleError(gltfJsonLoader, error);
|
|
272
271
|
}
|
|
273
272
|
|
|
274
273
|
return processGltfJson(gltfJsonLoader, gltf);
|
|
@@ -282,7 +281,9 @@ GltfJsonLoader.prototype.unload = function () {
|
|
|
282
281
|
const bufferLoaders = this._bufferLoaders;
|
|
283
282
|
const bufferLoadersLength = bufferLoaders.length;
|
|
284
283
|
for (let i = 0; i < bufferLoadersLength; ++i) {
|
|
285
|
-
|
|
284
|
+
bufferLoaders[i] =
|
|
285
|
+
!bufferLoaders[i].isDestroyed() &&
|
|
286
|
+
this._resourceCache.unload(bufferLoaders[i]);
|
|
286
287
|
}
|
|
287
288
|
this._bufferLoaders.length = 0;
|
|
288
289
|
|