1 #pragma once 2 3 #include <mbgl/tile/tile.hpp> 4 #include <mbgl/tile/tile_loader.hpp> 5 #include <mbgl/tile/raster_tile_worker.hpp> 6 #include <mbgl/actor/actor.hpp> 7 8 namespace mbgl { 9 10 class Tileset; 11 class TileParameters; 12 class RasterBucket; 13 14 namespace style { 15 class Layer; 16 } // namespace style 17 18 class RasterTile : public Tile { 19 public: 20 RasterTile(const OverscaledTileID&, 21 const TileParameters&, 22 const Tileset&); 23 ~RasterTile() override; 24 25 void setNecessity(TileNecessity) final; 26 27 void setError(std::exception_ptr); 28 void setMetadata(optional<Timestamp> modified, optional<Timestamp> expires); 29 void setData(std::shared_ptr<const std::string> data); 30 31 void upload(gl::Context&) override; 32 Bucket* getBucket(const style::Layer::Impl&) const override; 33 34 void setMask(TileMask&&) override; 35 36 void onParsed(std::unique_ptr<RasterBucket> result, uint64_t correlationID); 37 void onError(std::exception_ptr, uint64_t correlationID); 38 39 private: 40 TileLoader<RasterTile> loader; 41 42 std::shared_ptr<Mailbox> mailbox; 43 Actor<RasterTileWorker> worker; 44 45 uint64_t correlationID = 0; 46 47 // Contains the Bucket object for the tile. Buckets are render 48 // objects and they get added by tile parsing operations. 49 std::unique_ptr<RasterBucket> bucket; 50 }; 51 52 } // namespace mbgl 53