#include #include #include #include #include #include #include #include #include #include using namespace mbgl; RasterTile::RasterTile(const OverscaledTileID& id_, const style::UpdateParameters& parameters, const Tileset& tileset) : Tile(id_), texturePool(parameters.texturePool), worker(parameters.worker), tileSource(*this, id_, parameters, tileset) { } void RasterTile::setError(std::exception_ptr err) { observer->onTileError(*this, err); } void RasterTile::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()); } }); } Bucket* RasterTile::getBucket(const style::Layer&) { return bucket.get(); } void RasterTile::setNecessity(Necessity necessity) { tileSource.setNecessity(static_cast::Necessity>(necessity)); } void RasterTile::cancel() { workRequest.reset(); }