cesium-native 0.57.0
Loading...
Searching...
No Matches
Tileset.h
1#pragma once
2
3#include <Cesium3DTilesSelection/Library.h>
4#include <Cesium3DTilesSelection/LoadedTileEnumerator.h>
5#include <Cesium3DTilesSelection/RasterOverlayCollection.h>
6#include <Cesium3DTilesSelection/SampleHeightResult.h>
7#include <Cesium3DTilesSelection/Tile.h>
8#include <Cesium3DTilesSelection/TilesetContentLoader.h>
9#include <Cesium3DTilesSelection/TilesetContentLoaderFactory.h>
10#include <Cesium3DTilesSelection/TilesetExternals.h>
11#include <Cesium3DTilesSelection/TilesetLoadFailureDetails.h>
12#include <Cesium3DTilesSelection/TilesetOptions.h>
13#include <Cesium3DTilesSelection/TilesetViewGroup.h>
14#include <Cesium3DTilesSelection/ViewState.h>
15#include <Cesium3DTilesSelection/ViewUpdateResult.h>
16#include <CesiumAsync/AsyncSystem.h>
17#include <CesiumUtility/IntrusivePointer.h>
18
19#include <rapidjson/fwd.h>
20
21#include <list>
22#include <memory>
23#include <string>
24#include <vector>
25
26namespace Cesium3DTilesSelection {
27
28class TilesetContentManager;
29class TilesetMetadata;
30class TilesetHeightQuery;
31struct TilesetHeightRequest;
35
42class CESIUM3DTILESSELECTION_API Tileset final {
43public:
53 const TilesetExternals& externals,
54 std::unique_ptr<TilesetContentLoader>&& pCustomLoader,
55 std::unique_ptr<Tile>&& pRootTile,
56 const TilesetOptions& options = TilesetOptions());
57
65 const TilesetExternals& externals,
66 const std::string& url,
67 const TilesetOptions& options = TilesetOptions());
68
81 const TilesetExternals& externals,
82 int64_t ionAssetID,
83 const std::string& ionAccessToken,
84 const TilesetOptions& options = TilesetOptions(),
85 const std::string& ionAssetEndpointUrl = "https://api.cesium.com/");
86
97 const TilesetExternals& externals,
98 TilesetContentLoaderFactory&& loaderFactory,
99 const TilesetOptions& options = TilesetOptions());
100
111 ~Tileset() noexcept;
112
119
129
134 std::optional<CesiumUtility::Credit> getUserCredit() const noexcept;
135
139 const std::vector<CesiumUtility::Credit>& getTilesetCredits() const noexcept;
140
145 void setShowCreditsOnScreen(bool showCreditsOnScreen) noexcept;
146
151 const CesiumUtility::CreditSource& getCreditSource() const noexcept;
152
157 TilesetExternals& getExternals() noexcept { return this->_externals; }
158
163 const TilesetExternals& getExternals() const noexcept {
164 return this->_externals;
165 }
166
172 return this->_asyncSystem;
173 }
174
176 const CesiumAsync::AsyncSystem& getAsyncSystem() const noexcept {
177 return this->_asyncSystem;
178 }
179
181 const TilesetOptions& getOptions() const noexcept { return this->_options; }
182
186 TilesetOptions& getOptions() noexcept { return this->_options; }
187
192 return this->_options.ellipsoid;
193 }
194
197 return this->_options.ellipsoid;
198 }
199
205 const Tile* getRootTile() const noexcept;
206
211
213 const RasterOverlayCollection& getOverlays() const noexcept;
214
219
222
233 [[deprecated("Instead of `tileset.updateViewOffline(...)`, call "
234 "`tileset.updateViewGroupOffline(tileset.getDefaultViewGroup(), "
235 "...)`.")]] const ViewUpdateResult&
236 updateViewOffline(const std::vector<ViewState>& frustums);
237
253 [[deprecated("Instead of `tileset.updateView(...)`, call "
254 "`tileset.updateViewGroup(tileset.getDefaultViewGroup(), ...)` "
255 "followed by `tileset.loadTiles()`.")]] const ViewUpdateResult&
256 updateView(const std::vector<ViewState>& frustums, float deltaTime = 0.0f);
257
261 int32_t getNumberOfTilesLoaded() const;
262
270 float computeLoadProgress() noexcept;
271
289
296 const std::function<void(const Tile& tile)>& callback) const;
297
302 int64_t getTotalDataBytes() const noexcept;
303
328 const TilesetMetadata* getMetadata(const Tile* pTile = nullptr) const;
329
346
366 const std::vector<CesiumGeospatial::Cartographic>& positions);
367
375
378
403 TilesetViewGroup& viewGroup,
404 const std::vector<ViewState>& frustums,
405 float deltaTime = 0.0f);
406
427 TilesetViewGroup& viewGroup,
428 const std::vector<ViewState>& frustums);
429
442 void loadTiles();
443
457
469 bool waitForAllLoadsToComplete(double maximumWaitTimeInMilliseconds);
470
471 Tileset(const Tileset& rhs) = delete;
472 Tileset& operator=(const Tileset& rhs) = delete;
473
474private:
483 struct TraversalDetails {
491 bool allAreRenderable = true;
492
502 bool anyWereRenderedLastFrame = false;
503
522 uint32_t notYetRenderableCount = 0;
523 };
524
525 TraversalDetails _renderLeaf(
526 const TilesetFrameState& frameState,
527 Tile& tile,
528 double tilePriority,
529 ViewUpdateResult& result);
530 TraversalDetails _renderInnerTile(
531 const TilesetFrameState& frameState,
532 Tile& tile,
533 ViewUpdateResult& result);
534 bool _kickDescendantsAndRenderTile(
535 const TilesetFrameState& frameState,
536 Tile& tile,
537 ViewUpdateResult& result,
538 TraversalDetails& traversalDetails,
539 size_t firstRenderedDescendantIndex,
540 const TilesetViewGroup::LoadQueueCheckpoint& loadQueueBeforeChildren,
541 bool queuedForLoad,
542 double tilePriority);
543 TileOcclusionState _checkOcclusion(const Tile& tile);
544
545 TraversalDetails _visitTile(
546 const TilesetFrameState& frameState,
547 uint32_t depth,
548 bool meetsSse,
549 bool ancestorMeetsSse,
550 Tile& tile,
551 double tilePriority,
552 ViewUpdateResult& result);
553
554 struct CullResult {
555 // whether we should visit this tile
556 bool shouldVisit = true;
557 // whether this tile was culled (Note: we might still want to visit it)
558 bool culled = false;
559 };
560
561 // TODO: abstract these into a composable culling interface.
562 void _frustumCull(
563 const Tile& tile,
564 const TilesetFrameState& frameState,
565 bool cullWithChildrenBounds,
566 CullResult& cullResult);
567 void _fogCull(
568 const TilesetFrameState& frameState,
569 const std::vector<double>& distances,
570 CullResult& cullResult);
571 bool _meetsSse(
572 const std::vector<ViewState>& frustums,
573 const Tile& tile,
574 const std::vector<double>& distances,
575 bool culled) const noexcept;
576
577 TraversalDetails _visitTileIfNeeded(
578 const TilesetFrameState& frameState,
579 uint32_t depth,
580 bool ancestorMeetsSse,
581 Tile& tile,
582 ViewUpdateResult& result);
583 TraversalDetails _visitVisibleChildrenNearToFar(
584 const TilesetFrameState& frameState,
585 uint32_t depth,
586 bool ancestorMeetsSse,
587 Tile& tile,
588 ViewUpdateResult& result);
589
605 bool _loadAndRenderAdditiveRefinedTile(
606 const TilesetFrameState& frameState,
607 Tile& tile,
608 ViewUpdateResult& result,
609 double tilePriority,
610 bool queuedForLoad);
611
612 void _unloadCachedTiles(double timeBudget) noexcept;
613
614 void _updateLodTransitions(
615 const TilesetFrameState& frameState,
616 float deltaTime,
617 ViewUpdateResult& result) const noexcept;
618
619 TilesetExternals _externals;
620 CesiumAsync::AsyncSystem _asyncSystem;
621
622 TilesetOptions _options;
623
624 // Holds computed distances, to avoid allocating them on the heap during tile
625 // selection.
626 std::vector<double> _distances;
627
628 // Holds the occlusion proxies of the children of a tile. Store them in this
629 // scratch variable so that it can allocate only when growing bigger.
630 std::vector<const TileOcclusionRendererProxy*> _childOcclusionProxies;
631
633 _pTilesetContentManager;
634
635 std::list<TilesetHeightRequest> _heightRequests;
636
637 TilesetViewGroup _defaultViewGroup;
638
639 void addTileToLoadQueue(
640 const TilesetFrameState& frameState,
641 Tile& tile,
642 TileLoadPriorityGroup priorityGroup,
643 double priority);
644
645 static TraversalDetails createTraversalDetailsForSingleTile(
646 const TilesetFrameState& frameState,
647 const Tile& tile);
648};
649
650} // namespace Cesium3DTilesSelection
A "virtual collection" that allows enumeration through the loaded tiles in a subtree rooted at a give...
A collection of CesiumRasterOverlays::RasterOverlay instances that are associated with a Tileset.
The base class for something that requests loading of specific tiles from a 3D Tiles Tileset.
A tile in a Tileset.
Definition Tile.h:123
External interfaces used by a Tileset.
Captures information about the current frame during a call to Tileset::updateViewGroup.
Holds the metadata associated with a Tileset or an external tileset. This holds all of the fields of ...
Contains assets that are potentially shared across multiple Tilesets.
Represents a group of views that collectively select tiles from a particular Tileset.
Tileset(const TilesetExternals &externals, TilesetContentLoaderFactory &&loaderFactory, const TilesetOptions &options=TilesetOptions())
Constructs a new instance with the given TilesetContentLoaderFactory.
void setShowCreditsOnScreen(bool showCreditsOnScreen) noexcept
Sets whether or not the tileset's credits should be shown on screen.
CesiumGeospatial::Ellipsoid & getEllipsoid() noexcept
Gets the CesiumGeospatial::Ellipsoid used by this tileset.
Definition Tileset.h:196
LoadedConstTileEnumerator loadedTiles() const
Gets an object that can be used to enumerate the loaded tiles of this tileset.
Tileset(const TilesetExternals &externals, int64_t ionAssetID, const std::string &ionAccessToken, const TilesetOptions &options=TilesetOptions(), const std::string &ionAssetEndpointUrl="https://api.cesium.com/")
Constructs a new instance with the given asset ID on Cesium ion.
Tileset(const TilesetExternals &externals, const std::string &url, const TilesetOptions &options=TilesetOptions())
Constructs a new instance with a given tileset.json URL.
CesiumAsync::AsyncSystem & getAsyncSystem() noexcept
Returns the CesiumAsync::AsyncSystem that is used for dispatching asynchronous tasks.
Definition Tileset.h:171
CesiumAsync::Future< SampleHeightResult > sampleHeightMostDetailed(const std::vector< CesiumGeospatial::Cartographic > &positions)
Initiates an asynchronous query for the height of this tileset at a list of cartographic positions (l...
const TilesetOptions & getOptions() const noexcept
Gets the TilesetOptions of this tileset.
Definition Tileset.h:181
const TilesetExternals & getExternals() const noexcept
Gets the TilesetExternals that summarize the external interfaces used by this tileset.
Definition Tileset.h:163
const CesiumUtility::CreditSource & getCreditSource() const noexcept
Gets the CesiumUtility::CreditSource that identifies this tileset's credits with the CesiumUtility::C...
const CesiumAsync::AsyncSystem & getAsyncSystem() const noexcept
Returns the CesiumAsync::AsyncSystem that is used for dispatching asynchronous tasks.
Definition Tileset.h:176
void loadTiles()
Loads the tiles that are currently deemed the most important, across all height queries and TilesetVi...
int32_t getNumberOfTilesLoaded() const
Gets the total number of tiles that are currently loaded.
CesiumAsync::SharedFuture< void > & getAsyncDestructionCompleteEvent()
A future that resolves when this Tileset has been destroyed (i.e. its destructor has been called) and...
CesiumAsync::SharedFuture< void > & getRootTileAvailableEvent()
A future that resolves when the details of the root tile of this tileset are available....
void registerLoadRequester(TileLoadRequester &requester)
Registers a tile load requester with this Tileset. Registered tile load requesters get to influence w...
TilesetViewGroup & getDefaultViewGroup()
Gets the default view group that is used when calling updateView.
float computeLoadProgress() noexcept
Gets the percentage of tiles that had been loaded for the default view group as of the last time it w...
const ViewUpdateResult & updateViewOffline(const std::vector< ViewState > &frustums)
Updates this view but waits for all tiles that meet sse to finish loading and ready to be rendered be...
int64_t getTotalDataBytes() const noexcept
Gets the total number of bytes of tile and raster overlay data that are currently loaded.
TilesetOptions & getOptions() noexcept
Gets the TilesetOptions of this tileset.
Definition Tileset.h:186
std::optional< CesiumUtility::Credit > getUserCredit() const noexcept
Gets the CesiumUtility::Credit created from TilesetOptions::credit, if any.
void forEachLoadedTile(const std::function< void(const Tile &tile)> &callback) const
Invokes a function for each tile that is currently loaded.
const TilesetMetadata * getMetadata(const Tile *pTile=nullptr) const
Gets the TilesetMetadata associated with the main or external tileset.json that contains a given tile...
const ViewUpdateResult & updateView(const std::vector< ViewState > &frustums, float deltaTime=0.0f)
Updates this view, returning the set of tiles to render in this view.
const ViewUpdateResult & updateViewGroup(TilesetViewGroup &viewGroup, const std::vector< ViewState > &frustums, float deltaTime=0.0f)
Updates a view group, returning the set of tiles to render in this view.
const CesiumGeospatial::Ellipsoid & getEllipsoid() const
Gets the CesiumGeospatial::Ellipsoid used by this tileset.
Definition Tileset.h:191
~Tileset() noexcept
Destroys this tileset.
Tileset(const TilesetExternals &externals, std::unique_ptr< TilesetContentLoader > &&pCustomLoader, std::unique_ptr< Tile > &&pRootTile, const TilesetOptions &options=TilesetOptions())
Constructs a new instance with a given custom tileset loader.
bool waitForAllLoadsToComplete(double maximumWaitTimeInMilliseconds)
Waits until no tile loads are in progress. This function must be called from the main thread,...
const Tile * getRootTile() const noexcept
Gets the root tile of this tileset.
const std::vector< CesiumUtility::Credit > & getTilesetCredits() const noexcept
Get tileset credits.
RasterOverlayCollection & getOverlays() noexcept
Returns the RasterOverlayCollection of this tileset.
CesiumAsync::Future< const TilesetMetadata * > loadMetadata()
Asynchronously loads the metadata associated with the main tileset.json.
const ViewUpdateResult & updateViewGroupOffline(TilesetViewGroup &viewGroup, const std::vector< ViewState > &frustums)
Updates a view group, returning the set of tiles to render in this view. Unlike updateViewGroup,...
TilesetExternals & getExternals() noexcept
Gets the TilesetExternals that summarize the external interfaces used by this tileset.
Definition Tileset.h:157
TilesetSharedAssetSystem & getSharedAssetSystem() noexcept
Returns the TilesetSharedAssetSystem of this tileset.
The state of the view that is used during the traversal of a tileset.
Definition ViewState.h:25
Reports the results of Tileset::updateViewGroup.
A system for managing asynchronous requests and tasks.
Definition AsyncSystem.h:37
A quadratic surface defined in Cartesian coordinates.
Definition Ellipsoid.h:39
A smart pointer that calls addReference and releaseReference on the controlled object.
Classes that implement the 3D Tiles standard.
TileOcclusionState
The occlusion state of a tile as reported by the renderer proxy.
Classes that support asynchronous operations.
Classes for geospatial computations in Cesium.
Utility classes for Cesium.
STL namespace.
The result of sampling heights with Tileset::sampleHeightMostDetailed.
Additional options for configuring a Tileset.
A checkpoint within this view group's load queue.