#include #include #include #include #include #include #include #include #include #include #include namespace mbgl { RasterTile::RasterTile(const OverscaledTileID& id_, const TileParameters& parameters, const Tileset& tileset) : Tile(id_), loader(*this, id_, parameters, tileset), mailbox(std::make_shared(*Scheduler::GetCurrent())), worker(parameters.workerScheduler, ActorRef(*this, mailbox)) { } RasterTile::~RasterTile() = default; void RasterTile::cancel() { } void RasterTile::setError(std::exception_ptr err) { loaded = true; observer->onTileError(*this, err); } void RasterTile::setMetadata(optional modified_, optional expires_) { modified = modified_; expires = expires_; } void RasterTile::setData(std::shared_ptr data) { pending = true; ++correlationID; worker.invoke(&RasterTileWorker::parse, data, correlationID); } void RasterTile::onParsed(std::unique_ptr result, const uint64_t resultCorrelationID) { bucket = std::move(result); loaded = true; if (resultCorrelationID == correlationID) { pending = false; } renderable = bucket ? true : false; observer->onTileChanged(*this); } void RasterTile::onError(std::exception_ptr err, const uint64_t resultCorrelationID) { loaded = true; if (resultCorrelationID == correlationID) { pending = false; } observer->onTileError(*this, err); } void RasterTile::upload(gl::Context& context) { if (bucket) { bucket->upload(context); } } Bucket* RasterTile::getBucket(const style::Layer::Impl&) const { return bucket.get(); } void RasterTile::setMask(TileMask&& mask) { if (bucket) { bucket->setMask(std::move(mask)); } } void RasterTile::setNecessity(TileNecessity necessity) { loader.setNecessity(necessity); } } // namespace mbgl