#include #include #include #include #include #include #include #include #include #include using namespace mbgl; RasterTileData::RasterTileData(const OverscaledTileID& id_, const style::UpdateParameters& parameters, const Tileset& tileset) : TileData(id_), texturePool(parameters.texturePool), worker(parameters.worker) { assert(!tileset.tiles.empty()); const auto resource = Resource::tile( tileset.tiles.at(0), parameters.pixelRatio, id_.canonical.x, id_.canonical.y, id_.canonical.z); tileSource = std::make_unique(*this, resource, parameters.fileSource); } void RasterTileData::setError(std::exception_ptr err) { observer->onTileError(*this, err); } void RasterTileData::setData(std::shared_ptr data, optional modified_, optional expires_) { modified = modified_; expires = expires_; if (!data) { // This is a 404 response. We're treating these as empty tiles. workRequest.reset(); availableData = DataAvailability::All; bucket.reset(); observer->onTileLoaded(*this, true); return; } workRequest.reset(); workRequest = worker.parseRasterTile(std::make_unique(texturePool), data, [this] (RasterTileParseResult result) { workRequest.reset(); availableData = DataAvailability::All; if (result.is>()) { bucket = std::move(result.get>()); observer->onTileLoaded(*this, true); } else { bucket.reset(); observer->onTileError(*this, result.get()); } }); } RasterTileData::~RasterTileData() { cancel(); } Bucket* RasterTileData::getBucket(const style::Layer&) { return bucket.get(); } void RasterTileData::setNecessity(Necessity necessity) { tileSource->setNecessity(static_cast(necessity)); } void RasterTileData::cancel() { workRequest.reset(); }