Factory function for ActivatedRasterOverlay.
This commit is contained in:
parent
c792367f8f
commit
b5fc62f045
|
|
@ -91,7 +91,7 @@ void RasterOverlayCollection::add(
|
|||
IntrusivePointer<OverlayList> pList = this->_pOverlays;
|
||||
|
||||
pList->overlays.push_back(pOverlay);
|
||||
pList->activatedOverlays.emplace_back(new ActivatedRasterOverlay(
|
||||
pList->activatedOverlays.emplace_back(ActivatedRasterOverlay::create(
|
||||
RasterOverlayExternals{
|
||||
.pAssetAccessor = this->_externals.pAssetAccessor,
|
||||
.pPrepareRendererResources =
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
#include <CesiumAsync/SharedFuture.h>
|
||||
#include <CesiumGeometry/Rectangle.h>
|
||||
#include <CesiumGeospatial/Ellipsoid.h>
|
||||
#include <CesiumRasterOverlays/Library.h>
|
||||
#include <CesiumUtility/IntrusivePointer.h>
|
||||
#include <CesiumUtility/ReferenceCounted.h>
|
||||
|
||||
|
|
@ -21,15 +22,16 @@ struct TileProviderAndTile;
|
|||
|
||||
namespace CesiumRasterOverlays {
|
||||
|
||||
class ActivatedRasterOverlay
|
||||
class CESIUMRASTEROVERLAYS_API ActivatedRasterOverlay
|
||||
: public CesiumUtility::ReferenceCountedNonThreadSafe<
|
||||
ActivatedRasterOverlay> {
|
||||
public:
|
||||
ActivatedRasterOverlay(
|
||||
static CesiumUtility::IntrusivePointer<ActivatedRasterOverlay> create(
|
||||
const CesiumRasterOverlays::RasterOverlayExternals& externals,
|
||||
const CesiumUtility::IntrusivePointer<
|
||||
CesiumRasterOverlays::RasterOverlay>& pOverlay,
|
||||
const CesiumGeospatial::Ellipsoid& ellipsoid);
|
||||
|
||||
~ActivatedRasterOverlay();
|
||||
|
||||
CesiumAsync::SharedFuture<void>& getReadyEvent();
|
||||
|
|
@ -142,6 +144,12 @@ public:
|
|||
bool loadTileThrottled(RasterOverlayTile& tile);
|
||||
|
||||
private:
|
||||
ActivatedRasterOverlay(
|
||||
const CesiumRasterOverlays::RasterOverlayExternals& externals,
|
||||
const CesiumUtility::IntrusivePointer<
|
||||
CesiumRasterOverlays::RasterOverlay>& pOverlay,
|
||||
const CesiumGeospatial::Ellipsoid& ellipsoid);
|
||||
|
||||
CesiumAsync::Future<TileProviderAndTile>
|
||||
doLoad(RasterOverlayTile& tile, bool isThrottledLoad);
|
||||
|
||||
|
|
|
|||
|
|
@ -18,21 +18,12 @@ using namespace CesiumUtility;
|
|||
|
||||
namespace CesiumRasterOverlays {
|
||||
|
||||
ActivatedRasterOverlay::ActivatedRasterOverlay(
|
||||
IntrusivePointer<ActivatedRasterOverlay> ActivatedRasterOverlay::create(
|
||||
const RasterOverlayExternals& externals,
|
||||
const IntrusivePointer<RasterOverlay>& pOverlay,
|
||||
const Ellipsoid& ellipsoid)
|
||||
: _pOverlay(pOverlay),
|
||||
_pPlaceholderTileProvider(
|
||||
pOverlay->createPlaceholder(externals, ellipsoid)),
|
||||
_pPlaceholderTile(nullptr),
|
||||
_pTileProvider(nullptr),
|
||||
_tileDataBytes(0),
|
||||
_totalTilesCurrentlyLoading(0),
|
||||
_throttledTilesCurrentlyLoading(0),
|
||||
_readyEvent(externals.asyncSystem.createResolvedFuture().share()) {
|
||||
this->_pPlaceholderTile =
|
||||
new RasterOverlayTile(*this, glm::dvec2(0.0), Rectangle());
|
||||
const Ellipsoid& ellipsoid) {
|
||||
IntrusivePointer<ActivatedRasterOverlay> pResult =
|
||||
new ActivatedRasterOverlay(externals, pOverlay, ellipsoid);
|
||||
|
||||
CesiumAsync::Future<RasterOverlay::CreateTileProviderResult> future =
|
||||
pOverlay->createTileProvider(
|
||||
|
|
@ -43,12 +34,9 @@ ActivatedRasterOverlay::ActivatedRasterOverlay(
|
|||
externals.pLogger,
|
||||
nullptr);
|
||||
|
||||
// This continuation, by capturing thiz, keeps the instance from being
|
||||
// This continuation, by capturing pResult, keeps the instance from being
|
||||
// destroyed. But it does not keep the RasterOverlayCollection itself alive.
|
||||
IntrusivePointer<ActivatedRasterOverlay> thiz = this;
|
||||
// TODO: dangerous to do this in the constructor, because no one else can
|
||||
// possibly have a reference to it yet.
|
||||
this->_readyEvent =
|
||||
pResult->_readyEvent =
|
||||
std::move(future)
|
||||
.catchInMainThread(
|
||||
[](const std::exception& e)
|
||||
|
|
@ -61,7 +49,7 @@ ActivatedRasterOverlay::ActivatedRasterOverlay(
|
|||
e.what())});
|
||||
})
|
||||
.thenInMainThread(
|
||||
[pOverlay, thiz, externals](
|
||||
[pOverlay, pResult, externals](
|
||||
RasterOverlay::CreateTileProviderResult&& result) {
|
||||
IntrusivePointer<RasterOverlayTileProvider> pProvider = nullptr;
|
||||
if (result) {
|
||||
|
|
@ -84,9 +72,28 @@ ActivatedRasterOverlay::ActivatedRasterOverlay(
|
|||
externals.asyncSystem);
|
||||
}
|
||||
|
||||
thiz->_pTileProvider = pProvider;
|
||||
pResult->_pTileProvider = pProvider;
|
||||
})
|
||||
.share();
|
||||
|
||||
return pResult;
|
||||
}
|
||||
|
||||
ActivatedRasterOverlay::ActivatedRasterOverlay(
|
||||
const RasterOverlayExternals& externals,
|
||||
const IntrusivePointer<RasterOverlay>& pOverlay,
|
||||
const Ellipsoid& ellipsoid)
|
||||
: _pOverlay(pOverlay),
|
||||
_pPlaceholderTileProvider(
|
||||
pOverlay->createPlaceholder(externals, ellipsoid)),
|
||||
_pPlaceholderTile(nullptr),
|
||||
_pTileProvider(nullptr),
|
||||
_tileDataBytes(0),
|
||||
_totalTilesCurrentlyLoading(0),
|
||||
_throttledTilesCurrentlyLoading(0),
|
||||
_readyEvent(externals.asyncSystem.createResolvedFuture().share()) {
|
||||
this->_pPlaceholderTile =
|
||||
new RasterOverlayTile(*this, glm::dvec2(0.0), Rectangle());
|
||||
}
|
||||
|
||||
ActivatedRasterOverlay::~ActivatedRasterOverlay() {
|
||||
|
|
|
|||
|
|
@ -132,7 +132,7 @@ TEST_CASE("Add raster overlay to glTF") {
|
|||
new TileMapServiceRasterOverlay("test", tmr);
|
||||
|
||||
IntrusivePointer<ActivatedRasterOverlay> pActivated =
|
||||
new ActivatedRasterOverlay(
|
||||
ActivatedRasterOverlay::create(
|
||||
RasterOverlayExternals{
|
||||
.pAssetAccessor = pMockAssetAccessor,
|
||||
.pPrepareRendererResources = nullptr,
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ TEST_CASE(
|
|||
std::shared_ptr<CesiumNativeTests::SimpleAssetRequest>>());
|
||||
|
||||
IntrusivePointer<ActivatedRasterOverlay> pActivated =
|
||||
new ActivatedRasterOverlay(
|
||||
ActivatedRasterOverlay::create(
|
||||
RasterOverlayExternals{
|
||||
.pAssetAccessor = pAssetAccessor,
|
||||
.pPrepareRendererResources = nullptr,
|
||||
|
|
|
|||
|
|
@ -166,7 +166,7 @@ TEST_CASE("QuadtreeRasterOverlayTileProvider getTile") {
|
|||
IntrusivePointer<TestRasterOverlay> pOverlay = new TestRasterOverlay("Test");
|
||||
|
||||
IntrusivePointer<ActivatedRasterOverlay> pActivated =
|
||||
new ActivatedRasterOverlay(
|
||||
ActivatedRasterOverlay::create(
|
||||
RasterOverlayExternals{
|
||||
pAssetAccessor,
|
||||
nullptr,
|
||||
|
|
|
|||
|
|
@ -73,7 +73,7 @@ TEST_CASE("TileMapServiceRasterOverlay") {
|
|||
|
||||
SUBCASE("can load images") {
|
||||
IntrusivePointer<ActivatedRasterOverlay> pActivated =
|
||||
new ActivatedRasterOverlay(
|
||||
ActivatedRasterOverlay::create(
|
||||
RasterOverlayExternals{
|
||||
pMockAssetAccessor,
|
||||
nullptr,
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ TEST_CASE("UrlTemplateRasterOverlay getTile") {
|
|||
"http://example.com/{x}/{y}/{z}.png");
|
||||
|
||||
IntrusivePointer<ActivatedRasterOverlay> pActivated =
|
||||
new ActivatedRasterOverlay(
|
||||
ActivatedRasterOverlay::create(
|
||||
RasterOverlayExternals{
|
||||
pAssetAccessor,
|
||||
nullptr,
|
||||
|
|
|
|||
Loading…
Reference in New Issue