cesium-native 0.55.0
Loading...
Searching...
No Matches
QuadtreeRasterOverlayTileProvider.h
1#pragma once
2
3#include <CesiumAsync/AsyncSystem.h>
4#include <CesiumAsync/IAssetAccessor.h>
5#include <CesiumAsync/SharedAssetDepot.h>
6#include <CesiumGeometry/QuadtreeTileID.h>
7#include <CesiumGeometry/QuadtreeTilingScheme.h>
8#include <CesiumRasterOverlays/IPrepareRasterOverlayRendererResources.h>
9#include <CesiumRasterOverlays/Library.h>
10#include <CesiumRasterOverlays/RasterOverlayTileProvider.h>
11#include <CesiumUtility/CreditSystem.h>
12#include <CesiumUtility/Result.h>
13#include <CesiumUtility/SharedAsset.h>
14
15#include <list>
16#include <memory>
17#include <optional>
18
19namespace CesiumRasterOverlays {
20
31class CESIUMRASTEROVERLAYS_API QuadtreeRasterOverlayTileProvider
33public:
53 const CesiumGeospatial::Projection& projection,
54 const CesiumGeometry::QuadtreeTilingScheme& tilingScheme,
55 const CesiumGeometry::Rectangle& coverageRectangle,
56 uint32_t minimumLevel,
57 uint32_t maximumLevel,
58 uint32_t imageWidth,
59 uint32_t imageHeight) noexcept;
60
64 uint32_t getMinimumLevel() const noexcept { return this->_minimumLevel; }
65
69 uint32_t getMaximumLevel() const noexcept { return this->_maximumLevel; }
70
74 uint32_t getWidth() const noexcept { return this->_imageWidth; }
75
79 uint32_t getHeight() const noexcept { return this->_imageHeight; }
80
86 return this->_tilingScheme;
87 }
88
99 const CesiumGeometry::Rectangle& rectangle,
100 const glm::dvec2& screenPixels);
101
102protected:
112
113private:
115 loadTileImage(const RasterOverlayTile& overlayTile) override final;
116
117 struct LoadedQuadtreeImage
118 : public CesiumUtility::SharedAsset<LoadedQuadtreeImage> {
119 LoadedQuadtreeImage(
120 const std::shared_ptr<LoadedRasterOverlayImage>& pLoaded_,
121 const std::optional<CesiumGeometry::Rectangle>& subset_)
122 : pLoaded(pLoaded_), subset(subset_) {}
123 std::shared_ptr<LoadedRasterOverlayImage> pLoaded = nullptr;
124 std::optional<CesiumGeometry::Rectangle> subset = std::nullopt;
125
126 int64_t getSizeBytes() const {
127 int64_t accum = 0;
128 accum += int64_t(sizeof(LoadedQuadtreeImage));
129 if (pLoaded) {
130 accum += pLoaded->getSizeBytes();
131 }
132 return accum;
133 }
134 };
135
137 getQuadtreeTile(const CesiumGeometry::QuadtreeTileID& tileID);
138
149 std::vector<CesiumAsync::SharedFuture<
151 mapRasterTilesToGeometryTile(
152 const CesiumGeometry::Rectangle& geometryRectangle,
153 const glm::dvec2 targetScreenPixels);
154
155 struct CombinedImageMeasurements {
157 int32_t widthPixels;
158 int32_t heightPixels;
159 int32_t channels;
160 int32_t bytesPerChannel;
161 };
162
163 static CombinedImageMeasurements measureCombinedImage(
164 const CesiumGeometry::Rectangle& targetRectangle,
166 images);
167
168 static LoadedRasterOverlayImage combineImages(
169 const CesiumGeometry::Rectangle& targetRectangle,
170 const CesiumGeospatial::Projection& projection,
172
173 uint32_t _minimumLevel;
174 uint32_t _maximumLevel;
175 uint32_t _imageWidth;
176 uint32_t _imageHeight;
178
180 LoadedQuadtreeImage,
182 _pTileDepot;
183};
184} // namespace CesiumRasterOverlays
A value that will be available in the future, as produced by AsyncSystem.
Definition Future.h:29
A depot for CesiumUtility::SharedAsset instances, which are potentially shared between multiple objec...
A value that will be available in the future, as produced by AsyncSystem. Unlike Future,...
Defines how a rectangular region is divided into quadtree tiles.
uint32_t getHeight() const noexcept
Returns the image height of this instance, in pixels.
uint32_t computeLevelFromTargetScreenPixels(const CesiumGeometry::Rectangle &rectangle, const glm::dvec2 &screenPixels)
Computes the best quadtree level to use for an image intended to cover a given projected rectangle wh...
uint32_t getMinimumLevel() const noexcept
Returns the minimum tile level of this instance.
QuadtreeRasterOverlayTileProvider(const CesiumUtility::IntrusivePointer< const RasterOverlay > &pCreator, const CreateRasterOverlayTileProviderParameters &parameters, const CesiumGeospatial::Projection &projection, const CesiumGeometry::QuadtreeTilingScheme &tilingScheme, const CesiumGeometry::Rectangle &coverageRectangle, uint32_t minimumLevel, uint32_t maximumLevel, uint32_t imageWidth, uint32_t imageHeight) noexcept
Creates a new instance.
uint32_t getWidth() const noexcept
Returns the image width of this instance, in pixels.
virtual CesiumAsync::Future< LoadedRasterOverlayImage > loadQuadtreeTileImage(const CesiumGeometry::QuadtreeTileID &tileID) const =0
Asynchronously loads a tile in the quadtree.
uint32_t getMaximumLevel() const noexcept
Returns the maximum tile level of this instance.
const CesiumGeometry::QuadtreeTilingScheme & getTilingScheme() const noexcept
Returns the CesiumGeometry::QuadtreeTilingScheme of this instance.
RasterOverlayTileProvider(const CesiumUtility::IntrusivePointer< const RasterOverlay > &pCreator, const CreateRasterOverlayTileProviderParameters &parameters, const CesiumGeospatial::Projection &projection, const CesiumGeometry::Rectangle &coverageRectangle) noexcept
Creates a new instance.
Raster image data for a tile in a quadtree.
A smart pointer that calls addReference and releaseReference on the controlled object.
An asset that is potentially shared between multiple objects, such as an image shared between multipl...
Definition SharedAsset.h:55
std::variant< GeographicProjection, WebMercatorProjection > Projection
A projection.
Definition Projection.h:25
Classes for raster overlays, which allow draping massive 2D textures over a model.
Result< IntrusivePointer< T > > ResultPointer
A convenient shortcut for CesiumUtility::Result<CesiumUtility::IntrusivePointer<T>>.
Definition Result.h:122
Uniquely identifies a node in a quadtree.
A 2D rectangle.
Definition Rectangle.h:14