summaryrefslogtreecommitdiff
path: root/src/mbgl/style/source_impl.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/style/source_impl.hpp')
-rw-r--r--src/mbgl/style/source_impl.hpp101
1 files changed, 101 insertions, 0 deletions
diff --git a/src/mbgl/style/source_impl.hpp b/src/mbgl/style/source_impl.hpp
new file mode 100644
index 0000000000..64651d7e3f
--- /dev/null
+++ b/src/mbgl/style/source_impl.hpp
@@ -0,0 +1,101 @@
+#pragma once
+
+#include <mbgl/style/source.hpp>
+
+#include <mbgl/tile/tile_id.hpp>
+#include <mbgl/tile/tile_observer.hpp>
+#include <mbgl/tile/tile.hpp>
+#include <mbgl/tile/tile_cache.hpp>
+#include <mbgl/style/types.hpp>
+
+#include <mbgl/util/noncopyable.hpp>
+#include <mbgl/util/mat4.hpp>
+#include <mbgl/util/feature.hpp>
+#include <mbgl/util/range.hpp>
+
+#include <memory>
+#include <unordered_map>
+#include <vector>
+#include <map>
+
+namespace mbgl {
+
+class Painter;
+class FileSource;
+class TransformState;
+class RenderTile;
+
+namespace algorithm {
+class ClipIDGenerator;
+} // namespace algorithm
+
+namespace style {
+
+class UpdateParameters;
+class QueryParameters;
+class SourceObserver;
+
+class Source::Impl : public TileObserver, private util::noncopyable {
+public:
+ Impl(SourceType, std::string id, Source&);
+ ~Impl() override;
+
+ virtual void load(FileSource&) = 0;
+ bool isLoaded() const;
+
+ // Request or parse all the tiles relevant for the "TransformState". This method
+ // will return true if all the tiles were scheduled for updating of false if
+ // they were not. shouldReparsePartialTiles must be set to "true" if there is
+ // new data available that a tile in the "partial" state might be interested at.
+ bool update(const UpdateParameters&);
+
+ void startRender(algorithm::ClipIDGenerator&,
+ const mat4& projMatrix,
+ const TransformState&);
+ void finishRender(Painter&);
+
+ const std::map<UnwrappedTileID, RenderTile>& getRenderTiles() const;
+
+ Tile* getTile(const OverscaledTileID&) const;
+
+ std::unordered_map<std::string, std::vector<Feature>>
+ queryRenderedFeatures(const QueryParameters&) const;
+
+ void setCacheSize(size_t);
+ void onLowMemory();
+
+ void setObserver(SourceObserver*);
+ void dumpDebugLogs() const;
+
+ const SourceType type;
+ const std::string id;
+
+ bool loaded = false;
+ bool enabled = false;
+
+protected:
+ void invalidateTiles();
+
+ Source& base;
+ SourceObserver* observer = nullptr;
+
+private:
+ // TileObserver implementation.
+ void onTileLoaded(Tile&, bool isNewTile) override;
+ void onTileError(Tile&, std::exception_ptr) override;
+ void onNeedsRepaint() override;
+
+ virtual uint16_t getTileSize() const = 0;
+ virtual Range<uint8_t> getZoomRange() = 0;
+ virtual std::unique_ptr<Tile> createTile(const OverscaledTileID&, const UpdateParameters&) = 0;
+
+ // Stores the time when this source was most recently updated.
+ TimePoint updated = TimePoint::min();
+
+ std::map<OverscaledTileID, std::unique_ptr<Tile>> tiles;
+ std::map<UnwrappedTileID, RenderTile> renderTiles;
+ TileCache cache;
+};
+
+} // namespace style
+} // namespace mbgl