summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2016-03-15 18:04:39 +0100
committerKonstantin Käfer <mail@kkaefer.com>2016-04-06 14:16:53 -0700
commitea32ee742f57182281f574f3480e0b29aeb9718c (patch)
tree7b79aa4cee95fc907e1e9416bf6a4e1bb1902e6b
parent09684bb1dc08495594104a939026d8722ab7b088 (diff)
downloadqtlocation-mapboxgl-ea32ee742f57182281f574f3480e0b29aeb9718c.tar.gz
[core] only render tiles that have data
-rw-r--r--src/mbgl/source/source.cpp5
-rw-r--r--src/mbgl/tile/raster_tile_data.cpp4
-rw-r--r--src/mbgl/tile/raster_tile_data.hpp1
-rw-r--r--src/mbgl/tile/tile_data.hpp3
-rw-r--r--src/mbgl/tile/vector_tile_data.cpp4
-rw-r--r--src/mbgl/tile/vector_tile_data.hpp2
6 files changed, 17 insertions, 2 deletions
diff --git a/src/mbgl/source/source.cpp b/src/mbgl/source/source.cpp
index 262fc0871c..5dc61c02cf 100644
--- a/src/mbgl/source/source.cpp
+++ b/src/mbgl/source/source.cpp
@@ -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;
diff --git a/src/mbgl/tile/raster_tile_data.cpp b/src/mbgl/tile/raster_tile_data.cpp
index 3f26bbdfdd..abf46b22f0 100644
--- a/src/mbgl/tile/raster_tile_data.cpp
+++ b/src/mbgl/tile/raster_tile_data.cpp
@@ -81,3 +81,7 @@ void RasterTileData::cancel() {
req = nullptr;
workRequest.reset();
}
+
+bool RasterTileData::hasData() const {
+ return bucket.get() != nullptr;
+}
diff --git a/src/mbgl/tile/raster_tile_data.hpp b/src/mbgl/tile/raster_tile_data.hpp
index 48af2fa5c2..dfc8b85731 100644
--- a/src/mbgl/tile/raster_tile_data.hpp
+++ b/src/mbgl/tile/raster_tile_data.hpp
@@ -24,6 +24,7 @@ public:
void cancel() override;
Bucket* getBucket(StyleLayer const &layer_desc) override;
+ bool hasData() const override;
private:
gl::TexturePool& texturePool;
diff --git a/src/mbgl/tile/tile_data.hpp b/src/mbgl/tile/tile_data.hpp
index 90196f8a42..201507f799 100644
--- a/src/mbgl/tile/tile_data.hpp
+++ b/src/mbgl/tile/tile_data.hpp
@@ -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;
}
diff --git a/src/mbgl/tile/vector_tile_data.cpp b/src/mbgl/tile/vector_tile_data.cpp
index d2eecab975..9727b4cb0b 100644
--- a/src/mbgl/tile/vector_tile_data.cpp
+++ b/src/mbgl/tile/vector_tile_data.cpp
@@ -180,4 +180,8 @@ void VectorTileData::cancel() {
workRequest.reset();
}
+bool VectorTileData::hasData() const {
+ return !buckets.empty();
+}
+
} // namespace mbgl
diff --git a/src/mbgl/tile/vector_tile_data.hpp b/src/mbgl/tile/vector_tile_data.hpp
index 922ad35bcd..ef405e34b4 100644
--- a/src/mbgl/tile/vector_tile_data.hpp
+++ b/src/mbgl/tile/vector_tile_data.hpp
@@ -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: