cesium-native 0.51.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
126
131 std::optional<CesiumUtility::Credit> getUserCredit() const noexcept;
132
136 const std::vector<CesiumUtility::Credit>& getTilesetCredits() const noexcept;
137
142 void setShowCreditsOnScreen(bool showCreditsOnScreen) noexcept;
143
148 TilesetExternals& getExternals() noexcept { return this->_externals; }
149
154 const TilesetExternals& getExternals() const noexcept {
155 return this->_externals;
156 }
157
163 return this->_asyncSystem;
164 }
165
167 const CesiumAsync::AsyncSystem& getAsyncSystem() const noexcept {
168 return this->_asyncSystem;
169 }
170
172 const TilesetOptions& getOptions() const noexcept { return this->_options; }
173
177 TilesetOptions& getOptions() noexcept { return this->_options; }
178
183 return this->_options.ellipsoid;
184 }
185
188 return this->_options.ellipsoid;
189 }
190
196 const Tile* getRootTile() const noexcept;
197
202
204 const RasterOverlayCollection& getOverlays() const noexcept;
205
210
213
224 [[deprecated("Instead of `tileset.updateViewOffline(...)`, call "
225 "`tileset.updateViewGroupOffline(tileset.getDefaultViewGroup(), "
226 "...)`.")]] const ViewUpdateResult&
227 updateViewOffline(const std::vector<ViewState>& frustums);
228
244 [[deprecated("Instead of `tileset.updateView(...)`, call "
245 "`tileset.updateViewGroup(tileset.getDefaultViewGroup(), ...)` "
246 "followed by `tileset.loadTiles()`.")]] const ViewUpdateResult&
247 updateView(const std::vector<ViewState>& frustums, float deltaTime = 0.0f);
248
252 int32_t getNumberOfTilesLoaded() const;
253
261 float computeLoadProgress() noexcept;
262
280
287 const std::function<void(const Tile& tile)>& callback) const;
288
293 int64_t getTotalDataBytes() const noexcept;
294
319 const TilesetMetadata* getMetadata(const Tile* pTile = nullptr) const;
320
337
357 const std::vector<CesiumGeospatial::Cartographic>& positions);
358
366
369
394 TilesetViewGroup& viewGroup,
395 const std::vector<ViewState>& frustums,
396 float deltaTime = 0.0f);
397
418 TilesetViewGroup& viewGroup,
419 const std::vector<ViewState>& frustums);
420
433 void loadTiles();
434
448
449 Tileset(const Tileset& rhs) = delete;
450 Tileset& operator=(const Tileset& rhs) = delete;
451
452private:
461 struct TraversalDetails {
469 bool allAreRenderable = true;
470
480 bool anyWereRenderedLastFrame = false;
481
500 uint32_t notYetRenderableCount = 0;
501 };
502
503 TraversalDetails _renderLeaf(
504 const TilesetFrameState& frameState,
505 Tile& tile,
506 double tilePriority,
507 ViewUpdateResult& result);
508 TraversalDetails _renderInnerTile(
509 const TilesetFrameState& frameState,
510 Tile& tile,
511 ViewUpdateResult& result);
512 bool _kickDescendantsAndRenderTile(
513 const TilesetFrameState& frameState,
514 Tile& tile,
515 ViewUpdateResult& result,
516 TraversalDetails& traversalDetails,
517 size_t firstRenderedDescendantIndex,
518 const TilesetViewGroup::LoadQueueCheckpoint& loadQueueBeforeChildren,
519 bool queuedForLoad,
520 double tilePriority);
521 TileOcclusionState _checkOcclusion(const Tile& tile);
522
523 TraversalDetails _visitTile(
524 const TilesetFrameState& frameState,
525 uint32_t depth,
526 bool meetsSse,
527 bool ancestorMeetsSse,
528 Tile& tile,
529 double tilePriority,
530 ViewUpdateResult& result);
531
532 struct CullResult {
533 // whether we should visit this tile
534 bool shouldVisit = true;
535 // whether this tile was culled (Note: we might still want to visit it)
536 bool culled = false;
537 };
538
539 // TODO: abstract these into a composable culling interface.
540 void _frustumCull(
541 const Tile& tile,
542 const TilesetFrameState& frameState,
543 bool cullWithChildrenBounds,
544 CullResult& cullResult);
545 void _fogCull(
546 const TilesetFrameState& frameState,
547 const std::vector<double>& distances,
548 CullResult& cullResult);
549 bool _meetsSse(
550 const std::vector<ViewState>& frustums,
551 const Tile& tile,
552 const std::vector<double>& distances,
553 bool culled) const noexcept;
554
555 TraversalDetails _visitTileIfNeeded(
556 const TilesetFrameState& frameState,
557 uint32_t depth,
558 bool ancestorMeetsSse,
559 Tile& tile,
560 ViewUpdateResult& result);
561 TraversalDetails _visitVisibleChildrenNearToFar(
562 const TilesetFrameState& frameState,
563 uint32_t depth,
564 bool ancestorMeetsSse,
565 Tile& tile,
566 ViewUpdateResult& result);
567
583 bool _loadAndRenderAdditiveRefinedTile(
584 const TilesetFrameState& frameState,
585 Tile& tile,
586 ViewUpdateResult& result,
587 double tilePriority,
588 bool queuedForLoad);
589
590 void _unloadCachedTiles(double timeBudget) noexcept;
591
592 void _updateLodTransitions(
593 const TilesetFrameState& frameState,
594 float deltaTime,
595 ViewUpdateResult& result) const noexcept;
596
597 TilesetExternals _externals;
598 CesiumAsync::AsyncSystem _asyncSystem;
599
600 TilesetOptions _options;
601
602 // Holds computed distances, to avoid allocating them on the heap during tile
603 // selection.
604 std::vector<double> _distances;
605
606 // Holds the occlusion proxies of the children of a tile. Store them in this
607 // scratch variable so that it can allocate only when growing bigger.
608 std::vector<const TileOcclusionRendererProxy*> _childOcclusionProxies;
609
611 _pTilesetContentManager;
612
613 std::list<TilesetHeightRequest> _heightRequests;
614
615 TilesetViewGroup _defaultViewGroup;
616
617 void addTileToLoadQueue(
618 const TilesetFrameState& frameState,
619 Tile& tile,
620 TileLoadPriorityGroup priorityGroup,
621 double priority);
622
623 static TraversalDetails createTraversalDetailsForSingleTile(
624 const TilesetFrameState& frameState,
625 const Tile& tile);
626};
627
628} // 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:122
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:187
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:162
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:172
const TilesetExternals & getExternals() const noexcept
Gets the TilesetExternals that summarize the external interfaces used by this tileset.
Definition Tileset.h:154
const CesiumAsync::AsyncSystem & getAsyncSystem() const noexcept
Returns the CesiumAsync::AsyncSystem that is used for dispatching asynchronous tasks.
Definition Tileset.h:167
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:177
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:182
~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.
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:148
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:36
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.