[core] only render tiles that have data

This commit is contained in:
Konstantin Käfer
2016-03-15 18:04:39 +01:00
parent 09684bb1dc
commit ea32ee742f
6 changed files with 17 additions and 2 deletions

View File

@@ -179,8 +179,9 @@ std::forward_list<Tile*> Source::getLoadedTiles() const {
std::forward_list<Tile*> ptrs;
auto it = ptrs.before_begin();
for (const auto& pair : tiles) {
if (pair.second->data->isReady()) {
it = ptrs.insert_after(it, pair.second.get());
auto tile = pair.second.get();
if (tile->data->isReady() && tile->data->hasData()) {
it = ptrs.insert_after(it, tile);
}
}
return ptrs;

View File

@@ -81,3 +81,7 @@ void RasterTileData::cancel() {
req = nullptr;
workRequest.reset();
}
bool RasterTileData::hasData() const {
return bucket.get() != nullptr;
}

View File

@@ -24,6 +24,7 @@ public:
void cancel() override;
Bucket* getBucket(StyleLayer const &layer_desc) override;
bool hasData() const override;
private:
gl::TexturePool& texturePool;

View File

@@ -86,6 +86,9 @@ public:
return isReadyState(state);
}
// Returns true when there's at least some data that we can render.
virtual bool hasData() const = 0;
State getState() const {
return state;
}

View File

@@ -180,4 +180,8 @@ void VectorTileData::cancel() {
workRequest.reset();
}
bool VectorTileData::hasData() const {
return !buckets.empty();
}
} // namespace mbgl

View File

@@ -33,6 +33,8 @@ public:
void redoPlacement(PlacementConfig config, const std::function<void()>&) override;
void redoPlacement(const std::function<void()>&) override;
bool hasData() const override;
void cancel() override;
private: