1 #pragma once
2 
3 #include <mbgl/tile/tile_id.hpp>
4 #include <mbgl/tile/tile_observer.hpp>
5 #include <mbgl/tile/tile.hpp>
6 #include <mbgl/tile/tile_cache.hpp>
7 #include <mbgl/style/types.hpp>
8 #include <mbgl/style/layer_impl.hpp>
9 
10 #include <mbgl/util/mat4.hpp>
11 #include <mbgl/util/feature.hpp>
12 #include <mbgl/util/range.hpp>
13 
14 #include <memory>
15 #include <unordered_map>
16 #include <vector>
17 #include <map>
18 
19 namespace mbgl {
20 
21 class PaintParameters;
22 class TransformState;
23 class RenderTile;
24 class RenderLayer;
25 class RenderedQueryOptions;
26 class SourceQueryOptions;
27 class TileParameters;
28 
29 class TilePyramid {
30 public:
31     TilePyramid();
32     ~TilePyramid();
33 
34     bool isLoaded() const;
35 
36     void update(const std::vector<Immutable<style::Layer::Impl>>&,
37                 bool needsRendering,
38                 bool needsRelayout,
39                 const TileParameters&,
40                 style::SourceType type,
41                 uint16_t tileSize,
42                 Range<uint8_t> zoomRange,
43                 optional<LatLngBounds> bounds,
44                 std::function<std::unique_ptr<Tile> (const OverscaledTileID&)> createTile);
45 
46     void startRender(PaintParameters&);
47     void finishRender(PaintParameters&);
48 
49     std::vector<std::reference_wrapper<RenderTile>> getRenderTiles();
50     Tile* getTile(const OverscaledTileID&);
51 
52     void handleWrapJump(float lng);
53 
54     std::unordered_map<std::string, std::vector<Feature>>
55     queryRenderedFeatures(const ScreenLineString& geometry,
56                           const TransformState& transformState,
57                           const std::vector<const RenderLayer*>&,
58                           const RenderedQueryOptions& options,
59                           const mat4& projMatrix) const;
60 
61     std::vector<Feature> querySourceFeatures(const SourceQueryOptions&) const;
62 
63     void setCacheSize(size_t);
64     void reduceMemoryUse();
65 
66     void setObserver(TileObserver*);
67     void dumpDebugLogs() const;
68 
69     bool enabled = false;
70 
71     std::map<OverscaledTileID, std::unique_ptr<Tile>> tiles;
72     TileCache cache;
73 
74     std::vector<RenderTile> renderTiles;
75 
76     TileObserver* observer = nullptr;
77 
78     float prevLng = 0;
79 };
80 
81 } // namespace mbgl
82