[core] only render tiles that have data
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -81,3 +81,7 @@ void RasterTileData::cancel() {
|
||||
req = nullptr;
|
||||
workRequest.reset();
|
||||
}
|
||||
|
||||
bool RasterTileData::hasData() const {
|
||||
return bucket.get() != nullptr;
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ public:
|
||||
|
||||
void cancel() override;
|
||||
Bucket* getBucket(StyleLayer const &layer_desc) override;
|
||||
bool hasData() const override;
|
||||
|
||||
private:
|
||||
gl::TexturePool& texturePool;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -180,4 +180,8 @@ void VectorTileData::cancel() {
|
||||
workRequest.reset();
|
||||
}
|
||||
|
||||
bool VectorTileData::hasData() const {
|
||||
return !buckets.empty();
|
||||
}
|
||||
|
||||
} // namespace mbgl
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user