diff --git a/modules/globebrowsing/tile/tileselector.cpp b/modules/globebrowsing/tile/tileselector.cpp index 1fd10d387f..93daf7c366 100644 --- a/modules/globebrowsing/tile/tileselector.cpp +++ b/modules/globebrowsing/tile/tileselector.cpp @@ -70,6 +70,25 @@ namespace openspace { return{ Tile::TileUnavailable, uvTransform }; } + TileAndTransform TileSelector::getHighestResolutionTile(const TileProviderGroup& tileProviderGroup, ChunkIndex chunkIndex) { + TileAndTransform mostHighResolution; + mostHighResolution.tile = Tile::TileUnavailable; + mostHighResolution.uvTransform.uvScale.x = 0; + + auto activeProviders = tileProviderGroup.getActiveTileProviders(); + for (size_t i = 0; i < activeProviders.size(); i++) { + TileAndTransform tileAndTransform = getHighestResolutionTile(activeProviders[i].get(), chunkIndex); + bool tileIsOk = tileAndTransform.tile.status == Tile::Status::OK; + bool tileHasPreprocessData = tileAndTransform.tile.preprocessData != nullptr; + bool tileIsHigherResolution = tileAndTransform.uvTransform.uvScale.x > mostHighResolution.uvTransform.uvScale.x; + if (tileIsOk && tileHasPreprocessData && tileIsHigherResolution) { + mostHighResolution = tileAndTransform; + } + } + + return mostHighResolution; + } + void TileSelector::ascendToParent(ChunkIndex& chunkIndex, TileUvTransform& uv) { uv.uvOffset *= 0.5; uv.uvScale *= 0.5; diff --git a/modules/globebrowsing/tile/tileselector.h b/modules/globebrowsing/tile/tileselector.h index baa30b3f4b..8765eba6f8 100644 --- a/modules/globebrowsing/tile/tileselector.h +++ b/modules/globebrowsing/tile/tileselector.h @@ -29,6 +29,7 @@ #include #include +#include @@ -48,6 +49,7 @@ namespace openspace { class TileSelector { public: static TileAndTransform getHighestResolutionTile(TileProvider* tileProvider, ChunkIndex chunkIndex, int parents = 0); + static TileAndTransform getHighestResolutionTile(const TileProviderGroup& tileProviderGroup, ChunkIndex chunkIndex); private: static void ascendToParent(ChunkIndex& chunkIndex, TileUvTransform& uv); };