diff --git a/src/mbgl/source/source.cpp b/src/mbgl/source/source.cpp index 262fc0871..5dc61c02c 100644 --- a/src/mbgl/source/source.cpp +++ b/src/mbgl/source/source.cpp @@ -179,8 +179,9 @@ std::forward_list Source::getLoadedTiles() const { std::forward_list 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 3f26bbdfd..abf46b22f 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 48af2fa5c..dfc8b8573 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 90196f8a4..201507f79 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 d2eecab97..9727b4cb0 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 922ad35bc..ef405e34b 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&) override; void redoPlacement(const std::function&) override; + bool hasData() const override; + void cancel() override; private: