Introduce TilesetSharedAssetSystem.

This commit is contained in:
Kevin Ring 2024-10-29 09:24:43 +11:00
parent d16e3ef94a
commit 49f1d6319c
10 changed files with 79 additions and 28 deletions

View File

@ -23,10 +23,12 @@
#include <vector>
namespace Cesium3DTilesSelection {
class TilesetContentManager;
class TilesetMetadata;
class TilesetHeightQuery;
class TilesetHeightRequest;
class TilesetSharedAssetSystem;
/**
* @brief A <a
@ -184,11 +186,10 @@ public:
/**
* @brief Returns the {@link SharedAssetDepot} of this tileset.
*/
CesiumGltfReader::GltfSharedAssetSystem& getSharedAssetSystem() noexcept;
TilesetSharedAssetSystem& getSharedAssetSystem() noexcept;
/** @copydoc Tileset::getSharedAssetSystem() */
const CesiumGltfReader::GltfSharedAssetSystem&
getSharedAssetSystem() const noexcept;
const TilesetSharedAssetSystem& getSharedAssetSystem() const noexcept;
/**
* @brief Updates this view but waits for all tiles that meet sse to finish

View File

@ -0,0 +1,18 @@
#pragma once
#include <CesiumGltfReader/GltfSharedAssetSystem.h>
namespace Cesium3DTilesSelection {
/**
* @brief Contains assets that are potentially shared across multiple Tilesets.
*/
class TilesetSharedAssetSystem
: public CesiumGltfReader::GltfSharedAssetSystem {
public:
static CesiumUtility::IntrusivePointer<TilesetSharedAssetSystem> getDefault();
virtual ~TilesetSharedAssetSystem() = default;
};
} // namespace Cesium3DTilesSelection

View File

@ -9,8 +9,8 @@ TileContentLoadInfo::TileContentLoadInfo(
const std::shared_ptr<IPrepareRendererResources>&
pPrepareRendererResources_,
const std::shared_ptr<spdlog::logger>& pLogger_,
const CesiumUtility::IntrusivePointer<
CesiumGltfReader::GltfSharedAssetSystem> pAssetDepot_,
const CesiumUtility::IntrusivePointer<TilesetSharedAssetSystem>
pSharedAssetSystem_,
const TilesetContentOptions& contentOptions_,
const Tile& tile)
: asyncSystem(asyncSystem_),
@ -20,7 +20,7 @@ TileContentLoadInfo::TileContentLoadInfo(
tileID(tile.getTileID()),
tileBoundingVolume(tile.getBoundingVolume()),
tileContentBoundingVolume(tile.getContentBoundingVolume()),
pAssetDepot{pAssetDepot_},
pSharedAssetSystem{pSharedAssetSystem_},
tileRefine(tile.getRefine()),
tileGeometricError(tile.getGeometricError()),
tileTransform(tile.getTransform()),

View File

@ -6,10 +6,10 @@
#include <Cesium3DTilesSelection/TileID.h>
#include <Cesium3DTilesSelection/TileRefine.h>
#include <Cesium3DTilesSelection/TilesetOptions.h>
#include <Cesium3DTilesSelection/TilesetSharedAssetSystem.h>
#include <CesiumAsync/AsyncSystem.h>
#include <CesiumAsync/IAssetAccessor.h>
#include <CesiumGeometry/Axis.h>
#include <CesiumGltfReader/GltfSharedAssetSystem.h>
#include <gsl/span>
#include <spdlog/fwd.h>
@ -25,8 +25,8 @@ struct TileContentLoadInfo {
const std::shared_ptr<IPrepareRendererResources>&
pPrepareRendererResources,
const std::shared_ptr<spdlog::logger>& pLogger,
const CesiumUtility::IntrusivePointer<
CesiumGltfReader::GltfSharedAssetSystem> maybeAssetDepot,
const CesiumUtility::IntrusivePointer<TilesetSharedAssetSystem>
pSharedAssetSystem,
const TilesetContentOptions& contentOptions,
const Tile& tile);
@ -43,8 +43,7 @@ struct TileContentLoadInfo {
BoundingVolume tileBoundingVolume;
std::optional<BoundingVolume> tileContentBoundingVolume;
CesiumUtility::IntrusivePointer<CesiumGltfReader::GltfSharedAssetSystem>
pAssetDepot;
CesiumUtility::IntrusivePointer<TilesetSharedAssetSystem> pSharedAssetSystem;
TileRefine tileRefine;

View File

@ -149,13 +149,11 @@ const RasterOverlayCollection& Tileset::getOverlays() const noexcept {
return this->_pTilesetContentManager->getRasterOverlayCollection();
}
CesiumGltfReader::GltfSharedAssetSystem&
Tileset::getSharedAssetSystem() noexcept {
TilesetSharedAssetSystem& Tileset::getSharedAssetSystem() noexcept {
return *this->_pTilesetContentManager->getSharedAssetSystem();
}
const CesiumGltfReader::GltfSharedAssetSystem&
Tileset::getSharedAssetSystem() const noexcept {
const TilesetSharedAssetSystem& Tileset::getSharedAssetSystem() const noexcept {
return *this->_pTilesetContentManager->getSharedAssetSystem();
}

View File

@ -565,8 +565,8 @@ postProcessContentInWorkerThread(
tileLoadInfo.contentOptions.ktx2TranscodeTargets;
gltfOptions.applyTextureTransform =
tileLoadInfo.contentOptions.applyTextureTransform;
if (tileLoadInfo.pAssetDepot) {
gltfOptions.pSharedAssets = tileLoadInfo.pAssetDepot;
if (tileLoadInfo.pSharedAssetSystem) {
gltfOptions.pSharedAssets = tileLoadInfo.pSharedAssetSystem;
}
auto asyncSystem = tileLoadInfo.asyncSystem;
@ -666,7 +666,7 @@ TilesetContentManager::TilesetContentManager(
_tileLoadsInProgress{0},
_loadedTilesCount{0},
_tilesDataUsed{0},
_pSharedAssets(CesiumGltfReader::GltfSharedAssetSystem::getDefault()),
_pSharedAssets(TilesetSharedAssetSystem::getDefault()),
_destructionCompletePromise{externals.asyncSystem.createPromise<void>()},
_destructionCompleteFuture{
this->_destructionCompletePromise.getFuture().share()},
@ -696,7 +696,7 @@ TilesetContentManager::TilesetContentManager(
_tileLoadsInProgress{0},
_loadedTilesCount{0},
_tilesDataUsed{0},
_pSharedAssets(CesiumGltfReader::GltfSharedAssetSystem::getDefault()),
_pSharedAssets(TilesetSharedAssetSystem::getDefault()),
_destructionCompletePromise{externals.asyncSystem.createPromise<void>()},
_destructionCompleteFuture{
this->_destructionCompletePromise.getFuture().share()},
@ -848,7 +848,7 @@ TilesetContentManager::TilesetContentManager(
_tileLoadsInProgress{0},
_loadedTilesCount{0},
_tilesDataUsed{0},
_pSharedAssets(CesiumGltfReader::GltfSharedAssetSystem::getDefault()),
_pSharedAssets(TilesetSharedAssetSystem::getDefault()),
_destructionCompletePromise{externals.asyncSystem.createPromise<void>()},
_destructionCompleteFuture{
this->_destructionCompletePromise.getFuture().share()},
@ -1237,7 +1237,7 @@ TilesetContentManager::getTilesetCredits() const noexcept {
return this->_tilesetCredits;
}
const CesiumUtility::IntrusivePointer<CesiumGltfReader::GltfSharedAssetSystem>&
const CesiumUtility::IntrusivePointer<TilesetSharedAssetSystem>&
TilesetContentManager::getSharedAssetSystem() const noexcept {
return this->_pSharedAssets;
}

View File

@ -18,6 +18,8 @@
namespace Cesium3DTilesSelection {
class TilesetSharedAssetSystem;
class TilesetContentManager
: public CesiumUtility::ReferenceCountedNonThreadSafe<
TilesetContentManager> {
@ -115,8 +117,7 @@ public:
const std::vector<CesiumUtility::Credit>& getTilesetCredits() const noexcept;
const CesiumUtility::IntrusivePointer<
CesiumGltfReader::GltfSharedAssetSystem>&
const CesiumUtility::IntrusivePointer<TilesetSharedAssetSystem>&
getSharedAssetSystem() const noexcept;
int32_t getNumberOfTilesLoading() const noexcept;
@ -172,8 +173,7 @@ private:
int64_t _tilesDataUsed;
// Stores assets that might be shared between tiles.
CesiumUtility::IntrusivePointer<CesiumGltfReader::GltfSharedAssetSystem>
_pSharedAssets;
CesiumUtility::IntrusivePointer<TilesetSharedAssetSystem> _pSharedAssets;
CesiumAsync::Promise<void> _destructionCompletePromise;
CesiumAsync::SharedFuture<void> _destructionCompleteFuture;

View File

@ -4,9 +4,9 @@
#include <Cesium3DTilesSelection/TilesetContentLoader.h>
#include <Cesium3DTilesSelection/TilesetExternals.h>
#include <Cesium3DTilesSelection/TilesetSharedAssetSystem.h>
#include <CesiumAsync/Future.h>
#include <CesiumAsync/IAssetAccessor.h>
#include <CesiumGltfReader/GltfSharedAssetSystem.h>
#include <rapidjson/fwd.h>
@ -56,8 +56,7 @@ public:
private:
std::string _baseUrl;
CesiumGeospatial::Ellipsoid _ellipsoid;
CesiumUtility::IntrusivePointer<CesiumGltfReader::GltfSharedAssetSystem>
_pSharedAssets;
CesiumUtility::IntrusivePointer<TilesetSharedAssetSystem> _pSharedAssets;
/**
* @brief The axis that was declared as the "up-axis" for glTF content.

View File

@ -0,0 +1,34 @@
#include <Cesium3DTilesSelection/TilesetSharedAssetSystem.h>
using namespace Cesium3DTilesSelection;
using namespace CesiumAsync;
using namespace CesiumGltf;
using namespace CesiumGltfReader;
using namespace CesiumUtility;
namespace {
CesiumUtility::IntrusivePointer<TilesetSharedAssetSystem> createDefault() {
CesiumUtility::IntrusivePointer<TilesetSharedAssetSystem> p =
new TilesetSharedAssetSystem();
CesiumUtility::IntrusivePointer<GltfSharedAssetSystem> pGltf =
GltfSharedAssetSystem::getDefault();
p->pImage = pGltf->pImage;
return p;
}
} // namespace
namespace Cesium3DTilesSelection {
/*static*/ CesiumUtility::IntrusivePointer<TilesetSharedAssetSystem>
TilesetSharedAssetSystem::getDefault() {
static CesiumUtility::IntrusivePointer<TilesetSharedAssetSystem> pDefault =
createDefault();
return pDefault;
}
} // namespace Cesium3DTilesSelection

View File

@ -14,6 +14,8 @@ class GltfSharedAssetSystem
public:
static CesiumUtility::IntrusivePointer<GltfSharedAssetSystem> getDefault();
virtual ~GltfSharedAssetSystem() = default;
using ImageDepot = CesiumAsync::
SharedAssetDepot<CesiumGltf::ImageAsset, NetworkImageAssetDescriptor>;