[core] Geometry tile updates layer render data if its constants mask remains

Thus, we do not have to wait for tile update completion in case
the updated properties have the same constants mask, i.e. fit
the existing bucket.
This commit is contained in:
Mikhail Pozdnyakov
2019-06-27 17:19:53 +03:00
parent c144591322
commit affb21a612
4 changed files with 13 additions and 11 deletions

View File

@@ -231,12 +231,7 @@ void TilePyramid::update(const std::vector<Immutable<style::LayerProperties>>& l
if (holdForFade && typeInfo->fadingTiles == LayerTypeInfo::FadingTiles::NotRequired) {
continue;
}
// Update layer properties for complete tiles; for incomplete just check the presence.
bool layerRenderableInTile = tile.isComplete() ? tile.updateLayerProperties(layerProperties)
: static_cast<bool>(tile.getBucket(*layerProperties->baseImpl));
if (layerRenderableInTile) {
tile.usedByRenderedLayers = true;
}
tile.usedByRenderedLayers |= tile.layerPropertiesUpdated(layerProperties);
}
}
}

View File

@@ -212,13 +212,14 @@ const LayerRenderData* GeometryTile::getLayerRenderData(const style::Layer::Impl
return that->getMutableLayerRenderData(layerImpl);
}
bool GeometryTile::updateLayerProperties(const Immutable<style::LayerProperties>& layerProperties) {
bool GeometryTile::layerPropertiesUpdated(const Immutable<style::LayerProperties>& layerProperties) {
LayerRenderData* renderData = getMutableLayerRenderData(*layerProperties->baseImpl);
if (!renderData) {
return false;
}
if (renderData->layerProperties != layerProperties) {
if (renderData->layerProperties != layerProperties &&
renderData->layerProperties->constantsMask() == layerProperties->constantsMask()) {
renderData->layerProperties = layerProperties;
}

View File

@@ -47,7 +47,7 @@ public:
void upload(gfx::UploadPass&) override;
Bucket* getBucket(const style::Layer::Impl&) const override;
const LayerRenderData* getLayerRenderData(const style::Layer::Impl&) const override;
bool updateLayerProperties(const Immutable<style::LayerProperties>&) override;
bool layerPropertiesUpdated(const Immutable<style::LayerProperties>&) override;
void queryRenderedFeatures(
std::unordered_map<std::string, std::vector<Feature>>& result,

View File

@@ -58,10 +58,16 @@ public:
assert(false);
return nullptr;
}
// Updates the contained layer render data with the given properties.
// Notifies this tile of the updated layer properties.
//
// Tile implementation should update the contained layer
// render data with the given properties.
//
// Returns `true` if the corresponding render layer data is present in this tile (and i.e. it
// was succesfully updated); returns `false` otherwise.
virtual bool updateLayerProperties(const Immutable<style::LayerProperties>&) { return true; }
virtual bool layerPropertiesUpdated(const Immutable<style::LayerProperties>& layerProperties) {
return bool(getBucket(*layerProperties->baseImpl));
}
virtual void setShowCollisionBoxes(const bool) {}
virtual void setLayers(const std::vector<Immutable<style::LayerProperties>>&) {}
virtual void setMask(TileMask&&) {}