diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2017-04-20 17:11:50 -0700 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2017-05-02 08:45:09 -0700 |
commit | 3f0c89d633a5056006557ad5f4b9e446807d00ee (patch) | |
tree | 5405c50dd26a5a393a982e8e0f76b764dbbccf48 /src/mbgl/renderer/sources/render_geojson_source.cpp | |
parent | 197751bace6181f2c2dbe4c890f277a0dc7e58b1 (diff) | |
download | qtlocation-mapboxgl-3f0c89d633a5056006557ad5f4b9e446807d00ee.tar.gz |
[core] Refactor Source::*Impls into RenderSources and TilePyramid
Diffstat (limited to 'src/mbgl/renderer/sources/render_geojson_source.cpp')
-rw-r--r-- | src/mbgl/renderer/sources/render_geojson_source.cpp | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/src/mbgl/renderer/sources/render_geojson_source.cpp b/src/mbgl/renderer/sources/render_geojson_source.cpp new file mode 100644 index 0000000000..7e36b44ea4 --- /dev/null +++ b/src/mbgl/renderer/sources/render_geojson_source.cpp @@ -0,0 +1,95 @@ +#include <mbgl/renderer/sources/render_geojson_source.hpp> +#include <mbgl/renderer/render_tile.hpp> +#include <mbgl/tile/geojson_tile.hpp> + +#include <mbgl/algorithm/generate_clip_ids.hpp> +#include <mbgl/algorithm/generate_clip_ids_impl.hpp> + +namespace mbgl { + +using namespace style; + +RenderGeoJSONSource::RenderGeoJSONSource(const style::GeoJSONSource::Impl& impl_) + : RenderSource(impl_), + impl(impl_) { + tilePyramid.setObserver(this); +} + +bool RenderGeoJSONSource::isLoaded() const { + return tilePyramid.isLoaded(); +} + +void RenderGeoJSONSource::invalidateTiles() { + tilePyramid.invalidateTiles(); +} + +void RenderGeoJSONSource::startRender(algorithm::ClipIDGenerator& generator, const mat4& projMatrix, const mat4& clipMatrix, const TransformState& transform) { + generator.update(tilePyramid.getRenderTiles()); + tilePyramid.startRender(projMatrix, clipMatrix, transform); +} + +void RenderGeoJSONSource::finishRender(Painter& painter) { + tilePyramid.finishRender(painter); +} + +std::map<UnwrappedTileID, RenderTile>& RenderGeoJSONSource::getRenderTiles() { + return tilePyramid.getRenderTiles(); +} + +void RenderGeoJSONSource::updateTiles(const UpdateParameters& parameters) { + GeoJSONData* data_ = impl.getData(); + + if (!data_) { + return; + } + + if (data_ != data) { + data = data_; + tilePyramid.cache.clear(); + + for (auto const& item : tilePyramid.tiles) { + static_cast<GeoJSONTile*>(item.second.get())->updateData(data->getTile(item.first.canonical)); + } + } + + tilePyramid.updateTiles(parameters, + SourceType::GeoJSON, + util::tileSize, + impl.getZoomRange(), + [&] (const OverscaledTileID& tileID) { + return std::make_unique<GeoJSONTile>(tileID, impl.id, parameters, data->getTile(tileID.canonical)); + }); +} + +void RenderGeoJSONSource::removeTiles() { + tilePyramid.removeTiles(); +} + +void RenderGeoJSONSource::reloadTiles() { + tilePyramid.reloadTiles(); +} + +std::unordered_map<std::string, std::vector<Feature>> +RenderGeoJSONSource::queryRenderedFeatures(const ScreenLineString& geometry, + const TransformState& transformState, + const RenderedQueryOptions& options) const { + return tilePyramid.queryRenderedFeatures(geometry, transformState, options); +} + +std::vector<Feature> RenderGeoJSONSource::querySourceFeatures(const SourceQueryOptions& options) const { + return tilePyramid.querySourceFeatures(options); +} + +void RenderGeoJSONSource::setCacheSize(size_t size) { + tilePyramid.setCacheSize(size); +} + +void RenderGeoJSONSource::onLowMemory() { + tilePyramid.onLowMemory(); +} + +void RenderGeoJSONSource::dumpDebugLogs() const { + tilePyramid.dumpDebugLogs(); +} + +} // namespace mbgl |