#include #include #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), tileSource(std::make_unique>(*this, id_, parameters, tileset)) { } 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(); } std::shared_ptr RasterTileData::parseData(std::shared_ptr data) { return data; }