1 #pragma once
2 
3 #include <mbgl/renderer/render_source.hpp>
4 #include <mbgl/renderer/render_tile.hpp>
5 #include <mbgl/style/sources/image_source_impl.hpp>
6 
7 namespace mbgl {
8 
9 class RasterBucket;
10 
11 class RenderImageSource : public RenderSource {
12 public:
13     RenderImageSource(Immutable<style::ImageSource::Impl>);
14     ~RenderImageSource() override;
15 
16     bool isLoaded() const final;
17 
18     void startRender(PaintParameters&) final;
19     void finishRender(PaintParameters&) final;
20 
21     void update(Immutable<style::Source::Impl>,
22                 const std::vector<Immutable<style::Layer::Impl>>&,
23                 bool needsRendering,
24                 bool needsRelayout,
25                 const TileParameters&) final;
26 
getRenderTiles()27     std::vector<std::reference_wrapper<RenderTile>> getRenderTiles() final {
28         return {};
29     }
30 
31     std::unordered_map<std::string, std::vector<Feature>>
32     queryRenderedFeatures(const ScreenLineString& geometry,
33                           const TransformState& transformState,
34                           const std::vector<const RenderLayer*>& layers,
35                           const RenderedQueryOptions& options,
36                           const mat4& projMatrix) const final;
37 
38     std::vector<Feature> querySourceFeatures(const SourceQueryOptions&) const final;
39 
reduceMemoryUse()40     void reduceMemoryUse() final {
41     }
42     void dumpDebugLogs() const final;
43 
44 private:
45     friend class RenderRasterLayer;
46 
47     const style::ImageSource::Impl& impl() const;
48 
49     std::vector<UnwrappedTileID> tileIds;
50     std::unique_ptr<RasterBucket> bucket;
51     std::vector<mat4> matrices;
52 };
53 
54 template <>
is() const55 inline bool RenderSource::is<RenderImageSource>() const {
56     return baseImpl->type == style::SourceType::Image;
57 }
58 
59 } // namespace mbgl
60