summaryrefslogtreecommitdiff
path: root/src/mbgl/map/source.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/map/source.cpp')
-rw-r--r--src/mbgl/map/source.cpp21
1 files changed, 17 insertions, 4 deletions
diff --git a/src/mbgl/map/source.cpp b/src/mbgl/map/source.cpp
index 37bc40830b..b0c4e22f55 100644
--- a/src/mbgl/map/source.cpp
+++ b/src/mbgl/map/source.cpp
@@ -287,22 +287,26 @@ TileData::State Source::addTile(MapData& data,
new_tile.data = cache.get(normalized_id.to_uint64());
}
- auto callback = std::bind(&Source::emitTileLoaded, this, true);
+ auto successCallback = std::bind(&Source::emitTileLoaded, this, true);
+ auto failureCallback = std::bind(&Source::emitTileLoadingFailed, this, std::placeholders::_1);
+
if (!new_tile.data) {
// If we don't find working tile data, we're just going to load it.
if (info.type == SourceType::Vector) {
new_tile.data =
std::make_shared<VectorTileData>(normalized_id, data.transform.getMaxZoom(), style, glyphAtlas,
glyphStore, spriteAtlas, sprite, info);
- new_tile.data->request(style.workers, transformState.getPixelRatio(), callback);
+ new_tile.data->request(
+ style.workers, transformState.getPixelRatio(), successCallback, failureCallback);
} else if (info.type == SourceType::Raster) {
new_tile.data = std::make_shared<RasterTileData>(normalized_id, texturePool, info);
- new_tile.data->request(style.workers, transformState.getPixelRatio(), callback);
+ new_tile.data->request(
+ style.workers, transformState.getPixelRatio(), successCallback, failureCallback);
} else if (info.type == SourceType::Annotations) {
new_tile.data = std::make_shared<LiveTileData>(normalized_id, data.annotationManager,
data.transform.getMaxZoom(), style, glyphAtlas,
glyphStore, spriteAtlas, sprite, info);
- new_tile.data->reparse(style.workers, callback);
+ new_tile.data->reparse(style.workers, successCallback);
} else {
throw std::runtime_error("source type not implemented");
}
@@ -556,4 +560,13 @@ void Source::emitTileLoaded(bool isNewTile) {
}
}
+void Source::emitTileLoadingFailed(const std::string& message) {
+ if (!observer_) {
+ return;
+ }
+
+ auto error = std::make_exception_ptr(util::TileLoadingException(message));
+ observer_->onTileLoadingFailed(error);
+}
+
}