diff options
author | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2020-04-20 13:15:12 +0300 |
---|---|---|
committer | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2020-04-20 21:54:31 +0300 |
commit | 183a634b626cd2a7f6de85108e6852cf03f80bf3 (patch) | |
tree | bd4c0e7d1c95446cd995d678aee4dee9430841ff | |
parent | 9a698fe3b1a64777835d4d5409c1ff5c43ea2aee (diff) | |
download | qtlocation-mapboxgl-183a634b626cd2a7f6de85108e6852cf03f80bf3.tar.gz |
[core] TilePyramid::update accepts source impl
-rw-r--r-- | src/mbgl/annotation/render_annotation_source.cpp | 6 | ||||
-rw-r--r-- | src/mbgl/renderer/sources/render_custom_geometry_source.cpp | 27 | ||||
-rw-r--r-- | src/mbgl/renderer/sources/render_geojson_source.cpp | 25 | ||||
-rw-r--r-- | src/mbgl/renderer/sources/render_raster_dem_source.cpp | 6 | ||||
-rw-r--r-- | src/mbgl/renderer/sources/render_raster_source.cpp | 6 | ||||
-rw-r--r-- | src/mbgl/renderer/sources/render_vector_source.cpp | 25 | ||||
-rw-r--r-- | src/mbgl/renderer/tile_pyramid.cpp | 10 | ||||
-rw-r--r-- | src/mbgl/renderer/tile_pyramid.hpp | 15 | ||||
-rw-r--r-- | test/style/source.test.cpp | 21 |
9 files changed, 62 insertions, 79 deletions
diff --git a/src/mbgl/annotation/render_annotation_source.cpp b/src/mbgl/annotation/render_annotation_source.cpp index b03b7662d8..efa1d1987c 100644 --- a/src/mbgl/annotation/render_annotation_source.cpp +++ b/src/mbgl/annotation/render_annotation_source.cpp @@ -33,15 +33,13 @@ void RenderAnnotationSource::update(Immutable<style::Source::Impl> baseImpl_, needsRendering, needsRelayout, parameters, - SourceType::Annotations, + *baseImpl, util::tileSize, // Zoom level 16 is typically sufficient for annotations. // See https://github.com/mapbox/mapbox-gl-native/issues/10197 {0, 16}, optional<LatLngBounds>{}, - [&](const OverscaledTileID& tileID) { return std::make_unique<AnnotationTile>(tileID, parameters); }, - baseImpl->getPrefetchZoomDelta(), - baseImpl->getMaxOverscaleFactorForParentTiles()); + [&](const OverscaledTileID& tileID) { return std::make_unique<AnnotationTile>(tileID, parameters); }); } std::unordered_map<std::string, std::vector<Feature>> diff --git a/src/mbgl/renderer/sources/render_custom_geometry_source.cpp b/src/mbgl/renderer/sources/render_custom_geometry_source.cpp index ecb74b6503..fafa81f27a 100644 --- a/src/mbgl/renderer/sources/render_custom_geometry_source.cpp +++ b/src/mbgl/renderer/sources/render_custom_geometry_source.cpp @@ -40,21 +40,18 @@ void RenderCustomGeometrySource::update(Immutable<style::Source::Impl> baseImpl_ return; } - tilePyramid.update( - layers, - needsRendering, - needsRelayout, - parameters, - SourceType::CustomVector, - util::tileSize, - impl().getZoomRange(), - {}, - [&](const OverscaledTileID& tileID) { - return std::make_unique<CustomGeometryTile>( - tileID, impl().id, parameters, impl().getTileOptions(), *tileLoader); - }, - baseImpl->getPrefetchZoomDelta(), - baseImpl->getMaxOverscaleFactorForParentTiles()); + tilePyramid.update(layers, + needsRendering, + needsRelayout, + parameters, + *baseImpl, + util::tileSize, + impl().getZoomRange(), + {}, + [&](const OverscaledTileID& tileID) { + return std::make_unique<CustomGeometryTile>( + tileID, impl().id, parameters, impl().getTileOptions(), *tileLoader); + }); } } // namespace mbgl diff --git a/src/mbgl/renderer/sources/render_geojson_source.cpp b/src/mbgl/renderer/sources/render_geojson_source.cpp index 2cf5c9f3b9..7f81ff903a 100644 --- a/src/mbgl/renderer/sources/render_geojson_source.cpp +++ b/src/mbgl/renderer/sources/render_geojson_source.cpp @@ -106,20 +106,17 @@ void RenderGeoJSONSource::update(Immutable<style::Source::Impl> baseImpl_, if (!data_) return; - tilePyramid.update( - layers, - needsRendering, - needsRelayout, - parameters, - SourceType::GeoJSON, - util::tileSize, - impl().getZoomRange(), - optional<LatLngBounds>{}, - [&, data_](const OverscaledTileID& tileID) { - return std::make_unique<GeoJSONTile>(tileID, impl().id, parameters, data_); - }, - baseImpl->getPrefetchZoomDelta(), - baseImpl->getMaxOverscaleFactorForParentTiles()); + tilePyramid.update(layers, + needsRendering, + needsRelayout, + parameters, + *baseImpl, + util::tileSize, + impl().getZoomRange(), + optional<LatLngBounds>{}, + [&, data_](const OverscaledTileID& tileID) { + return std::make_unique<GeoJSONTile>(tileID, impl().id, parameters, data_); + }); } mapbox::util::variant<Value, FeatureCollection> diff --git a/src/mbgl/renderer/sources/render_raster_dem_source.cpp b/src/mbgl/renderer/sources/render_raster_dem_source.cpp index 9b2345f8e0..1ad6a6c257 100644 --- a/src/mbgl/renderer/sources/render_raster_dem_source.cpp +++ b/src/mbgl/renderer/sources/render_raster_dem_source.cpp @@ -32,13 +32,11 @@ void RenderRasterDEMSource::updateInternal(const Tileset& tileset, needsRendering, needsRelayout, parameters, - SourceType::RasterDEM, + *baseImpl, impl().getTileSize(), tileset.zoomRange, tileset.bounds, - [&](const OverscaledTileID& tileID) { return std::make_unique<RasterDEMTile>(tileID, parameters, tileset); }, - baseImpl->getPrefetchZoomDelta(), - baseImpl->getMaxOverscaleFactorForParentTiles()); + [&](const OverscaledTileID& tileID) { return std::make_unique<RasterDEMTile>(tileID, parameters, tileset); }); algorithm::updateTileMasks(tilePyramid.getRenderedTiles()); } diff --git a/src/mbgl/renderer/sources/render_raster_source.cpp b/src/mbgl/renderer/sources/render_raster_source.cpp index f759623cdd..f1a4a61281 100644 --- a/src/mbgl/renderer/sources/render_raster_source.cpp +++ b/src/mbgl/renderer/sources/render_raster_source.cpp @@ -30,13 +30,11 @@ void RenderRasterSource::updateInternal(const Tileset& tileset, needsRendering, needsRelayout, parameters, - SourceType::Raster, + *baseImpl, impl().getTileSize(), tileset.zoomRange, tileset.bounds, - [&](const OverscaledTileID& tileID) { return std::make_unique<RasterTile>(tileID, parameters, tileset); }, - baseImpl->getPrefetchZoomDelta(), - baseImpl->getMaxOverscaleFactorForParentTiles()); + [&](const OverscaledTileID& tileID) { return std::make_unique<RasterTile>(tileID, parameters, tileset); }); algorithm::updateTileMasks(tilePyramid.getRenderedTiles()); } diff --git a/src/mbgl/renderer/sources/render_vector_source.cpp b/src/mbgl/renderer/sources/render_vector_source.cpp index 3ac16a136f..b581d244d4 100644 --- a/src/mbgl/renderer/sources/render_vector_source.cpp +++ b/src/mbgl/renderer/sources/render_vector_source.cpp @@ -21,20 +21,17 @@ void RenderVectorSource::updateInternal(const Tileset& tileset, const bool needsRendering, const bool needsRelayout, const TileParameters& parameters) { - tilePyramid.update( - layers, - needsRendering, - needsRelayout, - parameters, - SourceType::Vector, - util::tileSize, - tileset.zoomRange, - tileset.bounds, - [&](const OverscaledTileID& tileID) { - return std::make_unique<VectorTile>(tileID, baseImpl->id, parameters, tileset); - }, - baseImpl->getPrefetchZoomDelta(), - baseImpl->getMaxOverscaleFactorForParentTiles()); + tilePyramid.update(layers, + needsRendering, + needsRelayout, + parameters, + *baseImpl, + util::tileSize, + tileset.zoomRange, + tileset.bounds, + [&](const OverscaledTileID& tileID) { + return std::make_unique<VectorTile>(tileID, baseImpl->id, parameters, tileset); + }); } } // namespace mbgl diff --git a/src/mbgl/renderer/tile_pyramid.cpp b/src/mbgl/renderer/tile_pyramid.cpp index 57086cb915..013e6a7f37 100644 --- a/src/mbgl/renderer/tile_pyramid.cpp +++ b/src/mbgl/renderer/tile_pyramid.cpp @@ -53,13 +53,11 @@ void TilePyramid::update(const std::vector<Immutable<style::LayerProperties>>& l const bool needsRendering, const bool needsRelayout, const TileParameters& parameters, - const SourceType type, + const style::Source::Impl& sourceImpl, const uint16_t tileSize, const Range<uint8_t> zoomRange, optional<LatLngBounds> bounds, - std::function<std::unique_ptr<Tile>(const OverscaledTileID&)> createTile, - const optional<uint8_t>& sourcePrefetchZoomDelta, - const optional<uint8_t>& maxParentTileOverscaleFactor) { + std::function<std::unique_ptr<Tile>(const OverscaledTileID&)> createTile) { // If we need a relayout, abandon any cached tiles; they're now stale. if (needsRelayout) { cache.clear(); @@ -86,11 +84,15 @@ void TilePyramid::update(const std::vector<Immutable<style::LayerProperties>>& l handleWrapJump(parameters.transformState.getLatLng().longitude()); + const auto type = sourceImpl.type; // Determine the overzooming/underzooming amounts and required tiles. int32_t overscaledZoom = util::coveringZoomLevel(parameters.transformState.getZoom(), type, tileSize); int32_t tileZoom = overscaledZoom; int32_t panZoom = zoomRange.max; + const optional<uint8_t>& sourcePrefetchZoomDelta = sourceImpl.getPrefetchZoomDelta(); + const optional<uint8_t>& maxParentTileOverscaleFactor = sourceImpl.getMaxOverscaleFactorForParentTiles(); + std::vector<OverscaledTileID> idealTiles; std::vector<OverscaledTileID> panTiles; diff --git a/src/mbgl/renderer/tile_pyramid.hpp b/src/mbgl/renderer/tile_pyramid.hpp index 7dd2ab5341..f1c310849a 100644 --- a/src/mbgl/renderer/tile_pyramid.hpp +++ b/src/mbgl/renderer/tile_pyramid.hpp @@ -1,11 +1,12 @@ #pragma once -#include <mbgl/tile/tile_id.hpp> -#include <mbgl/tile/tile_observer.hpp> +#include <mbgl/style/layer_properties.hpp> +#include <mbgl/style/source_impl.hpp> +#include <mbgl/style/types.hpp> #include <mbgl/tile/tile.hpp> #include <mbgl/tile/tile_cache.hpp> -#include <mbgl/style/types.hpp> -#include <mbgl/style/layer_properties.hpp> +#include <mbgl/tile/tile_id.hpp> +#include <mbgl/tile/tile_observer.hpp> #include <mbgl/util/mat4.hpp> #include <mbgl/util/feature.hpp> @@ -37,13 +38,11 @@ public: bool needsRendering, bool needsRelayout, const TileParameters&, - style::SourceType type, + const style::Source::Impl&, uint16_t tileSize, Range<uint8_t> zoomRange, optional<LatLngBounds> bounds, - std::function<std::unique_ptr<Tile>(const OverscaledTileID&)> createTile, - const optional<uint8_t>& sourcePrefetchZoomDelta, - const optional<uint8_t>& maxParentTileOverscaleFactor); + std::function<std::unique_ptr<Tile>(const OverscaledTileID&)> createTile); const std::map<UnwrappedTileID, std::reference_wrapper<Tile>>& getRenderedTiles() const { return renderedTiles; } Tile* getTile(const OverscaledTileID&); diff --git a/test/style/source.test.cpp b/test/style/source.test.cpp index dae2aef9ca..06afd6427f 100644 --- a/test/style/source.test.cpp +++ b/test/style/source.test.cpp @@ -767,18 +767,15 @@ public: const bool needsRendering, const bool needsRelayout, const TileParameters& parameters) override { - tilePyramid.update( - layers, - needsRendering, - needsRelayout, - parameters, - SourceType::Vector, - util::tileSize, - tileset.zoomRange, - tileset.bounds, - [&](const OverscaledTileID& tileID) { return std::make_unique<FakeTile>(*this, tileID); }, - baseImpl->getPrefetchZoomDelta(), - baseImpl->getMaxOverscaleFactorForParentTiles()); + tilePyramid.update(layers, + needsRendering, + needsRelayout, + parameters, + *baseImpl, + util::tileSize, + tileset.zoomRange, + tileset.bounds, + [&](const OverscaledTileID& tileID) { return std::make_unique<FakeTile>(*this, tileID); }); } const optional<Tileset>& getTileset() const override { |