diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2016-03-15 18:04:39 +0100 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2016-04-06 14:16:53 -0700 |
commit | ea32ee742f57182281f574f3480e0b29aeb9718c (patch) | |
tree | 7b79aa4cee95fc907e1e9416bf6a4e1bb1902e6b | |
parent | 09684bb1dc08495594104a939026d8722ab7b088 (diff) | |
download | qtlocation-mapboxgl-ea32ee742f57182281f574f3480e0b29aeb9718c.tar.gz |
[core] only render tiles that have data
-rw-r--r-- | src/mbgl/source/source.cpp | 5 | ||||
-rw-r--r-- | src/mbgl/tile/raster_tile_data.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/tile/raster_tile_data.hpp | 1 | ||||
-rw-r--r-- | src/mbgl/tile/tile_data.hpp | 3 | ||||
-rw-r--r-- | src/mbgl/tile/vector_tile_data.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/tile/vector_tile_data.hpp | 2 |
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: |