38class CESIUM3DTILESSELECTION_API
Tileset final {
50 std::unique_ptr<TilesetContentLoader>&& pCustomLoader,
51 std::unique_ptr<Tile>&& pRootTile,
62 const std::string& url,
79 const std::string& ionAccessToken,
81 const std::string& ionAssetEndpointUrl =
"https://api.cesium.com/");
100 CesiumAsync::SharedFuture<
void>& getAsyncDestructionCompleteEvent();
118 void setShowCreditsOnScreen(
bool showCreditsOnScreen) noexcept;
131 return this->_externals;
139 return this->_asyncSystem;
144 return this->_asyncSystem;
159 return this->_options.ellipsoid;
164 return this->_options.ellipsoid;
175 const
Tile* getRootTile() const noexcept;
217 updateView(const
std::vector<
ViewState>& frustums,
float deltaTime = 0.0f);
222 int32_t getNumberOfTilesLoaded() const;
228 float computeLoadProgress() noexcept;
235 void forEachLoadedTile(const
std::function<
void(
Tile& tile)>& callback);
242 void forEachLoadedTile(
243 const
std::function<
void(const
Tile& tile)>& callback) const;
249 int64_t getTotalDataBytes() const noexcept;
327 struct TraversalDetails {
335 bool allAreRenderable =
true;
346 bool anyWereRenderedLastFrame =
false;
366 uint32_t notYetRenderableCount = 0;
377 const std::vector<ViewState>& frustums;
378 std::vector<double> fogDensities;
379 int32_t lastFrameNumber;
380 int32_t currentFrameNumber;
383 TraversalDetails _renderLeaf(
384 const FrameState& frameState,
387 ViewUpdateResult& result);
388 TraversalDetails _renderInnerTile(
389 const FrameState& frameState,
391 ViewUpdateResult& result);
392 bool _kickDescendantsAndRenderTile(
393 const FrameState& frameState,
395 ViewUpdateResult& result,
396 TraversalDetails& traversalDetails,
397 size_t firstRenderedDescendantIndex,
398 size_t workerThreadLoadQueueIndex,
399 size_t mainThreadLoadQueueIndex,
401 double tilePriority);
403 _checkOcclusion(
const Tile& tile,
const FrameState& frameState);
405 TraversalDetails _visitTile(
406 const FrameState& frameState,
409 bool ancestorMeetsSse,
412 ViewUpdateResult& result);
416 bool shouldVisit =
true;
424 const FrameState& frameState,
425 bool cullWithChildrenBounds,
426 CullResult& cullResult);
428 const FrameState& frameState,
429 const std::vector<double>& distances,
430 CullResult& cullResult);
432 const std::vector<ViewState>& frustums,
434 const std::vector<double>& distances,
435 bool culled)
const noexcept;
437 TraversalDetails _visitTileIfNeeded(
438 const FrameState& frameState,
440 bool ancestorMeetsSse,
442 ViewUpdateResult& result);
443 TraversalDetails _visitVisibleChildrenNearToFar(
444 const FrameState& frameState,
446 bool ancestorMeetsSse,
448 ViewUpdateResult& result);
465 bool _loadAndRenderAdditiveRefinedTile(
467 ViewUpdateResult& result,
471 void _processWorkerThreadLoadQueue();
472 void _processMainThreadLoadQueue();
474 void _unloadCachedTiles(
double timeBudget)
noexcept;
475 void _markTileVisited(Tile& tile)
noexcept;
477 void _updateLodTransitions(
478 const FrameState& frameState,
480 ViewUpdateResult& result)
const noexcept;
482 TilesetExternals _externals;
485 TilesetOptions _options;
487 int32_t _previousFrameNumber;
488 ViewUpdateResult _updateResult;
490 enum class TileLoadPriorityGroup {
511 struct TileLoadTask {
524 TileLoadPriorityGroup group;
533 bool operator<(
const TileLoadTask& rhs)
const noexcept {
534 if (this->group == rhs.group)
535 return this->priority < rhs.priority;
537 return this->group > rhs.group;
541 std::vector<TileLoadTask> _mainThreadLoadQueue;
542 std::vector<TileLoadTask> _workerThreadLoadQueue;
543 std::vector<Tile*> _heightQueryLoadQueue;
545 Tile::LoadedLinkedList _loadedTiles;
549 std::vector<double> _distances;
553 std::vector<const TileOcclusionRendererProxy*> _childOcclusionProxies;
556 _pTilesetContentManager;
558 std::list<TilesetHeightRequest> _heightRequests;
560 void addTileToLoadQueue(
562 TileLoadPriorityGroup priorityGroup,
565 static TraversalDetails createTraversalDetailsForSingleTile(
566 const FrameState& frameState,
568 const TileSelectionState& lastFrameSelectionState);