3#include <Cesium3DTilesSelection/BoundingVolume.h>
4#include <Cesium3DTilesSelection/Library.h>
5#include <Cesium3DTilesSelection/RasterMappedTo3DTile.h>
6#include <Cesium3DTilesSelection/TileContent.h>
7#include <Cesium3DTilesSelection/TileID.h>
8#include <Cesium3DTilesSelection/TileRefine.h>
9#include <Cesium3DTilesSelection/TileSelectionState.h>
10#include <CesiumUtility/DoublyLinkedList.h>
12#include <glm/common.hpp>
22#ifdef CESIUM_DEBUG_TILE_UNLOADING
23#include <unordered_map>
27class TilesetContentLoader;
29#ifdef CESIUM_DEBUG_TILE_UNLOADING
30class TileDoNotUnloadSubtreeCountTracker {
42 const std::string& reason,
46 static std::unordered_map<std::string, std::vector<Entry>> _entries;
121class CESIUM3DTILESSELECTION_API
Tile final {
142 std::unique_ptr<TileExternalContent>&& externalContent)
noexcept;
195 Tile* getParent() noexcept {
return this->_pParent; }
208 return std::span<Tile>(this->_children);
213 return std::span<const Tile>(this->_children);
231 void createChildTiles(
std::vector<
Tile>&& children);
244 return this->_boundingVolume;
255 this->_boundingVolume = value;
270 return this->_viewerRequestVolume;
282 this->_viewerRequestVolume = value;
304 this->_geometricError = value;
333 bool getUnconditionallyRefine() const noexcept {
334 return glm::isinf(this->_geometricError);
343 this->_geometricError = std::numeric_limits<double>::infinity();
376 const glm::dmat4x4&
getTransform() const noexcept {
return this->_transform; }
386 this->_transform = value;
418 const std::optional<BoundingVolume>&
420 return this->_contentBoundingVolume;
432 const std::optional<BoundingVolume>& value)
noexcept {
433 this->_contentBoundingVolume = value;
444 return this->_lastSelectionState;
449 return this->_lastSelectionState;
460 this->_lastSelectionState = newState;
473 return this->_rasterTiles;
477 const std::vector<RasterMappedTo3DTile>&
479 return this->_rasterTiles;
498 bool isRenderContent() const noexcept;
503 bool isExternalContent() const noexcept;
508 bool isEmptyContent() const noexcept;
526 int32_t getDoNotUnloadSubtreeCount() const noexcept {
527 return this->_doNotUnloadSubtreeCount;
563 void incrementDoNotUnloadSubtreeCount(
const std::string& reason)
noexcept;
565 void decrementDoNotUnloadSubtreeCount(
const std::string& reason)
noexcept;
567 struct TileConstructorImpl {};
569 typename... TileContentArgs,
570 typename TileContentEnable = std::enable_if_t<
571 std::is_constructible_v<
TileContent, TileContentArgs&&...>,
574 TileConstructorImpl tag,
577 TileContentArgs&&... args);
579 void setParent(
Tile* pParent)
noexcept;
598 bool getMightHaveLatentChildren() const noexcept;
600 void setMightHaveLatentChildren(
bool mightHaveLatentChildren) noexcept;
612 double _geometricError;
614 glm::dmat4x4 _transform;
624 bool _mightHaveLatentChildren;
631 int32_t _doNotUnloadSubtreeCount = 0;
633 friend class TilesetContentManager;
634 friend class MockTilesetContentManagerTestFixture;
The result of applying a CesiumRasterOverlays::RasterOverlayTile to geometry.
A tile content container that can store and query the content type that is currently being owned by t...
A description of the state of a Tile during the rendering process.
const std::optional< BoundingVolume > & getViewerRequestVolume() const noexcept
Returns the viewer request volume of this tile.
const std::optional< BoundingVolume > & getContentBoundingVolume() const noexcept
Returns the BoundingVolume of the renderable content of this tile.
const TileID & getTileID() const noexcept
Returns the TileID of this tile.
double getNonZeroGeometricError() const noexcept
Gets the tile's geometric error as if by calling getGeometricError, except that if the error is small...
Tile(TilesetContentLoader *pLoader) noexcept
Construct a tile with unknown content and a loader that is used to load the content of this tile....
TileSelectionState & getLastSelectionState() noexcept
Returns the TileSelectionState of this tile.
const std::vector< RasterMappedTo3DTile > & getMappedRasterTiles() const noexcept
Returns the raster overlay tiles that have been mapped to this tile.
void setGeometricError(double value) noexcept
Set the geometric error of the contents of this tile.
void setLastSelectionState(const TileSelectionState &newState) noexcept
Set the TileSelectionState of this tile.
void setTileID(const TileID &id) noexcept
Set the TileID of this tile.
int64_t computeByteSize() const noexcept
Determines the number of bytes in this tile's geometry and texture data.
bool isRenderable() const noexcept
Determines if this tile is currently renderable.
const TileSelectionState & getLastSelectionState() const noexcept
Returns the TileSelectionState of this tile.
void clearChildren() noexcept
Clears the children of this tile.
std::span< const Tile > getChildren() const noexcept
Returns a view on the children of this tile.
void setRefine(TileRefine value) noexcept
Set the refinement strategy of this tile.
void incrementDoNotUnloadSubtreeCount(const char *reason) noexcept
Increments the internal count denoting that the tile and its ancestors should not be unloaded.
const glm::dmat4x4 & getTransform() const noexcept
Gets the transformation matrix for this tile.
std::span< Tile > getChildren() noexcept
Returns a view on the children of this tile.
void setTransform(const glm::dmat4x4 &value) noexcept
Set the transformation matrix for this tile.
void setViewerRequestVolume(const std::optional< BoundingVolume > &value) noexcept
Set the viewer request volume of this tile.
TileRefine getRefine() const noexcept
The refinement strategy of this tile.
Tile(TilesetContentLoader *pLoader, TileEmptyContent emptyContent) noexcept
Construct a tile with an empty content and a loader that is associated with this tile....
void decrementDoNotUnloadSubtreeCount(const char *reason) noexcept
Decrements the internal count denoting that the tile and its ancestors should not be unloaded.
void setContentBoundingVolume(const std::optional< BoundingVolume > &value) noexcept
Set the BoundingVolume of the renderable content of this tile.
Tile(TilesetContentLoader *pLoader, std::unique_ptr< TileExternalContent > &&externalContent) noexcept
Construct a tile with an external content and a loader that is associated with this tile....
void setBoundingVolume(const BoundingVolume &value) noexcept
Set the BoundingVolume of this tile.
void decrementDoNotUnloadSubtreeCountOnParent(const char *reason) noexcept
Decrements the internal count denoting that the tile and its ancestors should not be unloaded startin...
void setUnconditionallyRefine() noexcept
Marks that this tile should be unconditionally refined.
~Tile() noexcept=default
Default destructor, which clears all resources associated with this tile.
TileContent & getContent() noexcept
Get the content of the tile.
void incrementDoNotUnloadSubtreeCountOnParent(const char *reason) noexcept
Increments the internal count denoting that the tile and its ancestors should not be unloaded startin...
const TileContent & getContent() const noexcept
Get the content of the tile.
double getGeometricError() const noexcept
Returns the geometric error of this tile.
const Tile * getParent() const noexcept
Returns the parent of this tile in the tile hierarchy.
The loader interface to load the tile content.
Classes that implement the 3D Tiles standard.
@ ContentLoaded
The tile content has finished loading.
@ Unloading
This tile is in the process of being unloaded, but could not be fully unloaded because an asynchronou...
@ ContentLoading
The tile content is currently being loaded.
@ FailedTemporarily
Something went wrong while loading this tile, but it may be a temporary problem.
@ Unloaded
The tile is not yet loaded at all, beyond the metadata in tileset.json.
@ Failed
Something went wrong while loading this tile and it will not be retried.
@ Done
The tile is completely done loading.
std::variant< CesiumGeometry::BoundingSphere, CesiumGeometry::OrientedBoundingBox, CesiumGeospatial::BoundingRegion, CesiumGeospatial::BoundingRegionWithLooseFittingHeights, CesiumGeospatial::S2CellBoundingVolume, CesiumGeometry::BoundingCylinderRegion > BoundingVolume
A bounding volume.
TileRefine
Refinement strategies for a Cesium3DTilesSelection::Tile.
std::variant< std::string, CesiumGeometry::QuadtreeTileID, CesiumGeometry::OctreeTileID, CesiumGeometry::UpsampledQuadtreeNode > TileID
An identifier for a Tile inside the tile hierarchy.
Utility classes for Cesium.
A content tag that indicates a tile has no content.