@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.
- package/Build/Workers/{AttributeCompression-8a5a065e.js → AttributeCompression-f9f6c717.js} +1 -1
- package/Build/Workers/{AxisAlignedBoundingBox-a6f9f0e5.js → AxisAlignedBoundingBox-31fadcf0.js} +1 -1
- package/Build/Workers/{BoundingRectangle-b0a68595.js → BoundingRectangle-995f0079.js} +1 -1
- package/Build/Workers/{BoxGeometry-baedd794.js → BoxGeometry-7eb1af60.js} +1 -1
- package/Build/Workers/{Color-f85df1be.js → Color-2dc49658.js} +1 -1
- package/Build/Workers/{CoplanarPolygonGeometryLibrary-30516950.js → CoplanarPolygonGeometryLibrary-d7d972d6.js} +1 -1
- package/Build/Workers/{CorridorGeometryLibrary-5d5d3b3a.js → CorridorGeometryLibrary-1f5ef7b3.js} +1 -1
- package/Build/Workers/{CylinderGeometry-d899ae26.js → CylinderGeometry-23c67a6c.js} +1 -1
- package/Build/Workers/{CylinderGeometryLibrary-135b0858.js → CylinderGeometryLibrary-7bf291b4.js} +1 -1
- package/Build/Workers/{EllipseGeometry-a49f8449.js → EllipseGeometry-37014da4.js} +1 -1
- package/Build/Workers/{EllipseGeometryLibrary-cba7edde.js → EllipseGeometryLibrary-92ab6b1e.js} +1 -1
- package/Build/Workers/{EllipseOutlineGeometry-8095c8cb.js → EllipseOutlineGeometry-12b6fef5.js} +1 -1
- package/Build/Workers/{EllipsoidGeodesic-dcff5cbd.js → EllipsoidGeodesic-5b3623dc.js} +1 -1
- package/Build/Workers/{EllipsoidGeometry-ed93f571.js → EllipsoidGeometry-508da15c.js} +1 -1
- package/Build/Workers/{EllipsoidOutlineGeometry-e4854854.js → EllipsoidOutlineGeometry-40d97455.js} +1 -1
- package/Build/Workers/{EllipsoidRhumbLine-b672d507.js → EllipsoidRhumbLine-ef872433.js} +1 -1
- package/Build/Workers/{EllipsoidTangentPlane-7ae1aa9a.js → EllipsoidTangentPlane-46d4d9c2.js} +1 -1
- package/Build/Workers/{EncodedCartesian3-e8bbca36.js → EncodedCartesian3-57415c8a.js} +1 -1
- package/Build/Workers/{FrustumGeometry-b62db3e3.js → FrustumGeometry-38605e69.js} +32 -4
- package/Build/Workers/{GeometryAttribute-780af4fa.js → GeometryAttribute-a466e9c7.js} +1 -1
- package/Build/Workers/{GeometryInstance-3fb607b7.js → GeometryInstance-34d9e21e.js} +1 -1
- package/Build/Workers/{GeometryPipeline-36b61c99.js → GeometryPipeline-dcf79306.js} +1 -1
- package/Build/Workers/{IndexDatatype-b8f3e09d.js → IndexDatatype-2643aa47.js} +1 -1
- package/Build/Workers/{IntersectionTests-e889fcf0.js → IntersectionTests-88c49b2e.js} +1 -1
- package/Build/Workers/{Math-dad82b4d.js → Math-0a2ac845.js} +12 -2
- package/Build/Workers/{Matrix2-1e403d0e.js → Matrix2-e1298525.js} +1 -1
- package/Build/Workers/{Matrix3-fa806b97.js → Matrix3-41c58dde.js} +1 -1
- package/Build/Workers/{OrientedBoundingBox-43478ac8.js → OrientedBoundingBox-2dd47921.js} +5 -3
- package/Build/Workers/{Plane-c27e1ac6.js → Plane-4c3d403b.js} +1 -1
- package/Build/Workers/{PolygonGeometryLibrary-38a98276.js → PolygonGeometryLibrary-59126025.js} +1 -1
- package/Build/Workers/PolygonPipeline-1fe328c0.js +1344 -0
- package/Build/Workers/{PolylinePipeline-30e4cec9.js → PolylinePipeline-896735cc.js} +1 -1
- package/Build/Workers/{PolylineVolumeGeometryLibrary-90551d26.js → PolylineVolumeGeometryLibrary-9c0639f7.js} +1 -1
- package/Build/Workers/{PrimitivePipeline-558d9cb0.js → PrimitivePipeline-fc1a47ff.js} +1 -1
- package/Build/Workers/{RectangleGeometryLibrary-815c68df.js → RectangleGeometryLibrary-a23c9ebe.js} +1 -1
- package/Build/Workers/{TerrainEncoding-341ead52.js → TerrainEncoding-51b8b33b.js} +1 -1
- package/Build/Workers/Transforms-bc45e707.js +14699 -0
- package/Build/Workers/{WallGeometryLibrary-ccf90976.js → WallGeometryLibrary-007e9883.js} +1 -1
- package/Build/Workers/{WebMercatorProjection-76a3fcc0.js → WebMercatorProjection-13ed1a6e.js} +1 -1
- package/Build/Workers/{arrayRemoveDuplicates-fac118a8.js → arrayRemoveDuplicates-d2061e85.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/createVectorTileClampedPolylines.js +1 -1
- package/Build/Workers/createVectorTileGeometries.js +1 -1
- package/Build/Workers/createVectorTilePoints.js +1 -1
- package/Build/Workers/createVectorTilePolygons.js +1 -1
- package/Build/Workers/createVectorTilePolylines.js +1 -1
- package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +1 -1
- package/Build/Workers/createVerticesFromHeightmap.js +5 -8
- package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +10 -15
- package/Build/Workers/createWallGeometry.js +1 -1
- package/Build/Workers/createWallOutlineGeometry.js +1 -1
- package/Build/Workers/decodeDraco.js +1 -1
- package/Build/Workers/decodeI3S.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/BingMapsGeocoderService.js +19 -1
- package/Source/Core/CartographicGeocoderService.js +15 -0
- package/Source/Core/CesiumTerrainProvider.js +571 -434
- package/Source/Core/Credit.js +1 -1
- package/Source/Core/CustomHeightmapTerrainProvider.js +12 -0
- package/Source/Core/EllipsoidTerrainProvider.js +17 -10
- package/Source/Core/FrustumGeometry.js +4 -3
- package/Source/Core/GeocoderService.js +32 -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/IonGeocoderService.js +17 -2
- package/Source/Core/IonResource.js +14 -3
- package/Source/Core/OpenCageGeocoderService.js +18 -1
- package/Source/Core/OrientedBoundingBox.js +4 -2
- package/Source/Core/OrthographicFrustum.js +13 -0
- package/Source/Core/PeliasGeocoderService.js +14 -1
- package/Source/Core/PerspectiveFrustum.js +14 -0
- package/Source/Core/Request.js +3 -2
- package/Source/Core/RequestScheduler.js +10 -5
- package/Source/Core/Resource.js +230 -236
- 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/DataSourceDisplay.js +2 -2
- package/Source/DataSources/Entity.js +6 -1
- package/Source/DataSources/EntityCluster.js +126 -128
- package/Source/DataSources/ModelVisualizer.js +104 -34
- package/Source/DataSources/PolygonGraphics.js +1 -1
- package/Source/Renderer/UniformState.js +3 -2
- package/Source/Renderer/demodernizeShader.js +5 -5
- package/Source/Scene/ArcGisBaseMapType.js +12 -0
- package/Source/Scene/ArcGisMapServerImageryProvider.js +694 -376
- package/Source/Scene/ArcGisMapService.js +83 -0
- package/Source/Scene/BingMapsImageryProvider.js +511 -305
- package/Source/Scene/BufferLoader.js +29 -34
- package/Source/Scene/Camera.js +8 -7
- package/Source/Scene/Cesium3DTile.js +392 -254
- 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 +756 -482
- 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 +132 -20
- 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 +53 -30
- 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 +87 -74
- package/Source/Scene/GltfLoader.js +381 -300
- 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 +482 -275
- 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/MaterialPipelineStage.js +12 -12
- package/Source/Scene/Model/Model.js +514 -135
- 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/Model/UniformType.js +1 -1
- package/Source/Scene/Multiple3DTileContent.js +134 -115
- package/Source/Scene/Picking.js +3 -2
- package/Source/Scene/PointCloud.js +11 -19
- package/Source/Scene/Primitive.js +20 -0
- package/Source/Scene/QuadtreePrimitive.js +5 -2
- 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/SceneTransforms.js +3 -2
- package/Source/Scene/ScreenSpaceCameraController.js +2 -2
- 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 +97 -81
- 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/Shaders/AtmosphereCommon.glsl +51 -8
- package/Source/Shaders/AtmosphereCommon.js +51 -8
- package/Source/Shaders/PostProcessStages/AmbientOcclusionGenerate.glsl +1 -1
- package/Source/Shaders/PostProcessStages/AmbientOcclusionGenerate.js +1 -1
- package/Source/Shaders/PostProcessStages/AmbientOcclusionModulate.glsl +3 -3
- package/Source/Shaders/PostProcessStages/AmbientOcclusionModulate.js +3 -3
- package/Source/Widget/CesiumWidget.js +67 -27
- package/index.d.ts +2429 -1475
- package/index.js +324 -315
- package/package.json +4 -4
- package/Build/Workers/PolygonPipeline-d31ff61c.js +0 -1345
- package/Build/Workers/Transforms-9e9df299.js +0 -14714
|
@@ -52,6 +52,10 @@ import Pass from "../Renderer/Pass.js";
|
|
|
52
52
|
*
|
|
53
53
|
* @alias Cesium3DTile
|
|
54
54
|
* @constructor
|
|
55
|
+
* @param {Cesium3DTileset} tileset The tileset
|
|
56
|
+
* @param {Resource} baseResource The base resource for the tileset
|
|
57
|
+
* @param {object} header The JSON header for the tile
|
|
58
|
+
* @param {Cesium3DTile} parent The parent tile of the new tile
|
|
55
59
|
*/
|
|
56
60
|
function Cesium3DTile(tileset, baseResource, header, parent) {
|
|
57
61
|
this._tileset = tileset;
|
|
@@ -255,8 +259,6 @@ function Cesium3DTile(tileset, baseResource, header, parent) {
|
|
|
255
259
|
this._content = content;
|
|
256
260
|
this._contentResource = contentResource;
|
|
257
261
|
this._contentState = contentState;
|
|
258
|
-
this._contentReadyToProcessPromise = undefined;
|
|
259
|
-
this._contentReadyPromise = undefined;
|
|
260
262
|
this._expiredContent = undefined;
|
|
261
263
|
|
|
262
264
|
this._serverKey = serverKey;
|
|
@@ -574,13 +576,29 @@ Object.defineProperties(Cesium3DTile.prototype, {
|
|
|
574
576
|
},
|
|
575
577
|
},
|
|
576
578
|
|
|
579
|
+
/**
|
|
580
|
+
* Determines if the tile is visible within the current field of view
|
|
581
|
+
*
|
|
582
|
+
* @memberof Cesium3DTile.prototype
|
|
583
|
+
*
|
|
584
|
+
* @type {boolean}
|
|
585
|
+
* @readonly
|
|
586
|
+
*
|
|
587
|
+
* @private
|
|
588
|
+
*/
|
|
589
|
+
isVisible: {
|
|
590
|
+
get: function () {
|
|
591
|
+
return this._visible && this._inRequestVolume;
|
|
592
|
+
},
|
|
593
|
+
},
|
|
594
|
+
|
|
577
595
|
/**
|
|
578
596
|
* Returns the <code>extras</code> property in the tileset JSON for this tile, which contains application specific metadata.
|
|
579
597
|
* Returns <code>undefined</code> if <code>extras</code> does not exist.
|
|
580
598
|
*
|
|
581
599
|
* @memberof Cesium3DTile.prototype
|
|
582
600
|
*
|
|
583
|
-
* @type {
|
|
601
|
+
* @type {object}
|
|
584
602
|
* @readonly
|
|
585
603
|
* @see {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification#specifying-extensions-and-application-specific-extras|Extras in the 3D Tiles specification.}
|
|
586
604
|
*/
|
|
@@ -614,6 +632,27 @@ Object.defineProperties(Cesium3DTile.prototype, {
|
|
|
614
632
|
},
|
|
615
633
|
},
|
|
616
634
|
|
|
635
|
+
/**
|
|
636
|
+
* Determines if the tile's content is renderable. <code>false</code> if the
|
|
637
|
+
* tile has empty content or if it points to an external tileset or implicit content
|
|
638
|
+
*
|
|
639
|
+
* @memberof Cesium3DTile.prototype
|
|
640
|
+
*
|
|
641
|
+
* @type {boolean}
|
|
642
|
+
* @readonly
|
|
643
|
+
*
|
|
644
|
+
* @private
|
|
645
|
+
*/
|
|
646
|
+
hasRenderableContent: {
|
|
647
|
+
get: function () {
|
|
648
|
+
return (
|
|
649
|
+
!this.hasEmptyContent &&
|
|
650
|
+
!this.hasTilesetContent &&
|
|
651
|
+
!this.hasImplicitContent
|
|
652
|
+
);
|
|
653
|
+
},
|
|
654
|
+
},
|
|
655
|
+
|
|
617
656
|
/**
|
|
618
657
|
* Determines if the tile has available content to render. <code>true</code> if the tile's
|
|
619
658
|
* content is ready or if it has expired content that renders while new content loads; otherwise,
|
|
@@ -629,10 +668,7 @@ Object.defineProperties(Cesium3DTile.prototype, {
|
|
|
629
668
|
contentAvailable: {
|
|
630
669
|
get: function () {
|
|
631
670
|
return (
|
|
632
|
-
(this.contentReady &&
|
|
633
|
-
!this.hasEmptyContent &&
|
|
634
|
-
!this.hasTilesetContent &&
|
|
635
|
-
!this.hasImplicitContent) ||
|
|
671
|
+
(this.contentReady && this.hasRenderableContent) ||
|
|
636
672
|
(defined(this._expiredContent) && !this.contentFailed)
|
|
637
673
|
);
|
|
638
674
|
},
|
|
@@ -673,8 +709,7 @@ Object.defineProperties(Cesium3DTile.prototype, {
|
|
|
673
709
|
},
|
|
674
710
|
|
|
675
711
|
/**
|
|
676
|
-
* Determines if the tile
|
|
677
|
-
* content is expired; otherwise, <code>false</code>.
|
|
712
|
+
* Determines if the tile has renderable content which is unloaded
|
|
678
713
|
*
|
|
679
714
|
* @memberof Cesium3DTile.prototype
|
|
680
715
|
*
|
|
@@ -683,15 +718,15 @@ Object.defineProperties(Cesium3DTile.prototype, {
|
|
|
683
718
|
*
|
|
684
719
|
* @private
|
|
685
720
|
*/
|
|
686
|
-
|
|
721
|
+
hasUnloadedRenderableContent: {
|
|
687
722
|
get: function () {
|
|
688
|
-
return this.
|
|
723
|
+
return this.hasRenderableContent && this.contentUnloaded;
|
|
689
724
|
},
|
|
690
725
|
},
|
|
691
726
|
|
|
692
727
|
/**
|
|
693
|
-
* Determines if the tile's content
|
|
694
|
-
* content
|
|
728
|
+
* Determines if the tile's content is expired. <code>true</code> if tile's
|
|
729
|
+
* content is expired; otherwise, <code>false</code>.
|
|
695
730
|
*
|
|
696
731
|
* @memberof Cesium3DTile.prototype
|
|
697
732
|
*
|
|
@@ -700,45 +735,26 @@ Object.defineProperties(Cesium3DTile.prototype, {
|
|
|
700
735
|
*
|
|
701
736
|
* @private
|
|
702
737
|
*/
|
|
703
|
-
|
|
738
|
+
contentExpired: {
|
|
704
739
|
get: function () {
|
|
705
|
-
return this._contentState === Cesium3DTileContentState.
|
|
740
|
+
return this._contentState === Cesium3DTileContentState.EXPIRED;
|
|
706
741
|
},
|
|
707
742
|
},
|
|
708
743
|
|
|
709
744
|
/**
|
|
710
|
-
*
|
|
711
|
-
*
|
|
712
|
-
* to render.
|
|
713
|
-
* <p>
|
|
714
|
-
* The promise remains <code>undefined</code> until the tile's content is requested.
|
|
715
|
-
* </p>
|
|
716
|
-
*
|
|
717
|
-
* @type {Promise<Cesium3DTileContent>}
|
|
718
|
-
* @readonly
|
|
745
|
+
* Determines if the tile's content failed to load. <code>true</code> if the tile's
|
|
746
|
+
* content failed to load; otherwise, <code>false</code>.
|
|
719
747
|
*
|
|
720
|
-
* @
|
|
721
|
-
*/
|
|
722
|
-
contentReadyToProcessPromise: {
|
|
723
|
-
get: function () {
|
|
724
|
-
return this._contentReadyToProcessPromise;
|
|
725
|
-
},
|
|
726
|
-
},
|
|
727
|
-
|
|
728
|
-
/**
|
|
729
|
-
* Gets the promise that will be resolved when the tile's content is ready to render.
|
|
730
|
-
* <p>
|
|
731
|
-
* The promise remains <code>undefined</code> until the tile's content is requested.
|
|
732
|
-
* </p>
|
|
748
|
+
* @memberof Cesium3DTile.prototype
|
|
733
749
|
*
|
|
734
|
-
* @type {
|
|
750
|
+
* @type {boolean}
|
|
735
751
|
* @readonly
|
|
736
752
|
*
|
|
737
753
|
* @private
|
|
738
754
|
*/
|
|
739
|
-
|
|
755
|
+
contentFailed: {
|
|
740
756
|
get: function () {
|
|
741
|
-
return this.
|
|
757
|
+
return this._contentState === Cesium3DTileContentState.FAILED;
|
|
742
758
|
},
|
|
743
759
|
},
|
|
744
760
|
|
|
@@ -757,13 +773,20 @@ Object.defineProperties(Cesium3DTile.prototype, {
|
|
|
757
773
|
});
|
|
758
774
|
|
|
759
775
|
const scratchCartesian = new Cartesian3();
|
|
776
|
+
|
|
777
|
+
/**
|
|
778
|
+
* @private
|
|
779
|
+
* @param {Cesium3DTile} tile
|
|
780
|
+
* @param {FrameState} frameState
|
|
781
|
+
* @returns {Boolean}
|
|
782
|
+
*/
|
|
760
783
|
function isPriorityDeferred(tile, frameState) {
|
|
761
|
-
const tileset = tile
|
|
784
|
+
const { tileset, boundingSphere } = tile;
|
|
785
|
+
const { radius, center } = boundingSphere;
|
|
786
|
+
const { camera } = frameState;
|
|
762
787
|
|
|
763
|
-
// If closest point on line is inside the sphere then set foveatedFactor to 0.
|
|
764
|
-
|
|
765
|
-
const boundingSphere = tile.boundingSphere;
|
|
766
|
-
const radius = boundingSphere.radius;
|
|
788
|
+
// If closest point on line is inside the sphere then set foveatedFactor to 0.
|
|
789
|
+
// Otherwise, the dot product is with the line from camera to the point on the sphere that is closest to the line.
|
|
767
790
|
const scaledCameraDirection = Cartesian3.multiplyByScalar(
|
|
768
791
|
camera.directionWC,
|
|
769
792
|
tile._centerZDepth,
|
|
@@ -777,7 +800,7 @@ function isPriorityDeferred(tile, frameState) {
|
|
|
777
800
|
// The distance from the camera's view direction to the tile.
|
|
778
801
|
const toLine = Cartesian3.subtract(
|
|
779
802
|
closestPointOnLine,
|
|
780
|
-
|
|
803
|
+
center,
|
|
781
804
|
scratchCartesian
|
|
782
805
|
);
|
|
783
806
|
const distanceToCenterLine = Cartesian3.magnitude(toLine);
|
|
@@ -795,7 +818,7 @@ function isPriorityDeferred(tile, frameState) {
|
|
|
795
818
|
scratchCartesian
|
|
796
819
|
);
|
|
797
820
|
const closestOnSphere = Cartesian3.add(
|
|
798
|
-
|
|
821
|
+
center,
|
|
799
822
|
scaledToLine,
|
|
800
823
|
scratchCartesian
|
|
801
824
|
);
|
|
@@ -818,7 +841,7 @@ function isPriorityDeferred(tile, frameState) {
|
|
|
818
841
|
// Skip this feature if: non-skipLevelOfDetail and replace refine, if the foveated settings are turned off, if tile is progressive resolution and replace refine and skipLevelOfDetail (will help get rid of ancestor artifacts faster)
|
|
819
842
|
// Or if the tile is a preload of any kind
|
|
820
843
|
const replace = tile.refine === Cesium3DTileRefine.REPLACE;
|
|
821
|
-
const skipLevelOfDetail = tileset.
|
|
844
|
+
const skipLevelOfDetail = tileset.isSkippingLevelOfDetail;
|
|
822
845
|
if (
|
|
823
846
|
(replace && !skipLevelOfDetail) ||
|
|
824
847
|
!tileset.foveatedScreenSpaceError ||
|
|
@@ -864,6 +887,9 @@ const scratchJulianDate = new JulianDate();
|
|
|
864
887
|
* Get the tile's screen space error.
|
|
865
888
|
*
|
|
866
889
|
* @private
|
|
890
|
+
* @param {FrameState} frameState
|
|
891
|
+
* @param {Boolean} useParentGeometricError
|
|
892
|
+
* @param {number} progressiveResolutionHeightFraction
|
|
867
893
|
*/
|
|
868
894
|
Cesium3DTile.prototype.getScreenSpaceError = function (
|
|
869
895
|
frameState,
|
|
@@ -882,9 +908,8 @@ Cesium3DTile.prototype.getScreenSpaceError = function (
|
|
|
882
908
|
// Leaf tiles do not have any error so save the computation
|
|
883
909
|
return 0.0;
|
|
884
910
|
}
|
|
885
|
-
const camera = frameState
|
|
911
|
+
const { camera, context } = frameState;
|
|
886
912
|
let frustum = camera.frustum;
|
|
887
|
-
const context = frameState.context;
|
|
888
913
|
const width = context.drawingBufferWidth;
|
|
889
914
|
const height = context.drawingBufferHeight * heightFraction;
|
|
890
915
|
let error;
|
|
@@ -892,8 +917,9 @@ Cesium3DTile.prototype.getScreenSpaceError = function (
|
|
|
892
917
|
frameState.mode === SceneMode.SCENE2D ||
|
|
893
918
|
frustum instanceof OrthographicFrustum
|
|
894
919
|
) {
|
|
895
|
-
|
|
896
|
-
|
|
920
|
+
const offCenterFrustum = frustum.offCenterFrustum;
|
|
921
|
+
if (defined(offCenterFrustum)) {
|
|
922
|
+
frustum = offCenterFrustum;
|
|
897
923
|
}
|
|
898
924
|
const pixelSize =
|
|
899
925
|
Math.max(frustum.top - frustum.bottom, frustum.right - frustum.left) /
|
|
@@ -902,7 +928,7 @@ Cesium3DTile.prototype.getScreenSpaceError = function (
|
|
|
902
928
|
} else {
|
|
903
929
|
// Avoid divide by zero when viewer is inside the tile
|
|
904
930
|
const distance = Math.max(this._distanceToCamera, CesiumMath.EPSILON7);
|
|
905
|
-
const sseDenominator =
|
|
931
|
+
const sseDenominator = frustum.sseDenominator;
|
|
906
932
|
error = (geometricError * height) / (distance * sseDenominator);
|
|
907
933
|
if (tileset.dynamicScreenSpaceError) {
|
|
908
934
|
const density = tileset._dynamicScreenSpaceErrorComputedDensity;
|
|
@@ -917,6 +943,12 @@ Cesium3DTile.prototype.getScreenSpaceError = function (
|
|
|
917
943
|
return error;
|
|
918
944
|
};
|
|
919
945
|
|
|
946
|
+
/**
|
|
947
|
+
* @private
|
|
948
|
+
* @param {Cesium3DTileset} tileset
|
|
949
|
+
* @param {Cesium3DTile} tile
|
|
950
|
+
* @returns {Boolean}
|
|
951
|
+
*/
|
|
920
952
|
function isPriorityProgressiveResolution(tileset, tile) {
|
|
921
953
|
if (
|
|
922
954
|
tileset.progressiveResolutionHeightFraction <= 0.0 ||
|
|
@@ -944,11 +976,17 @@ function isPriorityProgressiveResolution(tileset, tile) {
|
|
|
944
976
|
return isProgressiveResolutionTile;
|
|
945
977
|
}
|
|
946
978
|
|
|
979
|
+
/**
|
|
980
|
+
* @private
|
|
981
|
+
* @param {Cesium3DTileset} tileset
|
|
982
|
+
* @param {Cesium3DTile} tile
|
|
983
|
+
* @returns {number}
|
|
984
|
+
*/
|
|
947
985
|
function getPriorityReverseScreenSpaceError(tileset, tile) {
|
|
948
986
|
const parent = tile.parent;
|
|
949
987
|
const useParentScreenSpaceError =
|
|
950
988
|
defined(parent) &&
|
|
951
|
-
(!tileset.
|
|
989
|
+
(!tileset.isSkippingLevelOfDetail ||
|
|
952
990
|
tile._screenSpaceError === 0.0 ||
|
|
953
991
|
parent.hasTilesetContent ||
|
|
954
992
|
parent.hasImplicitContent);
|
|
@@ -962,10 +1000,15 @@ function getPriorityReverseScreenSpaceError(tileset, tile) {
|
|
|
962
1000
|
* Update the tile's visibility.
|
|
963
1001
|
*
|
|
964
1002
|
* @private
|
|
1003
|
+
* @param {FrameState} frameState
|
|
965
1004
|
*/
|
|
966
1005
|
Cesium3DTile.prototype.updateVisibility = function (frameState) {
|
|
967
|
-
const parent = this
|
|
968
|
-
|
|
1006
|
+
const { parent, tileset } = this;
|
|
1007
|
+
if (this._updatedVisibilityFrame === tileset._updatedVisibilityFrame) {
|
|
1008
|
+
// The tile has already been updated for this frame
|
|
1009
|
+
return;
|
|
1010
|
+
}
|
|
1011
|
+
|
|
969
1012
|
const parentTransform = defined(parent)
|
|
970
1013
|
? parent.computedTransform
|
|
971
1014
|
: tileset.modelMatrix;
|
|
@@ -996,6 +1039,8 @@ Cesium3DTile.prototype.updateVisibility = function (frameState) {
|
|
|
996
1039
|
this
|
|
997
1040
|
);
|
|
998
1041
|
this.priorityDeferred = isPriorityDeferred(this, frameState);
|
|
1042
|
+
|
|
1043
|
+
this._updatedVisibilityFrame = tileset._updatedVisibilityFrame;
|
|
999
1044
|
};
|
|
1000
1045
|
|
|
1001
1046
|
/**
|
|
@@ -1018,25 +1063,35 @@ Cesium3DTile.prototype.updateExpiration = function () {
|
|
|
1018
1063
|
}
|
|
1019
1064
|
};
|
|
1020
1065
|
|
|
1066
|
+
/**
|
|
1067
|
+
* @private
|
|
1068
|
+
* @param {Cesium3DTile} tile
|
|
1069
|
+
*/
|
|
1021
1070
|
function updateExpireDate(tile) {
|
|
1022
|
-
if (defined(tile.expireDuration)) {
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1071
|
+
if (!defined(tile.expireDuration)) {
|
|
1072
|
+
return;
|
|
1073
|
+
}
|
|
1074
|
+
const expireDurationDate = JulianDate.now(scratchJulianDate);
|
|
1075
|
+
JulianDate.addSeconds(
|
|
1076
|
+
expireDurationDate,
|
|
1077
|
+
tile.expireDuration,
|
|
1078
|
+
expireDurationDate
|
|
1079
|
+
);
|
|
1029
1080
|
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
}
|
|
1034
|
-
} else {
|
|
1035
|
-
tile.expireDate = JulianDate.clone(expireDurationDate);
|
|
1081
|
+
if (defined(tile.expireDate)) {
|
|
1082
|
+
if (JulianDate.lessThan(tile.expireDate, expireDurationDate)) {
|
|
1083
|
+
JulianDate.clone(expireDurationDate, tile.expireDate);
|
|
1036
1084
|
}
|
|
1085
|
+
} else {
|
|
1086
|
+
tile.expireDate = JulianDate.clone(expireDurationDate);
|
|
1037
1087
|
}
|
|
1038
1088
|
}
|
|
1039
1089
|
|
|
1090
|
+
/**
|
|
1091
|
+
* @private
|
|
1092
|
+
* @param {Cesium3DTile} tile
|
|
1093
|
+
* @returns {Function}
|
|
1094
|
+
*/
|
|
1040
1095
|
function createPriorityFunction(tile) {
|
|
1041
1096
|
return function () {
|
|
1042
1097
|
return tile._priority;
|
|
@@ -1049,13 +1104,13 @@ function createPriorityFunction(tile) {
|
|
|
1049
1104
|
* The request may not be made if the Cesium Request Scheduler can't prioritize it.
|
|
1050
1105
|
* </p>
|
|
1051
1106
|
*
|
|
1052
|
-
* @return {
|
|
1107
|
+
* @return {Promise<Cesium3DTileContent>|undefined} A promise that resolves when the request completes, or undefined if there is no request needed, or the request cannot be scheduled.
|
|
1053
1108
|
* @private
|
|
1054
1109
|
*/
|
|
1055
1110
|
Cesium3DTile.prototype.requestContent = function () {
|
|
1056
1111
|
// empty contents don't require any HTTP requests
|
|
1057
1112
|
if (this.hasEmptyContent) {
|
|
1058
|
-
return
|
|
1113
|
+
return;
|
|
1059
1114
|
}
|
|
1060
1115
|
|
|
1061
1116
|
if (this.hasMultipleContents) {
|
|
@@ -1076,6 +1131,8 @@ Cesium3DTile.prototype.requestContent = function () {
|
|
|
1076
1131
|
* </p>
|
|
1077
1132
|
*
|
|
1078
1133
|
* @private
|
|
1134
|
+
* @param {Cesium3DTile} tile
|
|
1135
|
+
* @returns {Promise<Cesium3DTileContent>|Promise<undefined>|undefined} A promise that resolves to the tile content once loaded, or a promise that resolves to undefined if the request was cancelled mid-flight, or undefined if the request cannot be scheduled this frame
|
|
1079
1136
|
*/
|
|
1080
1137
|
function requestMultipleContents(tile) {
|
|
1081
1138
|
let multipleContents = tile._content;
|
|
@@ -1097,86 +1154,120 @@ function requestMultipleContents(tile) {
|
|
|
1097
1154
|
tile._content = multipleContents;
|
|
1098
1155
|
}
|
|
1099
1156
|
|
|
1100
|
-
const
|
|
1101
|
-
|
|
1102
|
-
|
|
1157
|
+
const promise = multipleContents.requestInnerContents();
|
|
1158
|
+
|
|
1159
|
+
if (!defined(promise)) {
|
|
1160
|
+
// Request could not all be scheduled this frame
|
|
1161
|
+
return;
|
|
1103
1162
|
}
|
|
1104
1163
|
|
|
1105
1164
|
tile._contentState = Cesium3DTileContentState.LOADING;
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
if (
|
|
1109
|
-
tile._contentState !== Cesium3DTileContentState.LOADING ||
|
|
1110
|
-
!defined(multipleContents.readyPromise)
|
|
1111
|
-
) {
|
|
1112
|
-
// The tile or one of the inner content requests was canceled,
|
|
1113
|
-
// short circuit.
|
|
1114
|
-
return;
|
|
1115
|
-
}
|
|
1116
|
-
|
|
1165
|
+
return promise
|
|
1166
|
+
.then((content) => {
|
|
1117
1167
|
if (tile.isDestroyed()) {
|
|
1118
|
-
|
|
1119
|
-
tile,
|
|
1120
|
-
tileset,
|
|
1121
|
-
"Tile was unloaded while content was loading"
|
|
1122
|
-
);
|
|
1168
|
+
// Tile is unloaded before the content can process
|
|
1123
1169
|
return;
|
|
1124
1170
|
}
|
|
1125
1171
|
|
|
1126
|
-
|
|
1127
|
-
return multipleContents;
|
|
1128
|
-
}
|
|
1129
|
-
);
|
|
1130
|
-
tile._contentReadyToProcessPromise = contentReadyToProcessPromise;
|
|
1131
|
-
tile._contentReadyPromise = contentReadyToProcessPromise
|
|
1132
|
-
.then(function (content) {
|
|
1172
|
+
// Tile was canceled, try again later
|
|
1133
1173
|
if (!defined(content)) {
|
|
1134
|
-
// request was canceled, short circuit.
|
|
1135
1174
|
return;
|
|
1136
1175
|
}
|
|
1137
1176
|
|
|
1138
|
-
|
|
1177
|
+
tile._contentState = Cesium3DTileContentState.PROCESSING;
|
|
1178
|
+
return multipleContents;
|
|
1139
1179
|
})
|
|
1140
|
-
.
|
|
1141
|
-
if (!defined(content)) {
|
|
1142
|
-
// tile was canceled, short circuit.
|
|
1143
|
-
return;
|
|
1144
|
-
}
|
|
1145
|
-
|
|
1180
|
+
.catch((error) => {
|
|
1146
1181
|
if (tile.isDestroyed()) {
|
|
1147
|
-
|
|
1148
|
-
tile,
|
|
1149
|
-
tileset,
|
|
1150
|
-
"Tile was unloaded while content was processing"
|
|
1151
|
-
);
|
|
1182
|
+
// Tile is unloaded before the content can process
|
|
1152
1183
|
return;
|
|
1153
1184
|
}
|
|
1154
1185
|
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
tile.lastStyleTime = 0.0;
|
|
1158
|
-
|
|
1159
|
-
JulianDate.now(tile._loadTimestamp);
|
|
1160
|
-
tile._contentState = Cesium3DTileContentState.READY;
|
|
1161
|
-
return content;
|
|
1162
|
-
})
|
|
1163
|
-
.catch(function (error) {
|
|
1164
|
-
multipleContentFailed(tile, tileset, error);
|
|
1186
|
+
tile._contentState = Cesium3DTileContentState.FAILED;
|
|
1187
|
+
throw error;
|
|
1165
1188
|
});
|
|
1166
|
-
|
|
1167
|
-
return 0;
|
|
1168
1189
|
}
|
|
1169
1190
|
|
|
1170
|
-
function
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1191
|
+
async function processArrayBuffer(
|
|
1192
|
+
tile,
|
|
1193
|
+
tileset,
|
|
1194
|
+
request,
|
|
1195
|
+
expired,
|
|
1196
|
+
requestPromise
|
|
1197
|
+
) {
|
|
1198
|
+
const previousState = tile._contentState;
|
|
1199
|
+
tile._contentState = Cesium3DTileContentState.LOADING;
|
|
1200
|
+
++tileset.statistics.numberOfPendingRequests;
|
|
1201
|
+
|
|
1202
|
+
let arrayBuffer;
|
|
1203
|
+
try {
|
|
1204
|
+
arrayBuffer = await requestPromise;
|
|
1205
|
+
} catch (error) {
|
|
1206
|
+
--tileset.statistics.numberOfPendingRequests;
|
|
1207
|
+
if (tile.isDestroyed()) {
|
|
1208
|
+
// Tile is unloaded before the content can process
|
|
1209
|
+
return;
|
|
1210
|
+
}
|
|
1211
|
+
|
|
1212
|
+
if (request.cancelled || request.state === RequestState.CANCELLED) {
|
|
1213
|
+
// Cancelled due to low priority - try again later.
|
|
1214
|
+
tile._contentState = previousState;
|
|
1215
|
+
++tileset.statistics.numberOfAttemptedRequests;
|
|
1216
|
+
return;
|
|
1217
|
+
}
|
|
1218
|
+
|
|
1219
|
+
tile._contentState = Cesium3DTileContentState.FAILED;
|
|
1220
|
+
throw error;
|
|
1221
|
+
}
|
|
1222
|
+
|
|
1223
|
+
if (tile.isDestroyed()) {
|
|
1224
|
+
--tileset.statistics.numberOfPendingRequests;
|
|
1225
|
+
// Tile is unloaded before the content can process
|
|
1226
|
+
return;
|
|
1227
|
+
}
|
|
1228
|
+
|
|
1229
|
+
if (request.cancelled || request.state === RequestState.CANCELLED) {
|
|
1230
|
+
// Cancelled due to low priority - try again later.
|
|
1231
|
+
tile._contentState = previousState;
|
|
1232
|
+
--tileset.statistics.numberOfPendingRequests;
|
|
1233
|
+
++tileset.statistics.numberOfAttemptedRequests;
|
|
1234
|
+
return;
|
|
1175
1235
|
}
|
|
1176
1236
|
|
|
1177
|
-
|
|
1237
|
+
try {
|
|
1238
|
+
const content = await makeContent(tile, arrayBuffer);
|
|
1239
|
+
--tileset.statistics.numberOfPendingRequests;
|
|
1240
|
+
|
|
1241
|
+
if (tile.isDestroyed()) {
|
|
1242
|
+
// Tile is unloaded before the content can process
|
|
1243
|
+
return;
|
|
1244
|
+
}
|
|
1245
|
+
|
|
1246
|
+
if (expired) {
|
|
1247
|
+
tile.expireDate = undefined;
|
|
1248
|
+
}
|
|
1249
|
+
|
|
1250
|
+
tile._content = content;
|
|
1251
|
+
tile._contentState = Cesium3DTileContentState.PROCESSING;
|
|
1252
|
+
|
|
1253
|
+
return content;
|
|
1254
|
+
} catch (error) {
|
|
1255
|
+
--tileset.statistics.numberOfPendingRequests;
|
|
1256
|
+
if (tile.isDestroyed()) {
|
|
1257
|
+
// Tile is unloaded before the content can process
|
|
1258
|
+
return;
|
|
1259
|
+
}
|
|
1260
|
+
|
|
1261
|
+
tile._contentState = Cesium3DTileContentState.FAILED;
|
|
1262
|
+
throw error;
|
|
1263
|
+
}
|
|
1178
1264
|
}
|
|
1179
1265
|
|
|
1266
|
+
/**
|
|
1267
|
+
* @private
|
|
1268
|
+
* @param {Cesium3DTile} tile
|
|
1269
|
+
* @returns {Promise<Cesium3DTileContent>|Promise<undefined>|undefined} A promise that resolves to the tile content once loaded; a promise that resolves to undefined if the tile was destroyed before processing can happen or the request was cancelled mid-flight; or undefined if the request cannot be scheduled this frame.
|
|
1270
|
+
*/
|
|
1180
1271
|
function requestSingleContent(tile) {
|
|
1181
1272
|
// it is important to clone here. The fetchArrayBuffer() below uses
|
|
1182
1273
|
// throttling, but other uses of the resources do not.
|
|
@@ -1199,85 +1290,14 @@ function requestSingleContent(tile) {
|
|
|
1199
1290
|
|
|
1200
1291
|
tile._request = request;
|
|
1201
1292
|
resource.request = request;
|
|
1202
|
-
|
|
1293
|
+
const tileset = tile._tileset;
|
|
1203
1294
|
const promise = resource.fetchArrayBuffer();
|
|
1204
1295
|
if (!defined(promise)) {
|
|
1205
|
-
|
|
1296
|
+
++tileset.statistics.numberOfAttemptedRequests;
|
|
1297
|
+
return;
|
|
1206
1298
|
}
|
|
1207
1299
|
|
|
1208
|
-
|
|
1209
|
-
const tileset = tile._tileset;
|
|
1210
|
-
tile._contentState = Cesium3DTileContentState.LOADING;
|
|
1211
|
-
++tileset.statistics.numberOfPendingRequests;
|
|
1212
|
-
const contentReadyToProcessPromise = promise.then(function (arrayBuffer) {
|
|
1213
|
-
if (tile.isDestroyed()) {
|
|
1214
|
-
// Tile is unloaded before the content finishes loading
|
|
1215
|
-
singleContentFailed(tile, tileset);
|
|
1216
|
-
return;
|
|
1217
|
-
}
|
|
1218
|
-
|
|
1219
|
-
const content = makeContent(tile, arrayBuffer);
|
|
1220
|
-
|
|
1221
|
-
if (expired) {
|
|
1222
|
-
tile.expireDate = undefined;
|
|
1223
|
-
}
|
|
1224
|
-
|
|
1225
|
-
tile._content = content;
|
|
1226
|
-
tile._contentState = Cesium3DTileContentState.PROCESSING;
|
|
1227
|
-
return content;
|
|
1228
|
-
});
|
|
1229
|
-
tile._contentReadyToProcessPromise = contentReadyToProcessPromise;
|
|
1230
|
-
tile._contentReadyPromise = contentReadyToProcessPromise
|
|
1231
|
-
.then(function (content) {
|
|
1232
|
-
if (!defined(content)) {
|
|
1233
|
-
return;
|
|
1234
|
-
}
|
|
1235
|
-
|
|
1236
|
-
--tileset.statistics.numberOfPendingRequests;
|
|
1237
|
-
return content.readyPromise;
|
|
1238
|
-
})
|
|
1239
|
-
.then(function (content) {
|
|
1240
|
-
if (!defined(content)) {
|
|
1241
|
-
return;
|
|
1242
|
-
}
|
|
1243
|
-
|
|
1244
|
-
if (tile.isDestroyed()) {
|
|
1245
|
-
// Tile is unloaded before the content finishes processing
|
|
1246
|
-
singleContentFailed(tile, tileset);
|
|
1247
|
-
return;
|
|
1248
|
-
}
|
|
1249
|
-
updateExpireDate(tile);
|
|
1250
|
-
|
|
1251
|
-
// Refresh style for expired content
|
|
1252
|
-
tile._selectedFrame = 0;
|
|
1253
|
-
tile.lastStyleTime = 0.0;
|
|
1254
|
-
|
|
1255
|
-
JulianDate.now(tile._loadTimestamp);
|
|
1256
|
-
tile._contentState = Cesium3DTileContentState.READY;
|
|
1257
|
-
return content;
|
|
1258
|
-
})
|
|
1259
|
-
.catch(function (error) {
|
|
1260
|
-
if (request.state === RequestState.CANCELLED) {
|
|
1261
|
-
// Cancelled due to low priority - try again later.
|
|
1262
|
-
tile._contentState = previousState;
|
|
1263
|
-
--tileset.statistics.numberOfPendingRequests;
|
|
1264
|
-
++tileset.statistics.numberOfAttemptedRequests;
|
|
1265
|
-
return Promise.reject("Cancelled");
|
|
1266
|
-
}
|
|
1267
|
-
singleContentFailed(tile, tileset);
|
|
1268
|
-
return Promise.reject(error);
|
|
1269
|
-
});
|
|
1270
|
-
|
|
1271
|
-
return 0;
|
|
1272
|
-
}
|
|
1273
|
-
|
|
1274
|
-
function singleContentFailed(tile, tileset) {
|
|
1275
|
-
if (tile._contentState === Cesium3DTileContentState.PROCESSING) {
|
|
1276
|
-
--tileset.statistics.numberOfTilesProcessing;
|
|
1277
|
-
} else {
|
|
1278
|
-
--tileset.statistics.numberOfPendingRequests;
|
|
1279
|
-
}
|
|
1280
|
-
tile._contentState = Cesium3DTileContentState.FAILED;
|
|
1300
|
+
return processArrayBuffer(tile, tileset, request, expired, promise);
|
|
1281
1301
|
}
|
|
1282
1302
|
|
|
1283
1303
|
/**
|
|
@@ -1288,10 +1308,10 @@ function singleContentFailed(tile, tileset) {
|
|
|
1288
1308
|
*
|
|
1289
1309
|
* @param {Cesium3DTile} tile The tile
|
|
1290
1310
|
* @param {ArrayBuffer} arrayBuffer The downloaded payload containing data for the content
|
|
1291
|
-
* @return {Cesium3DTileContent} A content object
|
|
1311
|
+
* @return {Promise<Cesium3DTileContent>} A content object
|
|
1292
1312
|
* @private
|
|
1293
1313
|
*/
|
|
1294
|
-
function makeContent(tile, arrayBuffer) {
|
|
1314
|
+
async function makeContent(tile, arrayBuffer) {
|
|
1295
1315
|
const preprocessed = preprocess3DTileContent(arrayBuffer);
|
|
1296
1316
|
|
|
1297
1317
|
// Vector and Geometry tile rendering do not support the skip LOD optimization.
|
|
@@ -1314,21 +1334,29 @@ function makeContent(tile, arrayBuffer) {
|
|
|
1314
1334
|
|
|
1315
1335
|
let content;
|
|
1316
1336
|
const contentFactory = Cesium3DTileContentFactory[preprocessed.contentType];
|
|
1337
|
+
if (tile.isDestroyed()) {
|
|
1338
|
+
return;
|
|
1339
|
+
}
|
|
1340
|
+
|
|
1317
1341
|
if (defined(preprocessed.binaryPayload)) {
|
|
1318
|
-
content =
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1342
|
+
content = await Promise.resolve(
|
|
1343
|
+
contentFactory(
|
|
1344
|
+
tileset,
|
|
1345
|
+
tile,
|
|
1346
|
+
tile._contentResource,
|
|
1347
|
+
preprocessed.binaryPayload.buffer,
|
|
1348
|
+
0
|
|
1349
|
+
)
|
|
1324
1350
|
);
|
|
1325
1351
|
} else {
|
|
1326
1352
|
// JSON formats
|
|
1327
|
-
content =
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1353
|
+
content = await Promise.resolve(
|
|
1354
|
+
contentFactory(
|
|
1355
|
+
tileset,
|
|
1356
|
+
tile,
|
|
1357
|
+
tile._contentResource,
|
|
1358
|
+
preprocessed.jsonPayload
|
|
1359
|
+
)
|
|
1332
1360
|
);
|
|
1333
1361
|
}
|
|
1334
1362
|
|
|
@@ -1372,18 +1400,12 @@ Cesium3DTile.prototype.cancelRequests = function () {
|
|
|
1372
1400
|
* @private
|
|
1373
1401
|
*/
|
|
1374
1402
|
Cesium3DTile.prototype.unloadContent = function () {
|
|
1375
|
-
if (
|
|
1376
|
-
this.hasEmptyContent ||
|
|
1377
|
-
this.hasTilesetContent ||
|
|
1378
|
-
this.hasImplicitContent
|
|
1379
|
-
) {
|
|
1403
|
+
if (!this.hasRenderableContent) {
|
|
1380
1404
|
return;
|
|
1381
1405
|
}
|
|
1382
1406
|
|
|
1383
1407
|
this._content = this._content && this._content.destroy();
|
|
1384
1408
|
this._contentState = Cesium3DTileContentState.UNLOADED;
|
|
1385
|
-
this._contentReadyToProcessPromise = undefined;
|
|
1386
|
-
this._contentReadyPromise = undefined;
|
|
1387
1409
|
|
|
1388
1410
|
this.lastStyleTime = 0.0;
|
|
1389
1411
|
this.clippingPlanesDirty = this._clippingPlanesState === 0;
|
|
@@ -1402,6 +1424,12 @@ Cesium3DTile.prototype.unloadContent = function () {
|
|
|
1402
1424
|
|
|
1403
1425
|
const scratchProjectedBoundingSphere = new BoundingSphere();
|
|
1404
1426
|
|
|
1427
|
+
/**
|
|
1428
|
+
* @private
|
|
1429
|
+
* @param {Cesium3DTile} tile
|
|
1430
|
+
* @param {FrameState} frameState
|
|
1431
|
+
* @returns {TileBoundingVolume}
|
|
1432
|
+
*/
|
|
1405
1433
|
function getBoundingVolume(tile, frameState) {
|
|
1406
1434
|
if (
|
|
1407
1435
|
frameState.mode !== SceneMode.SCENE3D &&
|
|
@@ -1424,6 +1452,12 @@ function getBoundingVolume(tile, frameState) {
|
|
|
1424
1452
|
: tile._boundingVolume;
|
|
1425
1453
|
}
|
|
1426
1454
|
|
|
1455
|
+
/**
|
|
1456
|
+
* @private
|
|
1457
|
+
* @param {Cesium3DTile} tile
|
|
1458
|
+
* @param {FrameState} frameState
|
|
1459
|
+
* @returns {TileBoundingVolume}
|
|
1460
|
+
*/
|
|
1427
1461
|
function getContentBoundingVolume(tile, frameState) {
|
|
1428
1462
|
if (
|
|
1429
1463
|
frameState.mode !== SceneMode.SCENE3D &&
|
|
@@ -1581,6 +1615,13 @@ const scratchRectangle = new Rectangle();
|
|
|
1581
1615
|
const scratchOrientedBoundingBox = new OrientedBoundingBox();
|
|
1582
1616
|
const scratchTransform = new Matrix4();
|
|
1583
1617
|
|
|
1618
|
+
/**
|
|
1619
|
+
* @private
|
|
1620
|
+
* @param {Array} box An array of 12 numbers that define an oriented bounding box
|
|
1621
|
+
* @param {Matrix4} transform
|
|
1622
|
+
* @param {TileBoundingVolume} [result]
|
|
1623
|
+
* @returns {TileOrientedBoundingBox}
|
|
1624
|
+
*/
|
|
1584
1625
|
function createBox(box, transform, result) {
|
|
1585
1626
|
let center = Cartesian3.fromElements(box[0], box[1], box[2], scratchCenter);
|
|
1586
1627
|
let halfAxes = Matrix3.fromArray(box, 3, scratchHalfAxes);
|
|
@@ -1597,6 +1638,14 @@ function createBox(box, transform, result) {
|
|
|
1597
1638
|
return new TileOrientedBoundingBox(center, halfAxes);
|
|
1598
1639
|
}
|
|
1599
1640
|
|
|
1641
|
+
/**
|
|
1642
|
+
* @private
|
|
1643
|
+
* @param {Array} region An array of six numbers that define a bounding geographic region in EPSG:4979 coordinates with the order [west, south, east, north, minimum height, maximum height]
|
|
1644
|
+
* @param {Matrix4} transform
|
|
1645
|
+
* @param {Matrix4} initialTransform
|
|
1646
|
+
* @param {TileOrientedBoundingBox} [result]
|
|
1647
|
+
* @returns {TileOrientedBoundingBox}
|
|
1648
|
+
*/
|
|
1600
1649
|
function createBoxFromTransformedRegion(
|
|
1601
1650
|
region,
|
|
1602
1651
|
transform,
|
|
@@ -1637,6 +1686,14 @@ function createBoxFromTransformedRegion(
|
|
|
1637
1686
|
return new TileOrientedBoundingBox(center, halfAxes);
|
|
1638
1687
|
}
|
|
1639
1688
|
|
|
1689
|
+
/**
|
|
1690
|
+
* @private
|
|
1691
|
+
* @param {Array} region An array of six numbers that define a bounding geographic region in EPSG:4979 coordinates with the order [west, south, east, north, minimum height, maximum height]
|
|
1692
|
+
* @param {Matrix4} transform
|
|
1693
|
+
* @param {Matrix4} initialTransform
|
|
1694
|
+
* @param {TileBoundingVolume} [result]
|
|
1695
|
+
* @returns {TileBoundingVolume}
|
|
1696
|
+
*/
|
|
1640
1697
|
function createRegion(region, transform, initialTransform, result) {
|
|
1641
1698
|
if (
|
|
1642
1699
|
!Matrix4.equalsEpsilon(transform, initialTransform, CesiumMath.EPSILON8)
|
|
@@ -1662,6 +1719,13 @@ function createRegion(region, transform, initialTransform, result) {
|
|
|
1662
1719
|
});
|
|
1663
1720
|
}
|
|
1664
1721
|
|
|
1722
|
+
/**
|
|
1723
|
+
* @private
|
|
1724
|
+
* @param {Array} sphere An array of four numbers that define a bounding sphere
|
|
1725
|
+
* @param {Matrix4} transform
|
|
1726
|
+
* @param {TileBoundingVolume} [result]
|
|
1727
|
+
* @returns {TileBoundingSphere}
|
|
1728
|
+
*/
|
|
1665
1729
|
function createSphere(sphere, transform, result) {
|
|
1666
1730
|
let center = Cartesian3.fromElements(
|
|
1667
1731
|
sphere[0],
|
|
@@ -1710,19 +1774,15 @@ Cesium3DTile.prototype.createBoundingVolume = function (
|
|
|
1710
1774
|
);
|
|
1711
1775
|
}
|
|
1712
1776
|
|
|
1713
|
-
|
|
1714
|
-
|
|
1777
|
+
const { box, region, sphere } = boundingVolumeHeader;
|
|
1778
|
+
if (defined(box)) {
|
|
1779
|
+
return createBox(box, transform, result);
|
|
1715
1780
|
}
|
|
1716
|
-
if (defined(
|
|
1717
|
-
return createRegion(
|
|
1718
|
-
boundingVolumeHeader.region,
|
|
1719
|
-
transform,
|
|
1720
|
-
this._initialTransform,
|
|
1721
|
-
result
|
|
1722
|
-
);
|
|
1781
|
+
if (defined(region)) {
|
|
1782
|
+
return createRegion(region, transform, this._initialTransform, result);
|
|
1723
1783
|
}
|
|
1724
|
-
if (defined(
|
|
1725
|
-
return createSphere(
|
|
1784
|
+
if (defined(sphere)) {
|
|
1785
|
+
return createSphere(sphere, transform, result);
|
|
1726
1786
|
}
|
|
1727
1787
|
throw new RuntimeError(
|
|
1728
1788
|
"boundingVolume must contain a sphere, region, or box"
|
|
@@ -1733,10 +1793,11 @@ Cesium3DTile.prototype.createBoundingVolume = function (
|
|
|
1733
1793
|
* Update the tile's transform. The transform is applied to the tile's bounding volumes.
|
|
1734
1794
|
*
|
|
1735
1795
|
* @private
|
|
1796
|
+
* @param {Matrix4} parentTransform
|
|
1736
1797
|
*/
|
|
1737
1798
|
Cesium3DTile.prototype.updateTransform = function (parentTransform) {
|
|
1738
1799
|
parentTransform = defaultValue(parentTransform, Matrix4.IDENTITY);
|
|
1739
|
-
const computedTransform = Matrix4.
|
|
1800
|
+
const computedTransform = Matrix4.multiplyTransformation(
|
|
1740
1801
|
parentTransform,
|
|
1741
1802
|
this.transform,
|
|
1742
1803
|
scratchTransform
|
|
@@ -1799,6 +1860,13 @@ Cesium3DTile.prototype.updateGeometricErrorScale = function () {
|
|
|
1799
1860
|
}
|
|
1800
1861
|
};
|
|
1801
1862
|
|
|
1863
|
+
/**
|
|
1864
|
+
* @private
|
|
1865
|
+
* @param {Cesium3DTile} tile
|
|
1866
|
+
* @param {Cesium3DTileset} tileset
|
|
1867
|
+
* @param {FrameState} frameState
|
|
1868
|
+
* @param {object} passOptions
|
|
1869
|
+
*/
|
|
1802
1870
|
function applyDebugSettings(tile, tileset, frameState, passOptions) {
|
|
1803
1871
|
if (!passOptions.isRender) {
|
|
1804
1872
|
return;
|
|
@@ -1806,8 +1874,6 @@ function applyDebugSettings(tile, tileset, frameState, passOptions) {
|
|
|
1806
1874
|
|
|
1807
1875
|
const hasContentBoundingVolume =
|
|
1808
1876
|
defined(tile._contentHeader) && defined(tile._contentHeader.boundingVolume);
|
|
1809
|
-
const empty =
|
|
1810
|
-
tile.hasEmptyContent || tile.hasTilesetContent || tile.hasImplicitContent;
|
|
1811
1877
|
|
|
1812
1878
|
const showVolume =
|
|
1813
1879
|
tileset.debugShowBoundingVolume ||
|
|
@@ -1816,7 +1882,7 @@ function applyDebugSettings(tile, tileset, frameState, passOptions) {
|
|
|
1816
1882
|
let color;
|
|
1817
1883
|
if (!tile._finalResolution) {
|
|
1818
1884
|
color = Color.YELLOW;
|
|
1819
|
-
} else if (
|
|
1885
|
+
} else if (!tile.hasRenderableContent) {
|
|
1820
1886
|
color = Color.DARKGRAY;
|
|
1821
1887
|
} else {
|
|
1822
1888
|
color = Color.WHITE;
|
|
@@ -1892,15 +1958,24 @@ function applyDebugSettings(tile, tileset, frameState, passOptions) {
|
|
|
1892
1958
|
}
|
|
1893
1959
|
}
|
|
1894
1960
|
|
|
1961
|
+
/**
|
|
1962
|
+
* @private
|
|
1963
|
+
* @param {Cesium3DTile} tile
|
|
1964
|
+
* @param {Cesium3DTileset} tileset
|
|
1965
|
+
* @param {FrameState} frameState
|
|
1966
|
+
*/
|
|
1895
1967
|
function updateContent(tile, tileset, frameState) {
|
|
1896
|
-
const content = tile._content;
|
|
1897
1968
|
const expiredContent = tile._expiredContent;
|
|
1898
1969
|
|
|
1899
1970
|
// expired content is not supported for multiple contents
|
|
1900
1971
|
if (!tile.hasMultipleContents && defined(expiredContent)) {
|
|
1901
1972
|
if (!tile.contentReady) {
|
|
1902
1973
|
// Render the expired content while the content loads
|
|
1903
|
-
|
|
1974
|
+
try {
|
|
1975
|
+
expiredContent.update(tileset, frameState);
|
|
1976
|
+
} catch (error) {
|
|
1977
|
+
// Eat error for expired content
|
|
1978
|
+
}
|
|
1904
1979
|
return;
|
|
1905
1980
|
}
|
|
1906
1981
|
|
|
@@ -1909,14 +1984,30 @@ function updateContent(tile, tileset, frameState) {
|
|
|
1909
1984
|
tile._expiredContent = undefined;
|
|
1910
1985
|
}
|
|
1911
1986
|
|
|
1912
|
-
content
|
|
1987
|
+
if (!defined(tile.content)) {
|
|
1988
|
+
// Implicit placeholder tile
|
|
1989
|
+
return;
|
|
1990
|
+
}
|
|
1991
|
+
|
|
1992
|
+
try {
|
|
1993
|
+
tile.content.update(tileset, frameState);
|
|
1994
|
+
} catch (error) {
|
|
1995
|
+
tile._contentState = Cesium3DTileContentState.FAILED;
|
|
1996
|
+
throw error;
|
|
1997
|
+
}
|
|
1913
1998
|
}
|
|
1914
1999
|
|
|
2000
|
+
/**
|
|
2001
|
+
* Compute and compare ClippingPlanes state:
|
|
2002
|
+
* - enabled-ness - are clipping planes enabled? is this tile clipped?
|
|
2003
|
+
* - clipping plane count
|
|
2004
|
+
* - clipping function (union v. intersection)
|
|
2005
|
+
|
|
2006
|
+
* @private
|
|
2007
|
+
* @param {Cesium3DTile} tile
|
|
2008
|
+
* @param {Cesium3DTileset} tileset
|
|
2009
|
+
*/
|
|
1915
2010
|
function updateClippingPlanes(tile, tileset) {
|
|
1916
|
-
// Compute and compare ClippingPlanes state:
|
|
1917
|
-
// - enabled-ness - are clipping planes enabled? is this tile clipped?
|
|
1918
|
-
// - clipping plane count
|
|
1919
|
-
// - clipping function (union v. intersection)
|
|
1920
2011
|
const clippingPlanes = tileset.clippingPlanes;
|
|
1921
2012
|
let currentClippingPlanesState = 0;
|
|
1922
2013
|
if (defined(clippingPlanes) && tile._isClipped && clippingPlanes.enabled) {
|
|
@@ -1933,20 +2024,23 @@ function updateClippingPlanes(tile, tileset) {
|
|
|
1933
2024
|
* Get the draw commands needed to render this tile.
|
|
1934
2025
|
*
|
|
1935
2026
|
* @private
|
|
2027
|
+
* @param {Cesium3DTileset} tileset
|
|
2028
|
+
* @param {FrameState} frameState
|
|
2029
|
+
* @param {object} passOptions
|
|
1936
2030
|
*/
|
|
1937
2031
|
Cesium3DTile.prototype.update = function (tileset, frameState, passOptions) {
|
|
1938
|
-
const
|
|
2032
|
+
const { commandList } = frameState;
|
|
2033
|
+
const commandStart = commandList.length;
|
|
1939
2034
|
|
|
1940
2035
|
updateClippingPlanes(this, tileset);
|
|
1941
2036
|
applyDebugSettings(this, tileset, frameState, passOptions);
|
|
1942
2037
|
updateContent(this, tileset, frameState);
|
|
1943
2038
|
|
|
1944
|
-
const commandEnd =
|
|
1945
|
-
|
|
1946
|
-
this._commandsLength = commandsLength;
|
|
2039
|
+
const commandEnd = commandList.length;
|
|
2040
|
+
this._commandsLength = commandEnd - commandStart;
|
|
1947
2041
|
|
|
1948
|
-
for (let i =
|
|
1949
|
-
const command =
|
|
2042
|
+
for (let i = commandStart; i < commandEnd; ++i) {
|
|
2043
|
+
const command = commandList[i];
|
|
1950
2044
|
const translucent = command.pass === Pass.TRANSLUCENT;
|
|
1951
2045
|
command.depthForTranslucentClassification = translucent;
|
|
1952
2046
|
}
|
|
@@ -1965,26 +2059,68 @@ const scratchCommandList = [];
|
|
|
1965
2059
|
* @private
|
|
1966
2060
|
*/
|
|
1967
2061
|
Cesium3DTile.prototype.process = function (tileset, frameState) {
|
|
2062
|
+
if (!this.contentExpired && !this.contentReady && this._content.ready) {
|
|
2063
|
+
updateExpireDate(this);
|
|
2064
|
+
|
|
2065
|
+
// Refresh style for expired content
|
|
2066
|
+
this._selectedFrame = 0;
|
|
2067
|
+
this.lastStyleTime = 0.0;
|
|
2068
|
+
|
|
2069
|
+
JulianDate.now(this._loadTimestamp);
|
|
2070
|
+
this._contentState = Cesium3DTileContentState.READY;
|
|
2071
|
+
|
|
2072
|
+
if (!this.hasTilesetContent && !this.hasImplicitContent) {
|
|
2073
|
+
// RESEARCH_IDEA: ability to unload tiles (without content) for an
|
|
2074
|
+
// external tileset when all the tiles are unloaded.
|
|
2075
|
+
tileset._statistics.incrementLoadCounts(this.content);
|
|
2076
|
+
++tileset._statistics.numberOfTilesWithContentReady;
|
|
2077
|
+
++tileset._statistics.numberOfLoadedTilesTotal;
|
|
2078
|
+
|
|
2079
|
+
// Add to the tile cache. Previously expired tiles are already in the cache and won't get re-added.
|
|
2080
|
+
tileset._cache.add(this);
|
|
2081
|
+
}
|
|
2082
|
+
}
|
|
2083
|
+
|
|
1968
2084
|
const savedCommandList = frameState.commandList;
|
|
1969
2085
|
frameState.commandList = scratchCommandList;
|
|
1970
2086
|
|
|
1971
|
-
|
|
2087
|
+
try {
|
|
2088
|
+
this._content.update(tileset, frameState);
|
|
2089
|
+
} catch (error) {
|
|
2090
|
+
this._contentState = Cesium3DTileContentState.FAILED;
|
|
2091
|
+
throw error;
|
|
2092
|
+
}
|
|
1972
2093
|
|
|
1973
2094
|
scratchCommandList.length = 0;
|
|
1974
2095
|
frameState.commandList = savedCommandList;
|
|
1975
2096
|
};
|
|
1976
2097
|
|
|
2098
|
+
/**
|
|
2099
|
+
* @private
|
|
2100
|
+
* @param {number} normalizedValue
|
|
2101
|
+
* @param {number} numberOfDigits
|
|
2102
|
+
* @param {number} leftShift
|
|
2103
|
+
* @returns {number}
|
|
2104
|
+
*/
|
|
1977
2105
|
function isolateDigits(normalizedValue, numberOfDigits, leftShift) {
|
|
1978
2106
|
const scaled = normalizedValue * Math.pow(10, numberOfDigits);
|
|
1979
2107
|
const integer = parseInt(scaled);
|
|
1980
2108
|
return integer * Math.pow(10, leftShift);
|
|
1981
2109
|
}
|
|
1982
2110
|
|
|
2111
|
+
/**
|
|
2112
|
+
* @private
|
|
2113
|
+
* @param {number} value
|
|
2114
|
+
* @param {number} minimum
|
|
2115
|
+
* @param {number} maximum
|
|
2116
|
+
* @returns {number}
|
|
2117
|
+
*/
|
|
1983
2118
|
function priorityNormalizeAndClamp(value, minimum, maximum) {
|
|
2119
|
+
// Subtract epsilon since we only want decimal digits present in the output.
|
|
1984
2120
|
return Math.max(
|
|
1985
2121
|
CesiumMath.normalize(value, minimum, maximum) - CesiumMath.EPSILON7,
|
|
1986
2122
|
0.0
|
|
1987
|
-
);
|
|
2123
|
+
);
|
|
1988
2124
|
}
|
|
1989
2125
|
|
|
1990
2126
|
/**
|
|
@@ -2044,7 +2180,8 @@ Cesium3DTile.prototype.updatePriority = function () {
|
|
|
2044
2180
|
|
|
2045
2181
|
// Map 0-1 then convert to digit. Include a distance sort when doing non-skipLOD and replacement refinement, helps things like non-skipLOD photogrammetry
|
|
2046
2182
|
const useDistance =
|
|
2047
|
-
!tileset.
|
|
2183
|
+
!tileset.isSkippingLevelOfDetail &&
|
|
2184
|
+
this.refine === Cesium3DTileRefine.REPLACE;
|
|
2048
2185
|
const normalizedPreferredSorting = useDistance
|
|
2049
2186
|
? priorityNormalizeAndClamp(
|
|
2050
2187
|
this._priorityHolder._distanceToCamera,
|
|
@@ -2118,4 +2255,5 @@ Cesium3DTile.prototype.destroy = function () {
|
|
|
2118
2255
|
this._debugViewerRequestVolume && this._debugViewerRequestVolume.destroy();
|
|
2119
2256
|
return destroyObject(this);
|
|
2120
2257
|
};
|
|
2258
|
+
|
|
2121
2259
|
export default Cesium3DTile;
|