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