Remove some unnecessary state from TemporalTileProvider and return value from update functions

This commit is contained in:
Alexander Bock
2021-12-27 22:16:42 +01:00
parent 7cf5c37474
commit 1245a9f9fa
8 changed files with 31 additions and 77 deletions

View File

@@ -436,14 +436,11 @@ void Layer::onChange(std::function<void(Layer*)> callback) {
_onChangeCallback = std::move(callback);
}
int Layer::update() {
void Layer::update() {
ZoneScoped
if (_tileProvider) {
return tileprovider::update(*_tileProvider);
}
else {
return 0;
tileprovider::update(*_tileProvider);
}
}

View File

@@ -66,8 +66,7 @@ public:
void onChange(std::function<void(Layer*)> callback);
// Return: number of tiles that were updated
int update();
void update();
glm::ivec2 tilePixelStartOffset() const;
glm::ivec2 tilePixelSizeDifference() const;

View File

@@ -100,20 +100,17 @@ void LayerGroup::deinitialize() {
}
}
int LayerGroup::update() {
void LayerGroup::update() {
ZoneScoped
int res = 0;
_activeLayers.clear();
for (const std::unique_ptr<Layer>& layer : _layers) {
if (layer->enabled()) {
res += layer->update();
layer->update();
_activeLayers.push_back(layer.get());
}
}
return res;
}
Layer* LayerGroup::addLayer(const ghoul::Dictionary& layerDict) {

View File

@@ -48,8 +48,7 @@ struct LayerGroup : public properties::PropertyOwner {
void deinitialize();
/// Updates all layers tile providers within this group
/// Return: Number of tiles that were updated
int update();
void update();
Layer* addLayer(const ghoul::Dictionary& layerDict);
void deleteLayer(const std::string& layerName);

View File

@@ -141,14 +141,12 @@ std::array<LayerGroup*, LayerManager::NumLayerGroups> LayerManager::layerGroups(
return res;
}
int LayerManager::update() {
void LayerManager::update() {
ZoneScoped
int res = 0;
for (std::unique_ptr<LayerGroup>& layerGroup : _layerGroups) {
res += layerGroup->update();
layerGroup->update();
}
return res;
}
void LayerManager::reset(bool includeDisabled) {

View File

@@ -66,8 +66,7 @@ public:
std::array<LayerGroup*, NumLayerGroups> layerGroups() const;
// Return: Number of tiles updated
int update();
void update();
void reset(bool includeDisabled = false);
void onChange(std::function<void(Layer* l)> callback);

View File

@@ -1053,11 +1053,7 @@ TemporalTileProvider::TemporalTileProvider(const ghoul::Dictionary& dictionary)
addProperty(fixedTime);
readFilePath(*this);
successfulInitialization = true;
if (!successfulInitialization) {
LERRORC("TemporalTileProvider", "Unable to read file " + filePath.value());
}
if (interpolation) {
interpolateTileProvider = std::make_unique<InterpolateTileProvider>(dictionary);
interpolateTileProvider->colormap = colormap;
@@ -1474,13 +1470,8 @@ Tile tile(TileProvider& tp, const TileIndex& tileIndex) {
case Type::TemporalTileProvider: {
ZoneScopedN("Type::TemporalTileProvider")
TemporalTileProvider& t = static_cast<TemporalTileProvider&>(tp);
if (t.successfulInitialization) {
ensureUpdated(t);
return tile(*t.currentTileProvider, tileIndex);
}
else {
return Tile();
}
ensureUpdated(t);
return tile(*t.currentTileProvider, tileIndex);
}
default:
throw ghoul::MissingCaseException();
@@ -1554,13 +1545,8 @@ Tile::Status tileStatus(TileProvider& tp, const TileIndex& index) {
}
case Type::TemporalTileProvider: {
TemporalTileProvider& t = static_cast<TemporalTileProvider&>(tp);
if (t.successfulInitialization) {
ensureUpdated(t);
return tileStatus(*t.currentTileProvider, index);
}
else {
return Tile::Status::Unavailable;
}
ensureUpdated(t);
return tileStatus(*t.currentTileProvider, index);
}
default:
throw ghoul::MissingCaseException();
@@ -1612,13 +1598,8 @@ TileDepthTransform depthTransform(TileProvider& tp) {
}
case Type::TemporalTileProvider: {
TemporalTileProvider& t = static_cast<TemporalTileProvider&>(tp);
if (t.successfulInitialization) {
ensureUpdated(t);
return depthTransform(*t.currentTileProvider);
}
else {
return { 1.f, 0.f };
}
ensureUpdated(t);
return depthTransform(*t.currentTileProvider);
}
default:
throw ghoul::MissingCaseException();
@@ -1630,7 +1611,7 @@ TileDepthTransform depthTransform(TileProvider& tp) {
int update(TileProvider& tp) {
void update(TileProvider& tp) {
ZoneScoped
switch (tp.type) {
@@ -1641,7 +1622,7 @@ int update(TileProvider& tp) {
}
t.asyncTextureDataProvider->update();
bool hasUploaded = initTexturesFromLoadedData(t);
initTexturesFromLoadedData(t);
if (t.asyncTextureDataProvider->shouldBeDeleted()) {
t.asyncTextureDataProvider = nullptr;
@@ -1650,9 +1631,6 @@ int update(TileProvider& tp) {
tileTextureInitData(t.layerGroupID, t.padTiles, t.tilePixelSize)
);
}
if (hasUploaded) {
return 1;
}
break;
}
case Type::SingleImageTileProvider:
@@ -1711,21 +1689,18 @@ int update(TileProvider& tp) {
}
case Type::TemporalTileProvider: {
TemporalTileProvider& t = static_cast<TemporalTileProvider&>(tp);
if (t.successfulInitialization) {
TileProvider* newCurr = getTileProvider(t, global::timeManager->time());
if (newCurr) {
t.currentTileProvider = newCurr;
}
if (t.currentTileProvider) {
update(*t.currentTileProvider);
}
TileProvider* newCurr = getTileProvider(t, global::timeManager->time());
if (newCurr) {
t.currentTileProvider = newCurr;
}
if (t.currentTileProvider) {
update(*t.currentTileProvider);
}
break;
}
default:
throw ghoul::MissingCaseException();
}
return 0;
}
@@ -1829,12 +1804,10 @@ void reset(TileProvider& tp) {
}
case Type::TemporalTileProvider: {
TemporalTileProvider& t = static_cast<TemporalTileProvider&>(tp);
if (t.successfulInitialization) {
using K = TemporalTileProvider::TimeKey;
using V = std::unique_ptr<TileProvider>;
for (std::pair<const K, V>& it : t.tileProviderMap) {
reset(*it.second);
}
using K = TemporalTileProvider::TimeKey;
using V = std::unique_ptr<TileProvider>;
for (std::pair<const K, V>& it : t.tileProviderMap) {
reset(*it.second);
}
break;
}
@@ -1888,13 +1861,8 @@ int maxLevel(TileProvider& tp) {
}
case Type::TemporalTileProvider: {
TemporalTileProvider& t = static_cast<TemporalTileProvider&>(tp);
if (t.successfulInitialization) {
ensureUpdated(t);
return maxLevel(*t.currentTileProvider);
}
else {
return 0;
}
ensureUpdated(t);
return maxLevel(*t.currentTileProvider);
}
default:
throw ghoul::MissingCaseException();

View File

@@ -227,7 +227,6 @@ struct TemporalTileProvider : public TileProvider {
std::string colormap;
std::string myResolution;
bool successfulInitialization = false;
std::unique_ptr<InterpolateTileProvider> interpolateTileProvider;
};
@@ -267,10 +266,8 @@ TileDepthTransform depthTransform(TileProvider& tp);
/**
* This method should be called once per frame. Here, TileProviders
* are given the opportunity to update their internal state.
*
* \return The number of tiles that have been updated in this call
*/
int update(TileProvider& tp);
void update(TileProvider& tp);
/**
* Provides a uniform way of all TileProviders to reload or