@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.
Files changed (193) hide show
  1. package/Build/Workers/{AxisAlignedBoundingBox-a6f9f0e5.js → AxisAlignedBoundingBox-379015ef.js} +1 -1
  2. package/Build/Workers/{BoundingRectangle-b0a68595.js → BoundingRectangle-57f2b24f.js} +1 -1
  3. package/Build/Workers/{BoxGeometry-baedd794.js → BoxGeometry-ecabfc78.js} +1 -1
  4. package/Build/Workers/{Color-f85df1be.js → Color-14d1a36d.js} +1 -1
  5. package/Build/Workers/{CoplanarPolygonGeometryLibrary-30516950.js → CoplanarPolygonGeometryLibrary-048c3c14.js} +1 -1
  6. package/Build/Workers/{CorridorGeometryLibrary-5d5d3b3a.js → CorridorGeometryLibrary-520c8619.js} +1 -1
  7. package/Build/Workers/{CylinderGeometry-d899ae26.js → CylinderGeometry-119068b8.js} +1 -1
  8. package/Build/Workers/{EllipseGeometry-a49f8449.js → EllipseGeometry-2dfc3523.js} +1 -1
  9. package/Build/Workers/{EllipseGeometryLibrary-cba7edde.js → EllipseGeometryLibrary-0a1e0170.js} +1 -1
  10. package/Build/Workers/{EllipseOutlineGeometry-8095c8cb.js → EllipseOutlineGeometry-c5251669.js} +1 -1
  11. package/Build/Workers/{EllipsoidGeometry-ed93f571.js → EllipsoidGeometry-d10a5221.js} +1 -1
  12. package/Build/Workers/{EllipsoidOutlineGeometry-e4854854.js → EllipsoidOutlineGeometry-7039a0ae.js} +1 -1
  13. package/Build/Workers/{EllipsoidTangentPlane-7ae1aa9a.js → EllipsoidTangentPlane-857186be.js} +1 -1
  14. package/Build/Workers/{FrustumGeometry-b62db3e3.js → FrustumGeometry-400fa1b7.js} +2 -2
  15. package/Build/Workers/{GeometryAttribute-780af4fa.js → GeometryAttribute-7a2de5c6.js} +1 -1
  16. package/Build/Workers/{GeometryPipeline-36b61c99.js → GeometryPipeline-916636fa.js} +1 -1
  17. package/Build/Workers/{IntersectionTests-e889fcf0.js → IntersectionTests-b4d02d4d.js} +1 -1
  18. package/Build/Workers/{OrientedBoundingBox-43478ac8.js → OrientedBoundingBox-96fe1752.js} +5 -3
  19. package/Build/Workers/{PolygonGeometryLibrary-38a98276.js → PolygonGeometryLibrary-931f1ec6.js} +1 -1
  20. package/Build/Workers/{PolygonPipeline-d31ff61c.js → PolygonPipeline-32fc92cc.js} +1 -1
  21. package/Build/Workers/{PolylinePipeline-30e4cec9.js → PolylinePipeline-6d5c63e5.js} +1 -1
  22. package/Build/Workers/{PolylineVolumeGeometryLibrary-90551d26.js → PolylineVolumeGeometryLibrary-f068c1fb.js} +1 -1
  23. package/Build/Workers/{PrimitivePipeline-558d9cb0.js → PrimitivePipeline-879f996a.js} +1 -1
  24. package/Build/Workers/{RectangleGeometryLibrary-815c68df.js → RectangleGeometryLibrary-2d6f36f3.js} +1 -1
  25. package/Build/Workers/{TerrainEncoding-341ead52.js → TerrainEncoding-82882059.js} +1 -1
  26. package/Build/Workers/{Transforms-9e9df299.js → Transforms-9052372a.js} +6 -5
  27. package/Build/Workers/{WallGeometryLibrary-ccf90976.js → WallGeometryLibrary-db7a64fb.js} +1 -1
  28. package/Build/Workers/cesiumWorkerBootstrapper.js +1 -1
  29. package/Build/Workers/combineGeometry.js +1 -1
  30. package/Build/Workers/createBoxGeometry.js +1 -1
  31. package/Build/Workers/createBoxOutlineGeometry.js +1 -1
  32. package/Build/Workers/createCircleGeometry.js +1 -1
  33. package/Build/Workers/createCircleOutlineGeometry.js +1 -1
  34. package/Build/Workers/createCoplanarPolygonGeometry.js +1 -1
  35. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +1 -1
  36. package/Build/Workers/createCorridorGeometry.js +1 -1
  37. package/Build/Workers/createCorridorOutlineGeometry.js +1 -1
  38. package/Build/Workers/createCylinderGeometry.js +1 -1
  39. package/Build/Workers/createCylinderOutlineGeometry.js +1 -1
  40. package/Build/Workers/createEllipseGeometry.js +1 -1
  41. package/Build/Workers/createEllipseOutlineGeometry.js +1 -1
  42. package/Build/Workers/createEllipsoidGeometry.js +1 -1
  43. package/Build/Workers/createEllipsoidOutlineGeometry.js +1 -1
  44. package/Build/Workers/createFrustumGeometry.js +1 -1
  45. package/Build/Workers/createFrustumOutlineGeometry.js +1 -1
  46. package/Build/Workers/createGeometry.js +1 -1
  47. package/Build/Workers/createGroundPolylineGeometry.js +1 -1
  48. package/Build/Workers/createPlaneGeometry.js +1 -1
  49. package/Build/Workers/createPlaneOutlineGeometry.js +1 -1
  50. package/Build/Workers/createPolygonGeometry.js +1 -1
  51. package/Build/Workers/createPolygonOutlineGeometry.js +1 -1
  52. package/Build/Workers/createPolylineGeometry.js +1 -1
  53. package/Build/Workers/createPolylineVolumeGeometry.js +1 -1
  54. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +1 -1
  55. package/Build/Workers/createRectangleGeometry.js +1 -1
  56. package/Build/Workers/createRectangleOutlineGeometry.js +1 -1
  57. package/Build/Workers/createSimplePolylineGeometry.js +1 -1
  58. package/Build/Workers/createSphereGeometry.js +1 -1
  59. package/Build/Workers/createSphereOutlineGeometry.js +1 -1
  60. package/Build/Workers/createVectorTileGeometries.js +1 -1
  61. package/Build/Workers/createVectorTilePolygons.js +1 -1
  62. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +1 -1
  63. package/Build/Workers/createVerticesFromHeightmap.js +1 -1
  64. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +10 -15
  65. package/Build/Workers/createWallGeometry.js +1 -1
  66. package/Build/Workers/createWallOutlineGeometry.js +1 -1
  67. package/Build/Workers/package.js +1 -1
  68. package/Build/Workers/transferTypedArrayTest.js +1 -1
  69. package/Build/Workers/upsampleQuantizedTerrainMesh.js +1 -1
  70. package/Source/Core/ArcGISTiledElevationTerrainProvider.js +291 -191
  71. package/Source/Core/CesiumTerrainProvider.js +571 -434
  72. package/Source/Core/CustomHeightmapTerrainProvider.js +12 -0
  73. package/Source/Core/EllipsoidTerrainProvider.js +17 -10
  74. package/Source/Core/FrustumGeometry.js +1 -1
  75. package/Source/Core/GoogleEarthEnterpriseMetadata.js +86 -34
  76. package/Source/Core/GoogleEarthEnterpriseTerrainProvider.js +119 -82
  77. package/Source/Core/Ion.js +1 -1
  78. package/Source/Core/IonResource.js +14 -3
  79. package/Source/Core/OrientedBoundingBox.js +4 -2
  80. package/Source/Core/RequestScheduler.js +1 -1
  81. package/Source/Core/Resource.js +2 -2
  82. package/Source/Core/TerrainProvider.js +9 -14
  83. package/Source/Core/TileProviderError.js +8 -8
  84. package/Source/Core/VRTheWorldTerrainProvider.js +193 -124
  85. package/Source/Core/buildModuleUrl.js +4 -3
  86. package/Source/Core/createWorldTerrain.js +20 -2
  87. package/Source/Core/createWorldTerrainAsync.js +48 -0
  88. package/Source/Core/sampleTerrain.js +9 -10
  89. package/Source/Core/sampleTerrainMostDetailed.js +66 -72
  90. package/Source/DataSources/Cesium3DTilesetVisualizer.js +37 -26
  91. package/Source/DataSources/Entity.js +6 -1
  92. package/Source/DataSources/ModelVisualizer.js +99 -31
  93. package/Source/DataSources/PolygonGraphics.js +1 -1
  94. package/Source/Scene/ArcGisMapServerImageryProvider.js +552 -376
  95. package/Source/Scene/BingMapsImageryProvider.js +511 -305
  96. package/Source/Scene/BufferLoader.js +29 -34
  97. package/Source/Scene/Cesium3DTile.js +388 -251
  98. package/Source/Scene/Cesium3DTileBatchTable.js +2 -2
  99. package/Source/Scene/Cesium3DTileContent.js +16 -0
  100. package/Source/Scene/Cesium3DTileContentFactory.js +4 -4
  101. package/Source/Scene/Cesium3DTilePass.js +8 -11
  102. package/Source/Scene/Cesium3DTileStyleEngine.js +1 -1
  103. package/Source/Scene/Cesium3DTilesVoxelProvider.js +225 -117
  104. package/Source/Scene/Cesium3DTileset.js +755 -481
  105. package/Source/Scene/Cesium3DTilesetBaseTraversal.js +301 -0
  106. package/Source/Scene/Cesium3DTilesetMostDetailedTraversal.js +33 -46
  107. package/Source/Scene/Cesium3DTilesetSkipTraversal.js +421 -0
  108. package/Source/Scene/Cesium3DTilesetTraversal.js +219 -671
  109. package/Source/Scene/ClassificationPrimitive.js +7 -0
  110. package/Source/Scene/Composite3DTileContent.js +69 -26
  111. package/Source/Scene/CreditDisplay.js +20 -4
  112. package/Source/Scene/DepthPlane.js +1 -1
  113. package/Source/Scene/Empty3DTileContent.js +31 -1
  114. package/Source/Scene/Geometry3DTileContent.js +47 -7
  115. package/Source/Scene/Globe.js +5 -1
  116. package/Source/Scene/GlobeSurfaceTile.js +2 -1
  117. package/Source/Scene/GlobeSurfaceTileProvider.js +50 -27
  118. package/Source/Scene/GltfBufferViewLoader.js +47 -91
  119. package/Source/Scene/GltfDracoLoader.js +110 -112
  120. package/Source/Scene/GltfImageLoader.js +71 -78
  121. package/Source/Scene/GltfIndexBufferLoader.js +108 -121
  122. package/Source/Scene/GltfJsonLoader.js +75 -74
  123. package/Source/Scene/GltfLoader.js +392 -280
  124. package/Source/Scene/GltfStructuralMetadataLoader.js +109 -110
  125. package/Source/Scene/GltfTextureLoader.js +97 -96
  126. package/Source/Scene/GltfVertexBufferLoader.js +128 -133
  127. package/Source/Scene/GoogleEarthEnterpriseImageryProvider.js +353 -225
  128. package/Source/Scene/GoogleEarthEnterpriseMapsProvider.js +491 -331
  129. package/Source/Scene/GridImageryProvider.js +267 -104
  130. package/Source/Scene/GroundPolylinePrimitive.js +12 -1
  131. package/Source/Scene/GroundPrimitive.js +8 -1
  132. package/Source/Scene/I3SDataProvider.js +214 -113
  133. package/Source/Scene/I3SFeature.js +7 -6
  134. package/Source/Scene/I3SLayer.js +26 -37
  135. package/Source/Scene/I3SNode.js +59 -66
  136. package/Source/Scene/Imagery.js +6 -1
  137. package/Source/Scene/ImageryLayer.js +299 -48
  138. package/Source/Scene/ImageryLayerCollection.js +26 -0
  139. package/Source/Scene/ImageryProvider.js +129 -111
  140. package/Source/Scene/Implicit3DTileContent.js +72 -23
  141. package/Source/Scene/ImplicitSubtree.js +66 -45
  142. package/Source/Scene/IonImageryProvider.js +471 -264
  143. package/Source/Scene/MapboxImageryProvider.js +272 -112
  144. package/Source/Scene/MapboxStyleImageryProvider.js +270 -111
  145. package/Source/Scene/MetadataSchemaLoader.js +26 -36
  146. package/Source/Scene/Model/B3dmLoader.js +42 -46
  147. package/Source/Scene/Model/GeoJsonLoader.js +8 -32
  148. package/Source/Scene/Model/I3dmLoader.js +48 -74
  149. package/Source/Scene/Model/Model.js +470 -132
  150. package/Source/Scene/Model/Model3DTileContent.js +83 -31
  151. package/Source/Scene/Model/ModelAnimationCollection.js +3 -3
  152. package/Source/Scene/Model/ModelDrawCommand.js +15 -26
  153. package/Source/Scene/Model/ModelUtility.js +16 -16
  154. package/Source/Scene/Model/PntsLoader.js +27 -32
  155. package/Source/Scene/Multiple3DTileContent.js +134 -115
  156. package/Source/Scene/PointCloud.js +11 -19
  157. package/Source/Scene/Primitive.js +20 -0
  158. package/Source/Scene/QuadtreePrimitive.js +2 -0
  159. package/Source/Scene/QuadtreeTileProvider.js +4 -8
  160. package/Source/Scene/ResourceCache.js +47 -105
  161. package/Source/Scene/ResourceCacheStatistics.js +24 -58
  162. package/Source/Scene/ResourceLoader.js +5 -17
  163. package/Source/Scene/ResourceLoaderState.js +12 -4
  164. package/Source/Scene/Scene.js +65 -0
  165. package/Source/Scene/ScreenSpaceCameraController.js +1 -1
  166. package/Source/Scene/SingleTileImageryProvider.js +382 -209
  167. package/Source/Scene/Terrain.js +196 -0
  168. package/Source/Scene/TileCoordinatesImageryProvider.js +267 -104
  169. package/Source/Scene/TileMapServiceImageryProvider.js +177 -85
  170. package/Source/Scene/Tileset3DTileContent.js +47 -5
  171. package/Source/Scene/TimeDynamicPointCloud.js +15 -2
  172. package/Source/Scene/UrlTemplateImageryProvider.js +343 -215
  173. package/Source/Scene/Vector3DTileClampedPolylines.js +96 -84
  174. package/Source/Scene/Vector3DTileContent.js +47 -22
  175. package/Source/Scene/Vector3DTileGeometry.js +57 -52
  176. package/Source/Scene/Vector3DTilePoints.js +72 -68
  177. package/Source/Scene/Vector3DTilePolygons.js +118 -117
  178. package/Source/Scene/Vector3DTilePolylines.js +86 -82
  179. package/Source/Scene/Vector3DTilePrimitive.js +0 -1
  180. package/Source/Scene/VoxelContent.js +61 -63
  181. package/Source/Scene/VoxelPrimitive.js +39 -91
  182. package/Source/Scene/VoxelProvider.js +2 -2
  183. package/Source/Scene/WebMapServiceImageryProvider.js +272 -111
  184. package/Source/Scene/WebMapTileServiceImageryProvider.js +270 -107
  185. package/Source/Scene/computeFlyToLocationForRectangle.js +33 -37
  186. package/Source/Scene/createOsmBuildings.js +6 -0
  187. package/Source/Scene/createOsmBuildingsAsync.js +82 -0
  188. package/Source/Scene/createWorldImagery.js +14 -5
  189. package/Source/Scene/createWorldImageryAsync.js +39 -0
  190. package/Source/Widget/CesiumWidget.js +55 -27
  191. package/index.d.ts +2158 -1395
  192. package/index.js +58 -51
  193. package/package.json +1 -1
@@ -87,10 +87,8 @@ function Vector3DTilePolylines(options) {
87
87
  this._geometryByteLength = 0;
88
88
 
89
89
  this._ready = false;
90
- this._update = function (polylines, frameState) {};
91
- this._readyPromise = initialize(this);
92
-
93
- this._verticesPromise = undefined;
90
+ this._promise = undefined;
91
+ this._error = undefined;
94
92
  }
95
93
 
96
94
  Object.defineProperties(Vector3DTilePolylines.prototype, {
@@ -101,6 +99,7 @@ Object.defineProperties(Vector3DTilePolylines.prototype, {
101
99
  *
102
100
  * @type {number}
103
101
  * @readonly
102
+ * @private
104
103
  */
105
104
  trianglesLength: {
106
105
  get: function () {
@@ -115,6 +114,7 @@ Object.defineProperties(Vector3DTilePolylines.prototype, {
115
114
  *
116
115
  * @type {number}
117
116
  * @readonly
117
+ * @private
118
118
  */
119
119
  geometryByteLength: {
120
120
  get: function () {
@@ -123,14 +123,15 @@ Object.defineProperties(Vector3DTilePolylines.prototype, {
123
123
  },
124
124
 
125
125
  /**
126
- * Gets a promise that resolves when the primitive is ready to render.
126
+ * Returns true when the primitive is ready to render.
127
127
  * @memberof Vector3DTilePolylines.prototype
128
- * @type {Promise<void>}
128
+ * @type {boolean}
129
129
  * @readonly
130
+ * @private
130
131
  */
131
- readyPromise: {
132
+ ready: {
132
133
  get: function () {
133
- return this._readyPromise;
134
+ return this._ready;
134
135
  },
135
136
  },
136
137
  });
@@ -181,51 +182,55 @@ function createVertexArray(polylines, context) {
181
182
  return;
182
183
  }
183
184
 
184
- if (!defined(polylines._verticesPromise)) {
185
- let positions = polylines._positions;
186
- let widths = polylines._widths;
187
- let counts = polylines._counts;
188
- let batchIds = polylines._transferrableBatchIds;
185
+ let positions = polylines._positions;
186
+ let widths = polylines._widths;
187
+ let counts = polylines._counts;
188
+ let batchIds = polylines._transferrableBatchIds;
189
189
 
190
- let packedBuffer = polylines._packedBuffer;
190
+ let packedBuffer = polylines._packedBuffer;
191
191
 
192
- if (!defined(packedBuffer)) {
193
- // Copy because they may be the views on the same buffer.
194
- positions = polylines._positions = positions.slice();
195
- widths = polylines._widths = widths.slice();
196
- counts = polylines._counts = counts.slice();
192
+ if (!defined(packedBuffer)) {
193
+ // Copy because they may be the views on the same buffer.
194
+ positions = polylines._positions = positions.slice();
195
+ widths = polylines._widths = widths.slice();
196
+ counts = polylines._counts = counts.slice();
197
197
 
198
- batchIds = polylines._transferrableBatchIds = polylines._batchIds.slice();
198
+ batchIds = polylines._transferrableBatchIds = polylines._batchIds.slice();
199
199
 
200
- packedBuffer = polylines._packedBuffer = packBuffer(polylines);
201
- }
200
+ packedBuffer = polylines._packedBuffer = packBuffer(polylines);
201
+ }
202
202
 
203
- const transferrableObjects = [
204
- positions.buffer,
205
- widths.buffer,
206
- counts.buffer,
207
- batchIds.buffer,
208
- packedBuffer.buffer,
209
- ];
210
- const parameters = {
211
- positions: positions.buffer,
212
- widths: widths.buffer,
213
- counts: counts.buffer,
214
- batchIds: batchIds.buffer,
215
- packedBuffer: packedBuffer.buffer,
216
- keepDecodedPositions: polylines._keepDecodedPositions,
217
- };
218
-
219
- const verticesPromise = (polylines._verticesPromise = createVerticesTaskProcessor.scheduleTask(
220
- parameters,
221
- transferrableObjects
222
- ));
223
- if (!defined(verticesPromise)) {
224
- // Postponed
225
- return;
226
- }
203
+ const transferrableObjects = [
204
+ positions.buffer,
205
+ widths.buffer,
206
+ counts.buffer,
207
+ batchIds.buffer,
208
+ packedBuffer.buffer,
209
+ ];
210
+ const parameters = {
211
+ positions: positions.buffer,
212
+ widths: widths.buffer,
213
+ counts: counts.buffer,
214
+ batchIds: batchIds.buffer,
215
+ packedBuffer: packedBuffer.buffer,
216
+ keepDecodedPositions: polylines._keepDecodedPositions,
217
+ };
218
+
219
+ const verticesPromise = createVerticesTaskProcessor.scheduleTask(
220
+ parameters,
221
+ transferrableObjects
222
+ );
223
+ if (!defined(verticesPromise)) {
224
+ // Postponed
225
+ return;
226
+ }
227
+
228
+ return verticesPromise
229
+ .then(function (result) {
230
+ if (polylines.isDestroyed()) {
231
+ return;
232
+ }
227
233
 
228
- return verticesPromise.then(function (result) {
229
234
  if (polylines._keepDecodedPositions) {
230
235
  polylines._decodedPositions = new Float64Array(result.decodedPositions);
231
236
  polylines._decodedPositionOffsets = new Uint32Array(
@@ -245,13 +250,22 @@ function createVertexArray(polylines, context) {
245
250
  ? new Uint16Array(result.indices)
246
251
  : new Uint32Array(result.indices);
247
252
 
253
+ finishVertexArray(polylines, context);
254
+
248
255
  polylines._ready = true;
256
+ })
257
+ .catch((error) => {
258
+ if (polylines.isDestroyed()) {
259
+ return;
260
+ }
261
+
262
+ // Throw the error next frame
263
+ polylines._error = error;
249
264
  });
250
- }
251
265
  }
252
266
 
253
267
  function finishVertexArray(polylines, context) {
254
- if (polylines._ready && !defined(polylines._va)) {
268
+ if (!defined(polylines._va)) {
255
269
  const curPositions = polylines._currentPositions;
256
270
  const prevPositions = polylines._previousPositions;
257
271
  const nextPositions = polylines._nextPositions;
@@ -603,45 +617,35 @@ Vector3DTilePolylines.prototype.applyStyle = function (style, features) {
603
617
  }
604
618
  };
605
619
 
606
- function initialize(polylines) {
607
- return new Promise(function (resolve, reject) {
608
- polylines._update = function (polylines, frameState) {
609
- const context = frameState.context;
610
- const promise = createVertexArray(polylines, context);
611
- createUniformMap(polylines, context);
612
- createShaders(polylines, context);
613
- createRenderStates(polylines);
614
-
615
- if (polylines._ready) {
616
- const passes = frameState.passes;
617
- if (passes.render || passes.pick) {
618
- queueCommands(polylines, frameState);
619
- }
620
- }
621
-
622
- if (!defined(promise)) {
623
- return;
624
- }
625
-
626
- promise
627
- .then(function () {
628
- finishVertexArray(polylines, context);
629
- resolve();
630
- })
631
- .catch(function (e) {
632
- reject(e);
633
- });
634
- };
635
- });
636
- }
637
-
638
620
  /**
639
621
  * Updates the batches and queues the commands for rendering.
640
622
  *
641
623
  * @param {FrameState} frameState The current frame state.
642
624
  */
643
625
  Vector3DTilePolylines.prototype.update = function (frameState) {
644
- this._update(this, frameState);
626
+ const context = frameState.context;
627
+ if (!this._ready) {
628
+ if (!defined(this._promise)) {
629
+ this._promise = createVertexArray(this, context);
630
+ }
631
+
632
+ if (defined(this._error)) {
633
+ const error = this._error;
634
+ this._error = undefined;
635
+ throw error;
636
+ }
637
+
638
+ return;
639
+ }
640
+
641
+ createUniformMap(this, context);
642
+ createShaders(this, context);
643
+ createRenderStates(this);
644
+
645
+ const passes = frameState.passes;
646
+ if (passes.render || passes.pick) {
647
+ queueCommands(this, frameState);
648
+ }
645
649
  };
646
650
 
647
651
  /**
@@ -249,7 +249,6 @@ function createVertexArray(primitive, context) {
249
249
  primitive._batchedPositions = undefined;
250
250
  primitive._transferrableBatchIds = undefined;
251
251
  primitive._vertexBatchIds = undefined;
252
- primitive._verticesPromise = undefined;
253
252
  }
254
253
 
255
254
  function createShaders(primitive, context) {
@@ -11,58 +11,20 @@ import MetadataTable from "./MetadataTable.js";
11
11
  * @constructor
12
12
  *
13
13
  * @param {Resource} resource The resource for this voxel content. This is used for fetching external buffers as needed.
14
- * @param {object} [json] Voxel JSON contents. Mutually exclusive with binary.
15
- * @param {Uint8Array} [binary] Voxel binary contents. Mutually exclusive with json.
16
- * @param {MetadataSchema} metadataSchema The metadata schema used by property tables in the voxel content
17
- *
18
- * @exception {DeveloperError} One of json and binary must be defined.
19
14
  *
20
15
  * @private
21
16
  * @experimental This feature is not final and is subject to change without Cesium's standard deprecation policy.
22
17
  */
23
- function VoxelContent(resource, json, binary, metadataSchema) {
18
+ function VoxelContent(resource) {
24
19
  //>>includeStart('debug', pragmas.debug);
25
20
  Check.typeOf.object("resource", resource);
26
- if (defined(json) === defined(binary)) {
27
- throw new DeveloperError("One of json and binary must be defined.");
28
- }
29
21
  //>>includeEnd('debug');
30
22
 
31
23
  this._resource = resource;
32
24
  this._metadataTable = undefined;
33
-
34
- let chunks;
35
- if (defined(json)) {
36
- chunks = {
37
- json: json,
38
- binary: undefined,
39
- };
40
- } else {
41
- chunks = parseVoxelChunks(binary);
42
- }
43
-
44
- this._readyPromise = initialize(
45
- this,
46
- chunks.json,
47
- chunks.binary,
48
- metadataSchema
49
- );
50
25
  }
51
26
 
52
27
  Object.defineProperties(VoxelContent.prototype, {
53
- /**
54
- * A promise that resolves once all buffers are loaded.
55
- *
56
- * @type {Promise}
57
- * @readonly
58
- * @private
59
- */
60
- readyPromise: {
61
- get: function () {
62
- return this._readyPromise;
63
- },
64
- },
65
-
66
28
  /**
67
29
  * The {@link MetadataTable} storing voxel property values.
68
30
  *
@@ -77,38 +39,74 @@ Object.defineProperties(VoxelContent.prototype, {
77
39
  },
78
40
  });
79
41
 
80
- function initialize(content, json, binary, metadataSchema) {
81
- return requestBuffers(content, json, binary).then(function (buffersU8) {
82
- const bufferViewsU8 = {};
83
- const bufferViewsLength = json.bufferViews.length;
84
- for (let i = 0; i < bufferViewsLength; ++i) {
85
- const bufferViewJson = json.bufferViews[i];
86
- const start = bufferViewJson.byteOffset;
87
- const end = start + bufferViewJson.byteLength;
88
- const buffer = buffersU8[bufferViewJson.buffer];
89
- const bufferView = buffer.subarray(start, end);
90
- bufferViewsU8[i] = bufferView;
91
- }
42
+ /**
43
+ * Creates an object representing voxel content for a {@link Cesium3DTilesVoxelProvider}.
44
+ *
45
+ * @param {Resource} resource The resource for this voxel content. This is used for fetching external buffers as needed.
46
+ * @param {object} [json] Voxel JSON contents. Mutually exclusive with binary.
47
+ * @param {Uint8Array} [binary] Voxel binary contents. Mutually exclusive with json.
48
+ * @param {MetadataSchema} metadataSchema The metadata schema used by property tables in the voxel content
49
+ * @returns {Promise<VoxelContent>}
50
+ *
51
+ * @exception {DeveloperError} One of json and binary must be defined.
52
+ */
53
+ VoxelContent.fromJson = async function (
54
+ resource,
55
+ json,
56
+ binary,
57
+ metadataSchema
58
+ ) {
59
+ //>>includeStart('debug', pragmas.debug);
60
+ Check.typeOf.object("resource", resource);
61
+ if (defined(json) === defined(binary)) {
62
+ throw new DeveloperError("One of json and binary must be defined.");
63
+ }
64
+ //>>includeEnd('debug');
65
+
66
+ let chunks;
67
+ if (defined(json)) {
68
+ chunks = {
69
+ json: json,
70
+ binary: undefined,
71
+ };
72
+ } else {
73
+ chunks = parseVoxelChunks(binary);
74
+ }
75
+
76
+ const buffersU8 = await requestBuffers(resource, chunks.json, chunks.binary);
77
+ const bufferViewsU8 = {};
78
+ const bufferViewsLength = chunks.json.bufferViews.length;
79
+ for (let i = 0; i < bufferViewsLength; ++i) {
80
+ const bufferViewJson = chunks.json.bufferViews[i];
81
+ const start = bufferViewJson.byteOffset;
82
+ const end = start + bufferViewJson.byteLength;
83
+ const buffer = buffersU8[bufferViewJson.buffer];
84
+ const bufferView = buffer.subarray(start, end);
85
+ bufferViewsU8[i] = bufferView;
86
+ }
87
+
88
+ const propertyTableIndex = chunks.json.voxelTable;
89
+ const propertyTableJson = chunks.json.propertyTables[propertyTableIndex];
92
90
 
93
- const propertyTableIndex = json.voxelTable;
94
- const propertyTableJson = json.propertyTables[propertyTableIndex];
95
- content._metadataTable = new MetadataTable({
96
- count: propertyTableJson.count,
97
- properties: propertyTableJson.properties,
98
- class: metadataSchema.classes[propertyTableJson.class],
99
- bufferViews: bufferViewsU8,
100
- });
101
- return content;
91
+ const content = new VoxelContent(resource);
92
+
93
+ content._metadataTable = new MetadataTable({
94
+ count: propertyTableJson.count,
95
+ properties: propertyTableJson.properties,
96
+ class: metadataSchema.classes[propertyTableJson.class],
97
+ bufferViews: bufferViewsU8,
102
98
  });
103
- }
104
99
 
105
- function requestBuffers(content, json, binary) {
100
+ return content;
101
+ };
102
+
103
+ function requestBuffers(resource, json, binary) {
106
104
  const buffersLength = json.buffers.length;
107
105
  const bufferPromises = new Array(buffersLength);
108
106
  for (let i = 0; i < buffersLength; i++) {
109
107
  const buffer = json.buffers[i];
110
108
  if (defined(buffer.uri)) {
111
- const baseResource = content._resource;
109
+ const baseResource = resource;
112
110
  const bufferResource = baseResource.getDerivedResource({
113
111
  url: buffer.uri,
114
112
  });
@@ -8,8 +8,8 @@ import clone from "../Core/clone.js";
8
8
  import Color from "../Core/Color.js";
9
9
  import defaultValue from "../Core/defaultValue.js";
10
10
  import defined from "../Core/defined.js";
11
+ import deprecationWarning from "../Core/deprecationWarning.js";
11
12
  import destroyObject from "../Core/destroyObject.js";
12
- import DeveloperError from "../Core/DeveloperError.js";
13
13
  import Event from "../Core/Event.js";
14
14
  import JulianDate from "../Core/JulianDate.js";
15
15
  import Matrix3 from "../Core/Matrix3.js";
@@ -426,7 +426,7 @@ function VoxelPrimitive(options) {
426
426
  this._readyPromise = initialize(this, provider);
427
427
  }
428
428
 
429
- function initialize(primitive, provider) {
429
+ async function initialize(primitive, provider) {
430
430
  const promise = new Promise(function (resolve) {
431
431
  primitive._completeLoad = function (primitive, frameState) {
432
432
  // Set the primitive as ready after the first frame render since the user might set up events subscribed to
@@ -439,9 +439,35 @@ function initialize(primitive, provider) {
439
439
  };
440
440
  });
441
441
 
442
- return provider.readyPromise.then(function () {
443
- return promise;
444
- });
442
+ // This is here for backwards compatibility. It can be removed when readyPromise is removed.
443
+ if (defined(provider._readyPromise) && !provider._ready) {
444
+ await provider._readyPromise;
445
+ }
446
+
447
+ // Set the bounds
448
+ const {
449
+ shape: shapeType,
450
+ minBounds = VoxelShapeType.getMinBounds(shapeType),
451
+ maxBounds = VoxelShapeType.getMaxBounds(shapeType),
452
+ } = provider;
453
+
454
+ primitive.minBounds = minBounds;
455
+ primitive.maxBounds = maxBounds;
456
+ primitive.minClippingBounds = VoxelShapeType.getMinBounds(shapeType);
457
+ primitive.maxClippingBounds = VoxelShapeType.getMaxBounds(shapeType);
458
+
459
+ checkTransformAndBounds(primitive, provider);
460
+
461
+ // Create the shape object, and update it so it is valid for VoxelTraversal
462
+ const ShapeConstructor = VoxelShapeType.getShapeConstructor(shapeType);
463
+ primitive._shape = new ShapeConstructor();
464
+ primitive._shapeVisible = updateShapeAndTransforms(
465
+ primitive,
466
+ primitive._shape,
467
+ provider
468
+ );
469
+
470
+ return promise;
445
471
  }
446
472
 
447
473
  Object.defineProperties(VoxelPrimitive.prototype, {
@@ -464,9 +490,14 @@ Object.defineProperties(VoxelPrimitive.prototype, {
464
490
  * @memberof VoxelPrimitive.prototype
465
491
  * @type {Promise<VoxelPrimitive>}
466
492
  * @readonly
493
+ * @deprecated
467
494
  */
468
495
  readyPromise: {
469
496
  get: function () {
497
+ deprecationWarning(
498
+ "VoxelPrimitive.readyPromise",
499
+ "VoxelPrimitive.readyPromise was deprecated in CesiumJS 1.104. It will be removed in 1.107. Wait for VoxelPrimitive.ready to return true instead."
500
+ );
470
501
  return this._readyPromise;
471
502
  },
472
503
  },
@@ -490,19 +521,9 @@ Object.defineProperties(VoxelPrimitive.prototype, {
490
521
  * @memberof VoxelPrimitive.prototype
491
522
  * @type {BoundingSphere}
492
523
  * @readonly
493
- *
494
- * @exception {DeveloperError} If the primitive is not ready.
495
524
  */
496
525
  boundingSphere: {
497
526
  get: function () {
498
- //>>includeStart('debug', pragmas.debug);
499
- if (!this._ready) {
500
- throw new DeveloperError(
501
- "boundingSphere must not be called before the primitive is ready."
502
- );
503
- }
504
- //>>includeEnd('debug');
505
-
506
527
  return this._shape.boundingSphere;
507
528
  },
508
529
  },
@@ -513,20 +534,10 @@ Object.defineProperties(VoxelPrimitive.prototype, {
513
534
  * @memberof VoxelPrimitive.prototype
514
535
  * @type {OrientedBoundingBox}
515
536
  * @readonly
516
- *
517
- * @exception {DeveloperError} If the primitive is not ready.
518
537
  */
519
538
  orientedBoundingBox: {
520
539
  get: function () {
521
- //>>includeStart('debug', pragmas.debug);
522
- if (!this._ready) {
523
- throw new DeveloperError(
524
- "orientedBoundingBox must not be called before the primitive is ready."
525
- );
526
- }
527
- //>>includeEnd('debug');
528
-
529
- return this._shape.orientedBoundingBox;
540
+ return this.shape.orientedBoundingBox;
530
541
  },
531
542
  },
532
543
 
@@ -556,19 +567,9 @@ Object.defineProperties(VoxelPrimitive.prototype, {
556
567
  * @memberof VoxelPrimitive.prototype
557
568
  * @type {VoxelShapeType}
558
569
  * @readonly
559
- *
560
- * @exception {DeveloperError} If the primitive is not ready.
561
570
  */
562
571
  shape: {
563
572
  get: function () {
564
- //>>includeStart('debug', pragmas.debug);
565
- if (!this._ready) {
566
- throw new DeveloperError(
567
- "shape must not be called before the primitive is ready."
568
- );
569
- }
570
- //>>includeEnd('debug');
571
-
572
573
  return this._provider.shape;
573
574
  },
574
575
  },
@@ -579,19 +580,9 @@ Object.defineProperties(VoxelPrimitive.prototype, {
579
580
  * @memberof VoxelPrimitive.prototype
580
581
  * @type {Cartesian3}
581
582
  * @readonly
582
- *
583
- * @exception {DeveloperError} If the primitive is not ready.
584
583
  */
585
584
  dimensions: {
586
585
  get: function () {
587
- //>>includeStart('debug', pragmas.debug);
588
- if (!this._ready) {
589
- throw new DeveloperError(
590
- "dimensions must not be called before the primitive is ready."
591
- );
592
- }
593
- //>>includeEnd('debug');
594
-
595
586
  return this._provider.dimensions;
596
587
  },
597
588
  },
@@ -602,19 +593,9 @@ Object.defineProperties(VoxelPrimitive.prototype, {
602
593
  * @memberof VoxelPrimitive.prototype
603
594
  * @type {number[][]}
604
595
  * @readonly
605
- *
606
- * @exception {DeveloperError} If the primitive is not ready.
607
596
  */
608
597
  minimumValues: {
609
598
  get: function () {
610
- //>>includeStart('debug', pragmas.debug);
611
- if (!this._ready) {
612
- throw new DeveloperError(
613
- "minimumValues must not be called before the primitive is ready."
614
- );
615
- }
616
- //>>includeEnd('debug');
617
-
618
599
  return this._provider.minimumValues;
619
600
  },
620
601
  },
@@ -625,19 +606,9 @@ Object.defineProperties(VoxelPrimitive.prototype, {
625
606
  * @memberof VoxelPrimitive.prototype
626
607
  * @type {number[][]}
627
608
  * @readonly
628
- *
629
- * @exception {DeveloperError} If the primitive is not ready.
630
609
  */
631
610
  maximumValues: {
632
611
  get: function () {
633
- //>>includeStart('debug', pragmas.debug);
634
- if (!this._ready) {
635
- throw new DeveloperError(
636
- "maximumValues must not be called before the primitive is ready."
637
- );
638
- }
639
- //>>includeEnd('debug');
640
-
641
612
  return this._provider.maximumValues;
642
613
  },
643
614
  },
@@ -1018,7 +989,8 @@ VoxelPrimitive.prototype.update = function (frameState) {
1018
989
  this._customShader.update(frameState);
1019
990
 
1020
991
  // Exit early if it's not ready yet.
1021
- if (!this._ready && !provider.ready) {
992
+ // This is here for backward compatibility. It can be removed when readyPromise is removed.
993
+ if ((defined(provider._ready) && !provider._ready) || !defined(this._shape)) {
1022
994
  return;
1023
995
  }
1024
996
 
@@ -1188,29 +1160,6 @@ function initFromProvider(primitive, provider, context) {
1188
1160
  primitive._pickId = context.createPickId({ primitive });
1189
1161
  uniforms.pickColor = Color.clone(primitive._pickId.color, uniforms.pickColor);
1190
1162
 
1191
- // Set the bounds
1192
- const {
1193
- shape: shapeType,
1194
- minBounds = VoxelShapeType.getMinBounds(shapeType),
1195
- maxBounds = VoxelShapeType.getMaxBounds(shapeType),
1196
- } = provider;
1197
-
1198
- primitive.minBounds = minBounds;
1199
- primitive.maxBounds = maxBounds;
1200
- primitive.minClippingBounds = VoxelShapeType.getMinBounds(shapeType);
1201
- primitive.maxClippingBounds = VoxelShapeType.getMaxBounds(shapeType);
1202
-
1203
- checkTransformAndBounds(primitive, provider);
1204
-
1205
- // Create the shape object, and update it so it is valid for VoxelTraversal
1206
- const ShapeConstructor = VoxelShapeType.getShapeConstructor(shapeType);
1207
- primitive._shape = new ShapeConstructor();
1208
- primitive._shapeVisible = updateShapeAndTransforms(
1209
- primitive,
1210
- primitive._shape,
1211
- provider
1212
- );
1213
-
1214
1163
  const { shaderDefines, shaderUniforms: shapeUniforms } = primitive._shape;
1215
1164
  primitive._shapeDefinesOld = clone(shaderDefines, true);
1216
1165
 
@@ -1896,7 +1845,6 @@ VoxelPrimitive.DefaultCustomShader = new CustomShader({
1896
1845
 
1897
1846
  function DefaultVoxelProvider() {
1898
1847
  this.ready = true;
1899
- this.readyPromise = Promise.resolve(this);
1900
1848
  this.shape = VoxelShapeType.BOX;
1901
1849
  this.dimensions = new Cartesian3(1, 1, 1);
1902
1850
  this.names = ["data"];
@@ -24,6 +24,7 @@ Object.defineProperties(VoxelProvider.prototype, {
24
24
  * @memberof VoxelProvider.prototype
25
25
  * @type {boolean}
26
26
  * @readonly
27
+ * @deprecated
27
28
  */
28
29
  ready: {
29
30
  get: DeveloperError.throwInstantiationError,
@@ -35,6 +36,7 @@ Object.defineProperties(VoxelProvider.prototype, {
35
36
  * @memberof VoxelProvider.prototype
36
37
  * @type {Promise<VoxelProvider>}
37
38
  * @readonly
39
+ * @deprecated
38
40
  */
39
41
  readyPromise: {
40
42
  get: DeveloperError.throwInstantiationError,
@@ -247,8 +249,6 @@ Object.defineProperties(VoxelProvider.prototype, {
247
249
  * @param {number} [options.tileZ=0] The tile's Z coordinate.
248
250
  * @privateparam {number} [options.keyframe=0] The requested keyframe.
249
251
  * @returns {Promise<Array[]>|undefined} A promise to an array of typed arrays containing the requested voxel data or undefined if there was a problem loading the data.
250
- *
251
- * @exception {DeveloperError} The provider must be ready.
252
252
  */
253
253
  VoxelProvider.prototype.requestData = DeveloperError.throwInstantiationError;
254
254