cesium-native 0.44.2
Loading...
Searching...
No Matches
RasterOverlayTileProvider.h
1#pragma once
2
3#include <CesiumAsync/IAssetAccessor.h>
4#include <CesiumGeospatial/Projection.h>
5#include <CesiumGltfReader/GltfReader.h>
6#include <CesiumRasterOverlays/Library.h>
7#include <CesiumUtility/Assert.h>
8#include <CesiumUtility/CreditSystem.h>
9#include <CesiumUtility/ErrorList.h>
10#include <CesiumUtility/IntrusivePointer.h>
11#include <CesiumUtility/ReferenceCounted.h>
12#include <CesiumUtility/Tracing.h>
13
14#include <spdlog/fwd.h>
15
16#include <optional>
17
18namespace CesiumRasterOverlays {
19
20class RasterOverlay;
21class RasterOverlayTile;
22class IPrepareRasterOverlayRendererResources;
23
27struct CESIUMRASTEROVERLAYS_API LoadedRasterOverlayImage {
35
43
48 std::vector<CesiumUtility::Credit> credits{};
49
57
62 bool moreDetailAvailable = false;
63
67 int64_t getSizeBytes() const {
68 int64_t accum = 0;
69 accum += int64_t(sizeof(LoadedRasterOverlayImage));
70 accum += int64_t(this->credits.capacity() * sizeof(CesiumUtility::Credit));
71 if (this->pImage) {
72 accum += this->pImage->getSizeBytes();
73 }
74 return accum;
75 }
76};
77
87
94 std::vector<CesiumUtility::Credit> credits{};
95
101
119 bool allowEmptyImages = false;
120};
121
123
138
145class CESIUMRASTEROVERLAYS_API RasterOverlayTileProvider
146 : public CesiumUtility::ReferenceCountedNonThreadSafe<
148public:
162 const CesiumAsync::AsyncSystem& asyncSystem,
163 const std::shared_ptr<CesiumAsync::IAssetAccessor>& pAssetAccessor,
164 const CesiumGeospatial::Ellipsoid& ellipsoid
165 CESIUM_DEFAULT_ELLIPSOID) noexcept;
166
185 const CesiumAsync::AsyncSystem& asyncSystem,
186 const std::shared_ptr<CesiumAsync::IAssetAccessor>& pAssetAccessor,
187 std::optional<CesiumUtility::Credit> credit,
188 const std::shared_ptr<IPrepareRasterOverlayRendererResources>&
189 pPrepareRendererResources,
190 const std::shared_ptr<spdlog::logger>& pLogger,
191 const CesiumGeospatial::Projection& projection,
192 const CesiumGeometry::Rectangle& coverageRectangle) noexcept;
193
195 virtual ~RasterOverlayTileProvider() noexcept;
196
216 bool isPlaceholder() const noexcept { return this->_pPlaceholder != nullptr; }
217
221 RasterOverlay& getOwner() noexcept { return *this->_pOwner; }
222
224 const RasterOverlay& getOwner() const noexcept { return *this->_pOwner; }
225
229 const std::shared_ptr<CesiumAsync::IAssetAccessor>&
230 getAssetAccessor() const noexcept {
231 return this->_pAssetAccessor;
232 }
233
237 const CesiumAsync::AsyncSystem& getAsyncSystem() const noexcept {
238 return this->_asyncSystem;
239 }
240
245 const std::shared_ptr<IPrepareRasterOverlayRendererResources>&
247 return this->_pPrepareRendererResources;
248 }
249
254 const std::shared_ptr<spdlog::logger>& getLogger() const noexcept {
255 return this->_pLogger;
256 }
257
262 return this->_projection;
263 }
264
270 return this->_coverageRectangle;
271 }
272
293 const CesiumGeometry::Rectangle& rectangle,
294 const glm::dvec2& targetScreenPixels);
295
299 int64_t getTileDataBytes() const noexcept { return this->_tileDataBytes; }
300
304 uint32_t getNumberOfTilesLoading() const noexcept {
305 CESIUM_ASSERT(this->_totalTilesCurrentlyLoading > -1);
306 return static_cast<uint32_t>(this->_totalTilesCurrentlyLoading);
307 }
308
320
324 const std::optional<CesiumUtility::Credit>& getCredit() const noexcept {
325 return _credit;
326 }
327
345
368
369protected:
378
390 const std::string& url,
391 const std::vector<CesiumAsync::IAssetAccessor::THeader>& headers = {},
392 LoadTileImageFromUrlOptions&& options = {}) const;
393
394private:
396 doLoad(RasterOverlayTile& tile, bool isThrottledLoad);
397
405 void beginTileLoad(bool isThrottledLoad) noexcept;
406
415 void finalizeTileLoad(bool isThrottledLoad) noexcept;
416
417private:
419 CesiumAsync::AsyncSystem _asyncSystem;
420 std::shared_ptr<CesiumAsync::IAssetAccessor> _pAssetAccessor;
421 std::optional<CesiumUtility::Credit> _credit;
422 std::shared_ptr<IPrepareRasterOverlayRendererResources>
423 _pPrepareRendererResources;
424 std::shared_ptr<spdlog::logger> _pLogger;
426 CesiumGeometry::Rectangle _coverageRectangle;
428 int64_t _tileDataBytes;
429 int32_t _totalTilesCurrentlyLoading;
430 int32_t _throttledTilesCurrentlyLoading;
431 CESIUM_TRACE_DECLARE_TRACK_SET(
432 _loadingSlots,
433 "Raster Overlay Tile Loading Slot")
434};
435} // namespace CesiumRasterOverlays
A system for managing asynchronous requests and tasks.
Definition AsyncSystem.h:36
A value that will be available in the future, as produced by AsyncSystem.
Definition Promise.h:12
A quadratic surface defined in Cartesian coordinates.
Definition Ellipsoid.h:39
Provides individual tiles for a RasterOverlay on demand.
void removeTile(RasterOverlayTile *pTile) noexcept
Removes a no-longer-referenced tile from this provider's cache and deletes it.
const std::optional< CesiumUtility::Credit > & getCredit() const noexcept
Get the per-TileProvider CesiumUtility::Credit if one exists.
CesiumUtility::IntrusivePointer< RasterOverlayTile > getTile(const CesiumGeometry::Rectangle &rectangle, const glm::dvec2 &targetScreenPixels)
Returns a new RasterOverlayTile with the given specifications.
bool loadTileThrottled(RasterOverlayTile &tile)
Loads a tile, unless there are too many tile loads already in progress.
const RasterOverlay & getOwner() const noexcept
Returns the RasterOverlay that created this instance.
RasterOverlay & getOwner() noexcept
Returns the RasterOverlay that created this instance.
CesiumAsync::Future< TileProviderAndTile > loadTile(RasterOverlayTile &tile)
Loads a tile immediately, without throttling requests.
virtual CesiumAsync::Future< LoadedRasterOverlayImage > loadTileImage(RasterOverlayTile &overlayTile)=0
Loads the image for a tile.
const std::shared_ptr< IPrepareRasterOverlayRendererResources > & getPrepareRendererResources() const noexcept
Gets the interface used to prepare raster overlay images for rendering.
virtual ~RasterOverlayTileProvider() noexcept
Default destructor.
CesiumAsync::Future< LoadedRasterOverlayImage > loadTileImageFromUrl(const std::string &url, const std::vector< CesiumAsync::IAssetAccessor::THeader > &headers={}, LoadTileImageFromUrlOptions &&options={}) const
Loads an image from a URL and optionally some request headers.
uint32_t getNumberOfTilesLoading() const noexcept
Returns the number of tiles that are currently loading.
const CesiumGeometry::Rectangle & getCoverageRectangle() const noexcept
Returns the coverage CesiumGeometry::Rectangle of this instance.
const std::shared_ptr< spdlog::logger > & getLogger() const noexcept
Gets the logger to which to send messages about the tile provider and tiles.
const CesiumGeospatial::Projection & getProjection() const noexcept
Returns the CesiumGeospatial::Projection of this instance.
const CesiumAsync::AsyncSystem & getAsyncSystem() const noexcept
Gets the async system used to do work in threads.
int64_t getTileDataBytes() const noexcept
Gets the number of bytes of tile data that are currently loaded.
RasterOverlayTileProvider(const CesiumUtility::IntrusivePointer< const RasterOverlay > &pOwner, const CesiumAsync::AsyncSystem &asyncSystem, const std::shared_ptr< CesiumAsync::IAssetAccessor > &pAssetAccessor, std::optional< CesiumUtility::Credit > credit, const std::shared_ptr< IPrepareRasterOverlayRendererResources > &pPrepareRendererResources, const std::shared_ptr< spdlog::logger > &pLogger, const CesiumGeospatial::Projection &projection, const CesiumGeometry::Rectangle &coverageRectangle) noexcept
Creates a new instance.
RasterOverlayTileProvider(const CesiumUtility::IntrusivePointer< const RasterOverlay > &pOwner, const CesiumAsync::AsyncSystem &asyncSystem, const std::shared_ptr< CesiumAsync::IAssetAccessor > &pAssetAccessor, const CesiumGeospatial::Ellipsoid &ellipsoid=CesiumGeospatial::Ellipsoid::WGS84) noexcept
const std::shared_ptr< CesiumAsync::IAssetAccessor > & getAssetAccessor() const noexcept
Get the system to use for asychronous requests and threaded work.
Raster image data for a tile in a quadtree.
The base class for a rasterized image that can be draped over a Cesium3DTilesSelection::Tileset....
A smart pointer that calls addReference and releaseReference on the controlled object.
std::variant< GeographicProjection, WebMercatorProjection > Projection
A projection.
Definition Projection.h:25
Classes for raster overlays, which allow draping massive 2D textures over a model.
Utility classes for Cesium.
A 2D rectangle.
Definition Rectangle.h:14
Options for RasterOverlayTileProvider::loadTileImageFromUrl.
CesiumGeometry::Rectangle rectangle
The rectangle definining the bounds of the image being loaded, expressed in the RasterOverlayTileProv...
std::vector< CesiumUtility::Credit > credits
The credits to display with this tile.
bool moreDetailAvailable
Whether more detailed data, beyond this image, is available within the bounds of this image.
bool allowEmptyImages
Whether empty (zero length) images are accepted as a valid response.
Summarizes the result of loading an image of a RasterOverlay.
int64_t getSizeBytes() const
Returns the size of this LoadedRasterOverlayImage in bytes.
Holds a tile and its corresponding tile provider. Used as the return value of RasterOverlayTileProvid...
CesiumUtility::IntrusivePointer< RasterOverlayTile > pTile
A CesiumUtility::IntrusivePointer to the RasterOverlayTile used for this tile.
CesiumUtility::IntrusivePointer< RasterOverlayTileProvider > pTileProvider
A CesiumUtility::IntrusivePointer to the RasterOverlayTileProvider used for this tile.
Represents an HTML string that should be shown on screen to attribute third parties for used data,...
The container to store the error and warning list when loading a tile or glTF content.
Definition ErrorList.h:18