1#pragma once
2
3#include <mbgl/tile/tile_id.hpp>
4#include <mbgl/tile/tile_observer.hpp>
5#include <mbgl/util/mat4.hpp>
6#include <mbgl/util/geo.hpp>
7#include <mbgl/util/feature.hpp>
8#include <mbgl/style/source_impl.hpp>
9#include <mbgl/style/layer_impl.hpp>
10
11#include <unordered_map>
12#include <vector>
13#include <map>
14#include <memory>
15
16namespace mbgl {
17
18class PaintParameters;
19class TransformState;
20class RenderTile;
21class RenderLayer;
22class RenderedQueryOptions;
23class SourceQueryOptions;
24class Tile;
25class RenderSourceObserver;
26class TileParameters;
27class CollisionIndex;
28
29class RenderSource : protected TileObserver {
30public:
31 static std::unique_ptr<RenderSource> create(Immutable<style::Source::Impl>);
32
33 // Check whether this source is of the given subtype.
34 template <class T>
35 bool is() const;
36
37 // Dynamically cast this source to the given subtype.
38 template <class T>
39 T* as() {
40 return is<T>() ? reinterpret_cast<T*>(this) : nullptr;
41 }
42
43 template <class T>
44 const T* as() const {
45 return is<T>() ? reinterpret_cast<const T*>(this) : nullptr;
46 }
47
48 bool isEnabled() const;
49 virtual bool isLoaded() const = 0;
50
51 virtual void update(Immutable<style::Source::Impl>,
52 const std::vector<Immutable<style::Layer::Impl>>&,
53 bool needsRendering,
54 bool needsRelayout,
55 const TileParameters&) = 0;
56
57 virtual void startRender(PaintParameters&) = 0;
58 virtual void finishRender(PaintParameters&) = 0;
59
60 // Returns an unsorted list of RenderTiles.
61 virtual std::vector<std::reference_wrapper<RenderTile>> getRenderTiles() = 0;
62
63 virtual std::unordered_map<std::string, std::vector<Feature>>
64 queryRenderedFeatures(const ScreenLineString& geometry,
65 const TransformState& transformState,
66 const std::vector<const RenderLayer*>& layers,
67 const RenderedQueryOptions& options,
68 const mat4& projMatrix) const = 0;
69
70 virtual std::vector<Feature>
71 querySourceFeatures(const SourceQueryOptions&) const = 0;
72
73 virtual void reduceMemoryUse() = 0;
74
75 virtual void dumpDebugLogs() const = 0;
76
77 void setObserver(RenderSourceObserver*);
78
79 Immutable<style::Source::Impl> baseImpl;
80
81protected:
82 RenderSource(Immutable<style::Source::Impl>);
83 RenderSourceObserver* observer;
84
85 bool enabled = false;
86
87 void onTileChanged(Tile&) override;
88 void onTileError(Tile&, std::exception_ptr) final;
89};
90
91} // namespace mbgl
92

source code of qtlocation/src/3rdparty/mapbox-gl-native/src/mbgl/renderer/render_source.hpp